-전방 초음파 센서를 통해 4m 이내 장애물을 인식하여 운전자에게 디스플레이를 통해 알려줌
-후방 초음파 센서를 통해 4m 이내 장애물을 인식하여 운전자에게 디스플레이를 통해 알려주고, 부져를 통해 일정 간격으로 경고음을 발생시킨다.
-브레이크 페달부분에 리미트 스위치를 장착하여 브레이크를 밟으면 브레이크등이 들어 온다.
사진1
사진2
-아두이노 나노
-전방 초음파 센서 HC-SR04
-후방 초음파 센서 HC-SR04
-피에조 부져
-16*2 LCD
-리미트스위치
-LED 발광다이오드 *10
정은 퓨전360으로 모델링하여 3D프린터로 출력하여 고정하였습니다.
STL 파일 필요하신 분들은 아래 링크를 확인해주세요.
http://bitly.kr/YMYzDG
-버그가 있을 수 있습니다.
-LCD 사용을 위한 라이브러리가 필요합니다.
-각자 자신이 원하는 기능을 구현하는데 도전해보세요!!
-고카트 V6.0 에 들어간 코드는 아래 글을 참고해주세요.
https://www.arduino.cc/en/Main/Software 여기에 접속하여 아두이노 IDE의 최신버전을 다운로드 합니다.
다운로드 받은 아두이노 IDE를 다운/실행 한 후 [Ctrl +Shift + I ] 또는 상단바에 [스케치]-[라이브러리 포함하기]-[라이브러리 관리]를 눌러 라이브러리 매니저를 실행합니다.
이후 검색창에 LiqidCrystal 를 검색한 후 설치합니다.
아두이노를 컴퓨터에 연결한다음 상단바에 [툴]을 클릭한 후 [보드]를 클릭하여 보드를 설정한 다음, [포트]를 눌러 연결합니다. ex) COM4
만약 포트가 인식되지 않는다면 아두이노가 호환보드일 수 있으며 이 상황에서는 CH340 드라이버를 다운로드 합니다.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int buzzer = 13; //부져
int Button1 = 11; //브레이크 리미트 스위치
int redLED1 = 6; //브레이크등
void setup() {
Serial.begin(9600);
pinMode(Button1, INPUT_PULLUP);
pinMode(redLED1, OUTPUT);
//초음파1 뒷쪽
pinMode(5, OUTPUT); // trig
pinMode(4, INPUT); //echo
//초음파2 앞쪽
pinMode(8, OUTPUT); //trig
pinMode(9, INPUT); //echo
pinMode(buzzer, OUTPUT); //부져
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
//초음파1 앞쪽
digitalWrite(5, LOW);
digitalWrite(4, LOW);
delayMicroseconds(2);
digitalWrite(5, HIGH);
delayMicroseconds(10);
digitalWrite(5, LOW);
unsigned long duration = pulseIn(4, HIGH);
int distance1 = duration / 58;
distance1 = distance1>400? 400:distance1;
Serial.print("distance1:");
Serial.print(distance1);
Serial.println("cm");
delay(5);
//초음파2 뒷쪽
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delayMicroseconds(2);
digitalWrite(8, HIGH);
delayMicroseconds(10);
digitalWrite(8, LOW);
unsigned long duration2 = pulseIn(9, HIGH);
int distance2 = duration2 / 58;
distance2 = distance2>400? 400:distance2;
Serial.print("distance2:");
Serial.print(distance2);
Serial.println("cm");
delay(5);
if (distance1 >= 80 && distance1 < 100) {
tone(13, 523, 500);
delay (300);
tone(13, 0, 500);
delay (300);
}
if (distance1 >= 70 && distance1 < 80) {
tone(13 , 523, 500);
delay (200);
tone(13, 0, 500);
delay (200);
}
if (distance1 >= 60 && distance1 < 70) {
tone(13, 523, 500);
delay (170);
tone(13, 0, 500);
delay (160);
}
if (distance1 >= 50 && distance1 < 60) {
tone(13, 523, 500);
delay (120);
tone(13, 0, 500);
delay (150);
}
if (distance1 >= 40 && distance1 < 50) {
tone(13, 523, 500);
delay (120);
tone(13, 0, 500);
delay (120);
}
if (distance1 >= 30 && distance1 < 40) {
tone(13, 523, 500);
delay (100);
tone(13, 0, 500);
delay (80);
}
if (distance1 >= 20 && distance1 < 30) {
tone(13, 523, 500);
delay (40);
tone(13, 0, 500);
delay (40);
}
if (distance1 >= 0 && distance1 < 20) {
tone(13, 523, 500);
}
int sensorVal = digitalRead(Button1);
if (sensorVal == HIGH) {
digitalWrite(redLED1, LOW);
digitalWrite(redLED2, LOW);
}
else {
digitalWrite(redLED1, HIGH);
digitalWrite(redLED2, LOW);
}
delay(5);
lcd.setCursor(0,0);
lcd.print("F:");
lcd.print(String(distance2));
lcd.print("cm (MAX400)");
lcd.setCursor(0,1);
lcd.print("B:");
lcd.print(String(distance1));
lcd.print("cm (MAX400)");
}