라인 트레이서 코드 | 라인트레이서 만들기 코딩 1편 (Line Tracer Coding)_[반지하공작실] 21402 투표 이 답변

당신은 주제를 찾고 있습니까 “라인 트레이서 코드 – 라인트레이서 만들기 코딩 1편 (line tracer coding)_[반지하공작실]“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://th.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 반지하 공작실 이(가) 작성한 기사에는 조회수 5,806회 및 좋아요 40개 개의 좋아요가 있습니다.

아두이노 코딩 교육용 메탈 라인트레이서
상품명 아두이노 코딩 교육용 메탈 라인트레이서
브랜드 에듀이노
판매가 51,000원
자체상품코드 H-9
상품요약정보 [7차시 강의용]

라인 트레이서 코드 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 라인트레이서 만들기 코딩 1편 (line tracer coding)_[반지하공작실] – 라인 트레이서 코드 주제에 대한 세부정보를 참조하세요

라인트레이서 만들기 마지막 시간입니다.
프로그램을 작성해서 넣어보고 작동 확인까지 해봤습니다.
영상이 너무 길어져서 2편으로 나누어 올립니다.
2편 주소 : https://youtu.be/yxpawVqvr_4

라인 트레이서 코드 주제에 대한 자세한 내용은 여기를 참조하세요.

아두이노 – 라인트레이서 구현하기! – 네이버 블로그

오늘은 라인트레이서를 구현하도록 하겠습니다. … 코드. ​. #define SPEED 150 vo setup() { pinMode(7, INPUT); // left pinMode(8, INPUT); …

+ 여기에 자세히 보기

Source: m.blog.naver.com

Date Published: 4/14/2021

View: 4888

아두이노 – 적외선 센서를 이용한 라인트레이서(Linetracer) 만들기

그래서 간단하게 제작한 라인트레이서를 기록하도록 하겠습니다. … 배선이 따라 코드를 수정 해서 사용 //양쪽 IR 센서가 모두 검은색 라인 감지시 …

+ 여기에 더 보기

Source: responding.tistory.com

Date Published: 7/14/2021

View: 4410

【 아두이노 Proj#2】 라인트레이서 자동차 만들기 ( L298N모듈)

검은색 라인위를 따라 이동하는 라인트레이서 로봇을 구현할 수 있다. … 프로그램 코드 및 설명 : /* 라인트레이서(Line Tracer) 프로그램 */

+ 여기에 표시

Source: rasino.tistory.com

Date Published: 1/10/2022

View: 9867

아두이노 라인 트레이서 만들기 – 한 개의 아날로그 센서를 …

이 실험에서는 하나의 아날로그 센서만을 이용하기 때문에 센서가 줄의 경계를 쫓아가도록 코드를 구성할 것입니다. 줄의 경계에서는 까만색 줄과 …

+ 여기에 보기

Source: myoungjinkim.github.io

Date Published: 5/23/2021

View: 9250

아두이노 코딩 교육용 라인트레이서 키트

에듀이노. 아두이노 코딩 교육용 라인트레이서 키트. 45,000원. 450원(1.00%). 자체상품코드 H-11 배송방법 택배 설명 [7차시 강의용]. 배송, 국내배송 해외배송 …

+ 여기에 자세히 보기

Source: eduino.kr

Date Published: 7/18/2021

View: 4004

라인트레이서 – 성균관대 로봇동아리 SIOR

이는 더 나아가 라인트레이서에 적용할 수 있습니다. … 다음과 같은 코드를 통해 적외선 센서값을 시리얼 모니터에 출력해보도록 하겠습니다.

+ 자세한 내용은 여기를 클릭하십시오

Source: skku-sior.ddns.net

Date Published: 11/12/2021

View: 249

주제와 관련된 이미지 라인 트레이서 코드

주제와 관련된 더 많은 사진을 참조하십시오 라인트레이서 만들기 코딩 1편 (line tracer coding)_[반지하공작실]. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

라인트레이서 만들기 코딩 1편 (line tracer coding)_[반지하공작실]
라인트레이서 만들기 코딩 1편 (line tracer coding)_[반지하공작실]

주제에 대한 기사 평가 라인 트레이서 코드

  • Author: 반지하 공작실
  • Views: 조회수 5,806회
  • Likes: 좋아요 40개
  • Date Published: 2019. 3. 15.
  • Video Url link: https://www.youtube.com/watch?v=FATxFWzMGHs

에듀이노-코딩교육 전문 쇼핑몰

상품결제정보 고액결제의 경우 안전을 위해 카드사에서 확인전화를 드릴 수도 있습니다. 확인과정에서 도난 카드의 사용이나 타인 명의의 주문등 정상적인 주문이 아니라고 판단될 경우 임의로 주문을 보류 또는 취소할 수 있습니다.

무통장 입금은 상품 구매 대금은 PC뱅킹, 인터넷뱅킹, 텔레뱅킹 혹은 가까운 은행에서 직접 입금하시면 됩니다.

주문시 입력한 입금자명과 실제입금자의 성명이 반드시 일치하여야 하며, 7일 이내로 입금을 하셔야 하며 입금되지 않은 주문은 자동취소 됩니다.

배송정보 배송 방법 : 택배

배송 지역 : 전국지역

배송 비용 : 3,000원

배송 기간 : 1일 ~ 2일

배송 안내 : – 제주도, 산간벽지나 도서지방은 별도의 추가금액을 지불하셔야 하는 경우가 있습니다.

고객님께서 주문하신 상품은 입금 확인후 배송해 드립니다. 다만, 상품종류에 따라서 상품의 배송이 다소 지연될 수 있습니다.

교환 및 반품정보 교환 및 반품이 가능한 경우

– 상품을 공급 받으신 날로부터 7일이내 단, 가전제품의

경우 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우에는 교환/반품이 불가능합니다.

– 공급받으신 상품 및 용역의 내용이 표시.광고 내용과

다르거나 다르게 이행된 경우에는 공급받은 날로부터 3월이내, 그사실을 알게 된 날로부터 30일이내

교환 및 반품이 불가능한 경우

– 고객님의 책임 있는 사유로 상품등이 멸실 또는 훼손된 경우. 단, 상품의 내용을 확인하기 위하여

포장 등을 훼손한 경우는 제외

– 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우

(예 : 가전제품, 식품, 음반 등, 단 액정화면이 부착된 노트북, LCD모니터, 디지털 카메라 등의 불량화소에

따른 반품/교환은 제조사 기준에 따릅니다.)

– 고객님의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우 단, 화장품등의 경우 시용제품을

제공한 경우에 한 합니다.

– 시간의 경과에 의하여 재판매가 곤란할 정도로 상품등의 가치가 현저히 감소한 경우

– 복제가 가능한 상품등의 포장을 훼손한 경우

(자세한 내용은 고객만족센터 1:1 E-MAIL상담을 이용해 주시기 바랍니다.)

※ 고객님의 마음이 바뀌어 교환, 반품을 하실 경우 상품반송 비용은 고객님께서 부담하셔야 합니다.

(색상 교환, 사이즈 교환 등 포함)

아두이노 – 적외선 센서를 이용한 라인트레이서(Linetracer) 만들기

반응형

아두이노를 공부하다 보면 가장 많이 접하고 한 번쯤 만들어보게 되는 게 라인트레이서인 거 같습니다.

그래서 간단하게 제작한 라인트레이서를 기록하도록 하겠습니다.

-작동원리

적외선 센서를 이용해서 검은색 라인이나 흰색 라인을 감지해서 라인을 따라 이동하게 합니다.

(여기 기록되는 라인트레이서는 적외선 센서를 2개 사용했습니다. )

가장 중요한 적외선 센서는

보통 발광부와 수광부가 있습니다.

발광부에서 적외선을 쏘게 되면 물체에 반사되어서 수광부로 들어오게 됩니다.

하지만 검은색은 빛을 흡수하여 수광부에 적외선이 도달하지 못하게 됩니다.

이 원리를 이용하여 검은 선과 흰 선을 구분해 줍니다.

라인트레이서는 왼쪽 센서와 오른쪽 센서에서 각각 보내는 데이터를 이용해서 이동합니다.

왼쪽 센서에서 검은색선을 미감지하고 오른쪽 센서에서는 검은선을 감지합니다. 이상태에서 직진을 계속한다면 결국 라인트레이서는 검은선을 완전히 이탈하게 됩니다.

그래서 왼쪽 센서에서 검은선을 미감지했고 오른쪽 센서는 감지했기 때문에 라인트레이서를 우회전해서 검은선에 양쪽 센서가 모두 감지되도록 하게 해 줍니다.

반대의 경우도 마찬가지입니다.

-준비물

(참고로 꼭 이게 맞는 게 아닙니다. 재료는 항상 변경이 가능합니다.)

-Arduino Uno 1개

-브레드보드 1개(작은 거면 충분합니다 170핀으로도 만들었습니다. 그냥 단순 점프용입니다.)

-적외선 센서 2개(이 내용은 적외선 센서 2개로 만든 라인트레이서입니다. )

적외선 수광부 발광부 따로 사셔서 직접 연결하셔도 좋습니다만… 처음 하신다면 위 사진처럼 한쪽 방향으로 다 납땜한 제품을 사시는 게 편합니다.(‘TCRT5000’으로 검색하시면 많이 나옵니다.)

-2WD 자동차 프레임 키트 1개

이것도 위에 내용하고 비슷한 거지만 직접 만드는 게 당연히 좋습니다 하지만 이 내용에서는 보통 ‘2WD 자동차 프레임’을 검색하면 나오는 제품을 사용하였습니다. (보통 2개의 DC 모터가 포함되어있습니다.)

-듀얼 모터 드라이버 모듈 1개

‘L9110’로 검색하면 많이 나오는 제품을 사용했습니다.

모터에 외부 전원을 사용하기 위해 구매했습니다.

*건전지 (선택)

라인트레이서를 만들면서 보통 발생하는 문제가 대부분 1.5v 건전지를 직렬로 연결해서 4개를 사용하는 키트가 대부분입니다.

근데 이걸 이용해서 아두이노와 모터에 전원을 공급하다 보면 DC 모터가 전원 공급이 부족해서 잘 움직이지 않는 경우가 생겼습니다. 그래서 저는 9V 건전지를 사용하여 작동하였습니다.

-회로도 구성

라인트레이서 회로도

회로도는 자신이 구성하는 모양, 방향에 따라서 유동적으로 변경해야 합니다.

-코드

양쪽 센서가 모두 검은 선이 감지되면 앞으로 직진

왼쪽 센서만 검은 선이 감지되면 좌회전

오른쪽 센서만 검은 선이 감지되면 우회전

양쪽 센서가 모두 검은 선이 감지되지 않으면 정지

이게 기본 틀입니다.

#define LmotorCW 5 #define LmotorCCW 6 #define RmotorCW 9 #define RmotorCCW 10 #define IRL 7 #define IRR 8 int speed = 50; //모터 속도 void setup() { // put your setup code here, to run once: pinMode(LmotorCW,OUTPUT); pinMode(LmotorCCW,OUTPUT); pinMode(RmotorCW,OUTPUT); pinMode(RmotorCCW,OUTPUT); pinMode(IRL,INPUT); pinMode(IRR,INPUT); } void loop() { // put your main code here, to run repeatedly: //모터 장착 방향, 배선이 따라 코드를 수정 해서 사용 //양쪽 IR 센서가 모두 검은색 라인 감지시 양 바퀴 전부 전진 if(digitalRead(IRL)==HIGH && digitalRead(IRR)==HIGH){ analogWrite(LmotorCW,0); analogWrite(LmotorCCW,speed); analogWrite(RmotorCW,speed); analogWrite(RmotorCCW,0); } // 검은색 선을 왼쪽 IR센서는 감지 오른쪽 IR센서는 미감지 else if(digitalRead(IRL)==LOW && digitalRead(IRR)==HIGH){ analogWrite(LmotorCW,0); analogWrite(LmotorCCW,speed); analogWrite(RmotorCW,0); analogWrite(RmotorCCW,speed); } // 검은색 선을 왼쪽 IR센서는 미감지 오른쪽 IR센서는 감지 else if(digitalRead(IRL)==HIGH && digitalRead(IRR)==LOW){ analogWrite(LmotorCW,speed); analogWrite(LmotorCCW,0); analogWrite(RmotorCW,speed); analogWrite(RmotorCCW,0); } //모두 미감지시 정지 else if(digitalRead(IRL)==LOW && digitalRead(IRR)==LOW){ analogWrite(LmotorCW,0); analogWrite(LmotorCCW,0); analogWrite(RmotorCW,0); analogWrite(RmotorCCW,0); } }

속도는 직접 작동해보면서 유동적으로 변경해야 합니다.

적외선 센서가 검은색일 때 On이 되는 것도 있지만 검은색일 때 Off가 되는 센서도 될 수 있습니다.(직접 확인하고 코드를 수정해야 합니다.)

-완성

적외선 센서를 부착할 때 바닥과의 높이를 잘 조절해야 감지가 잘 됩니다.

완성된 라인트레이서는 검은선을 따라서 움직입니다.

반응형

아두이노 라인 트레이서 만들기 – 한 개의 아날로그 센서를 이용한 실험

안녕하세요! 아두이노 라인 트레이서 만들기 세 번째 시간입니다. 이번 포스트에서는 한 개의 센서의 아날로그 측정값을 이용하여 줄을 따라가는 실험을 진행해보고자 합니다. 디지털 센서를 쓰는 것 보다는 여러가지 고민 사항이 많아질 것 같습니다.

전선 배선

차체 조립에 대한 정보는 아래 링크를 참고해주시기 바랍니다.

아두이노 줄 따라가는 로봇 조립하기

한전선 배선은 아래 표에 나와있는 내용대로 진행하였습니다. 오른쪽 TCRT5000을 떼어내고, 왼쪽 TCRT5000을 아날로그 핀 A0에 연결하였습니다.

아두이노 모터 L298N TCRT5000 (왼쪽) HC-06 VCC VCC VCC GND GND GND 4 IN2 5 ENA 6 ENB 7 IN4 8 IN3 9 IN1 12 RX 13 TX A0 A0 motor A OUT1 motor A OUT2 motor B OUT3 motor B OUT4

트랙

트랙은 지난 포스트에서 사용하였던 pdf 파일을 인쇄한 트랙과 함께 예전에 구매하였던 mindstorm 키트에 들어있던 완만한 트랙을 사용하였습니다.

아래 링크는 다양한 경로를 제작하기 위해 인쇄하였던 pdf 파일입니다.

아두이노 줄 따라가는 로봇 트랙

실험

원리

TCRT5000의 아날로그 측정값은 바닥의 빛의 반사량을 알려줍니다. 측정값의 범위는 40에서 600 사이이며 반사량이 많을 수록 작은 값이 출력됩니다. 즉, 바닥이 흰색에 가까울 수록 측정값은 작아지고 바닥이 까만색에 가까울 수록 측정값은 커지게 됩니다.

이 실험에서는 하나의 아날로그 센서만을 이용하기 때문에 센서가 줄의 경계를 쫓아가도록 코드를 구성할 것입니다. 줄의 경계에서는 까만색 줄과 하얀색 바탕이 모두 인식되기 때문에 센서가 40과 600 사이의 값을 출력하게 됩니다. 저는 가운데 값인 320을 따라가도록 코드를 만들었습니다.

코드

320 이라는 경계를 설정해준 후 그보다 큰 값이 출력되면 줄 쪽으로, 작은 값이 출력되면 바탕 쪽으로 기울어져 있다고 판단하였습니다. 현재 왼쪽 센서로 줄의 왼쪽 경계를 쫓아가고 있는 상황을 고려하여 줄 쪽으로 기울어졌다고 판단될 경우 오른쪽 바퀴를, 바탕쪽으로 기울여졌다고 판단될 경우 왼쪽 바퀴를 돌려 값을 조율하였습니다.

#include // Motor pins #define ENA 5 #define ENB 6 #define IN1 4 #define IN2 9 #define IN3 7 #define IN4 8 // Drives two motors according to the given pwm values. void drive(int pwmA, int pwmB); // TCRT5000 sensors #define IR_L A0 // HC06 pins #define TX 12 #define RX 13 SoftwareSerial mySerial(RX, TX); void setup() { Serial.begin(115200); mySerial.begin(57600); // set motor pins to ouput pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); // set TCRT500 pins to input pinMode(IR_L, INPUT); } // speed of motors in pwm value int speed = 0; void loop() { // check command over BLE if (mySerial.available()) { char command = mySerial.read(); if (command == ‘g’) { speed = mySerial.parseInt(); } else if (command == ‘s’) { speed = 0; } } // drive line following robot if (speed > 0) { int value = analogRead(IR_L); if (value > 320) { drive(speed, 0); } else { drive(0, speed); } } else { drive(0, 0); } } /* * Drives two motors according to the given pwm values. * * To avoid write several functions for each motor direction, I simply * drive motor forward if the given value is positive and backward if * negative. To stop a motor, just give 0. * * Since every DC motors have differenct characteristics, I stop a * motor if the absolute value of the given pwm value is less than * MOTOR_MIN_PWM to drive the vehicle as strait as possible. * * @param pwmA PWM value of motor A. An integer value between * -255 and 255. * @param pwmB PWM value of motor B. An integer value between * -255 and 255. */ void drive(int pwmA, int pwmB) { // MOTOR A direction if (pwmA > 0) { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); } else if (pwmA < 0) { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); } else { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); } // MOTOR B direction if (pwmB > 0) { digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } else if (pwmB < 0) { digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } else { digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); } // speed of motors analogWrite(ENA, abs(pwmA)); analogWrite(ENB, abs(pwmB)); } 실험 결과 실험 결과 완만한 길은 잘 쫓아가지만 급격한 경사가 등장하는 경우 줄을 따라가지 못하고 큰 원을 그리는 결과가 나타났습니다. 보완된 코드 위와 같은 상황을 해결하기 위해 아예 너무 하얀 쪽에 노출 될 경우 (이 코드의 경우 100보다 작을 때)는 두 바퀴를 서로 반대 방향으로 돌려 더욱 급하게 차체가 회전하도록 하였습니다. #include // Motor pins #define ENA 5 #define ENB 6 #define IN1 4 #define IN2 9 #define IN3 7 #define IN4 8 // Drives two motors according to the given pwm values. void drive(int pwmA, int pwmB); // TCRT5000 sensors #define IR_L A0 // HC06 pins #define TX 12 #define RX 13 SoftwareSerial mySerial(RX, TX); void setup() { Serial.begin(115200); mySerial.begin(57600); // set motor pins to ouput pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); // set TCRT500 pins to input pinMode(IR_L, INPUT); } // speed of motors in pwm value int speed = 0; void loop() { // check command over BLE if (mySerial.available()) { char command = mySerial.read(); if (command == ‘g’) { speed = mySerial.parseInt(); } else if (command == ‘s’) { speed = 0; } } // drive line following robot if (speed > 0) { int value = analogRead(IR_L); if (value > 320) { drive(speed, 0); } else if (value > 100) { drive(0, speed); } else { drive(-speed, speed); } } else { drive(0, 0); } } /* * Drives two motors according to the given pwm values. * * To avoid write several functions for each motor direction, I simply * drive motor forward if the given value is positive and backward if * negative. To stop a motor, just give 0. * * Since every DC motors have differenct characteristics, I stop a * motor if the absolute value of the given pwm value is less than * MOTOR_MIN_PWM to drive the vehicle as strait as possible. * * @param pwmA PWM value of motor A. An integer value between * -255 and 255. * @param pwmB PWM value of motor B. An integer value between * -255 and 255. */ void drive(int pwmA, int pwmB) { // MOTOR A direction if (pwmA > 0) { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); } else if (pwmA < 0) { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); } else { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); } // MOTOR B direction if (pwmB > 0) { digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } else if (pwmB < 0) { digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } else { digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); } // speed of motors analogWrite(ENA, abs(pwmA)); analogWrite(ENB, abs(pwmB)); } 실험 결과 실험 결과에서 볼 수 있듯이 조금 급한 곡선도 잘 따라가는 것을 볼 수 있습니다. 그런데, 좌우로 일정한 속도로 움직이다보니 자체가 심하게 흔들렸습니다. 다음에는 이 부분을 보완해 보고자 합니다.

에듀이노-코딩교육 전문 쇼핑몰

상품결제정보 고액결제의 경우 안전을 위해 카드사에서 확인전화를 드릴 수도 있습니다. 확인과정에서 도난 카드의 사용이나 타인 명의의 주문등 정상적인 주문이 아니라고 판단될 경우 임의로 주문을 보류 또는 취소할 수 있습니다.

무통장 입금은 상품 구매 대금은 PC뱅킹, 인터넷뱅킹, 텔레뱅킹 혹은 가까운 은행에서 직접 입금하시면 됩니다.

주문시 입력한 입금자명과 실제입금자의 성명이 반드시 일치하여야 하며, 7일 이내로 입금을 하셔야 하며 입금되지 않은 주문은 자동취소 됩니다.

배송정보 배송 방법 : 택배

배송 지역 : 전국지역

배송 비용 : 3,000원

배송 기간 : 1일 ~ 2일

배송 안내 : – 제주도, 산간벽지나 도서지방은 별도의 추가금액을 지불하셔야 하는 경우가 있습니다.

고객님께서 주문하신 상품은 입금 확인후 배송해 드립니다. 다만, 상품종류에 따라서 상품의 배송이 다소 지연될 수 있습니다.

교환 및 반품정보 교환 및 반품이 가능한 경우

– 상품을 공급 받으신 날로부터 7일이내 단, 가전제품의

경우 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우에는 교환/반품이 불가능합니다.

– 공급받으신 상품 및 용역의 내용이 표시.광고 내용과

다르거나 다르게 이행된 경우에는 공급받은 날로부터 3월이내, 그사실을 알게 된 날로부터 30일이내

교환 및 반품이 불가능한 경우

– 고객님의 책임 있는 사유로 상품등이 멸실 또는 훼손된 경우. 단, 상품의 내용을 확인하기 위하여

포장 등을 훼손한 경우는 제외

– 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우

(예 : 가전제품, 식품, 음반 등, 단 액정화면이 부착된 노트북, LCD모니터, 디지털 카메라 등의 불량화소에

따른 반품/교환은 제조사 기준에 따릅니다.)

– 고객님의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우 단, 화장품등의 경우 시용제품을

제공한 경우에 한 합니다.

– 시간의 경과에 의하여 재판매가 곤란할 정도로 상품등의 가치가 현저히 감소한 경우

– 복제가 가능한 상품등의 포장을 훼손한 경우

(자세한 내용은 고객만족센터 1:1 E-MAIL상담을 이용해 주시기 바랍니다.)

※ 고객님의 마음이 바뀌어 교환, 반품을 하실 경우 상품반송 비용은 고객님께서 부담하셔야 합니다.

(색상 교환, 사이즈 교환 등 포함)

라인트레이서 – 성균관대학교 로봇학술동아리

먼저 라인트레이서란? 지정된 라인을 따라 움직이는 로봇을 의미합니다. 이를 만들기 위해 꼭 필요한 물품은 다음과 같습니다.

–> 아두이노 UNO, 브레드보드(빵판), 차체, 모터 드라이버, 적외선 센서(최소 2개), 건전지, DC모터, DC barrel 잭

핵심 매커니즘은 크게

1. 적외선 센서로 라인을 감지 후, 2. 모터드라이브를 통하여 DC모터를 상황에 맞게(좌, 우, 직진) 제어하여 선을 따라가는 것입니다.

1 ) 적외선 센서를 통한 감지 적외선 센서의 모습입니다. 핀 3개가 존재하는 것을 확인할 수 있는데, 이는 각각 VCC, GND, OUT 으로 VCC와 GND는 전원부를 의미하며 OUT은 센서값을 전달해주는 핀입니다. VCC는 아두이노의 5V pin, GND는 아두이노의 GND핀에 각각 꼽아주시면 됩니다. 나머지 OUT핀은 digital핀 13개 중 원하시는 곳에꽂으시면 됩니다.

적외선 센서의 원리는 간단합니다. 물체에, 적외선 센서를 방출한 뒤, 빛 센서를 통해 반사되는 빛을 감지하는 원리입니다. 이는 더 나아가 라인트레이서에 적용할 수 있습니다.

선을 검은색으로 한다면, 빛을 흡수하여 반사하지 못하므로 물체를 인지하지 못하는 상황이 됩니다. 이를 통해 로봇이 선을 따라갈 수 있는 것입니다!

그렇다면 적외선 센서를 이용할 줄 알아야합니다. 다음과 같은 코드를 통해 적외선 센서값을 시리얼 모니터에 출력해보도록 하겠습니다.

(※ 참고로, 제시된 코드를 먼저 보는 것보다 직접 짜고 제공된 코드를 참조한다면, 실력이 더욱 증진될 것입니다.)

const int left_sensor = 4; // 왼쪽 적외선 센서 4번 pin으로 정의 const int right_sensor = 5; // 오른쪽 적외선 센서 5번 pin으로 정의 void setup(){ Serial.begin(9600); // 시리얼 통신 시작 pinMode(left_sensor, INPUT); // 센서값을 받아와야 하므로 INPUT pinMode 선언 pinMode(right_sensor, INPUT); } void loop(){ int c = digitalRead(left_sensor); // 센서값 읽기 int d = digitalRead(right_sensor); Serial.print(c); // 시리얼 모니터에 출력 Serial.println(d); delay(1000); }

위와 같은 코드를 실행시 적외선 센서가 물체를 인지한다면 1, 인지하지 못한다면 0으로 출력되는 것을 시리얼 모니터를 통해 알 수 있습니다. 한 쪽 적외선 센서만을 막을 시 01 혹은 10으로 나오는 것 또한 예상할 수 있습니다.

2) 모터드라이버는 세미나에서 설명했으므로 이를 통해 참고하시길 바랍니다.

이번 라인트레이서의 핵심입니다.

바로 상황에 맞는 코드를 짜는 것입니다. 물체가 선을 따라갈 때, 보통 어떤 상황이 있을 수 있을까요? 크게 1. 직선구간 2. 오른쪽 커브구간 3. 왼쪽 커브구간 으로 나눌 수 있습니다.

이와 같은 상황을 우리는 일반화를 해야합니다. 왼쪽, 오른쪽 센서간의 간격이 선의 폭보다 넓다고 가정하겠습니다.

직선 구간에 있을시, 왼쪽 오른쪽 센서가 모두 선 위에 존재하지 않기 때문에 양 쪽 모든 센서가 바닥을 감지하는 상황이 발생합니다.

오른쪽으로 꺾는 커브 구간을 만날시, 왼쪽은 선 위에 존재하지 않아 바닥을 감지하지만, 오른쪽 센서는 선 위에 존재하여 바닥을 감지하지 못합니다. 이때 오른쪽으로 로봇을 꺾기 위해선 왼쪽 바퀴는 앞으로 굴리고 오른쪽 바퀴는 후진을 시켜야합니다!

왼쪽으로 꺾는 커브 구간을 만날시, 오른쪽은 선 위에 존재하지 않아 바닥을 감지하지만, 왼쪽 센서는 선 위에 존재하여 바닥을 감지하지 못합니다. 이때 오른쪽으로 로봇을 꺾기 위해선 오른쪽 바퀴는 앞으로 굴리고 왼쪽바퀴는 후진을 시켜야합니다!

이를 코드를 통해 표현하면 다음과 같습니다.

(※ 참고로, 제시된 코드를 먼저 보는 것보다 직접 짜고 제공된 코드를 참조한다면, 실력이 더욱 증진될 것입니다.)

<회로와, 코드를 직접 짜보는 것은 실력 향상에 크게 도움이 됩니다.> !!회로도는 별도로 제공하지 않을 예정입니다. 여러분이 세미나를 통해 배운 내용으로 참고하셔서 직접 선을 연결하고 코드를 짜보시는 것을 권장합니다. 해보았지만 헷갈리거나 아직은 잘 모르겠다는 분들은 글쓴이를 통해 물어봐주세요 사소한 것부터 어떤 것이든 괜찮습니다:)!!!

const int Left= 4; // 왼쪽 라인트레이서 센서의 신호 선은 5번으로 정의 const int Right= 5; // 오른쪽 라인트레이서 센서의 신호 선은 4번으로 정의 const int motorLeftForward =11; // 왼쪽 모터의 전진 신호는 11번으로 정의 const int motorLeftBack =10; // 왼쪽 모터의 후진 신호는 10번으로 정의 const int motorRightForward=6; // 오른쪽 모터의 전진 신호는 6번으로 정의 const int motorRightBack=9; // 오른쪽 모터의 전진 신호는 9번으로 정의 int speed=110; int turn_speed = 50; void setup() { pinMode(Left, INPUT); pinMode(Right, INPUT); pinMode(motorLeftForward, OUTPUT); pinMode(motorLeftBack, OUTPUT); pinMode(motorRightForward, OUTPUT); pinMode(motorRightBack, OUTPUT); } void loop() { if(digitalRead(Left)==HIGH && digitalRead(Right)==LOW){ // 오른쪽 센서만 선 위에 있을 시 left(turn_speed); right(-turn_speed); // 오른쪽으로 회전(왼쪽 모터 구동, 오른쪽 모터 후진) delay(10); left(0); right(0); // 정지 } else if(digitalRead(Right)==HIGH && digitalRead(Left)==LOW){ // 왼쪽 센서만 선 위에 있을 시 left(-turn_speed); right(turn_speed); //왼쪽으로 회전(오른쪽 모터 구동, 왼쪽 모터 정지) delay(10); left(0); right(0); // 정지 } else if(digitalRead(Right)==HIGH && digitalRead(Left)==HIGH) // 둘다 선 위에 있을 시 { left(speed); right(speed); delay(10); } else { left(0); right(0); } } void left(int speed){ //왼쪽 모터 제어 if (speed >= 0) { //전진 digitalWrite(motorLeftBack, LOW); //왼쪽 후진 신호 OFF analogWrite(motorLeftForward, speed); //전진 신호 speed의 세기로 회전 } else { //후진 digitalWrite(motorLeftForward, LOW); // 왼쪽 전진 신호 OFF analogWrite(motorLeftBack, speed); //후진 신호 speed의 세기로 회전 } } void right(int speed){ //오른쪽 모터 제어 if (speed >= 0) { //전진 digitalWrite(motorRightBack, LOW); //오른쪽 후진 신호 OFF analogWrite(motorRightForward, speed); //전진 신호 speed의 세기로 회전 } else { //후진 digitalWrite(motorRightForward, LOW); //오른쪽 전진 신호 OFF analogWrite(motorRightBack, speed); //후진 신호 speed의 세기로 회전 } }

라인트레이서의 기능을 결정할 중요한 요소 몇가지가 있습니다. 차 자체의 속도, 방향을 꺾을 때 속도, 경로(선)의 간격 등이 있습니다.

선을 정확하게 따라가는 것과 경로 완주시간 등 제약을 두고 이에 맞추어 코딩을 하고 센서의 위치를 조절한다면

누구보다 빠르고 정확하게 따라가는 라인트레이서를 만들어 볼 수 있지 않을까요?

+하드웨어 사진입니다!

( 적외선 센서의 간격은 사 진과 달리 넓게 해주세요! 대략 나무 젓가락 반 정 도 길이의 간격!)

참고용 사진일 뿐, 편하신대로 모두 재배치 하셔도 상관없습니다.

( 윗면)

(아랫면)

( 완성된 모습)

차를 꾸미고, 트랙을 만들어, 본인만의 코드를 통해 친구들과 경주를 펼쳐보세요!!!!

키워드에 대한 정보 라인 트레이서 코드

다음은 Bing에서 라인 트레이서 코드 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 라인트레이서 만들기 코딩 1편 (line tracer coding)_[반지하공작실]

  • 라인트레이서
  • 코딩
  • coding
  • linetracer
  • 아두이노
  • 작품
  • 장난감
  • 로봇

라인트레이서 #만들기 #코딩 #1편 #(line #tracer #coding)_[반지하공작실]


YouTube에서 라인 트레이서 코드 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 라인트레이서 만들기 코딩 1편 (line tracer coding)_[반지하공작실] | 라인 트레이서 코드, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  블랙 미러 시즌 2 다시 보기 | 《10분 순삭》미래 사회 오디션에 합격하기위한 미쳐버린 행동 답을 믿으세요

Leave a Comment