以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)
|