2021年,新春快乐。2021年是牛年,这次的每周挑战就造一个牛年的存钱机器人,通过存钱机器人教会小朋友储蓄的好习惯,特别是过年的红包要交给爸爸妈妈好好保管。以前做过一个不需要Arduino板控制的吃钱兽机器人,这次造一个需要控制板的吃钱机器人,这个机器人存钱后还会说出“恭喜发财”。所以构件均为3D打印,文章的最后提供3D打印的STL文件与Arduino的源代码。
以下是【牛年存钱机器人】(Coin Robot 2.0)的造型与设计图纸。
第1步,3D模型设计
在3DSMAX设计出牛年存钱机器人【Coin Robot 2.0】的外形与活动情况如下图所示。
它的结构分为以下几个部分:
(1)头部,主要是用于实现打开嘴巴的动作
(2)身体盒子,里面有舵机及大部分的芯片与电路
(3)手部,可以活动,带动头部打开嘴巴,导电锡纸设置在手部,手部的转轴连接舵机。
以下就是3DSMAX出来的效果与实际的对比
第2步,准备电子材料
与以往的风格一样,这个装置现在会用到arduino mini,(尺寸比较小)
这次需要用到的特别材料有 MP3语音模块JQ8400FL10P,懂得基本的电学原理就可以安装了。材料如下:
(1)1个9V的电池给ARDUINO供电
(2)1个ARDUINO MINI 板,
(3)1片孔洞板,用于制作外接电路
(4)电焊铁,电线(杜邦线)
(5)小型开关2个,一个用来打开ARDUINO板,一个控制舵机供电
(6)1个JQ8400FL10P的MP3语音模块,用来播放指定MP3文件发出声音
(7)1 个低功率的喇叭元件,用于最终发声
(8)1个舵机,控制机器人把钱币吞起口中的动作
(9)锡纸用来导电,通过钱币接通电路导电
(10)电线若干。其它就是用3D打印机打印。
材料就是相对多一点,经过训练的朋友都能做这个小型装置。
第3步,分开模块与打印
在3DSMAX将不同颜色不同部分的组件分别排版,如下图所示。
采用了不同颜色的线材,主要包括黑色,黄色,红色与白色
3D打印机采用 XYZprinting Mini Maker,构件打印出来的效果如下图所示。
第4步,电子电路的设计与制作
以下是电路图的设计,分为三部分,基本采用ARDUINO实例教程的基本组合
(1) 锡纸开关电路(硬币通过锡纸接通电路,向A0口输入信号)
(2) 舵机电路(ARDUINO直接控制)
(3) 发声电路(ARDUINO通过串口向MP3语音模块发出指令,MP3播放MP3文件,最后通过喇叭发出声响)
如图所示,通过焊接电线与孔洞板,实现了整个电路的连接,完成图如下。
第5步,模块的组装
把组装好的电路安装到盒子内,如下图所示。
最后在盒子的上部放入存钱盒,把下部的电路隐藏起来。如下图所示。
对部分构件进行粘合,采用强力胶对部份构件进行连接,最后成果如下图所示。
第6步,写入ARDUINO的编程代码
对ARDUINO板写入代码,这个代码就是就是ARDUINO板实现读取红外信号,
实现硬币接通锡纸电路后,舵机打开嘴巴,吃下硬币,播放“恭喜发财”的祝福语句。
代码,如下图所示。下载方法如下:
【点击下载你需要的arduino代码文件】
点击下载此文件arduino.txt
#include <Servo.h>
#include <SoftwareSerial.h>
unsigned char order[4] = {0xAA,0x06,0x00,0xB0};
const int buttonPin = A0;
const int ledpin = 3;
int buttonState = 0;
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos; // variable to store the servo position
long timeDelay;
void setup()
{
Serial1.begin(9600);
volume(0x1E);//音量设置0x00-0x1E
pinMode(buttonPin, INPUT);
pinMode(ledpin, OUTPUT);
myservo.attach(10); // attaches the servo on pin 9 to the servo object
myservo.write(0);
}
void loop()
{
buttonState = digitalRead(buttonPin); // Read the button position
if (buttonState == HIGH) {
digitalWrite(ledpin,LOW); //
myservo.write(0); // tell servo to go to position in variable 'ONpos'
delay(15); // randomize wait time for the servo to reach the position
play(0x01);//指定播放:0x01-文件0001
}
else {
timeDelay = 30;
digitalWrite(ledpin,HIGH); //
myservo.write(45); // tell servo to go to position in variable 'ONpos'
delay(15); // randomize wait time for the servo to reach the position
delay(100);
}
}
void play(unsigned char Track)
{
unsigned char play[6] = {0xAA,0x07,0x02,0x00,Track,Track+0xB3};//0xB3=0xAA+0x07+0x02+0x00,即最后一位为校验和
Serial1.write(play,6);
}
void volume( unsigned char vol)
{
unsigned char volume[5] = {0xAA,0x13,0x01,vol,vol+0xBE};//0xBE=0xAA+0x13+0x01,即最后一位为校验和
Serial1.write(volume,5);
}
第7步,最后的测试
以上是牛年存钱机器人的最后完成效果,打开小开关可以把红包的钱存进去啦。
房屋维修专家2023.03.27
打印模型是不是比例不对啊
粒子2021.03.04
好可爱呀
dinochen19832021.03.04
第一次在这个社区发表帖子