Arduino蓝牙避障小车(新手做)

您所在的位置:网站首页 arduino如何接电源 Arduino蓝牙避障小车(新手做)

Arduino蓝牙避障小车(新手做)

#Arduino蓝牙避障小车(新手做)| 来源: 网络整理| 查看: 265

 

 

目录

 

前言

一、材料

二、连接

三、详解

中断:

类:

红外避障模块:

L298N:

HC-06蓝牙模块

四、图片

五、代码

1.行动的代码

2.避障的代码。

3.主代码

总结

 

前言

最近学了些许Arduino知识,加之老师要求用Arduino做出一点东西用来展示,所以自己做了一个Arduino小车来玩玩,使用了类与中断的概念,若有不足,敬请指正。

 

一、材料 4节南孚电池。L298N电机驱动板。面包板一块。Arduino uno 。两个红外避障模块。四个直流电机。小车套装。若干杜邦线。 二、连接

将电源连接在L298n的电源接口上面的电源接口上面(电源跳线不要拔掉否则有可能烧坏板),将左右两个轮字串联连接在控制板上面,将pwm跳线连接5v电源,将其他线接在Arduino板上.将两个红外避障传感器连接在面包板上面,进行连接。

电机买回来是不连接线的,需要拿锡焊,但是没有锡,实测拿热熔枪也可以进行连接,效果也不错。

三、详解 中断:

(使用外部中断:attachInterrupt(digitalPinTolnterrupt(pin,function,mode)))

中断分为三种:RESET中断、内部中断、外部中断。

1.RESET管脚接低电平,则中止中断,重启Arduino

2.设定内部定时器,当达到指定时间时,将产出中断请求,常常用于定时。

3.当Arduino内部中断管脚的电平变动时,将产生中断请求。

  其类似于在门口放置门铃,不需要一直等待有人敲门,而是做自己的事情,直到有人敲门,停止当前事情,前去开门,再继续自己的事情。

  注:编写ISR时:1.保持短。2.勿使用延时。3.不做连续输出。4.不要开关中断。

类:

“类”是一种特殊的函数,它和普通函数不同,它需要先对象化才能够使用,不管是特殊的函数“类”还是普通的函数,它们可以被打包成一个“库”。

我所认为的类则是自己写库,将一些代码封装在类中,当需要调用他们的时候,则是调用拥有这些代码的函数,这样在进行编程的时候可以更加容易且高效。

“类”就是一堆拥有特殊用途的“函数”,这些函数只能用在某一种特定的问题上。”

特征:1.封装2.继承3.多态。

红外避障模块:

 通过不断发出的红外线感知前方是否有物体,若有,则返回低电平,有则返回高电平。

 中间的调节旋钮可以调节测量距离以及频率。

L298N:

L298n具有两对电机驱动脚、一个电源输入口、GND口一对调速口和两对电机控制口。以他们来控制电机。

调速口打开后,可以使用电机控制口对电机进行PWM调速,它可以控制两个直流电机或者一个步进电机。

IN1/3   IN2/4     状态

  0             1           反

  1             0           正

HC-06蓝牙模块

HC-06蓝牙模块:

  通过四个引脚(VCC、GND、R/TX)与控制板连接。

  VCC:接电源(3.3V~6V)。

  TX:接Arduino RX;

  RX:接Arduino TX;(3.3V)

  GND:接地。

注:RX须接分压电路防止烧坏!

 

特有库:SoftwareSerial.h

串口:Btserial.begin(9600);

输出:BTserial.print();

 

四、图片

 

五、代码 1.行动的代码 #ifndef _XINGDONG_H_ #define _XINGDONG_H_ #include class movecar { public: pinjiao(char MODE);//定义模式 void moves(char modes) ; int getPin();//取得pin口 void setPin(int userPin);//设置pin口 private: int footPin = 2 ; }; class Pwmval:public movecar//定义子类 { public: int getPwmVal();//获得pwm口 pwmkaiguan(int pin1); void pwmjiao(int pin ); void pwmmoshi(int pwmVal); private: int pwmVal = 0;//定义口 }; #endif #include"xingdong.h" void movecar::setPin(int userPin)//设置pin口 { footPin = userPin; } int movecar::getPin()//获得pin口 { return footPin; } movecar::pinjiao(char MODE)//设置pin脚 { pinMode(getPin(),MODE); } void movecar::moves(char modes) { digitalWrite(getPin(),modes); } Pwmval::pwmkaiguan(int pin1)//选择口打开 { pinMode(pin1,OUTPUT); } void Pwmval::pwmjiao(int pin )//控制调速口开关 { digitalWrite(pin,HIGH); } void Pwmval::pwmmoshi(int userpwm)//第一个调速 { pwmVal=userpwm; analogWrite(getPin(),pwmVal); } int Pwmval::getPwmVal(){ return pwmVal; } 2.避障的代码。 #include"xingdong.h" void movecar::setPin(int userPin)//设置pin口 { footPin = userPin; } int movecar::getPin()//获得pin口 { return footPin; } movecar::pinjiao(char MODE)//设置pin脚 { pinMode(getPin(),MODE); } void movecar::moves(char modes) { digitalWrite(getPin(),modes); } Pwmval::pwmkaiguan(int pin1)//选择口打开 { pinMode(pin1,OUTPUT); } void Pwmval::pwmjiao(int pin )//控制调速口开关 { digitalWrite(pin,HIGH); } void Pwmval::pwmmoshi(int userpwm)//第一个调速 { pwmVal=userpwm; analogWrite(getPin(),pwmVal); } int Pwmval::getPwmVal(){ return pwmVal; } #include"bizhang.h" void bizhang::setPin(int userPin)//设置避障口 { bizhangkou = userPin; } int bizhang::getPin()//获得避障口 { return bizhangkou; } bizhang::bizhang1pin(int Pin)//选择模式 { pinMode(Pin,INPUT); } int bizhang::fanshe() { int jieguo=digitalRead(getPin()); return jieguo; } void bizhang::bizhang1(char modes)//启动口 { digitalWrite(getPin(),modes); } 3.主代码 #include //定义自己的库 #include//定义库函数 #include//定义自己的库 int tx = 12;//蓝牙write int rx = 13;//蓝牙read SoftwareSerial BTserial(rx,tx);//设置串口输入输出引脚 bizhang mybizhangLeft;//定义两个反射模块名字 bizhang mybizhangRight;// Pwmval myPwmval1;//定义四个pwm名字 Pwmval myPwmval2;// Pwmval myPwmval3;// Pwmval myPwmval4;// void zuohouzhuan() { myPwmval1.moves(HIGH);//定义第一个是开或关。 myPwmval2.moves(LOW);//定义第二个是开或关。 myPwmval1.pwmmoshi(80); myPwmval2.pwmmoshi(0); myPwmval3.moves(LOW);//定义第三个是开或关。 myPwmval4.moves(HIGH);//定义第四个是开或关。 myPwmval3.pwmmoshi(0); myPwmval4.pwmmoshi(250); delayMicroseconds(1000000); } void youhouzhuan() { myPwmval1.moves(LOW);//定义第一个是开或关。 myPwmval2.moves(HIGH);//定义第二个是开或关。 myPwmval1.pwmmoshi(0); myPwmval2.pwmmoshi(250); myPwmval3.moves(HIGH);//定义第三个是开或关。 myPwmval4.moves(LOW);//定义第四个是开或关。 myPwmval3.pwmmoshi(80); myPwmval4.pwmmoshi(0); delayMicroseconds(1000000); } void zuoganzhi() { zuohouzhuan(); } void youganzhi() { youhouzhuan(); } void setup() { mybizhangLeft.setPin(11);//设置引脚打开 mybizhangRight.setPin(7);// myPwmval1.setPin(10);//设置引脚* myPwmval2.setPin(5); myPwmval3.setPin(6); myPwmval4.setPin(9); myPwmval1.pinjiao(OUTPUT);//输入左一引脚,选择开或关。* myPwmval2.pinjiao(OUTPUT);//左二 myPwmval3.pinjiao(OUTPUT);//右一 myPwmval4.pinjiao(OUTPUT);//右二 myPwmval3.pwmkaiguan(8);//开关口 myPwmval4.pwmkaiguan(8);// myPwmval1.pwmkaiguan(4);// myPwmval2.pwmkaiguan(4);// myPwmval1.pwmjiao(4);//左调速 myPwmval2.pwmjiao(4);//左调速 myPwmval3.pwmjiao(8);//右调速 myPwmval4.pwmjiao(8);//右调速 BTserial.println("hc_06 is started"); BTserial.begin(9600);//蓝牙串口设置 delay(200);//延时200ms之后再行动 Serial.begin(9600);//串口设置 } void qianjin(int ti) { myPwmval1.moves(HIGH);//定义第一个是开或关。 myPwmval2.moves(LOW);//定义第二个是开或关。 myPwmval1.pwmmoshi(250); myPwmval2.pwmmoshi(0); myPwmval3.moves(HIGH);//定义第三个是开或关。 myPwmval4.moves(LOW);//定义第四个是开或关。 myPwmval3.pwmmoshi(250); myPwmval4.pwmmoshi(0); delay(ti*1000); } void houtui(int ti) { myPwmval1.moves(LOW);//定义第一个是开或关。 myPwmval2.moves(HIGH);//定义第二个是开或关。 myPwmval1.pwmmoshi(0); myPwmval2.pwmmoshi(250); myPwmval3.moves(LOW);//定义第三个是开或关。 myPwmval4.moves(HIGH);//定义第四个是开或关。 myPwmval3.pwmmoshi(0); myPwmval4.pwmmoshi(250); delay(ti*1000); } void zuoqianzhuan(int ti) { myPwmval1.moves(LOW);//定义第一个是开或关。 myPwmval2.moves(HIGH);//定义第二个是开或关。 myPwmval1.pwmmoshi(0); myPwmval2.pwmmoshi(80); myPwmval3.moves(HIGH);//定义第三个是开或关。 myPwmval4.moves(LOW);//定义第四个是开或关。 myPwmval3.pwmmoshi(250); myPwmval4.pwmmoshi(0); delay(ti*1000); } void youqianzhuan(int ti) { myPwmval1.moves(HIGH);//定义第一个是开或关。 myPwmval2.moves(LOW);//定义第二个是开或关。 myPwmval1.pwmmoshi(250); myPwmval2.pwmmoshi(0); myPwmval3.moves(LOW);//定义第三个是开或关。 myPwmval4.moves(HIGH);//定义第四个是开或关。 myPwmval3.pwmmoshi(0); myPwmval4.pwmmoshi(80); delay(ti*1000); } void tingzhi(int ti) { myPwmval1.moves(LOW);//定义第一个是开或关。 myPwmval2.moves(LOW);//定义第二个是开或关。 myPwmval1.pwmmoshi(0); myPwmval2.pwmmoshi(0); myPwmval3.moves(LOW);//定义第三个是开或关。 myPwmval4.moves(LOW);//定义第四个是开或关。 myPwmval3.pwmmoshi(0); myPwmval4.pwmmoshi(0); delay(ti*1000); } void bizhangmove()//定义避障函数 { int s=1; while(s==1) { qianjin(); attachInterrupt(digitalPinToInterrupt(2),zuoganzhi,FALLING); attachInterrupt(digitalPinToInterrupt(3),youganzhi,FALLING); while(BTserial.available()>0) s=0; } } void loop() { char mode; mode=BTserial.read(); switch(mode) { case'1':qianjin(1);break; case'2':zuoqianzhuan(2);break; case'3':houtui(1);break; case'4':youqianzhuan(1);break; case'5':tingzhi(1);break; case'6':bizhangmove();break; } }

 

 

 

 

总结

这些就是我做的蓝牙智能小车的全部内容,欢迎各位有兴趣的朋友点评、交流



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3