今天我们将制作一个Arduino控制的机器人。它有点类似于我之前的项目。唯一的区别是我没有使用陀螺仪传感器,而是使用了操纵杆模块。机器人使用 Rf (ASK) 发射器和接收器模块进行无线控制。这两个电路均由两个 Arduino 板组成,均使用 9 V 电池供电。
在职的 -
这个项目的工作非常简单。操纵杆模块为 X 和 Y 轴运动提供模拟值。然后借助各种 if else 语句将该值与设置值进行比较。并据此向接收方发送一个字符。就像在这种情况下,字符“a”被发送用于机器人的向前移动。
这些字符然后由另一端的 Rf 接收器接收。接收器的工作就是接收字符并将其发送到 Arduino。Arduino 然后根据发送的字符移动机器人。运动由 L293d 电机驱动模块控制。这是该项目的基本工作。现在让我们开始构建这个机器人。
购买耗材是任何项目的关键部分。最重要的是价格合适。为此,我建议您从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)
该项目的电路图非常简单。构建这个项目大约只需要 10 分钟。连接显示在上面的电路图中。操纵杆模块连接到两个模拟输入,发射器连接到数字引脚。这里我使用了 pin 12。你可以使用串行端口,但这会在上传草图时导致问题。因此,改为使用虚拟线库并将其他一些引脚设为 tx 引脚。
接收器部分由电机驱动模块和射频接收器组成。我们在这里再次使用了虚拟线库。如果接收到字符,则连接一个 LED 以获取状态。两块板均使用 9 V 电池供电。一个单独的电池用于为电机驱动模块供电。
现在让我们将草图上传到 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("");
}
}
上传代码后,连接电池并运行您的项目。如果机器人向操纵杆的相反方向移动,则只需交换电机线即可。
。如果您喜欢我制作的内容,请不要忘记与您的朋友分享这个教程。也关注我,因为我经常想出这样的项目。如果您对此项目有任何疑问,请在下方评论。我会尽力帮助你。就这样吧。看到你会与另一个很棒的项目。谢谢你。
.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !