1. 기존 원킹쌤의 서보모터 교육 자료 복습
2. 1개의 서브모터를 블루투스랑 연결해 보자.
- 위 자료를 참고해서 앱인벤터로 제작한 자체 앱으로 블루투스 - 서브모터를 제어하시오.
3. 2개의 서보모터를 블루투스로 연결해 보자.
- 위 자료와 [2]번 자료를 참고하여, 자체제작 앱인벤터 앱으로 2개의 서브모터를 제어해보시오.
- 레이저 모듈이 아직 배송중이오니, 일단은 적색 led로 대체
- 자체제작 앱 인벤터에도 led 제어 버튼을 추가하시오
-> 켜짐, 꺼짐, 점멸
- 3d 프린트 전에 아이소 핑크로 프로토 타입을 제작하시오.
[추가 과제 - 블루투스로 서보모터 2개 제어하기.]
1. 회
로
2. 아두이노 코드
#include <SoftwareSerial.h> //블루투스 시리얼 통신 라이브러리 추가
#include <Servo.h>
SoftwareSerial BTSerial(3, 2); //블루투스 설정 BTSerial(Tx, Rx)
Servo servomotor1;
Servo servomotor2;
int b = 0;
int c = 0;
int Yellow = 7;
int Red = 9; //led 핀 설정
void setup() {
BTSerial.begin(9600); //블루투스 통신 시작
servomotor1.attach(9); // 9번핀에 서보모터1 연결
servomotor2.attach(8); // 8번핀에 서보모터2 연결
pinMode(Red, OUTPUT);
pinMode(Yellow, OUTPUT);
Serial.begin(9600);
}
void loop() {
if(BTSerial.available()) //값이 들어오면
{
char bt; //제어할 변수 bt선언
bt = BTSerial.read(); //들어온 값을 bt에 저장
Serial.println(bt);
if(bt == '1'){ //bt가 1면 위로
if(b<180){b = b+10;}
servomotor1.write(b); // 9번핀에 서보모터1 연결
}
else if(bt == '2'){ //bt가 2면 아래로
if(b>0){b = b-10;}
servomotor1.write(b);
}
else if(bt == '3'){ //bt가 3면 우로
if(c<180){c = c+10;}
servomotor2.write(c);
}
else if(bt == '4'){ //bt가 4면 좌로
if(c>0){c = c-10;}
servomotor2.write(c);
}
else if(bt == '0'){ //bt가 0면 중앙
servomotor1.write(90);
servomotor2.write(90);
b=90;
c=90;
}
else if(bt == 'o')
digitalWrite(Yellow, HIGH);
else if(bt == 'f')
digitalWrite(Yellow, LOW);
}
delay(100);
}
3. 블루트스 어플 제작
-> 아래 2가지 방법 중 하나 선택하여 실행
1) 앱 인벤터로 직접 제작 : 1, 2, 3, 4 등등 신호를 보내 아두이노 에게 송신
2) 기존 앱 다운(아두이노 rc 리모콘) 하여 아두이노에게 블루투스 신호 송신
[최종 과제] 블루투스 + DC 모터 2개 + 서보모터 2개 + led
1. 아두이노 회로
2. 아두이노 코드
#include <SoftwareSerial.h> //블루투스 시리얼 통신 라이브러리 추가
#include <Servo.h>
SoftwareSerial BTSerial(3, 2); //블루투스 설정 BTSerial(Tx, Rx)
//모터 PIN 설정
#define LEFT_A1 8 //왼쪽 바퀴
#define LEFT_B1 9 //왼쪽 바퀴
#define RIGHT_A2 10 //오른쪽 바퀴
#define RIGHT_B2 11 //오른쪽 바퀴
const int ENA = 7;
const int ENB = 12;
//서브모터 설정
Servo servomotor1;
Servo servomotor2;
int b = 0;
int c = 0;
int Yellow = 4; //led 핀 설정
void setup() {
BTSerial.begin(9600); //블루투스 통신 시작
servomotor1.attach(6); // 6번핀에 서보모터1 연결
servomotor2.attach(5); // 5번핀에 서보모터2 연결
pinMode(Yellow, OUTPUT); // led 노랑
Serial.begin(9600); // 시리얼모니터
pinMode(LEFT_A1, OUTPUT);
pinMode(RIGHT_A2, OUTPUT);
pinMode(LEFT_B1, OUTPUT);
pinMode(RIGHT_B2, OUTPUT);
Serial.println("Arduino Bluetooth Car is ready to start");
}
void loop() {
if(BTSerial.available()) //값이 들어오면
{
char bt; //제어할 변수 bt선언
bt = BTSerial.read(); //들어온 값을 bt에 저장
Serial.println(bt);
if(bt == '1'){ //bt가 1면 위로
if(b<180){b = b+10;}
servomotor1.write(b); // 9번핀에 서보모터1 연결
}
else if(bt == '2'){ //bt가 2면 아래로
if(b>0){b = b-10;}
servomotor1.write(b);
}
else if(bt == '3'){ //bt가 3면 우로
if(c<180){c = c+10;}
servomotor2.write(c);
}
else if(bt == '4'){ //bt가 4면 좌로
if(c>0){c = c-10;}
servomotor2.write(c);
}
else if(bt == '0'){ //bt가 0면 중앙
servomotor1.write(90);
servomotor2.write(90);
b=90;
c=90;
}
else if(bt == 'o'){digitalWrite(Yellow, HIGH);}
else if(bt == 'g'){digitalWrite(Yellow, LOW);}
// dc모터 코드
else if(bt == 'l'){ //좌회전(강)
Serial.println("left");
left();
}else if(bt == 'r'){ //우회전(강)
Serial.println("right");
right();
}else if(bt == 'f'){ //전진
Serial.println("forward");
forward();
}else if(bt == 'b'){ //후진
Serial.println("backward");
backward();
}else if(bt == 'w'){ //우회전(약)
Serial.println("slow right");
sRight();
}else if(bt == 'q'){ //좌회전(약)
Serial.println("slow left");
sLeft();
}else if(bt == 'c'){ //우회전(뒷)
Serial.println("back right");
bRight();
}else if(bt == 'z'){ //좌회전(뒷)
Serial.println("back left");
bLeft();
}else if(bt == 's'){ //정지
Serial.println("stop");
stop();
}
} delay(100);
}
// 자동차 움직임 정의 Function 들
void forward(){
digitalWrite(LEFT_A1, HIGH);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, HIGH);
digitalWrite(RIGHT_B2, LOW);
analogWrite(ENB, 255);
analogWrite(ENA, 255);
}
void backward(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, HIGH);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, HIGH);
analogWrite(ENB, 255);
analogWrite(ENA, 255);
}
void left(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, HIGH);
digitalWrite(RIGHT_A2, HIGH);
digitalWrite(RIGHT_B2, LOW);
analogWrite(ENB, 255);
analogWrite(ENA, 255);
}
void right(){
digitalWrite(LEFT_A1, HIGH);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, HIGH);
analogWrite(ENB, 255);
analogWrite(ENA, 255);
}
void sLeft(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, HIGH);
digitalWrite(RIGHT_B2, LOW);
analogWrite(ENB, 255);
analogWrite(ENA, 255);
}
void bLeft(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, HIGH);
analogWrite(ENB, 255);
analogWrite(ENA, 255);
}
void sRight(){
digitalWrite(LEFT_A1, HIGH);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, LOW);
analogWrite(ENB, 255);
analogWrite(ENA, 255);
}
void bRight(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, HIGH);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, LOW);
analogWrite(ENB, 255);
analogWrite(ENA, 255);
}
void stop(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, LOW);
}
3. 앱인벤터 설계
1) 앱 화면 그래픽
2) 앱 블록 코딩
끝.
'메이커 프로젝트 > 아두이노 +' 카테고리의 다른 글
[젯슨나노] gpio_led control (0) | 2021.12.28 |
---|---|
젯슨나노 웹캠 이미지 받아오기 (2) | 2021.12.28 |
아두이노 블루투스 제어 (0) | 2021.09.03 |
아두이노 DC 모터 제어하기 (0) | 2021.09.03 |
[모듈 1-6] 아두이노 부저로 소리내기(feat. 전자 피아노 만들기) (2) | 2020.09.22 |