以arduino為主控板,包含電機驅動模塊、藍牙模塊、語音模塊、超聲波模塊、語音模塊。實現前進后退左轉右轉(語音同步提醒),藍牙APP所有按鈕無障礙切換。
一.首先選擇我們需要使用的APP
二.進入APP選擇JDY-08設備
三,進入主界面操作
Arduino小車接收到相關的操作指令:
前進---- 0xa
后退----0xb
左---- 0xc
右--- 0xd
停止----0x10
音量+ ----0x11
音量- -----0x12
循跡----0xe
跟隨---0x13
娛樂—0xf
Arduino源程序如下:
- #include<SoftwareSerial.h>
- /*******************定義**************************/
- //蜂鳴器
- int beep_pin=A2;
- //電機定義端口
- int IN1 = 13;
- int IN2 = 12;
- int IN3 = 11;
- int IN4 = 10;
- //語音定義端口
- int IO1 = 4;
- int IO2 = 3;
- int IO3 = 2;
- int IO4 = 1;
- int IO5 = 0;
- int pin_array[] = {IO5,IO4,IO3,IO2,IO1};
- int fisrt_voice[] = {1,1,1,1,0};
- int second_voice[] = {1,1,1,0,1};
- int third_voice[] = {1,1,0,1,1};
- int fourth_voice[] = {1,0,1,1,1};
- int fif_voice[] = {0,1,1,1,1};
- int six_voice[] = {0,0,1,1,0};
- //pwm調速端口
- int left_pin = 5;
- int right_pin = 6;
- int car_speed = 100;
- //超聲波模塊
- int TrigPin = A0;
- int EchoPin = A1; //接收輸入的脈沖寬度,
- //軟串口定義
- SoftwareSerial mySerial(8,9);
- SoftwareSerial dlSerial(SCL, SDA);
- unsigned char play_stop_music[] = {0x7E,0x03,0x1E,0x1D,0xEF};
- unsigned char play_add_music[] = {0x7E,0x03,0x15,0x16,0xEF};
- /*******************函數**********************/
- void play_addd_music() //語音加
- {
- dlSerial.listen();
- delay(300);
- dlSerial.write(play_add_music,sizeof(play_add_music));
- }
- void beep() //蜂鳴器
- {
- tone(beep_pin,494);
- delay(1000);
- noTone(beep_pin);
- delay(1000);
- }
- void set_speed() //[0 ~255] //調速函數
- {
- analogWrite(left_pin,car_speed);
- analogWrite(right_pin,car_speed);
- }
- void init_pin() //電機初始化
- {
- pinMode(IN1,OUTPUT);
- pinMode(IN2,OUTPUT);
- pinMode(IN3,OUTPUT);
- pinMode(IN4,OUTPUT);
- return;
- }
- void left_motor_forward() //左電機直行
- {
- digitalWrite(IN3,HIGH);
- digitalWrite(IN4,LOW);
- }
- void left_motor_back() //左電機后退
- {
- digitalWrite(IN3,LOW);
- digitalWrite(IN4,HIGH);
- }
- void right_motor_forward() //右電機直行
- {
- digitalWrite(IN1,HIGH);
- digitalWrite(IN2,LOW);
- }
- void right_motor_back() //右電機后退
- {
- digitalWrite(IN1,LOW);
- digitalWrite(IN2,HIGH);
- }
- void car_forward() //直行
- {
- left_motor_forward();
- right_motor_forward();
- delay(1000);
- }
- void left_stop() //左電機停
- {
- digitalWrite(IN3,LOW);
- digitalWrite(IN4,LOW);
- }
- void right_stop() //右電機停
- {
- digitalWrite(IN1,LOW);
- digitalWrite(IN2,LOW);
- }
- void car_left() //車左轉彎
- { left_motor_back();
- right_motor_forward();
- delay(1000);
- }
- void car_right() //車右轉彎
- { left_motor_forward();
- right_motor_back();
- delay(1000);
- }
- void car_stop() //車停
- {
- digitalWrite(IN1,LOW);
- digitalWrite(IN2,LOW);
- digitalWrite(IN3,LOW);
- digitalWrite(IN4,LOW);
- delay(1000);
- }
- void car_back() //車后退
- {
- left_motor_back();
- right_motor_back();
- delay(1000);
- }
- void init_yuyin() //語音初始化
- {
- pinMode(IO5,OUTPUT);
- pinMode(IO4,OUTPUT);
- pinMode(IO3,OUTPUT);
- pinMode(IO2,OUTPUT);
- pinMode(IO1,OUTPUT);
-
- }
- void play_fisrt_voice() //第一首歌
- {
- int i = 0;
- for(i = 0;i < 5;i++)
- {
- digitalWrite(pin_array[i],fisrt_voice[i]);
- }
- delay(1000);
- }
- void play_second_voice() //第二首歌
- {
- int i = 0;
- for(i = 0;i < 5;i++)
- {
- digitalWrite(pin_array[i],second_voice[i]);
- }
- delay(1000);
- }
- void play_third_voice() //第三首歌
- {
- int i = 0;
- for(i = 0;i < 5;i++)
- {
- digitalWrite(pin_array[i],third_voice[i]);
- }
- delay(1000);
- }
- void play_fourth_voice() //第四首歌
- {
- int i = 0;
- for(i = 0;i < 5;i++)
- {
- digitalWrite(pin_array[i],fourth_voice[i]);
- }
- delay(1000);
- }
- void play_fif_voice() //第五首歌
- {
- int i = 0;
- for(i = 0;i < 5;i++)
- {
- digitalWrite(pin_array[i],fif_voice[i]);
- }
- delay(1000);
- }
- void play_six_voice() //第六首歌
- {
- int i = 0;
- for(i = 0;i < 5;i++)
- {
- digitalWrite(pin_array[i],six_voice[i]);
- }
- delay(1000);
- }
- float getDistance() //得到距離
- {
- float distance;
- digitalWrite(TrigPin,LOW);
- delayMicroseconds(2);
- digitalWrite(TrigPin,HIGH);
- delayMicroseconds(10);
- digitalWrite(TrigPin,LOW);
- distance = pulseIn(EchoPin,HIGH) /58.00;
- return distance;
- }
- void obstacle() //避障
- {
-
- float distance;
- car_forward();
- while(1)
- {
- distance = getDistance();
-
- if(distance < 100)
- { beep();
- car_back();
- delay(500);
- car_left();
- delay(1500);
- play_six_voice();
- car_forward();
- mySerial.listen();
- if(mySerial.available() > 0)
- break;
- }
- else
- car_forward();
- }
- return ;
- }
- void setup() //setup
- {
- // put your setup code here, to run once:
- init_pin();
- init_yuyin();
- set_speed();
- pinMode(beep_pin,OUTPUT);
- pinMode(TrigPin,OUTPUT);
- pinMode(EchoPin,INPUT);
- mySerial.begin(115200);
- dlSerial.begin(9600);
- }
- void loop() //loop
- {
- // put your main code here, to run repeatedly:
- int ch = 0,i=0;
- while(1)
- {
- mySerial.listen();
- if(mySerial.available() > 0)
- {
- ch = mySerial.read();
- switch(ch)
- {
- case 0xa:car_forward();play_fisrt_voice();break;
- case 0xb:car_back();play_second_voice();break;
- case 0xd:car_left();play_fourth_voice();break;
- case 0xc:car_right();play_third_voice();break;
- case 0x11:play_addd_music();break;
- case 0xf:obstacle();break;
- case 0x10:i++;car_stop();
- if(i==1)
- play_fif_voice();
- if(i==2)
- {
- dlSerial.listen();
- delay(300);
- dlSerial.write(play_stop_music,sizeof(play_stop_music));
- i=0;
- }
- break;
- default:break;
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
基于arduino的藍牙智能小車.zip
(296.17 KB, 下載次數: 194)
2019-1-24 16:41 上傳
點擊文件名下載附件
|