Arduino 跷跷板(2016-01-04)


前言
这是参加社区活动,用赠送的 LilyPad 来做小实验,也体验了一把艺术的LilyPad!本来是申请 nano 的,不知道怎么的就出错啦,申请成 LilyPad 了,这个实验应该用 nano 比较合适,面包板比较方便接插(我还有更长的面包板哦 :D)。

接线图


代码

 1 // ----------------------------------------------------------------------------
 2 // seesaw.ino
 3 //
 4 // Created 2016-01-02
 5 // By seesea 
 6 //
 7 // 带渐暗灯效果的跷跷板
 8 // ----------------------------------------------------------------------------
 9 
10 // ------------------ 配置 ------------------
11 const char pinLED      = 5;                      // LED 的引脚
12 const char pinMagnet   = 6;                      // 电磁铁的引脚
13 const int  interval    = 700;                    // 跷跷板翻动的时间间隔,单位 ms
14 const int  initPwmLED  = 255;                    // LED 渐暗灯初始亮度
15 const char fadeTimes   = 50;                     // LED 渐暗灯在跷跷板翻动周期内渐变的级数(次数)
16 
17 // ------------------ 常量 ------------------
18 const int  deltaPwm    = initPwmLED / fadeTimes; // 根据 LED 初始亮度和渐变次数计算每一次渐变的 pwm 差值
19 const int  intervalLED = interval / fadeTimes;   // 根据 LED 初始亮度和渐变次数计算渐变的间隔
20 
21 // ---------------- 全局变量 ----------------
22 int pwmLED;                                      // 当前 LED 的 pwm 亮度值
23 
24 void setup()
25 {
26     pinMode(pinLED,    OUTPUT);
27     pinMode(pinMagnet, OUTPUT);
28 
29     fillLED();
30 }
31 
32 void loop()
33 {
34     // 渐暗 LED
35     fadeLED();
36 
37     // 主动端在上升的时候将 LED 设置为最亮
38     if (seesaw())
39         fillLED();
40 }
41 
42 // 跷跷板翻动函数
43 // 若跷跷板主动端开始上升,则返回 true,否则返回 false
44 bool seesaw()
45 {
46     static long ti = millis();
47     static byte seesawState = HIGH;
48 
49     if (millis() - ti < interval)
50         return false;
51 
52     digitalWrite(pinMagnet, seesawState);
53 
54     ti = millis();
55     seesawState = seesawState == HIGH ? LOW : HIGH;
56 
57     if (seesawState == LOW)
58        return true;
59 
60     return false;
61 }
62 
63 // 将 LED 置为初始亮度(最亮的值)
64 void fillLED()
65 {
66     pwmLED = initPwmLED;
67 }
68 
69 // 渐暗 LED
70 void fadeLED()
71 {
72     static long ti = millis();
73 
74     if (millis() - ti < intervalLED)
75         return;
76 
77     analogWrite(pinLED, pwmLED);
78 
79     ti = millis();
80     pwmLED -= deltaPwm;
81     if (pwmLED < 0)
82         pwmLED = 0;
83 }


制作步骤

  1. 不爱绕电磁铁,就找一个蜂鸣器来拆出电磁铁

  2. 找两个电阻绕个圈来做支撑座

  3. 找一个LED来做轴

  4. 剪张硬纸条做跷跷板面
  5. 粘上轴
  6. 板面下粘上磁铁
  7. 将电磁铁固定在面包板上,测试发现如果磁铁离电磁铁太近会由于吸力大于电磁铁产生的斥力而无法抬起,拿个胶带隔离出一段距离
  8. 接线,并用一个 9013 三级管来做电磁铁驱动

  9. 安装上跷跷板面

  10. 画上跷跷板两头的卡通动物,准备剪下来粘上去
  11. 剪下,还有一个红心
  12. 将小动物粘到跷跷板上,接上 UNO 做测试,更方便接线和下载程序

  13. 接上 LilyPad 测试,用于拍摄提交论坛
  14. 布景,准备拍视频

视频
原先只是打算做一个比较时尚的蓝灯的,后来有了加上红心的想法,但是不爱换灯了,不然应该用红色灯比较合适啦。

UNO 视频

LilyPad 视频