과학 박람회 프로젝트를위한 라인 추종자 로봇 만들기

문제를 제거하기 위해 도구를 사용해보십시오





이 게시물에서는 Arduino를 사용하여 라인 팔로워 로봇 회로를 구축하는 방법을 배웁니다. Arduino는 특별히 그려진 라인 레이아웃을 통해 실행되며 센서에서 사용 가능하고 추적 할 수있는 한 충실하게 따라갈 것입니다.

navneet sajwan 작성



라인 추종자 로봇이란?

자율 로봇은 인간이 실시간으로 수동으로 제어하지 않고도 프로그래머의 지시에 따라 일련의 작업을 수행 할 수있는 기계입니다.

라인 팔로워 (LFR)는 또한 하나 이상의 센서와 검은 색 또는 흰색 라인 경로로 안내되는 자율 로봇 자동차입니다. 그들은 현대 자율 주행 자동차의 기초를 형성합니다.



모든 자율 로봇과 마찬가지로 라인 팔로워에는 신호 처리 및 의사 결정 장치, 센서 및 액추에이터가 있습니다. 로봇 공학의 초보자이고 진지하게 받아들이고 싶다면 여기서부터 시작해야합니다. 만들어 보겠습니다.

이 프로젝트를 만들기 위해 두 개의 적외선 센서와 세 개의 휠 드라이브를 사용했습니다. 사용할 수있는 최소 센서 수는 1 개이고 PID 기반 라인 추종에는 최대 8 개이면 충분합니다.

필요한 구성 요소 :

Arduino 우노

차대

배터리로 작동하는 (b.o.) 모터 2 개 및 호환 타이어

피마자 공

두 개의 적외선 센서

모터 드라이버 모듈

전원 공급

Arduino IDE 소프트웨어

이제 구성 요소를 살펴 보겠습니다.

아르 두 이노 원 : 우리 로봇의 제어실이라고 상상해보세요. 이제이 프로젝트에서 고려한 개발 보드가 많이 있지만 Arduino UNO는 다른 제품과 비교할 수 없었습니다. 우리 주인공이 다차원 적 특징이 우월한 것은 아닙니다.

그렇다면 Raspberry Pi와 Intel Edison은 눈 사이를 쳤을 것입니다. Arduino UNO를 선택하게 된 가장 매력적인 주장은 프로젝트의 기능, 가격, 크기 및 요구 사항의 조합으로 구성되었습니다.

관련 이유는 다음과 같습니다.

크기 : Atmega16 또는 Atmega8 기반 개발 보드에 비해 매우 작고 섀시에서 약간의 공간을 차지하므로 컴팩트하고 편리한 봇을 얻을 수 있습니다.

이것은 로봇 공학 대회에서 정말 중요합니다. 하루 종일 장소를 바꾸는 그 크고 못생긴 봇과 함께 돌아 다니는 것을 싫어할 것입니다.

크기가 작을수록 로봇이 더 빨라지고 회전이 더 효율적입니다.

최고의 프로토 타이핑 보드 : 의심 할 여지없이 Arduino UNO는 프로토 타이핑 . 회로가 제자리에 있고 프로젝트가 완벽하게 작동하면 Arduino Nano 및 Attiny85 ic와 같은 더 작고 저렴한 것으로 교체 할 수 있습니다.

대학 프로젝트를위한 라인 추종자를 만들기 위해 마지막에 UNO를 Nano로 대체 할 것을 제안합니다.

차대 : 모든 부품을 제자리에 고정시키는 프레임입니다. 새 섀시를 구입할 때 고려해야 할 몇 가지 사항이 있습니다.

가볍고 튼튼해야합니다.

프로젝트의 경우 시장에서 구매하는 것이 좋습니다. 그러나 경쟁을 준비하고 있다면 경쟁의 크기와 요구 사항을 염두에두고 자신만의 맞춤 설정을 강력히 제안합니다.

플라스틱 또는 목재 섀시를 선택하십시오. 금속 프레임이 Arduino와 접촉하면 여러 핀이 단락됩니다. 이것은 섀시를 찾는 동안 집중해야 할 큰 요소입니다.

섀시를 가능한 한 낮게 유지하십시오. 이것은 봇에 안정성을 제공합니다.

모터 : 경량 배터리로 작동하는 (B.O.) d.c. 모터.

캐스터 볼 : 일반 휠은 단일 축을 따라 병진 운동을 제공하지만 캐스터 볼은 표면의 모든 방향으로 이동하도록 설계되었습니다. 그것은 우리에게 3 륜 구동을 제공합니다.

4 륜보다 3 륜 구동을 선호하는 이유는 상대적으로 빠른 회전 동작 때문입니다. 자전거 인력거가 파충류처럼 차를 뚫고 들어가는 것을 눈치 챘을 것입니다. 우리 로봇의 경우도 마찬가지입니다.

센서 : 우리 환경의 물리적 매개 변수를 감지하거나 측정하여 전기 신호로 변환하는 장치입니다. 이 경우 감지 된 매개 변수는 적외선입니다.

센서는 모든 로봇의 매우 기본입니다. arduino가 우리 봇의 두뇌라면 센서가 눈의 역할을 할 수도 있습니다. 다음은 센서에 대한 몇 가지 사항입니다.

센서는 LED가지면을 향하는 방향으로 향해야합니다.

봇의 프런트 엔드에 배치해야합니다.

이들 사이의 최소 간격은 검은 색 선의 너비보다 커야합니다.

모터 드라이버 보드 : 모터 드라이버는 더 높은 전압이 필요한 모터에 전력을 공급하기 위해 저전압 신호를받는 버퍼 회로입니다.

우리의 경우 Arduino는 모터를 구동하기에 충분한 전압을 제공 할 수 있지만 충분한 전류를 제공 할 수 없습니다. Arduino UNO의 5v 및 GND 핀은 정격 전류가 200mA이고 GPIO 핀은 정격이 40mA입니다. 이것은 우리가 필요로하는 시동 및 정지 전류 모터보다 훨씬 낮습니다.

이 프로젝트에서 선호하는 모터 드라이버는 L298N과 L293D입니다. 둘 다이 프로젝트를 만드는 데 똑같이 적합합니다.

그러나, L293D는 비교적 저렴합니다. 그러나 현재 등급이 낮습니다. 그들의 연결은 거의 동일합니다. 두 가지 모두에 대한 연결을 제공했기 때문에 봇을 만드는 방법은 전적으로 귀하에게 달려 있습니다.

전력 공급 :

12V 어댑터 또는 배터리 (12V 이하)를 사용하십시오.

구성 요소 배치 (전면에서 후단으로) :

봇 헤드의 센서.

중앙에 캐스터 휠.

뒤쪽에 한 줄의 모터와 타이어.

사이:

ARDUINO에 센서 :

그림과 같이 센서 핀을 arduino 핀에 연결하십시오.

센서 핀Arduino 핀
VCC (5v)5V
GND (G)GND
왼쪽 센서 아웃 (DO)핀 6
우측 센서 아웃 (DO)핀 7

참고 : 센서의 전원이 켜져 있는지 확인하려면 휴대 전화 카메라가 IR 송신기 LED를 향하도록하십시오. 육안으로는 볼 수없는 LED가 화면에 빛나고있는 것을 볼 수 있습니다. 일부 최신 휴대폰 카메라에는 적외선 필터가 있습니다. 그래서 그것을 고려하십시오.

모터-모터 드라이버 :

각 모터에는 모터 드라이버에 연결해야하는 두 개의 단자가 있습니다. arduino에 직접 연결하지 마십시오. 모터는 가까이 있고 센서는 멀리있는 상태에서 봇의 뒤쪽에서 다음과 같이 연결합니다.

엔진L298NL293D
왼쪽 모터핀 1과 2핀 7 및 8
오른쪽 모터핀 13 및 14핀 9 및 10

ARDUINO UNO로가는 모터 드라이버 :

모터 드라이버 (L298N)아르 두 이노 원
핀 4포도주
핀 5GND
핀 65V
핀 8 및 핀 9PIN 3 및 PIN 9
PIN 10 및 PIN 11PIN 5 및 PIN 10
핀 7 및 핀 125V
모터 드라이버 (L293D)아르 두 이노 원
핀 3포도주
핀 2GND
핀 15V
PIN 5 및 PIN 6PIN 3 및 PIN 9
핀 11 및 핀 12PIN 5 및 PIN 10
핀 4 및 핀 55V

참고 : l298n의 핀 8 및 9는 1과 2에 연결된 모터를 제어하는 ​​데 사용됩니다. 그리고 핀 13 및 14에 연결된 10 및 11의 제어 모터. 마찬가지로, l293d의 핀 5와 6은 연결된 모터를 제어하는 ​​데 사용됩니다. 그리고, 핀 9와 10에 연결된 12 및 11 제어 모터.

여기 우리는 디자인 부분의 끝까지 녀석들입니다. 우리는 여전히 코딩을해야하지만 그 전에 줄 따라 가기를 허용하는 원칙을 살펴볼 것입니다.

적외선 센서의 작동 원리 :

적외선 센서 (IR 센서)는 색상 대비와 물체의 근접성을 감지하는 데 사용할 수 있습니다. IR 센서의 작동 원리는 매우 기본적입니다.

보시다시피 IR 방출 LED와 포토 다이오드의 두 개의 LED가 있습니다. 송신기-수신기 쌍으로 작동합니다. 이미 터 광선 앞에 장애물이 오면 반사되어 수신기에 의해 차단됩니다.

이것은 장애물을 만나는 데 필요한 조치를 취하기 위해 마이크로 컨트롤러와 액추에이터에 공급할 수있는 디지털 신호를 생성합니다.

기초 물리학은 흑체는 그것에 입사하는 모든 전자기 복사를 흡수하고 백색체는 그것을 반사한다고 말합니다. 이 원칙은 흰색과 검은 색 표면을 구분하기 위해 선 추종자에 의해 활용됩니다.

라인 팔로워 로봇의 작동 원리 :

라인 팔로우 레이아웃

정상적인 상태에서 로봇은 두 센서가 모두 흰색 위에 있고 검정색 선이 두 센서 사이에있는 방식으로 움직입니다.

로봇이 전진 방향으로 움직 이도록 두 모터를 모두 회전 시키도록 프로그래밍되어 있습니다.

시간이 지남에 따라 두 센서 중 하나가 검은 색 선을 넘게됩니다.

왼쪽 센서가 선을 넘으면 왼쪽 모터가 정지되고 결과적으로 왼쪽 센서가 흰색 표면으로 돌아와 정상 상태가되지 않는 한 봇이 왼쪽으로 회전하기 시작합니다.

마찬가지로 오른쪽 센서가 검은 색 선을 넘으면 오른쪽 모터가 중지되고 결과적으로 센서가 흰색 표면 위로 돌아 오지 않는 한 이제 봇이 오른쪽으로 회전합니다. 이 회전 메커니즘을 차동 구동 메커니즘이라고합니다.

회로 다이어그램 :

배선 세부 사항 :

프로그래밍 및 개념 :

회로 부분을 마쳤으므로 이제 프로그래밍 부분으로 이동합니다. 이 섹션에서는 로봇을 제어하는 ​​프로그램을 이해합니다. 코드는 다음과 같습니다 : / *
Created and tested by Navneet Singh Sajwan
*Based on digital output of two sensors
*Speed control added
*/
int left, right
int value=250
void setup()
{
pinMode(6,INPUT)//left sensor
pinMode(7,INPUT)//right sensor
pinMode(9,OUTPUT)//left motor
pinMode(3,OUTPUT)//left motor
pinMode(10,OUTPUT)//right motor
pinMode(5,OUTPUT)//right motor
// Serial.begin(9600)
}
void read_sensors()
{
left=digitalRead(6)
right= digitalRead(7)
}
void move_forward()
{
analogWrite(9,value)//3,9 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_left()
{
digitalWrite(9,LOW)//9,3 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_right()
{
analogWrite(9,value)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void halt()
{
digitalWrite(9,LOW)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void print_readings()
{
Serial.print(' leftsensor')
Serial.print(' ')
Serial.print(left)
Serial.print('rightsensor')
Serial.print(' ')
Serial.print(right)
Serial.println()
}
void loop()
{
read_sensors()
while((left==0)&&(right==1)) // left sensor is over black line
{
turn_left()
read_sensors()
print_readings()
}
while((left==1)&&(right==0)) // right sensor is over black line
{
turn_right()
read_sensors()
print_readings()
}
while((left==0)&&(right==0)) // both sensors over the back line
{
halt()
read_sensors()
print_readings()
}
while((left==1)&&(right==1))// no sensor over black line
{
move_forward()
read_sensors()
print_readings()
}
}

사용 된 기능에 대한 설명 :

read_sensors () : 두 센서의 판독 값을 가져 와서 왼쪽과 오른쪽 변수에 저장합니다.

move_forward () : arduino가이 함수를 실행하면 두 모터가 모두 정방향으로 이동합니다.

turn_left () : 왼쪽 모터가 멈 춥니 다. 봇이 좌회전합니다.

turn_right () : 오른쪽 모터가 정지합니다. 봇이 우회전합니다.

halt () : 봇이 중지됩니다.

print_readings () : 직렬 모니터에 센서 판독 값을 표시합니다. 이를 위해 void 설정에서 'Serial.begin (9600)'의 주석을 제거해야합니다.

센서 판독 값 :

라인을 통한 센서센서 판독
왼쪽권리
왼쪽 센서01
오른쪽 센서10
없음11
양자 모두00

속도 제어 :

때때로 모터의 속도가 너무 빨라 arduino가 센서 신호를 해석하기 전에 로봇이 라인을 잃습니다. 요컨대, 봇은 고속으로 인해 선을 따르지 않고 알고리즘이 정확하더라도 선을 계속 잃습니다.

이러한 상황을 피하기 위해 PWM 기술을 사용하여 봇의 속도를 줄입니다. 위의 코드에는 value라는 변수가 있습니다.

속도를 줄이려면 함수에서 숫자 값을 줄이십시오. Arduino UNO에서는 0에서 255 사이의 pwm 값만 가질 수 있습니다.

analogWrite (핀, 값)

0<= value <=255

이것은 라인 추종자에 대한 내 게시물의 끝입니다. 귀하의 모든 질문에 답할 수있을만큼 상세하기를 바라며, 드물게 그렇지 않은 경우 항상 댓글 섹션을 사용할 수 있습니다. 의심스러운 점을 언급하십시오. 행복한 땜장이 되십시오!




이전 : DTMF 모듈을 사용하는 휴대 전화 제어 로봇 자동차 다음 : 암호로 제어되는 AC 주전원 ON / OFF 스위치