[로봇펫]

작성자
최자은
작성일
2021-11-27 15:03
조회
538
로봇펫

-로봇펫팀 (민재연, 정승진, 최자은)



안녕하세요 저희는 사람을 따라다니는 기능을 하는 로봇펫을 제작하였습니다.

팀원 모두 로봇을 만드는 것이 처음이었기에 유튜브의 <human following robot> 동영상을 참고하여 로봇을 제작하였습니다.

이 로봇의 경우 장애물을 감지하여 직진, 회전을 하며 사람을 따라다닐 수 있습니다.

하드웨어 



DC 기어모터, L293D 모터 드라이버, 적외선센서, 초음파센서, 바퀴, 아두이노 우노, 스위치, 베터리홀더, 점퍼선 등을 활용하여 로봇을 제작하였습니다.

회로도



소프트웨어

사용한 코드는 다음과 같습니다.
//Arduino Human Following Robot
// Created By DIY Builder
// You have to Install the AFMotor and NewPing library Before Uploading the sketch//
// To install the libraries ( first download the AF Motor driver, NewPing and Servo Library zip file //
// then Go to Skecth >> Include Library >> Add .Zip Library >> Select The downloaded zip file >> Done) //
// Contact me on instagram for any question(Insta Id : DIY.Builder)


#include
#include
#include
#define RIGHT A2
#define LEFT A3
#define TRIGGER_PIN A1
#define ECHO_PIN A0
#define MAX_DISTANCE 100


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);


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;    //myservo 객체 선언
 
int pos =0;     //servo위치를 저장하는 변수

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);  //아두이노 시리얼 통신
myservo.attach(10);    //myservo를 초기화해주는 함수 
{
for(pos = 90; pos <= 180; pos += 1){ myservo.write(pos); //서보모터의 위치를 지정함. 지정한 위치에 해당하는 신호가 핀으로 출력됨 delay(15); //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); // A2번핀은 입력용도 pinMode(LEFT, INPUT); //A3핀은 입력용도 } void loop() { // put your main code here, to run repeatedly: delay(50); //50초 대기 unsigned int distance = sonar.ping_cm(); Serial.print("distance"); Serial.println(distance); int Right_Value = digitalRead(RIGHT);//디지털 신호 입력값을 읽는 함수 int Left_Value = digitalRead(LEFT); Serial.print("RIGHT"); Serial.println(Right_Value); Serial.print("LEFT"); Serial.println(Left_Value); if((Right_Value==1) && (distance>=5 && distance<=50)&&(Left_Value==1)){ Motor1.setSpeed(120); Motor1.run(FORWARD); Motor2.setSpeed(120); Motor2.run(BACKWARD); Motor3.setSpeed(120); Motor3.run(FORWARD); Motor4.setSpeed(120); Motor4.run(BACKWARD); }else if((Right_Value==0) && (Left_Value==1)) { Motor1.setSpeed(200); Motor1.run(FORWARD); Motor2.setSpeed(200); Motor2.run(FORWARD); Motor3.setSpeed(100); Motor3.run(BACKWARD); Motor4.setSpeed(100); Motor4.run(BACKWARD); }else if((Right_Value==1)&&(Left_Value==0)) { Motor1.setSpeed(100); Motor1.run(BACKWARD); Motor2.setSpeed(100); Motor2.run(BACKWARD); Motor3.setSpeed(200); Motor3.run(FORWARD); Motor4.setSpeed(200); Motor4.run(FORWARD); }else if((Right_Value==1)&&(Left_Value==1)) {//둘다 1일 때는 멈춤 Motor1.setSpeed(0); Motor1.run(RELEASE); Motor2.setSpeed(0); Motor2.run(RELEASE); Motor3.setSpeed(0); Motor3.run(RELEASE); Motor4.setSpeed(0); Motor4.run(RELEASE); }else if(distance > 1 && distance < 5) {
  Motor1.setSpeed(0);
  Motor1.run(RELEASE);
  Motor2.setSpeed(0);
  Motor2.run(RELEASE);
  Motor3.setSpeed(0);
  Motor3.run(RELEASE);
  Motor4.setSpeed(0);
  Motor4.run(RELEASE);
  
  }
 }
지금까지 읽어주셔서 감사합니다.
시연영상
전체 0