×

制作Arduino控制的机器人

消耗积分:0 | 格式:zip | 大小:0.04 MB | 2023-07-06

分享资料个

描述

今天我们将制作一个Arduino控制的机器人。它有点类似于我之前的项目。唯一的区别是我没有使用陀螺仪传感器,而是使用了操纵杆模块。机器人使用 Rf (ASK) 发射器和接收器模块进行无线控制。这两个电路均由两个 ​​Arduino 板组成,均使用 9 V 电池供电。

在职的 -

这个项目的工作非常简单。操纵杆模块为 X 和 Y 轴运动提供模拟值。然后借助各种 if else 语句将该值与设置值进行比较。并据此向接收方发送一个字符。就像在这种情况下,字符“a”被发送用于机器人的向前移动。

这些字符然后由另一端的 Rf 接收器接收。接收器的工作就是接收字符并将其发送到 Arduino。Arduino 然后根据发送的字符移动机器人。运动由 L293d 电机驱动模块控制。这是该项目的基本工作。现在让我们开始构建这个机器人。

第 1 步:获取耗材!!!

poYBAGOILIyAGNZDAAGa7zmoOHI023.jpg
 

购买耗材是任何项目的关键部分。最重要的是价格合适。为此,我建议您从UTSource.net网站购买它们。他们以低成本和快速运输提供优质组件。他们还为制造商和原型制造商提供高质量的 PCB。现在就去看看他们,并利用他们免费的一个月 Plus 会员试用,这给客户带来了很多好处。

现在让我们快速浏览一下构建这个机器人所需的东西:

1. Arduino Uno 开发板 x 2

2.摇杆模组x 1

3. 射频发射和接收模块 x 1

4. 电机驱动模块 (L293D) x 1

5. 面包板 x 2

6. 带轮子和电机的金属底盘。

7.带领

8. 头线

9.电池(9V)

第 2 步:电路图

pYYBAGOILJGASdlWAAB7lIxlFpI873.jpg
 

该项目的电路图非常简单。构建这个项目大约只需要 10 分钟。连接显示在上面的电路图中。操纵杆模块连接到两个模拟输入,发射器连接到数字引脚。这里我使用了 pin 12。你可以使用串行端口,但这会在上传草图时导致问题。因此,改为使用虚拟线库并将其他一些引脚设为 tx 引脚。

接收器部分由电机驱动模块和射频接收器组成。我们在这里再次使用了虚拟线库。如果接收到字符,则连接一个 LED 以获取状态。两块板均使用 9 V 电池供电。一个单独的电池用于为电机驱动模块供电。

第 3 步:上传草图

 
 
 
poYBAGOILJSATYVOAABH_Z8AILU764.jpg
 
1 / 2
 

现在让我们将草图上传到 Arduino 板上。你可以从下面得到草图。

// 发送器代码

#include 
const int X_AX = A0;
const int Y_AX = A1;
void setup()
{
  Serial.begin(9600);    
  Serial.println("setup");
  vw_setup(2000); 
  vw_set_tx_pin(12); 
}
void loop()
{
  int xval = analogRead(X_AX);
  int yval = analogRead(Y_AX);
  if(xval<=261&&xval>=0)
  {
   char *msg2 = "a";//send a to the receiver
   vw_send((uint8_t *)msg2, strlen(msg2));
   vw_wait_tx();
   Serial.println("a");
  }
  else if(xval<=1023&&xval>=782)
  {
   char *msg2 = "b";
   vw_send((uint8_t *)msg2, strlen(msg2));
   vw_wait_tx();
   Serial.println("b");
  }
  else if(yval<=261&&yval>=0)
  {
   char *msg2 = "c";
   vw_send((uint8_t *)msg2, strlen(msg2));
   vw_wait_tx(); 
   Serial.println("c");
  }
  else if(yval<=1023&&yval>=782)
  {
   char *msg2 = "d";
   vw_send((uint8_t *)msg2, strlen(msg2));
   vw_wait_tx(); 
   Serial.println("d");
  }
  else 
  {
   char *msg2 = "e";
   vw_send((uint8_t *)msg2, strlen(msg2));
   vw_wait_tx(); 
   Serial.println("e");
  }
}
// RECIEVER CODE
#include //Motor A right
const int motorPin1  = 9;  // Pin 9 of L293D
const int motorPin2  = 10;  // Pin 10 of L293D
//Motor B left
const int motorPin3  = 11; // Pin  11 of L293D
const int motorPin4  = 12;  // Pin 12 of L293D
void setup()
{
    Serial.begin(9600); 
    Serial.println("setup");
    vw_setup(2000);  
    vw_set_rx_pin(8);    
    vw_rx_start();      
    pinMode(13, OUTPUT);
    //digitalWrite(13, HIGH);
    pinMode(motorPin1, OUTPUT); 
    pinMode(motorPin2, OUTPUT);
    pinMode(motorPin3, OUTPUT);
    pinMode(motorPin4, OUTPUT);
}if (vw_get_message(buf, &buflen)) 
    {
  int i;
  for (i = 0; i < buflen; i++)
  {
     if(buf[i] == 'a')//if button a is pressed.... i.e.forward buton
      {
        digitalWrite(13, HIGH);
        Serial.println("Forward");
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, HIGH);//FORWARD
        digitalWrite(motorPin3, LOW );
        digitalWrite(motorPin4, HIGH);
      }
     if(buf[i] == 'b')
      {
        digitalWrite(13, HIGH);
        Serial.println("Backward");
        digitalWrite(motorPin1, HIGH);
        digitalWrite(motorPin2, LOW);//REVERSE
        digitalWrite(motorPin3, HIGH);
        digitalWrite(motorPin4, LOW);
      }
      if(buf[i] == 'c')
      {
        digitalWrite(13, HIGH);
        Serial.println("Left");
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);//LEFT
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, HIGH);
      }
     if(buf[i] == 'd')
      {
        digitalWrite(13, HIGH);
        Serial.println("Right");
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, HIGH);//RIGHT
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
      }
     if(buf[i] == 'e')
      {
        digitalWrite(13, LOW);
        Serial.println("Stop");
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);//STOP
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
      }
      Serial.print(" ");
  }
  Serial.println("");
}
}

上传代码后,连接电池并运行您的项目。如果机器人向操纵杆的相反方向移动,则只需交换电机线即可。

第 4 步:项目的运作

 

如果您喜欢我制作的内容,请不要忘记与您的朋友分享这个教程。也关注我,因为我经常想出这样的项目。如果您对此项目有任何疑问,请在下方评论。我会尽力帮助你。就这样吧。看到你会与另一个很棒的项目。谢谢你。

.


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !