这个设计的介绍:在小车前,安装一个超声波测距传感器,当手靠近小车,在15厘米以内,小车后退,“后退”灯亮;当手拉开远离小车,传感器检测手与车的距离在15厘米到60厘米之内,小车前进,“前进”灯亮;如果手与车的距离超过60厘米,小车停止,“前进”灯和“后退”灯都熄灭。
对于我使用的这种超声波传感器以前“动手制作超声波测距仪”的博文里有介绍。
本实验的Arduino设备源于DFrobot官方旗舰店: http://dfrobot.taobao.com/
实验照片:

Arduino程序:
int E_right =5; //连接电机1的使能端口到数字接口5 int M_right =4; //连接电机1的转向端口到数字接口4 int E_left = 6;//连接电机2的使能端口到数字接口6 int M_left=7; //连接电机2的转向端口到数字接口5 int potpin=0;//定义电位计相连的模拟接口0上 float velocity;//车速调节 int USValue = 0;//定义存放超声波测量距离 int led_advance=9; //定义“前进”灯 int led_back =11; //定义“后退”灯 byte DMcmd[4] = {0x22, 0x00, 0x00, 0x22}; //距离命令
void setup() { Serial.begin(9600); //串口波特率设置 //给各数字接口设置输入输出状态 pinMode(M_right, OUTPUT); pinMode(E_right, OUTPUT); pinMode(M_left, OUTPUT); pinMode(E_left, OUTPUT); pinMode(led_advance,OUTPUT); //初始化,把“前进”灯熄灭 digitalWrite(led_advance,HIGH); pinMode(led_back,OUTPUT); //初始化,把“后退”灯熄灭 digitalWrite(led_back,HIGH); delay(100); }
void advance()//前进 { digitalWrite(M_right,LOW); analogWrite(E_right,int(velocity)); digitalWrite(M_left,HIGH); analogWrite(E_left,int(velocity)); } void back()//后退 { digitalWrite(M_right,HIGH); analogWrite(E_right,int(velocity)); digitalWrite(M_left,LOW); analogWrite(E_left,int(velocity)); } void Stop()//停止 { digitalWrite(E_right, LOW); //右电机停 digitalWrite(E_left, LOW); //左电机停 }
//主程序 void loop( ) { //读电位计给出的车速调节值 velocity=(float)analogRead(potpin)/1023*255; for(int i=0;i<4;i++) { Serial.print(DMcmd[i],BYTE);//发送超声波测距命令 } delay(10); //一个延时 if(Serial.available()>0) //查询串口有无数据 { byte header=Serial.read(); //0x22开始接收距离数据 byte highbyte=Serial.read();//距离数据高8位 byte lowbyte=Serial.read();//距离数据低8位 byte sum=Serial.read();//sum校验和 USValue = highbyte*256+lowbyte; //如果距离小于等于15厘米 if (USValue <=15) { digitalWrite(led_back,LOW);//“后退”灯点亮 digitalWrite(led_advance,HIGH);//“前进”灯熄灭 back();//后退 } //如果距离大于15厘米并且小于等于60厘米 else if(USValue>15 && USValue<=60) { digitalWrite(led_advance,LOW);//“前进”灯点亮 digitalWrite(led_back,HIGH);//“后退”灯熄灭 advance();//前进 } //如果距离大于60厘米 else { digitalWrite(led_advance,HIGH);//“前进”灯熄灭 digitalWrite(led_back,HIGH);//“后退”灯熄灭 Stop();//停止 } } delay(10); //延时 }
实验视频请看:
|