智能小车-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3124|回复: 0

[分享] 智能小车

[复制链接]
发表于 2018-11-21 18:16 | 显示全部楼层 |阅读模式

     智能小车
功能:能实现避障和寻线。
原理:利用传感器收取周围环境的反馈信息,判断  输出高低电位控制电机轮。
器件:Arduino  控制板×1
         传感器拓展板×1
         L298电机驱动板×1
         小车车体套件×1   
尼龙柱   传感器3p杜邦线若干 螺丝螺帽
控制流程:
小车的红外传感器检测到黑线位置后发送给控制器,控制器判断应该要如何行走,再通过电机驱动控制电机转速和方向来改变小车的行驶方向

[/table]file:///C:/Users/Administrator.OULPZ11IR0KQ3TG/AppData/Local/Temp/msohtmlclip1/01/clip_image001.giffile:///C:/Users/Administrator.OULPZ11IR0KQ3TG/AppData/Local/Temp/msohtmlclip1/01/clip_image002.giffile:///C:/Users/Administrator.OULPZ11IR0KQ3TG/AppData/Local/Temp/msohtmlclip1/01/clip_image003.giffile:///C:/Users/Administrator.OULPZ11IR0KQ3TG/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif
控制流程:
小车的红外传感器检测到障碍物后发送给控制器,控制器判断应该要如何行走,再通过电机驱动控制电机转速和方向来改变小车的行驶方向。
避障:

[table]
              
      

   
   

   

     

程序:
int sum[3];
int summ[3];
int ina=4;   电机正转或反转
int pwma=5;   电机转速
int inb=7;
int pwmb=6;
定义motospd函数
void motospd(intsp1,int sp2)
{
  if(sp1<0)
digitalWrite(ina,HIGH);
else
digitalWrite(ina,LOW);
if(sp2<0)
digitalWrite(inb,HIGH);
else
digitalWrite(inb,LOW);
analogWrite(pwma,abs(sp1));
analogWrite(pwmb,abs(sp2));
  }
void setup() {
pinMode(11,INPUT);
pinMode(12,INPUT);
pinMode(13,INPUT);
pinMode(A2,INPUT);//zuobian
pinMode(A3,INPUT);
pinMode(A4,INPUT);
Serial.begin(9600);
pinMode(ina,OUTPUT);
pinMode(inb,OUTPUT);
}
void loop() {
sum[0]=digitalRead(11);
sum[1]=digitalRead(12);
sum[2]=digitalRead(13);
summ[0]=digitalRead(A4);
summ[1]=digitalRead(A3);
summ[2]=digitalRead(A2);
for(inti;i<3;i++)
{Serial.print(sum);
Serial.print(summ);}
避障部分
if((sum[0]==1)&&(sum[1]==1)&&(sum[2]==1))
motospd(170,155);
if((sum[0]==0)&&(sum[1]==1)&&(sum[2]==1))
{motospd(-150,135);delay(380);}
if((sum[0]==1)&&(sum[1]==1)&&(sum[2]==0))
{motospd(150,-135);delay(380);}
if((sum[0]==0)&&(sum[1]==0)&&(sum[2]==0))
{
motospd(150,-135);
delay(600);}
if((sum[0]==1)&&(sum[1]==0)&&(sum[2]==1))
{
motospd(150,0);
delay(650);}
if((sum[0]==0)&&(sum[1]==0)&&(sum[2]==1))
{motospd(0,150);delay(500);}
if((sum[0]==1)&&(sum[1]==0)&&(sum[2]==0))
{motospd(150,0);delay(500);}
if((sum[0]==0)&&(sum[1]==1)&&(sum[2]==0))
{
motospd(170,155);
}
寻线部分
if((summ[0]==0)&&(summ[1]==1)&&(summ[2]==1))
{motospd(120,0);delay(100);}
elseif((summ[0]==0)&&(summ[1]==0)&&(summ[2]==0))
while(1)
{motospd(0,0);}
elseif((summ[0]==1)&&(summ[1]==1)&&(summ[2]==0))
{motospd(0,120);delay(100);}
else
motospd(170,155);
}
总结:通过这次对小车的设计,对Arduino有了全新的认识,看似简单实则很难。
项目中遇到的问题:小车在转弯时头会卡住,可以改变红外传感器的感应距离,并调整两个电机的转速。


UW~(D{0]}R331}NEO~S$3@M.png
O5%DVU_VP)N%}BK)IH7XAJC.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 20:51 , Processed in 0.076584 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表