BASIC4MCU | 질문게시판 | 급함)) 스위치 또는 블루투스로 전체회로를 ON/OFF하고싶습니다.
페이지 정보
작성자 Ptype4 작성일2022-11-28 18:27 조회1,759회 댓글0건본문
안녕하세요. 로봇청소기를 만들고있는데 스위치 또는 블루투스모듈로 전체회로를 ON/OFF하고 싶습니다.
밑에는 회로도 이구요. 저번에 알려주신 방법으로 해본 결과
회로도에 스위치를 봤을때 전체회로를 스위치로 ON/OFF를 할려면 배터리연결부분과 그라운드가 만나야 작동을 하더라구요.
근데 배터리가 12v라 그런지 얼마안가 냄새가 슬머슬머 올라와서 바로 뺐습니다. 12v 차량용 버튼을 구매하여 배송중인데 지금 당장 실험 할 방법이 없어서 블루투스모듈로 할려고 했지만 이것 또한 바퀴가 배터리로 작동하니 모듈도 배터리와 연결해줘서 사용해야하는데 그러면 또 탈까봐 못하고 있습니다.
혹시 다른 방법으로 제어하는 법이 있을까요? 스위치를 우노 디지털핀에 꽂아서 코딩으로 제어하는게 가능할련지 그렇다면 또 어떻게 코딩을 수정해야하는지 감이 안잡힙니다.
---------------------------------------------코드-----------------------------------------
#include //시리얼 통신 라이브러리 호출 //모터 PIN 설정 #define LEFT_A1 4 //왼쪽 바퀴 #define LEFT_B1 5 //왼쪽 바퀴 #define RIGHT_A2 6 //오른쪽 바퀴 #define RIGHT_B2 7 //오른쪽 바퀴 //L298N 속도 #define ENA 9 #define ENB 10 //초음파 센서 PIN 설정 #define IR_TRIG 13 //TRIG 핀 설정 (초음파 보내는 핀) #define IR_ECHO 12 //ECHO 핀 설정 (반사된 초음파 받는 핀) //모터 fan PIN 설정 #define coolingfan 3 //쿨링팬 핀 설정 //블루투스 PIN 설정 #define blue_TX 8 #define blue_RX 11 SoftwareSerial mySerial(blue_TX, blue_RX); //시리얼 통신을 위한 객체선언 char value; //블루투스에서 받는 값 void setup() { Serial.begin(9600); //시리얼모니터 mySerial.begin(9600); //블루투스 시리얼 개방 //모터 핀모드 설정 pinMode(LEFT_A1, OUTPUT); pinMode(RIGHT_A2, OUTPUT); pinMode(LEFT_B1, OUTPUT); pinMode(RIGHT_B2, OUTPUT); //초음파 센서 핀모드 설정 pinMode(IR_TRIG, OUTPUT); pinMode(IR_ECHO, INPUT); //모터 fan 핀모드 설정 pinMode(coolingfan, OUTPUT); //모터 속도 pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); analogWrite(ENA, 0); analogWrite(ENB, 0); Serial.println("Arduino Bluetooth Car is ready to start"); } void loop() { float duration, distance; digitalWrite(IR_TRIG, HIGH); delay(10); digitalWrite(IR_TRIG, LOW); // echoPin 이 HIGH를 유지한 시간 duration = pulseIn(IR_ECHO, HIGH); // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다. // 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠주면 거리가 cm 로 나옴 distance = ((float)(340 * duration) / 10000) / 2; Serial.print("\nDistance : "); Serial.println(distance); if (distance < 15) { //장애물 감지 (15cm 이내) Serial.println("stop"); stop(); //정지(1초) Serial.println("backward"); backward(); //후진(0.5초) int rnd = random(0, 2); //장애물 감지시 좌/우회전 랜덤처리 if (rnd == 0) { Serial.println("right"); right(); } else { Serial.println("left"); left(); } } else { //장애물 없음 Serial.println("forward"); forward(); } //블루투스 while(mySerial.available()) //mySerial에 전송된 값이 있으면 { value = mySerial.read(); //전송값 읽음 Serial.print(value); if(value == '1'){ //전진 Serial.println("forward"); forward(); } else if(value == '0'){ //정지 Serial.println("stop"); stop(); } } } void forward() { digitalWrite(LEFT_A1, LOW); digitalWrite(LEFT_B1, HIGH); digitalWrite(RIGHT_A2, LOW); digitalWrite(RIGHT_B2, HIGH); digitalWrite(coolingfan,HIGH); analogWrite(ENA, 255/5.5); analogWrite(ENB, 255/5.5); delay(1000); } void backward() { digitalWrite(LEFT_A1, HIGH); digitalWrite(LEFT_B1, LOW); digitalWrite(RIGHT_A2, HIGH); digitalWrite(RIGHT_B2, LOW); digitalWrite(coolingfan,HIGH); analogWrite(ENA, 255/5.5); analogWrite(ENB, 255/5.5); delay(500); } void left() { digitalWrite(LEFT_A1, HIGH); digitalWrite(LEFT_B1, LOW); digitalWrite(RIGHT_A2, LOW); digitalWrite(RIGHT_B2, HIGH); digitalWrite(coolingfan,HIGH); analogWrite(ENA, 255/5.5); analogWrite(ENB, 255/5.5); delay(1000); } void right() { digitalWrite(LEFT_A1, LOW); digitalWrite(LEFT_B1, HIGH); digitalWrite(RIGHT_A2, HIGH); digitalWrite(RIGHT_B2, LOW); digitalWrite(coolingfan,HIGH); analogWrite(ENA, 255/5.5); analogWrite(ENB, 255/5.5); delay(1000); } void stop() { digitalWrite(LEFT_A1, LOW); digitalWrite(LEFT_B1, LOW); digitalWrite(RIGHT_A2, LOW); digitalWrite(RIGHT_B2, LOW); digitalWrite(coolingfan,LOW); delay(1500); }
일단 블루투스를 추가하여 넣어봤습니다. 저렇게 넣어서 전진하면 전진하면서 알아서 작동하다 정지하면 다 멈추는줄 알았는데 그게 아니더군요... 이런저런 자료 찾아보니 황당한 상식이지만 뭐라도 해보고 싶었습니다.
전진 후진 좌 우회전 high low 순서가 바뀐거는 동작시켜보니 선도 잘 꼽았는데 자꾸 후진하길래 저렇게 바꿔보니 되더라구요. 저렇게 사용 중입니다.
댓글 0
조회수 1,759등록된 댓글이 없습니다.