我是靠谱客的博主 畅快煎蛋,最近开发中收集的这篇文章主要介绍自动跟随机器人教程(三)软件部分 (Arduino固件),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

接下来讲软件部分,软件主要分为三大块。一个是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固件)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部