所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

[每周挑战]造物_造一个牛年存钱机器人

dinochen1983 dinochen1983 2021-03-04 00:39:06
2
2
简单
projectImage

2021年,新春快乐。2021年是牛年,这次的每周挑战就造一个牛年的存钱机器人,通过存钱机器人教会小朋友储蓄的好习惯,特别是过年的红包要交给爸爸妈妈好好保管。以前做过一个不需要Arduino板控制的吃钱兽机器人,这次造一个需要控制板的吃钱机器人,这个机器人存钱后还会说出“恭喜发财”。所以构件均为3D打印,文章的最后提供3D打印的STL文件与Arduino的源代码。

 

以下是【牛年存钱机器人】(Coin Robot 2.0)的造型与设计图纸。

projectImage

第1步,3D模型设计
在3DSMAX设计出牛年存钱机器人【Coin Robot 2.0】的外形与活动情况如下图所示。

它的结构分为以下几个部分:
(1)头部,主要是用于实现打开嘴巴的动作
(2)身体盒子,里面有舵机及大部分的芯片与电路 
(3)手部,可以活动,带动头部打开嘴巴,导电锡纸设置在手部,手部的转轴连接舵机。

以下就是3DSMAX出来的效果与实际的对比
 

projectImage

第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打印机打印。
材料就是相对多一点,经过训练的朋友都能做这个小型装置。
 

projectImage

第3步,分开模块与打印

在3DSMAX将不同颜色不同部分的组件分别排版,如下图所示。
采用了不同颜色的线材,主要包括黑色,黄色,红色与白色

3D打印机采用 XYZprinting Mini Maker,构件打印出来的效果如下图所示。
 

projectImage
projectImage

第4步,电子电路的设计与制作

 

以下是电路图的设计,分为三部分,基本采用ARDUINO实例教程的基本组合

(1)       锡纸开关电路(硬币通过锡纸接通电路,向A0口输入信号)

(2)       舵机电路(ARDUINO直接控制)

(3)       发声电路(ARDUINO通过串口向MP3语音模块发出指令,MP3播放MP3文件,最后通过喇叭发出声响)

 

如图所示,通过焊接电线与孔洞板,实现了整个电路的连接,完成图如下。

projectImage
projectImage

第5步,模块的组装
把组装好的电路安装到盒子内,如下图所示。

最后在盒子的上部放入存钱盒,把下部的电路隐藏起来。如下图所示。

对部分构件进行粘合,采用强力胶对部份构件进行连接,最后成果如下图所示。
 

projectImage
projectImage

第6步,写入ARDUINO的编程代码

对ARDUINO板写入代码,这个代码就是就是ARDUINO板实现读取红外信号,

实现硬币接通锡纸电路后,舵机打开嘴巴,吃下硬币,播放“恭喜发财”的祝福语句。

代码,如下图所示。下载方法如下:

【点击下载你需要的arduino代码文件】

点击下载此文件arduino.txt

projectImage
代码 代码
	                    					

#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步,最后的测试

 以上是牛年存钱机器人的最后完成效果,打开小开关可以把红包的钱存进去啦。

附件 附件
Makelog作者原创文章,未经授权禁止转载。
2
2
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]