电子说
Maker: Markus Opitz/译:趣无尽 Cherry(转载请注明出处)
蚂蚁是一种神奇的多足生物,它们只需要很少的资源,就可以做很多事情。本期项目中的蚂蚁机器人是基于 ESP32 开发的。
一般来说,许多六条腿的机器人每条腿最多需要三个舵机,那么总共就需要 18 个舵机,这会消耗了大量的能量,也与蚂蚁本身的体型相冲突。
但在这个项目中只用到三个舵机、一个夹具和一点机械设备,就实现了一只极简主义的蚂蚁机器人,除开电池,重量约 114 克。
组件清单
SG90 舵机 x 3
ESP32-C3 XIAO 或其他 ESP32/ESP8266 板 x 1
回形针 x 若干
小螺丝 x 若干
5V 降压转换器 MP1584 x 1
9V 或 7.4LiPo 电池 x 1
3D 打印部件
所有的零部件使用 Tinkercad 设计并使用 Ultimaker Cura 制作。
安装蚂蚁躯干部分
使用钳子或者锯和锉刀拆下所有舵机上的凸舌。
如图所示,将打印底部支架用两个尖头螺钉固定到舵机 2 上,舵机的中间是可以摆动。它还有一个小盖子,稍后用螺丝固定。
再用热胶固定舵机 1 和舵机 3 以及舵机 2 的盖子。
安装腿部零件之前,舵机必须居中。因此,可以使用小程序 centregs.ino 将舵机设置为 90。
安装舵机和腿部
每个舵机带动一对腿,前后移动几度。舵机 1 和舵机 3 会同时移动,所以可以考虑在微控制器上使用相同的引脚去控制。
舵机 2 是以相反的方向移动,并且摆动时会将腿正确的牵引到地面。这种摆动是由连接到舵机 1 的回形针产生的。
将每个支腿安装到舵机上,可能还需要钻孔。
安装机械部分
安装时使用螺钉和回形针,通过腿的安装板将舵机 1 连接到舵机 2 的盖子上。这样就可以跟舵机 1 同步同角度倾斜。
安装头部和夹子
头部的夹子造型其实不是必须的,但它有很好的额外功能。
将不带臂的舵机安装到框内。首先将舵机设置为 90(可参考 centreslegs.ino)。将合适的夹子零件放在齿轮上,并用舵机螺钉固定。然后把第二部分放在轴上。
用热胶水将夹子倒置地粘在头部,然后合上头部。把头放在躯干的顶部,并用胶水粘牢。
安装尾部电池
将尾部连接到躯干上并粘合。它将容纳电池和微控制器。
电路和软件
9V 的电池能够为舵机提供足够的能量,但电压必须通过降压转换器降低到 5V。
四个舵机的电源通过 5V 并联运行,数据线连接到 ESP32 开发板。它不需要更多的连接。不过,它还可以连接到传感器或 LED。
将文件名为 “Blue_Ant-RemoteXY.ino” 传输到 ESP32 开发板。同时遥控器已经包含在程序中。可参考Getting-Started-With-ESP32-C3-XIAO
适用于 ESP32-C3 的舵机库:ESP32C3Servo
/* / Blue Ant (2023) Markus Opitz */ // ************ RemoteXY ************* #define REMOTEXY_MODE__ESP32CORE_BLE #include#include // RemoteXY connection settings #define REMOTEXY_BLUETOOTH_NAME "ESP32-C3_Remote" // RemoteXY configurate #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = // 43 bytes { 255,3,0,0,0,36,0,16,202,1,5,32,17,37,30,30,2,26,24,4, 128,13,23,37,6,2,78,129,0,3,3,24,6,165,66,108,117,101,32,65, 110,116,0 }; // this structure defines all the variables and events of your control interface struct { // input variables int8_t joystick_1_x; // from -100 to 100 int8_t joystick_1_y; // from -100 to 100 int8_t slider_1; // =0..100 slider position // other variable uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop) // ************************* // ************************* Servos #include Servo servo1; Servo servo2; Servo servo3; // Servo3 is attacheched to same pin as Servo1 !!! Servo Jaws; int pos1, pos2; // variable to store the servo position int centerpos = 90; int minpos = centerpos-12; int maxpos = centerpos+12; int gripper; //int speed1; void setup() { Serial.begin(115200); servo1.attach(2); servo2.attach(3); servo3.attach(4); //Servo3 can be attached to same pin as Servo1 //GPIOs on ESP32-C3! Jaws.attach(5); delay(2); servo1.write(centerpos);servo2.write(centerpos-7);servo3.write(centerpos); //center all servos Jaws.write(centerpos); delay(3000); RemoteXY_Init (); } void loop() { RemoteXY_Handler (); if ((RemoteXY.joystick_1_x) < -30) { //Serial.println("<-- left "); left(16); } if ((RemoteXY.joystick_1_x) > 30) { //Serial.println(" right -->"); right(16); } if ((RemoteXY.joystick_1_y) < -30) { //Serial.println(" backwards "); // not yet installed } if ((RemoteXY.joystick_1_y) > 30) { //Serial.println(" ^forward^ "); forward(16); } gripper = map((RemoteXY.slider_1), 0, 100, 75,105); Jaws.write(gripper); delay(1); } void forward(int speed1) { //speed1 in ms as delay between steps for (pos1 = minpos; pos1 <= maxpos; pos1 += 2) { pos2 = map(pos1, minpos, maxpos, maxpos, minpos); servo1.write(pos1);servo3.write(pos1);Serial.print(pos1);Serial.print(" "); // front/rear legs servo2.write(pos2); Serial.print(pos2); Serial.println(""); // center legs delay(speed1); } for (pos1 = maxpos; pos1 >= minpos; pos1 -= 2) { pos2 = map(pos1, minpos, maxpos, maxpos, minpos); servo1.write(pos1);servo3.write(pos1); // front/rear legs servo2.write(pos2); delay(speed1); } } void right(int speed1) { //speed1 in ms as delay between steps for (pos1 = minpos; pos1 <= maxpos; pos1 += 2) { pos2 = map(pos1, minpos, maxpos, maxpos, minpos); servo1.write(pos1+10);servo3.write(pos1+10); // front/rear legs servo2.write(pos2+10); // center legs delay(speed1); } for (pos1 = maxpos; pos1 >= minpos; pos1 -= 1) { pos2 = map(pos1, minpos, maxpos, maxpos, minpos); servo1.write(pos1+10);servo3.write(pos1+10); // front/rear legs servo2.write(pos2+10); delay(speed1); } } void left(int speed1) { //speed1 in ms as delay between steps //pos2 = maxpos + 1 -7; //-8 is to correct center position for (pos1 = minpos; pos1 <= maxpos; pos1 += 1) { pos2 = map(pos1, minpos, maxpos, maxpos, minpos); servo1.write(pos1-10);servo3.write(pos1-10); // front/rear legs servo2.write(pos2-10); // center legs delay(speed1); } for (pos1 = maxpos; pos1 >= minpos; pos1 -= 2) { pos2 = map(pos1, minpos, maxpos, maxpos, minpos); servo1.write(pos1-10);servo3.write(pos1-10); // front/rear legs servo2.write(pos2-10); delay(speed1); } }
源码文件在这里可以下载:
https://make.quwj.com/project/475
远程控制
遥控器已包含在代码中。
在 https://remotexy.com/ 中,你可以为智能手机遥控器创建自己的界面,并将其插入到程序“Blue_Ant-RemoteXY.ino” 中。
在智能手机上安装应用程序,激活蓝牙,打开 “RemoteXY”,搜索并与配对 “ESP32-C3_Remote” 。
完成
现在你可以启动这只蚂蚁,等待片刻,激活应用程序,它就可以跑起来了。
全部0条评论
快来发表一下你的评论吧 !