文章目录
铁托(Tito)
🔧使用说明书💻blockly代码、📱控制app、🧊3D文件 、📥下载所有
背景资料:
Tito 是一个 Biped 跳舞 DIY 机器人,衍生自 Zowi 和 Bob,使用 Arduino UNO 板,连接和支持更容易。这是 Otto DIY 的第一次迭代(www.ottodiy.com)
构成
- 在机器人头部内安装 Arduino UNO 板。
- 3 个 LED 用于简单的嘴巴。
- 圆顶头。
- 腿部厚度增加和加强轮。
- 圆脚顶部。
- 底盘 - 基础简化。
- 接口位于背面,易于重新编程或通电。
零件清单
- Arduino UNO 板或任何兼容的板
- 面包板
- 蜂鸣器
- 舵机 x4
- HC-SR04 超声波传感器
- 移动电源(可选)
- 螺母 M3 x20
- 螺丝 M3 x20
- 3D打印头
- 3D打印底座
- 3D打印腿x2
- 3D打印脚R
- 3D 打印脚 L
工具:3D 打印机、剪刀、内六角扳手和十字螺丝刀。
3D打印
3D 部件是设计为无支撑的,使用 20% 填充和 0.2 毫米层高很容易打印
软件
对于**初学者,**建议使用Blockly 一个简单的可视化编程软件开始编码:
Otto Blockly 是完全自主的(不需要 Arduino IDE 或库设置,也不需要 Internet 访问)。
- 从我们的网站下载( https://www.ottodiy.com/#blockly-and-app)
- 解压并打开 OttoBlockly。
- 打开一个例子。
- 连接您的 Otto 机器人。
- 选择 Arduino UNO,连接 Otto 的 USB 端口。
- 检查代码。
- 上传,
如果您的计算机无法识别 USB 设备,您应该为您的操作系统安装驱动程序 CH340 在这里找到它:https 😕/sparks.gogo.co.nz/ch340.html
使用示例并开始以多种方式混合块来决定机器人的行为并生成您自己的代码。
电子器件
使用连接到计算机的 USB 电缆测试您的机器人。
作为一种好的做法,您应该在组装所有机器人之前检查计算机中的电子设备和软件,以避免不得不拆卸整个机器人来修复某些东西:
- 安装 Arduino IDE 软件。
- 从下载1或本地下载所有库并解压缩到 C:\Users\user\Documents\Arduino\libraries(或安装库文件夹的任何位置)
- 通过 USB 连接您的 Arduino Nano,确保您的计算机中安装了驱动程序 CH340。
- 打开代码文件选项卡文件夹中的代码示例之一
- 上传代码并检查一切是否正常。
组装说明
要构建 Tito,一个建议是在连接舵机之前将舵机盘片组装到腿上,然后将舵机放在身体和脚上。
第一步:组装各部分
第 2 步:测试舵机
在图片中,电缆已断开连接,但这里的想法是将代码上传到 Arduino UNO 板,将所有伺服系统置于 90 度,然后匹配身体和脚部曲柄盘的直角。铁托应该在像照片的位置。然后你可以用螺丝轴固定所有的舵机。
第 3 步:接线
---------------
| |
| O O |
| |
YR ==> | | <== YL
---------------
|| ||
|| ||
|| ||
RR ==> ----- ------ <== RL
----- ------
在2(右上),3(左上),4(右下),5(左下) 数字输出中连接伺服电机,参考其他 Ottos,HC-SR04 超声波传感器的接线(引脚 8 触发,引脚 9 回波)。
有关更多详细信息,请使用 Otto DIY 机器人中使用的相同连接
第4 步:组装 Arduino UNO 板
第 5 步:最终组装
这种设计可以很容易地在头部固定任何 Arduino Uno,您最多可以使用 4 个螺钉。
如果所有连接都已固定,您可以关闭头部并使用侧向螺钉将其固定到身体上。
代码
#include <Servo.h>
#include <Oscillator.h>
#include <EEPROM.h>
//-- Zowi Library
#include "Zowi.h"
//-- First step: Configure the pins where the servos are attached
/*
---------------
| |
| O O |
| |
YR ==> | | <== YL
---------------
|| ||
|| ||
|| ||
RR ==> ----- ------ <== RL
----- ------
*/
#define PIN_RR 5 // 左下
#define PIN_RL 4 // 右下
#define PIN_YR 3 // 左上
#define PIN_YL 2 // 右上
//-- Second step: Determine the Servo Trim values
#define TRIM_RR 17
#define TRIM_RL -10
#define TRIM_YR 0
#define TRIM_YL 15
//-- This is Zowi!!
Zowi z;
char command;
void setup()
{
Serial.begin(9600); //Set the baud rate to your Bluetooth module.
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
//-- Set the servo pins
z.init(PIN_YL, PIN_YR, PIN_RL, PIN_RR);
//-- Set the servo trims
z.setTrims(TRIM_YL, TRIM_YR, TRIM_RL, TRIM_RR);
}
void loop() {
z.home();
delay(500);
if (Serial.available() > 0) {
command = Serial.read();
switch (command) {
case 'W':
forward();
break;
case 'w':
back();
break;
case 'L':
left();
break;
case 'R':
right();
break;
case 'V':
horn();
break;
case 'D':
dance();
break;
case 'M':
moonwalkL();
break;
case 'm':
moonwalkR();
break;
case 'S':
Stop();
break;
case 'H':
hotdog();
break;
case 'F':
flappingF();
break;
case 'f':
flappingB();
break;
case 'C':
crusaitoL();
break;
case 'c':
crusaitoR();
break;
case 'E':
excited();
break;
}
}
}
void forward()
{
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.walk(4, 1000, FORWARD);
z.walk(4, 1000, FORWARD);
z.home();
}
void back()
{
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
z.walk(4, 1000, BACKWARD);
z.walk(4, 1000, BACKWARD);
z.home();
}
void left()
{
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.turn(3, 1500, LEFT);
z.home();
}
void right()
{
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
z.turn(3, 1500, RIGHT);
z.home();
}
void horn()
{
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
z.updown(6, 500, BIG);
z.home();
}
void dance()
{
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
z.home();
z.swing(6, 1000, 20);
z.moonwalker(3, 1000, 30, LEFT);
digitalWrite(10, HIGH);
z.moonwalker(3, 1500, 30, RIGHT);
z.moonwalker(3, 1500, 30, LEFT);
z.moonwalker(3, 1500, 30, LEFT);
z.moonwalker(3, 1500, 30, RIGHT);
delay(1000);
z.crusaito(6, 2000, 40, LEFT);
z.crusaito(6, 2000, 40, RIGHT);
delay(500);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
z.flapping(10, 600, 10, FORWARD);
delay(500);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
z.moonwalker(3, 1500, 30, RIGHT);
z.moonwalker(3, 1500, 30, LEFT);
z.moonwalker(3, 1500, 30, LEFT);
z.moonwalker(3, 1500, 30, RIGHT);
digitalWrite(10, HIGH);
z.updown(6, 500, BIG);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
z.home();
}
void moonwalkL()
{
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
z.moonwalker(3, 2000, 30, LEFT);
z.home();
}
void moonwalkR()
{
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
z.moonwalker(3, 2000, 30, RIGHT);
z.home();
}
void hotdog()
{
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
z.home();
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
z.swing(6, 600, 20);
z.bend(1, 1000, RIGHT);
z.bend(1, 1000, LEFT);
z.swing(6, 600, 20);
z.shakeLeg(1, 1000, RIGHT);
z.shakeLeg(1, 1000, LEFT);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.jitter(3, 500, 20);
z.swing(6, 600, 20);
z.bend(1, 1000, RIGHT);
z.bend(1, 1000, LEFT);
z.swing(6, 600, 20);
z.shakeLeg(1, 1000, RIGHT);
z.shakeLeg(1, 1000, LEFT);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
z.home();
}
void flappingF()
{
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.flapping(10, 600, 10, FORWARD);
z.home();
}
void flappingB()
{
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.flapping(10, 600, 10, BACKWARD);
z.home();
}
void crusaitoL()
{
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.crusaito(6, 2000, 40, LEFT);
z.home();
}
void crusaitoR()
{
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.crusaito(6, 2000, 40, RIGHT);
z.home();
}
void excited()
{
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.swing(6, 600, 20);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.jitter(4, 500, 20);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
z.updown(4, 500, MEDIUM);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
z.swing(6, 600, 20);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
z.home();
z.home();
}
void Stop()
{
z.home();
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}