机械花—一款基于arduino的情人节礼物

目录

构思

材料清单

传动设计

电路设计

软件设计

效果


构思

受了国外一个视频的启发,我也打算做一个机器花,送给老婆做情人节礼物。花朵应该具备张开和关闭两个功能,最好能便捷的用手势控制。为了让产品更生动,表现力更强,机械花的旁边还应有LED作点缀。

自制机器花效果展示

材料清单

一个微型电机从x宝上购买,

一卷细铜线,

再加上两块铝板(自行切割),

若干螺栓,螺母

橡皮2块,

手术刀一把,

Arduino Leonardo开发板一块,

吸管一根,

烤串用木签一根,

502胶水一管,

LED两个,

一个塑料花盆,

红外传感器一个,购自x宝

电钻台一个,

手摇钻,

硬纸壳若干。

 

传动设计

1先用手术刀将一块橡皮镂空,刚好把螺母塞入.塞入后,为保证两者牢固连接,可以用胶水粘连两者相接处。(502凝固的时间为24小时)

2 用钻台在一块铝板上打孔,将微型电机安装到铝板上。

3 在第一步的橡皮上再钻一个小孔,孔的直径应能允许木签穿过该孔,但被孔夹紧。

4 将塞入螺母的橡皮安装到微型电机的螺杆上。

5 将两块铝板上下重叠放置,确定木签的位置。然后在木签将要穿过的位置打孔。考虑到测量误差等因素,孔径应留余量,最好略大于吸管的直径。

6 在两块铝板的四个角附近打孔,然后用四根螺栓穿过这八个孔,固定铝板的上下位置。

7 以如下尺寸剪切3片硬纸壳:单位厘米

8 将另一块橡皮切割为边长2厘米的正三角形。并用手摇钻在橡皮中心钻开一个圆孔,供吸管插入。

9 用手摇钻在三角形橡皮的三个顶角处,沿平行于三角形的方向,钻三个细小的孔,供铜线穿过。

10 截取三条足够长的铜线,沿木签轴向,贴木签表面放置,用透明胶带固定。三条铜线分隔120°。铜线应比木签至少长出9厘米

11 将吸管插入上层铝板的孔内,用胶水固定,如下图所示

12 将木签从吸管上端插入,穿过与电机螺杆相连的橡皮,一直插到超过底层铝板的孔位。

13 将第7步准备的纸壳掰成下图所示的花瓣形状,并在每片花瓣的底角处扎三个孔,供细铜丝穿过.在每片花瓣中轴线距底部2厘米处也扎一个细孔。

14 截取三根细铜丝,先穿过正三角形的橡皮顶角,然后铜丝两端各自穿过花瓣的底角的三个孔,然后用胶水或者透明胶固定:

15 三片花瓣组装在一起的效果:

16 从木签顶端伸出三条细铜丝。三条铜丝分别穿过三片花瓣的中间小孔(第13步).穿过花瓣后,铜丝末端用透明胶带粘在花瓣背面。

机器花原理解释

 

电路设计

第一张电路图展示驱动电路。D2与D6分别是arduino leonardo的数字引脚2、6.

根据软件设计(见后面),2与6不会同时高电平。当D2处于高电平时,D6低电平。此时左半边晶体管Q1 Q2导通。电机正转。反之,Q3 Q4导通,电机反转。

第二张电路图展示手势控制电路。手第一次扫过传感器,Vout+与Vout-电压差为9伏。则Arduino的模拟输入口A1 A3之间电压差为4.5V左右。再次扫过传感器,Vout+与Vout-之间压差为零,A1 A3之间压差也为零。

软件设计

int iReadIR = 0;
int iPrevIR = 0;
bool bBloom = false;
int analogPin1 = A1, analogPin2 = A3;

void setup() {
  // put your setup code here, to run once:
  int iV1 = analogRead(analogPin1);
  int iV2 = analogRead(analogPin2);
  if(iV1 - iV2 > 512)
  {
    iReadIR = 1;
  }
  else
  {
    iReadIR = 0;
  }
  
  iPrevIR = iReadIR;
  pinMode(6, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(iPrevIR != iReadIR)
  {
    if(bBloom)
    {
      vClose();//花瓣收起
      bBloom = false;
    }
    else
    {
      vBloom();//开花
      bBloom = true;
    }
  }

  iPrevIR = iReadIR;
  int iV1 = analogRead(analogPin1);//读取A1 A3电压
  int iV2 = analogRead(analogPin2);
  
  if(iV1 - iV2 > 512)//arduino的模拟口以1024为最大值。当arduino的电源电压为9伏时,512就代表4.5伏
  {
    iReadIR = 1;
  }
  else
  {
    iReadIR = 0;
  }
  delay(100);
}

void vClose(void)
{
  digitalWrite(6, HIGH);//D6高电平
  digitalWrite(2, LOW);//D2低电平
  digitalWrite(13, LOW);
  delay(45000);
  digitalWrite(6, LOW);//待花瓣闭合,D6低电平
}

void vBloom(void)
{
  digitalWrite(6, LOW);//D6低电平
  digitalWrite(2, HIGH);//D2高电平
  for(int k = 0; k < 45; k++)
  {
    digitalWrite(13, LOW);
    delay(500);
    digitalWrite(13, HIGH);
    delay(500);
  }
  digitalWrite(2, LOW);//待花瓣完全绽放,D2低电平
}

 

效果

自制机器花效果展示

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值