目录
构思
材料清单
传动设计
电路设计
软件设计
效果
受了国外一个视频的启发,我也打算做一个机器花,送给老婆做情人节礼物。花朵应该具备张开和关闭两个功能,最好能便捷的用手势控制。为了让产品更生动,表现力更强,机械花的旁边还应有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低电平
}
自制机器花效果展示