概述
接下来讲软件部分,软件主要分为三大块。一个是Arduino上跑的单片机程序,另一个是树莓派上跑的程序,最后是电脑上跑的程序(如果是用电脑远程遥控就需要这些程序,如果是树莓派自主运行就不需要,但是调试阶段建议这段程序也用一下,调得差不多了再完全自主运行)。
首先讲最简单的Arduino程序。
由于Arduino Uno本身是一个比较简单的单片机,跑不了太复杂的程序,所以上面运行的代码也比较简单。就是两部分功能,一个是通过串口指令对电机控制的代码,另一个是获得超声波传感器的距离信息的代码。
第一部分的主要实现方式是在loop函数中不断读串口,根据串口数据的要求去控制4个引脚信号的高低,这样可以控制电机转动方向或者停止不动。
第二部分的超声波模块可以参照 http://www.alsrobot.cn/wiki/index.php/(SKU:RB-02S001A)RB_URF02超声波传感器
本人的建议是初期手动控制小车时,可以参照电机控制代码去读取超声波数据,不要在loop里不停读取,自动运行时才在loop里不停调用超声波读取代码。
int led = 13;
float duration;
float distance;
int srfPin = 8;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}
void loop()
{
delay(100); // wait for a second
if (Serial.available()>0)
{
char cmd = Serial.read();
//Serial.print(cmd);
switch (cmd)
{
case '1':
Forward();
break;
case '2':
Back();
break;
case '3':
Turn_left();
break;
case '4':
Turn_right();
break;
case '6':
Measure();
default:
Stop();
}
}
}
void Forward()
{
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
void Back()
{
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
}
void Turn_right()
{
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
void Turn_left()
{
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
}
void Stop()
{
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
}
void Measure()
{
pinMode(srfPin, OUTPUT);
digitalWrite(srfPin, LOW);
delayMicroseconds(2);
digitalWrite(srfPin, HIGH);
delayMicroseconds(10);
digitalWrite(srfPin, LOW);
pinMode(srfPin, INPUT);
duration = pulseIn(srfPin, HIGH);
distance = duration/58;
Serial.println(distance);
delay(50);
}
最后
以上就是畅快煎蛋为你收集整理的自动跟随机器人教程(三)软件部分 (Arduino固件)的全部内容,希望文章能够帮你解决自动跟随机器人教程(三)软件部分 (Arduino固件)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复