回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

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

头像 dinochen1983 2021.03.04 545 3
project-image

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

 

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

project-image

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

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

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

project-image

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

project-image

第3步,分开模块与打印

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

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

project-image
project-image

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

 

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

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

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

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

 

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

project-image
project-image

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

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

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

project-image
project-image

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

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

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

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

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

点击下载此文件arduino.txt

project-image
代码


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

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

评论

user-avatar
  • 房屋维修专家

    房屋维修专家2023.03.27

    打印模型是不是比例不对啊

    0
    • 粒子

      粒子2021.03.04

      好可爱呀

      0
      • dinochen1983

        dinochen19832021.03.04

        第一次在这个社区发表帖子

        0