Arduino: Controlling linear actuators via serial communication with RubikPi
์ด ์์คํ
์ RubikPi๋ก๋ถํฐ "UP" ๋๋ "DOWN" ๋ช
๋ น์ ์๋ฆฌ์ผ ํต์ ์ผ๋ก ์์ ํ๊ณ , ์ด์ ๋ฐ๋ผ ๋ฆฌ๋์ด ์ก์ถ์์ดํฐ๋ฅผ ํ์ฅ ๋๋ ์์ถํ๋ ์ญํ ์ ์ํํ๋ค.
| Category | Technology |
|---|---|
Hardware Controller |
|
Hardware |
๐ฅ๏ธ Touch Display / โ๏ธ Linear Actuator |
Programming Language |
- IN1: ์ก์ถ์์ดํฐ ์ ์ด ํ 1 โ Arduino ๋์งํธ 9๋ฒ ํ
- IN2: ์ก์ถ์์ดํฐ ์ ์ด ํ 2 โ Arduino ๋์งํธ 10๋ฒ ํ
- ์๋ฆฌ์ผ ํต์ ์๋: 9600 bps
- Arduino์ RubikPi๋ USB ์ผ์ด๋ธ์ ํตํด ์ง์ ์ฐ๊ฒฐ๋์ด, Arduino์ ์ ์์ ๊ณต๊ธํจ
- L298N ๋ชจํฐ ๋๋ผ์ด๋ฒ ์ฐ๊ฒฐ ๊ตฌ์ฑ:
- IN1, IN2 ํ์ ๊ฐ๊ฐ Arduino์ 9๋ฒ, 10๋ฒ ํ๊ณผ ์ฐ๊ฒฐ
- GND ํ(์ ๋ฉด 2๋ฒ์งธ ์ฌ๋กฏ)์ 12V ์ธ๋ถ ์ ์์ ๋ง์ด๋์ค(-) ๋จ์ ๋ฐ Arduino GND์ ๊ณตํต ์ ์ง
- ์ ๋ฉด 1๋ฒ์งธ ์ฌ๋กฏ(VCC)์๋ 12V ์ธ๋ถ ์ ์์ ํ๋ฌ์ค(+) ๋จ์ ์ฐ๊ฒฐ
- ์ข์ธก ์ถ๋ ฅ๋ถ๋ ๋ฆฌ๋์ด ์ก์ถ์์ดํฐ ์ฐ๊ฒฐ:
- ์ข์ธก ์ฌ๋กฏ โ ์ก์ถ์์ดํฐ + ์
- ์ฐ์ธก ์ฌ๋กฏ โ ์ก์ถ์์ดํฐ - ์
"UP\n"๋ช ๋ น ์์ โ ์ก์ถ์์ดํฐ ํ์ฅ"DOWN\n"๋ช ๋ น ์์ โ ์ก์ถ์์ดํฐ ์์ถ- ๋ชจ๋ ๋์์ ์ฝ 15์ด ๋์ ์ง์๋ ํ ์๋ ์ ์ง
// ํ ๋ฒํธ ์ ์
const int IN1 = 9;
const int IN2 = 10;
// ์ก์ถ์์ดํฐ ๋์ ์ํ ์ด๊ฑฐํ
enum ActuatorState {
EXTEND, // ์ต๋ ๊ธธ์ด๋ก ๋๋ฆผ
RETRACT, // ์ต์ ๊ธธ์ด๋ก ์ค์
STOP // ์ ์ง
};
// ์ํ๋ณ ์ ์ด ํจ์
void controlActuator(ActuatorState state) {
switch (state) {
case EXTEND:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
break;
case RETRACT:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
break;
case STOP:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
break;
}
}
void setup() {
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
// ์ด๊ธฐ ์ ์ ์์๋ ์๋ฌด ๋์๋ ํ์ง ์๋๋ค.
}
void loop() {
if (Serial.available()) {
String cmd = Serial.readStringUntil('\\n');
cmd.trim();
if (cmd == "UP") {
// ์ต๋ ๊ธธ์ด๋ก ๋๋ฆฌ๊ณ ์ ์ง
controlActuator(EXTEND);
delay(15000);
controlActuator(STOP);
}
else if (cmd == "DOWN") {
// ์ต์ ๊ธธ์ด๋ก ์ค์ด๊ณ ์ ์ง
controlActuator(RETRACT);
delay(15000);
controlActuator(STOP);
}
}
}-
์ ์ ์ฐ๊ฒฐ ์์ ์ฃผ์
๋ฐ๋์ RubikPi์ ์ ์์ ๋จผ์ ์ธ๊ฐํ ํ, L298N ๋ชจํฐ ๋๋ผ์ด๋ฒ์ ์ธ๋ถ 12V ์ ์์ ์ฐ๊ฒฐํด์ผ ํจ.
์๋ชป๋ ์์๋ก ์ ์ ๊ณต๊ธ ์, ์ญ์ ๋ฅ๋ก ์ธํ Arduino ์์(์ผํธ) ๊ฐ๋ฅ์ฑ ์์. -
์ ๊ฒฉ ์ ์ ๊ณ ๋ ค
Arduino๋ 5V ์ ๊ฒฉ ์ ์ ๊ธฐ์ค์ผ๋ก ๋์ํ๋ฏ๋ก, GND ํ๋ฆ์ด ๋ถ์์ ํ ๊ฒฝ์ฐ ์ค๋์ ๋๋ ์์ ๊ฐ๋ฅ์ฑ ์์.
GND๋ RubikPiโArduinoโL298N ๊ฐ์ ํญ์ ๊ณตํต์ผ๋ก ์ ์ง๋ ๊ฒ. -
์๋ฆฌ์ผ ๋ช ๋ น์ด ๊ตฌ์ฑ
RubikPi์์ ์ ์ก๋๋ ๋ช ๋ น์ด๋ ๊ฐํ ๋ฌธ์\nํฌํจ ํ์ (์:"UP\n","DOWN\n") -
์ ์ ์์ ์ฑ ํ๋ณด
๋ฆฌ๋์ด ์ก์ถ์์ดํฐ๋ ๋์ ์ ์ผ์ ํ ์ ์๊ณผ ์ ๋ฅ๊ฐ ํ์ํ๋ฏ๋ก, 12V 2~3A ์ด์์ ์์ ๋ ์ด๋ํฐ๋ฅผ ์ฌ์ฉํ ๊ฒ.
