听风说梦 发表于 2024-3-28 09:40:58

DIY推荐!基于 ESP32 做的三舵机机械蚂蚁

<div class=\"vditor-preview__action\"></div><div class=\"vditor-reset\"><p><img src=\"//file1.elecfans.com/web2/M00/C6/ED/wKgaomYEydSAJOlVAAyykGQxsTk968.jpg\" alt=\"图片\"></p>
<p>蚂蚁是一种神奇的生物,它们需要很少的资源,却能做很多的事情。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/EE/wKgaomYEydaAGOtvAGp5NOJfPUI433.jpg\" alt=\"\"></p>
<p>一般来说,许多六条腿的机器人每条腿最多需要三个舵机,那么总共就需要 18 个舵机,这会消耗了大量的能量,也与蚂蚁本身的体型相冲突。</p>
<p>但在这个项目中只用到三个舵机、一个夹爪和一点机械设备,就实现了一只极简主义的蚂蚁机器人,除开电池,重量约 114 克。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEylGAZ3weAANG5b4jKjE277.png\" alt=\"图片.png\"></p>
<h3>组件清单</h3>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/ED/wKgaomYEydWAVLstAAqvujw0DtQ587.jpg\" alt=\"图片\"></p>
<ul><li>SG90 舵机 x 3</li>
<li>ESP32/ESP8266 板 x 1</li>
<li>回形针 x 若干</li>
<li>小螺丝 x 若干</li>
<li>5V 降压转换器 MP1584 x 1</li>
<li>9V 或 7.4锂电池 x 1</li>
</ul><h3>3D 打印部件</h3>
<p>所有的零部件使用 Tinkercad 设计并使用 Ultimaker Cura 制作。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydWAGKkKAARkVC84pgc054.jpg\" alt=\"图片\"></p>
<p>3D 打印文件可以在文末下载。</p>
<h3>安装蚂蚁躯干部分</h3>
<p>使用钳子或者锯和锉刀拆下所有舵机上的凸起。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/EE/wKgaomYEydWAN0XZAATSs-qRusQ234.jpg\" alt=\"图片\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydSAYTWrAAUNqLp2eyI110.jpg\" alt=\"图片\"></p>
<p>如图所示,将打印底部支架用两个尖头螺钉固定到舵机 2 上,舵机的中间是可以摆动。它还有一个小盖子,稍后用螺丝固定。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/ED/wKgaomYEydSAUKDpAAUSdw7LWWo324.jpg\" alt=\"图片\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydSARn7zAAWL8iX6Wqk924.jpg\" alt=\"图片\"></p>
<p>再用热熔胶固定舵机 1 和舵机 3 以及舵机 2 的盖子。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/ED/wKgaomYEydSAMgcMAAfC2WvOoyc818.jpg\" alt=\"图片\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/EE/wKgaomYEydWAWejeAAVU4B_q_sQ351.jpg\" alt=\"图片\"></p>
<p>安装腿部零件之前,舵机必须居中。这边可以使用程序<code>&lt;span&gt;centregs.ino&lt;/span&gt;</code>(同样可以在文末下载)将舵机设置为<code>&lt;span&gt;90&lt;/span&gt;</code>。</p>
<h3>安装舵机和腿部</h3>
<p>每个舵机带动一对腿,前后移动几度。舵机 1 和舵机 3 会同时移动,所以可以考虑在微控制器上使用相同的引脚去控制。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydWAGiOPAATgVgP1eT4880.jpg\" alt=\"图片\"></p>
<p>舵机 2 是以相反的方向移动,并且摆动时会将腿正确的牵引到地面。这种摆动是由连接到舵机 1 的回形针产生的。将每个支腿安装到舵机上,这边你可能还需要钻孔。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydWAD7gKAAV2VpnEiEc479.jpg\" alt=\"图片\"></p>
<h3>安装机械部分</h3>
<p>安装时使用螺钉和回形针,通过腿的安装板将舵机 1 连接到舵机 2 的盖子上。这样就可以跟舵机 1 同步同角度倾斜。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydWAQjtQAAYpQMqCzFg142.jpg\" alt=\"图片\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydWAApJNAAYw-wiXAHU074.jpg\" alt=\"图片\"></p>
<h3>安装头部和夹子</h3>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydWAG6BkAAXEzZIk_D8079.jpg\" alt=\"图片\"></p>
<p>头部的夹子造型其实不是必须的,但它有很好的额外功能。</p>
<p>将不带臂的舵机安装到框内。首先将舵机设置为 90(可参考<code>&lt;span&gt;centreslegs.ino&lt;/span&gt;</code>)。将合适的夹子零件放在齿轮上,并用舵机螺钉固定。然后把第二部分放在轴上。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/ED/wKgaomYEydWAZaLsAAWob3WLjTs399.jpg\" alt=\"图片\"></p>
<p>用热胶水将夹子倒置地粘在头部,然后合上头部。把头放在躯干的顶部,并用胶水粘牢。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/ED/wKgaomYEydWAEbA_AAZPEGiS0v4037.jpg\" alt=\"图片\"></p>
<h3>安装尾部电池</h3>
<p>将尾部连接到躯干上并粘合。它将容纳电池和微控制器。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydSADHcxAAaCNZpXOrI711.jpg\" alt=\"图片\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/ED/wKgaomYEydSAH8sAAAZ5w58GqDM059.jpg\" alt=\"图片\"></p>
<h3>电路和软件</h3>
<p>9V 的电池能够为舵机提供足够的能量,但电压必须通过降压转换器降低到 5V。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydSATlFCAAafBr3I0l0800.jpg\" alt=\"图片\">四个舵机的电源通过 5V 并联运行,数据线连接到 ESP32 开发板。它不需要更多的连接。不过,它还可以连接到传感器或 LED。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/ED/wKgaomYEydWALFx5AATwufsi3cg045.jpg\" alt=\"图片\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydSAHV83AAO8Fi4iObQ883.jpg\" alt=\"图片\"></p>
<p>将文件名为<code>&lt;span&gt;Blue_Ant-RemoteXY.ino&lt;/span&gt;</code>传输到 ESP32 开发板。同时遥控器已经包含在程序中。可参考<code>&lt;span&gt;https://www.instructables.com/Getting-Started-With-ESP32-C3-XIAO/&lt;/span&gt;</code></p>
<p>适用于 ESP32-C3 的舵机库:<code>&lt;span&gt;ESP32C3Servo&lt;/span&gt;</code></p>
<p>如果你使用的是其他ESP32或ESP8266,你需要在<code>&lt;span&gt;// ************************* Servos&lt;/span&gt;</code>这块位置更改库:</p>
<pre><code class=\"hljs cpp vditor-linenumber\"><span class=\"hljs-comment\">/*
/ Blue Ant (2023) Markus Opitz
*/</span>
<span class=\"hljs-comment\">// ************ RemoteXY *************</span>
<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define</span> REMOTEXY_MODE__ESP32CORE_BLE</span>
<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include</span> <span class=\"hljs-meta-string\">&lt;BLEDevice.h&gt;</span></span>
<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include</span> <span class=\"hljs-meta-string\">&lt;RemoteXY.h&gt;</span></span>

<span class=\"hljs-comment\">// RemoteXY connection settings</span>
<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define</span> REMOTEXY_BLUETOOTH_NAME <span class=\"hljs-meta-string\">\"ESP32-C3_Remote\"</span></span>

<span class=\"hljs-comment\">// RemoteXY configurate</span>
<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">pragma</span> pack(push, 1)</span>
<span class=\"hljs-keyword\">uint8_t</span> RemoteXY_CONF[] =   <span class=\"hljs-comment\">// 43 bytes</span>
{ <span class=\"hljs-number\">255</span>,<span class=\"hljs-number\">3</span>,<span class=\"hljs-number\">0</span>,<span class=\"hljs-number\">0</span>,<span class=\"hljs-number\">0</span>,<span class=\"hljs-number\">36</span>,<span class=\"hljs-number\">0</span>,<span class=\"hljs-number\">16</span>,<span class=\"hljs-number\">202</span>,<span class=\"hljs-number\">1</span>,<span class=\"hljs-number\">5</span>,<span class=\"hljs-number\">32</span>,<span class=\"hljs-number\">17</span>,<span class=\"hljs-number\">37</span>,<span class=\"hljs-number\">30</span>,<span class=\"hljs-number\">30</span>,<span class=\"hljs-number\">2</span>,<span class=\"hljs-number\">26</span>,<span class=\"hljs-number\">24</span>,<span class=\"hljs-number\">4</span>,
<span class=\"hljs-number\">128</span>,<span class=\"hljs-number\">13</span>,<span class=\"hljs-number\">23</span>,<span class=\"hljs-number\">37</span>,<span class=\"hljs-number\">6</span>,<span class=\"hljs-number\">2</span>,<span class=\"hljs-number\">78</span>,<span class=\"hljs-number\">129</span>,<span class=\"hljs-number\">0</span>,<span class=\"hljs-number\">3</span>,<span class=\"hljs-number\">3</span>,<span class=\"hljs-number\">24</span>,<span class=\"hljs-number\">6</span>,<span class=\"hljs-number\">165</span>,<span class=\"hljs-number\">66</span>,<span class=\"hljs-number\">108</span>,<span class=\"hljs-number\">117</span>,<span class=\"hljs-number\">101</span>,<span class=\"hljs-number\">32</span>,<span class=\"hljs-number\">65</span>,
<span class=\"hljs-number\">110</span>,<span class=\"hljs-number\">116</span>,<span class=\"hljs-number\">0</span> };
<span class=\"hljs-comment\">// this structure defines all the variables and events of your control interface</span>
<span class=\"hljs-class\"><span class=\"hljs-keyword\">struct</span> {</span>

    <span class=\"hljs-comment\">// input variables</span>
<span class=\"hljs-keyword\">int8_t</span> joystick_1_x; <span class=\"hljs-comment\">// from -100 to 100</span>
<span class=\"hljs-keyword\">int8_t</span> joystick_1_y; <span class=\"hljs-comment\">// from -100 to 100</span>
<span class=\"hljs-keyword\">int8_t</span> slider_1; <span class=\"hljs-comment\">// =0..100 slider position</span>
    <span class=\"hljs-comment\">// other variable</span>
<span class=\"hljs-keyword\">uint8_t</span> connect_flag;<span class=\"hljs-comment\">// =1 if wire connected, else =0</span>
} RemoteXY;
<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">pragma</span> pack(pop)</span>
<span class=\"hljs-comment\">// *************************</span>

<span class=\"hljs-comment\">// ************************* Servos</span>
<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include</span> <span class=\"hljs-meta-string\">&lt;ESP32C3_Servo.h&gt;</span>   <span class=\"hljs-comment\">//for ESP32-C3</span></span>
<span class=\"hljs-comment\">//#include &lt;Servo.h&gt;         //for ESP8266</span>
<span class=\"hljs-comment\">//#include &lt;ESP32Servo.h&gt;    //for ESP32-Wroom</span>
Servo servo1;Servo servo2;Servo servo3;<span class=\"hljs-comment\">// Servo3 is attacheched to same pin as Servo1 !!!</span>
Servo Jaws;
<span class=\"hljs-keyword\">int</span> pos1, pos2;    <span class=\"hljs-comment\">// variable to store the servo position</span>
<span class=\"hljs-keyword\">int</span> centerpos = <span class=\"hljs-number\">90</span>;
<span class=\"hljs-keyword\">int</span> minpos = centerpos<span class=\"hljs-number\">-12</span>;
<span class=\"hljs-keyword\">int</span> maxpos = centerpos+<span class=\"hljs-number\">12</span>;
<span class=\"hljs-keyword\">int</span> gripper;
<span class=\"hljs-comment\">//int speed1;</span>


<span class=\"hljs-function\"><span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">setup</span><span class=\"hljs-params\">()</span> </span>{
Serial.<span class=\"hljs-built_in\">begin</span>(<span class=\"hljs-number\">115200</span>);
servo1.<span class=\"hljs-built_in\">attach</span>(<span class=\"hljs-number\">2</span>); servo2.<span class=\"hljs-built_in\">attach</span>(<span class=\"hljs-number\">3</span>); servo3.<span class=\"hljs-built_in\">attach</span>(<span class=\"hljs-number\">4</span>);<span class=\"hljs-comment\">//Servo3 can be attached to same pin as Servo1 //GPIOs on ESP32-C3!</span>
Jaws.<span class=\"hljs-built_in\">attach</span>(<span class=\"hljs-number\">5</span>);
<span class=\"hljs-built_in\">delay</span>(<span class=\"hljs-number\">2</span>);
servo1.<span class=\"hljs-built_in\">write</span>(centerpos);servo2.<span class=\"hljs-built_in\">write</span>(centerpos<span class=\"hljs-number\">-7</span>);servo3.<span class=\"hljs-built_in\">write</span>(centerpos);<span class=\"hljs-comment\">//center all servos</span>
Jaws.<span class=\"hljs-built_in\">write</span>(centerpos);
<span class=\"hljs-built_in\">delay</span>(<span class=\"hljs-number\">3000</span>);

<span class=\"hljs-built_in\">RemoteXY_Init</span> ();
}


<span class=\"hljs-function\"><span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">loop</span><span class=\"hljs-params\">()</span> </span>{
   <span class=\"hljs-built_in\">RemoteXY_Handler</span> ();

    <span class=\"hljs-keyword\">if</span> ((RemoteXY.joystick_1_x) &lt; <span class=\"hljs-number\">-30</span>) {
      <span class=\"hljs-comment\">//Serial.println(\"&lt;-- left   \");</span>
      <span class=\"hljs-built_in\">left</span>(<span class=\"hljs-number\">16</span>);
    }
    <span class=\"hljs-keyword\">if</span> ((RemoteXY.joystick_1_x) &gt; <span class=\"hljs-number\">30</span>) {
      <span class=\"hljs-comment\">//Serial.println(\"right --&gt;\");</span>
      <span class=\"hljs-built_in\">right</span>(<span class=\"hljs-number\">16</span>);
    }
    <span class=\"hljs-keyword\">if</span> ((RemoteXY.joystick_1_y) &lt; <span class=\"hljs-number\">-30</span>) {
      <span class=\"hljs-comment\">//Serial.println(\" backwards \");</span>
      <span class=\"hljs-comment\">// not yet installed</span>
    }
    <span class=\"hljs-keyword\">if</span> ((RemoteXY.joystick_1_y) &gt; <span class=\"hljs-number\">30</span>) {
      <span class=\"hljs-comment\">//Serial.println(\" ^forward^ \");</span>
      forward(<span class=\"hljs-number\">16</span>);
    }
    gripper = <span class=\"hljs-built_in\">map</span>((RemoteXY.slider_1), <span class=\"hljs-number\">0</span>, <span class=\"hljs-number\">100</span>, <span class=\"hljs-number\">75</span>,<span class=\"hljs-number\">105</span>);
    Jaws.<span class=\"hljs-built_in\">write</span>(gripper);
    <span class=\"hljs-built_in\">delay</span>(<span class=\"hljs-number\">1</span>);
}


<span class=\"hljs-function\"><span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">forward</span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int</span> speed1)</span> </span>{       <span class=\"hljs-comment\">//speed1 in ms as delay between steps</span>

<span class=\"hljs-keyword\">for</span> (pos1 = minpos; pos1 &lt;= maxpos; pos1 += <span class=\"hljs-number\">2</span>) {
    pos2 = <span class=\"hljs-built_in\">map</span>(pos1, minpos, maxpos, maxpos, minpos);

    servo1.<span class=\"hljs-built_in\">write</span>(pos1);servo3.<span class=\"hljs-built_in\">write</span>(pos1);Serial.<span class=\"hljs-built_in\">print</span>(pos1);Serial.<span class=\"hljs-built_in\">print</span>(<span class=\"hljs-string\">\"\"</span>);<span class=\"hljs-comment\">// front/rear legs</span>
    servo2.<span class=\"hljs-built_in\">write</span>(pos2);Serial.<span class=\"hljs-built_in\">print</span>(pos2); Serial.<span class=\"hljs-built_in\">println</span>(<span class=\"hljs-string\">\"\"</span>);                  <span class=\"hljs-comment\">// center legs</span>
    <span class=\"hljs-built_in\">delay</span>(speed1);
}

<span class=\"hljs-keyword\">for</span> (pos1 = maxpos; pos1 &gt;= minpos; pos1 -= <span class=\"hljs-number\">2</span>) {
    pos2 = <span class=\"hljs-built_in\">map</span>(pos1, minpos, maxpos, maxpos, minpos);

    servo1.<span class=\"hljs-built_in\">write</span>(pos1);servo3.<span class=\"hljs-built_in\">write</span>(pos1);      <span class=\"hljs-comment\">// front/rear legs</span>
    servo2.<span class=\"hljs-built_in\">write</span>(pos2);
    <span class=\"hljs-built_in\">delay</span>(speed1);
}
}


<span class=\"hljs-function\"><span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">right</span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int</span> speed1)</span> </span>{         <span class=\"hljs-comment\">//speed1 in ms as delay between steps</span>

<span class=\"hljs-keyword\">for</span> (pos1 = minpos; pos1 &lt;= maxpos; pos1 += <span class=\"hljs-number\">2</span>) {
    pos2 = <span class=\"hljs-built_in\">map</span>(pos1, minpos, maxpos, maxpos, minpos);

    servo1.<span class=\"hljs-built_in\">write</span>(pos1+<span class=\"hljs-number\">10</span>);servo3.<span class=\"hljs-built_in\">write</span>(pos1+<span class=\"hljs-number\">10</span>);<span class=\"hljs-comment\">// front/rear legs</span>
    servo2.<span class=\"hljs-built_in\">write</span>(pos2+<span class=\"hljs-number\">10</span>);                           <span class=\"hljs-comment\">// center legs</span>
    <span class=\"hljs-built_in\">delay</span>(speed1);
}

<span class=\"hljs-keyword\">for</span> (pos1 = maxpos; pos1 &gt;= minpos; pos1 -= <span class=\"hljs-number\">1</span>) {
    pos2 = <span class=\"hljs-built_in\">map</span>(pos1, minpos, maxpos, maxpos, minpos);

    servo1.<span class=\"hljs-built_in\">write</span>(pos1+<span class=\"hljs-number\">10</span>);servo3.<span class=\"hljs-built_in\">write</span>(pos1+<span class=\"hljs-number\">10</span>);      <span class=\"hljs-comment\">// front/rear legs</span>
    servo2.<span class=\"hljs-built_in\">write</span>(pos2+<span class=\"hljs-number\">10</span>);            
    <span class=\"hljs-built_in\">delay</span>(speed1);
}
}

<span class=\"hljs-function\"><span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">left</span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int</span> speed1)</span> </span>{               <span class=\"hljs-comment\">//speed1 in ms as delay between steps</span>

    <span class=\"hljs-comment\">//pos2 = maxpos + 1 -7; //-8 is to correct center position</span>
<span class=\"hljs-keyword\">for</span> (pos1 = minpos; pos1 &lt;= maxpos; pos1 += <span class=\"hljs-number\">1</span>) {
    pos2 = <span class=\"hljs-built_in\">map</span>(pos1, minpos, maxpos, maxpos, minpos);

    servo1.<span class=\"hljs-built_in\">write</span>(pos1<span class=\"hljs-number\">-10</span>);servo3.<span class=\"hljs-built_in\">write</span>(pos1<span class=\"hljs-number\">-10</span>);<span class=\"hljs-comment\">// front/rear legs</span>
    servo2.<span class=\"hljs-built_in\">write</span>(pos2<span class=\"hljs-number\">-10</span>);                           <span class=\"hljs-comment\">// center legs</span>
    <span class=\"hljs-built_in\">delay</span>(speed1);
}

<span class=\"hljs-keyword\">for</span> (pos1 = maxpos; pos1 &gt;= minpos; pos1 -= <span class=\"hljs-number\">2</span>) {
    pos2 = <span class=\"hljs-built_in\">map</span>(pos1, minpos, maxpos, maxpos, minpos);

    servo1.<span class=\"hljs-built_in\">write</span>(pos1<span class=\"hljs-number\">-10</span>);servo3.<span class=\"hljs-built_in\">write</span>(pos1<span class=\"hljs-number\">-10</span>);      <span class=\"hljs-comment\">// front/rear legs</span>
    servo2.<span class=\"hljs-built_in\">write</span>(pos2<span class=\"hljs-number\">-10</span>);            
    <span class=\"hljs-built_in\">delay</span>(speed1);
}
}
<span class=\"vditor-linenumber__rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>
<p>源码文件可以在文末打包下载。</p>
<h3>远程控制</h3>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/06/wKgZomYEydWAbuVQAAK_stQzFKY312.jpg\" alt=\"图片\"></p>
<p>遥控器已包含在代码中。在<code>&lt;span&gt;https://remotexy.com/&lt;/span&gt;</code>中,你可以为智能手机遥控器创建自己的界面,并将其插入到程序<code>&lt;span&gt;Blue_Ant-RemoteXY.ino&lt;/span&gt;</code>中。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/EE/wKgaomYEydWARqZzAAqZvj7fGE8060.jpg\" alt=\"图片\"></p>
<p>手机APP可参考:</p>
<p><code>&lt;span&gt;https://play.google.com/store/apps/details?id=com.shevauto.remotexy.free&lt;/span&gt;</code></p>
<p><code>&lt;span&gt;https://apps.apple.com/us/app/remotexy/id1168130280&lt;/span&gt;</code></p>
<p>在手机上安装APP,激活蓝牙,打开<code>&lt;span&gt;RemoteXY&lt;/span&gt;</code>,搜索并与配对<code>&lt;span&gt;ESP32-C3_Remote&lt;/span&gt;</code>。</p>
<h3>完成</h3>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/ED/wKgaomYEydWAcpTiAAbT8aCCz4s213.jpg\" alt=\"图片\"></p>
<p>现在你可以启动这只蚂蚁,等待片刻,激活APP,它就可以跑起来了。</p>
</div>
页: [1]
查看完整版本: DIY推荐!基于 ESP32 做的三舵机机械蚂蚁