아두이노 우노와 모터 쉴드를 이용한 DIY 인간 추적 로봇
부품 및 소모품
 | Arduino UNO | × | 1 |
| Adafruit 모터 쉴드 | × | 1 |
 | SG90 마이크로 서보 모터 | × | 1 |
| IR 송수신기 (일반) | × | 2 |
 | 초음파 센서 HC-SR04 | × | 1 |
 | 점퍼 와이어 | × | 1 |
 | DC 모터, 12V | × | 4 |
 | Pimoroni Maker Essentials - 마이크로 모터 & 그립 휠 | × | 4 |
 | 9V 배터리 | × | 1 |
 | 로커 스위치, SPST | × | 1 |
앱 및 온라인 서비스
 | Arduino IDE |
프로젝트 소개
여러분 안녕하세요... 팬데믹 시기에 모두 집에서 안전하게 지내고 계시길 바랍니다.
'사람 따라다니기 봇(Human Following Bot)'이라는 새 프로젝트를 만들었습니다.
전체 영상을 보고 집에서 직접 만들어보세요.
이 로봇은 2개의 IR 센서와 1개의 초음파 센서를 사용합니다. IR 센서는 사람이나 물체를 따라가게 하고, 초음파 센서는 로봇이 후진하게 합니다.
이 프로젝트가 마음에 든다면 좋아요 부탁드립니다.
개선 제안이나 유튜브 채널 피드백 주시면 감사하겠습니다.
채널 링크: https://studio.youtube.com/channel/UCaXI2PcsTlH5g0et67kdD6g
다음 프로젝트로 무엇을 만들지 제안도 환영합니다! "다음 프로젝트는 뭘 만들까요?"
제작 단계:
- 아두이노, DC 기어드 모터+바퀴, IR 센서 2개, 초음파 센서, 서보 모터, 골판지, L293D 모터 드라이버 쉴드, 9V 배터리, 스위치, 점퍼 와이어 등 준비
- 골판지에 4개 모터와 바퀴 장착해 차체 제작
- 차체에 IR 센서 부착
- 서보 모터 차체에 고정
- 초음파 센서를 박스에 넣고 손잡이 달아서 서보 모터에 장착
- 아두이노와 L293D 모터 쉴드 차체에 장착
- 회로도대로 배선
- 코드 업로드 후 스위치와 배터리를 L293D 모터 드라이버 쉴드에 연결
- IR 센서 감도 조정
프로젝트 완성! 유튜브 채널 방문해서 더 재미있는 프로젝트도 봐주세요.
"전자공학은 재미있어요"
채널이 마음에 든다면 구독 부탁드립니다.
링크: https://studio.youtube.com/channel/UCaXI2PcsTlH5g0et67kdD6g
코드
코드
// www.YouTube.com/Electronics is Fun
#include <Servo.h>
#include <AFMotor.h>
#define LEFT A0
#define echopin A1
#define trigpin A2
#define RIGHT A3
AF_DCMotor Motor1(1, MOTOR12_1KHZ);
AF_DCMotor Motor2(2, MOTOR12_1KHZ);
AF_DCMotor Motor3(3, MOTOR34_1KHZ);
AF_DCMotor Motor4(4, MOTOR34_1KHZ);
Servo myservo;
int pos = 0;
long time;
void setup() {
Serial.begin(9600);
myservo.attach(10);
for (pos = 90; pos <= 180; pos += 1) { myservo.write(pos); delay(15); }
for (pos = 180; pos >= 0; pos -= 1) { myservo.write(pos); delay(15); }
for (pos = 0; pos <= 90; pos += 1) { myservo.write(pos); delay(15); }
pinMode(RIGHT, INPUT);
pinMode(LEFT, INPUT);
pinMode(trigpin, OUTPUT);
pinMode(echopin, INPUT);
}
void loop() {
unsigned int distance = read_cm();
int Right_Value = digitalRead(RIGHT);
int Left_Value = digitalRead(LEFT);
Serial.print("R= "); Serial.print(Right_Value);
Serial.print(" L= "); Serial.print(Left_Value);
Serial.print(" D= "); Serial.println(distance);
if ((Right_Value == 1) && (distance >= 10 && distance <= 30) && (Left_Value == 1)) { forword(); }
else if ((Right_Value == 0) && (Left_Value == 1)) { turnRight(); }
else if ((Right_Value == 1) && (Left_Value == 0)) { turnLeft(); }
else if ((Right_Value == 1) && (Left_Value == 1)) { stop(); }
else if (distance > 5 && distance < 10) { stop(); }
else if (distance < 5) { backword(); }
delay(50);
}
long read_cm() {
digitalWrite(trigpin, LOW);
delayMicroseconds(2);
digitalWrite(trigpin, HIGH);
delayMicroseconds(10);
time = pulseIn(echopin, HIGH);
return time / 29 / 2;
}
void forword() {
Motor1.setSpeed(120); Motor1.run(FORWARD);
Motor2.setSpeed(120); Motor2.run(FORWARD);
Motor3.setSpeed(120); Motor3.run(FORWARD);
Motor4.setSpeed(120); Motor4.run(FORWARD);
}
void backword() {
Motor1.setSpeed(120); Motor1.run(BACKWARD);
Motor2.setSpeed(120); Motor2.run(BACKWARD);
Motor3.setSpeed(120); Motor3.run(BACKWARD);
Motor4.setSpeed(120); Motor4.run(BACKWARD);
}
void turnRight() {
Motor1.setSpeed(200); Motor1.run(FORWARD);
Motor2.setSpeed(200); Motor2.run(FORWARD);
Motor3.setSpeed(100); Motor3.run(BACKWARD);
Motor4.setSpeed(100); Motor4.run(BACKWARD);
}
void turnLeft() {
Motor1.setSpeed(100); Motor1.run(BACKWARD);
Motor2.setSpeed(100); Motor2.run(BACKWARD);
Motor3.setSpeed(200); Motor3.run(FORWARD);
Motor4.setSpeed(200); Motor4.run(FORWARD);
}
void stop() {
Motor1.setSpeed(0); Motor1.run(RELEASE);
Motor2.setSpeed(0); Motor2.run(RELEASE);
Motor3.setSpeed(0); Motor3.run(RELEASE);
Motor4.setSpeed(0); Motor4.run(RELEASE);
}
회로도