Arduino避障小车控制程序设计
2019-12-19张兴华庄国锐
张兴华,庄国锐
Arduino避障小车控制程序设计
张兴华,庄国锐
(广东白云学院 机电工程学院,广东广州,510450)
本文介绍了Arduino UNO微控制器控制的智能避障小车的控制程序,小车主控制器采用Arduino UNO,左右前轮采用直流电机驱动,后轮是从动万向轮。舵机驱动的云台上放置一个超声波传感器。可以自动避障。
Arduino;智能小车;舵机云台;自动避障
引言
随着现代计算机技术的不断发展和普及,机器人的发展已经遍及近年来机器人的智能水平不断提高,并且迅速的改变着人们的生活方式。
智能小车主控制器采用Arduino UNO,三轮结构,左右前轮采用直流电机驱动,后轮是从动万向轮。舵机驱动的云台上放置一个超声波传感器。
#include
#include
LiquidCrystal lcd(13,12,7,6,5,4,3);
int Echo = A1; int Trig =A0;
int F_D = 0;int L_D = 0;int R_D = 0;
int L_m_b=8;int L_m_g=9; //左电机后退(IN1)
//左电机前进(IN2)
int R_m_g=10; // 右电机前进(IN3)
int R_m_b=11; // 右电机后退(IN4)
int key=A2;int sp=2;
int ang,pw,v;
void setup(){
Serial.begin(9600); // 初始化串口
pinMode(L_m_g,OUTPUT);//PIN8 pinMode(L_m_b,OUTPUT); // PIN 9
pinMode(R_m_g,OUTPUT);// PIN 10
pinMode(R_m_b,OUTPUT);//PIN 11
pinMode(key,INPUT); pinMode(beep,OUTPUT);
pinMode(Echo, INPUT); // 超声波输入脚
pinMode(Trig, OUTPUT); // 超声波输出脚
lcd.begin(16,2);//初始化液晶
pinMode(sp,OUTPUT);}//舵机接口
void run(int time){
digitalWrite(R_m_g,HIGH); digitalWrite(R_m_b,LOW);
analogWrite(R_m_g,165);//PWM调速
analogWrite(R_m_b,0);
digitalWrite(L_m_g,HIGH); digitalWrite(L_m_b,LOW);
analogWrite(L_m_g,115); analogWrite(L_m_b,0);
delay(time * 100);} //执行时间,可调整
void brake(int time); //刹车,停车
void left(int time);//左轮不动,右轮前进
void spin_left(int time);
void right(int time);void back(int time);
void spin_right(int time);
float D_test(){
digitalWrite(Trig, LOW);
delayMicroseconds(2);// 延时2μs
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
float FD = pulseIn(Echo, HIGH);
FD= FD/58; return FD;}
void D_display(int D){
if((2 lcd.home();lcd.print(" D: "); //显示 lcd.setCursor(6,2);//光标定位在第2行 lcd.print(D);lcd.print("cm"); } else{ lcd.home();lcd.print("Out of range"); } delay(250); lcd.clear();} Void servopulse(int sp,int ang){//servopin pw=(ang*11)+500;//将角度对应500~2480值 digitalWrite(sp,HIGH); delayMicroseconds(pw);//延时微秒数 digitalWrite(sp,LOW); delay(20-pw/1000);}//延时毫秒数 void front_detection(){ for(int i=0;i<=5;i++) //延时以转到角度 servopulse(sp,90); F_D = D_test();} void left_detection(){ for(int i=0;i<=15;i++) servopulse(sp,175); L_D = D_test();} void right_detection(){ for(int i=0;i<=15;i++) servopulse(sp,5); R_D = D_test();} void loop(){ while(1) { front_detection();//测量前方距离 if(F_D < 32){ back(2);brake(2); left_detection();D_display(L_D); right_detection();D_display(R_D); if((L_D < 35 ) &&( R_D < 35 )) spin_left(0.7);//旋转掉头 else if(L_D > R_D) {left(3);brake(1); } else if(L_D < R_D) {right(3);brake(1); } } else run(); //无障碍物,直行 } } 在未来的社会中智能也是大势所趋,只能机器人的发展水平可反应出一个国家的高科技水平和综合国力,是国家综合国力强大的标志,也是人类文明进步的标志。 [1] 《Make:Arduino Bots and Gadgets》Kimmo Karvinen,Tero Karvinen,O'Reilly. [2] 《爱上Arduino》Massimo Benzi,2014.05,人民邮电出版社。 [3] 赵云娥,吴振强.基于Arduino的双模式智能避障小车系统设计与实现[J].现代电子技术,2017,40(21):94-97. [4] 于洋. 基于Arduino的自动避障及通信控制智能小车系统的研究与设计[D].吉林大学,2017. [5] 卞云松.基于Arduino单片机的避障小车机器人[J].自动化技术与应用,2014,33(01):16-19. Control program design of Arduino vehicle for obstacle avoidance Zhang Xinghua, Zhuang Guorui Institute of mechanical and electrical engineering of Guangdong Baiyun University, Guangzhou 510450 This paper introduces the control program of the intelligent obstacle avoidance car controlled by Arduino UNO micro controller. The main controller of the car adopts Arduino UNO,the left and right front wheels are driven by DC motor and the rear wheel is a driven universal wheel. An ultrasonic sensor is placed on the platform driven by the steering gear. It can automatic obstacle avoidance. Arduino; intelligent car; steering gear pan; automatic obstacle avoidance. 10.19551/j.cnki.issn1672-9129.2019.03.038 TP212 A 1672-9129(2019)03-0110-02 张兴华,(1967-)男,硕士,工程师,广东白云学院。研究方向智能装备、工业机器人设计。E-mail:2209282216@qq.com。 庄国锐,(1995-)男,广东白云学院。材料成型及控制工程专业。E-mail:2209282216@qq.com。2 结束语: