우리는 이전 시간까지 RC카의 외형을 조립하고, 모터드라이버로 DC모터를 제어하는 방법, 적외선 센서를 사용하는 방법까지 익혔다.
이제 라인트레이서를 완성하기 위해 (거의) 모든 사전 작업을 끝냈다! 이제 각각을 결합하고 자동차에 라인트레이서의 영혼을 넣어주면 된다!!!
적외선 센서는 디지털 12번, 13번 pin에 연결하도록 한다.
코드
void setup() { pinMode(7, OUTPUT); // Motor A 방향설정1 pinMode(8, OUTPUT); // Motor A 방향설정2 pinMode(4, OUTPUT); // Motor B 방향설정1 pinMode(5, OUTPUT); // Motor B 방향설정2 analogWrite(9, 130); // Motor A 속도조절 (0~255) analogWrite(3, 130); // Motor B 속도조절 (0~255) Serial.begin(9600); } void loop() { int val1 = digitalRead(12); // 라인센서1 왼쪽 int val2 = digitalRead(13); // 라인센서2 오른쪽 Serial.print(val1); Serial.println(val2); if (val1 == 1 && val2 == 1) // 직진 { digitalWrite(7, HIGH); digitalWrite(5, HIGH); } else if (val1 == 0 && val2 == 1) // 좌회전 { digitalWrite(7, LOW); digitalWrite(5, HIGH); } else if (val1 == 1 && val2 == 0) // 우회전 { digitalWrite(7, HIGH); digitalWrite(5, LOW); } else if (val1 == 0 && val2 == 0) // 정지 { digitalWrite(7, LOW); digitalWrite(5, LOW); } }
모터 드라이버 쉴드를 L293D를 이용할 경우에는 아래코드를 사용하면 됩니다.
코드 보기#include <SoftwareSerial.h> #include <AFMotor.h> AF_DCMotor motor_L(1); // 모터드라이버 L293D 1: M1에 연결, 2: M2에 연결 AF_DCMotor motor_R(2); void setup() { Serial.begin(9600); // PC와의 시리얼 통신속도 motor_L.setSpeed(130); // 왼쪽 모터의 속도 motor_L.run(RELEASE); motor_R.setSpeed(130); // 오른쪽 모터의 속도 motor_R.run(RELEASE); } void loop() { int val1 = digitalRead(A0); // 라인센서1 int val2 = digitalRead(A5); // 라인센서2 if (val1 == 0 && val2 == 0) { // 직진 motor_L.run(FORWARD); motor_R.run(FORWARD); } else if (val1 == 0 && val2 == 1) { // 우회전 motor_L.run(FORWARD); motor_R.run(RELEASE); } else if (val1 == 1 && val2 == 0) { // 좌회전 motor_L.run(RELEASE); motor_R.run(FORWARD); } else if (val1 == 1 && val2 == 1) { // 정지 motor_L.run(RELEASE); motor_R.run(RELEASE); } }
Leave a Reply
You must be logged in to post a comment.