Arduino 向日葵:电子太阳舞者
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
创客总是对新鲜有趣的事物很敏感。一天,我看了一个视频,其中向日葵随着太阳移动。那时我突然有了一个领悟。为什么我不能制作模仿这种生物机制的电子设备。
在接下来的几天里,我开始进行我的太阳能跟踪器项目。我选择了crowtail作为微控制器板,并在我们的仓库中挑选了组件和配件。然后我将这些部件组装在一起。最后,我使用手机上的 LED 对其进行了测试。你知道吗,它工作得很好。
我非常兴奋,并在社交媒体上发布了演示视频。我很惊讶有很多人喜欢并分享了这个视频,其中一些人甚至给我发消息说他们也想制作这个项目。
所以我重新做了这个项目,并做了一个具体的教程来帮助更多的人做出来。来吧。
第一步:准备
我们需要的材料如下。
- 纸板 x 2
- 泡沫塑料板 x 1
- 棒 x 1
- 3 针 Crowtail 电缆 x 6
- Crowtail - 线性电位器 x 2
- Crowtail- 光传感器 x 4
- Crowtail-Pan-Tilt x 1
- 使用 ATMega 328 V1.1 x 1 的 Crowduino
- 用于 Arduino x 1 的 Crowtail-Base Shield
第 2 步:制作设备的头部 图> 图> 图>
首先,我们需要切割两张纸板,如图所示,仅用于一块纸板的两半。然后可以将纸板片组装成十字形。最后,将棍子与十字架粘贴在一起,它会起到“头”的作用,并始终指向太阳。另一方面,它可以使设备美观和稳定。
第 3 步:安装 4 个光传感器 图> 图>
在聚苯乙烯泡沫塑料上穿出 4 个合适的孔来安装 4 个传感器,然后在中间挖一个孔来穿入木棒。我对这些传感器进行了编号,以便我们可以区分它们的不同位置。
步骤 4:用电缆连接传感器 图> 图> 图>
使用胶枪将棒固定在泡沫上,然后将电缆插入传感器。
第 5 步:将摇杆固定在云台上 图> 图> 图> 图>
我们将操纵杆固定在云台上。传感器座应与图片保持一致。传感器“1”和传感器“2”位于站点下方。
云台是带有 9G 舵机的组装设备。可控制垂直和水平旋转180度。
最后,将太阳能电池板固定在泡沫上。 (注意:两块太阳能电池板仅供装饰,不具备供电功能。)
第 6 步:上传代码 图> 图>
取出 Crowduino 和 Crowtail-Base Shield,然后将它们堆叠在一起。在我们开始将电缆连接到基板之前,我们需要将程序代码上传到 Crowduino,需要一根 micro USB 电缆。将Crowduino连接电脑,打开Arduino IDE。
第 7 步:将 4 个传感器连接到屏蔽 图>
现在我们可以开始连接了。首先将传感器的线缆连接到屏蔽层,编号如上图一一对应。
1-4 根电缆:
- 电缆“1”到 A0
- 电缆“2”到 A1
- 电缆“4”到 A2
- 电缆“3”到 A3
步骤 8:将电位计连接到屏蔽 图> 图>
将两个电位器连接到屏蔽的 A4 和 A5 插座。
两个电位器没有区别,但是你要知道,A4口接哪一个,起控制反应时间延迟的作用,A5接舵机转速。
第 9 步:将云台连接到 Shield
下舵机(水平运动)接D9,上舵机(垂直运动)接D10。
第 10 步:如何为其供电 图>
Crowduino 是该项目的主要控制板。我们可以使用USB移动电源或DC适配器为该板供电,这取决于您是移动设备还是固定设备。
第 11 步:尝试一下!
现在,关闭盒子。似乎已经迫不及待地想要追逐阳光了。好吧,放轻松,宝贝,现在让我们为你做个测试。
我把它带到一个黑暗的房间,然后打开手机手电筒,哇!看这可爱的家伙!
看起来很难,其实很简单,那就去做吧!你可以帮助它看起来更强大和更酷!
代码
- ARDUINO 向日葵代码
ARDUINO 向日葵代码Arduino
#include// 包含伺服库伺服水平; //水平servointservoh =90; // 站立水平伺服伺服垂直; // 垂直伺服 int 伺服 v =90; // 立式垂直伺服// LDR 引脚连接// name =analogpin;int ldrrd =0; int ldrld =1;int ldrlt =2; int ldrrt =3; void setup(){ Serial.begin(9600);// 伺服连接// name.attacht(pin);水平.attach(9); Vertical.attach(10);}void loop() { int lt =analogRead(ldrlt); // 左上角 int rt =analogRead(ldrrt); // 右上角 int ld =analogRead(ldrld); // 左下 int rd =analogRead(ldrrd); // 向下 rigt int dtime =analogRead(4)/20; // 读取电位器 int tol =analogRead(5)/4;int avt =(lt + rt) / 2; // 平均值 topint avd =(ld + rd) / 2; // 平均值 downint avl =(lt + ld) / 2; // 平均值 leftint avr =(rt + rd) / 2; // 平均值 rightint dvert =avt - avd; // 检查上下的差异int dhoriz =avl - avr;// 检查左边和rigtif 的差异(-1*tol> dvert || dvert> tol) // 检查差异是否在公差范围内否则改变垂直角度{if (avt> avd){servov =++servov;if (servov> 180){servov =180;}}else if (avt dhoriz || dhoriz> tol) // 检查差异是否在容差范围内,否则改变水平角{if (avl> avr){servoh =--servoh;if (servoh <0){servoh =0;}}else if (avl 180){servoh =180;}}else if (avl ==avr){// 没什么}horizontal.write(servoh);}delay(dtime);}
定制零件和外壳
示意图
制造工艺