亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

自制仿生太阳追踪器—向日葵舞者

发布时间:2022-10-22
分享到:

自制仿生太阳追踪器—向日葵舞者

发布时间:2022-10-22
分享到:

这是一个电子太阳舞蹈太阳追踪器。

故事
创造者总是对新奇有趣的事物很敏感。有一天,我观看了一段向日葵随着太阳移动的视频。我突然有了一个顿悟。为什么我不能做一个模仿这种生物机制的电子设备呢?

在接下来的日子里,我开始实施我的太阳能追踪器项目。我选择了crowtail作为微控制器板,并在我们的仓库中挑选了元器件和配件。然后我把这些零件组装在一起。最后,我用我手机上的LED进行了测试。成品出来后,效果很好。

在一番考量后,我重做了这个项目,并且制作了一个特别的教程来帮助更多的人。我们开始吧。

步骤1:准备

我们需要的材料如下:

  • 纸板x 2
  • 泡沫聚苯乙烯板× 1
  • 把x 1
  • 3引脚斜尾电缆x 6
  • 线性电位器x 2
  • 光传感器x 4
  • Crowduino ATMega 328 V1.1 x 1
  • Crowtail- Base Shield Arduino x 1

步骤2:制作设备的头部

首先,我们需要切两块纸板,如图所示,只是一块纸板的两半。然后这些硬纸板就可以组装成十字形。最后,把棍子和十字架粘在一起,它会起到一个“头”的作用,并且总是指向太阳。另一方面,它可以使设备美观和稳定。

步骤3:安装4个光传感器

在泡沫塑料上穿4个合适的孔来安装4个传感器,然后挖一个中间孔来穿杆。我给这些传感器编号以便区分它们的不同位置。

步骤4:连接传感器线缆

用胶枪把棍子固定在泡沫上,然后把电缆插入传感器。

步骤5:把木棍固定在平底锅上

我们把棍子固定在平底锅上。传感器的位置应与图片保持一致。传感器“1”和传感器“2”位于站点下方。

pan-tilt是一个配有9G伺服的组装装置。可控制垂直和水平180度旋转。

最后,将太阳能电池板固定在泡沫上。(注意:两块太阳能电池板仅供装饰,无供电功能)

步骤6:上传代码

取出Crowduino和Crowtail- Base Shield,然后把它们堆在一起。在我们开始将线缆连接到基板之前,我们需要将程序代码上传到Crowduino中,需要一根微型USB线缆。将Crowduino连接到计算机上,打开Arduino IDE。

步骤7:连接4个传感器到屏蔽

现在我们可以开始连接了。首先将传感器的电缆连接到屏蔽上,对应的数字如图1 - 1所示。

1 - 4电缆:

  • 电缆“1”到A0
  • 电缆“2”到A1
  • 电缆“4”到A2
  • 电缆“3”到A3

步骤8:连接电位器到屏蔽

将两个电位器连接到屏蔽的A4和A5插座上。

这两个电位器没有区别,但是要知道,无论哪一个通过A4端口连接,都会起到控制反应时间延迟的作用,A5为伺服转速。

步骤9:连接泛倾斜到盾

下伺服(水平运动)与D9连接,上伺服(垂直运动)与D10连接。

步骤10:如何供电

本项目的主控板为Crowduino。我们可以用USB电源组或DC适配器为这个板供电,这取决于你是移动设备还是固定设备。

步骤11:尝试一下!

现在,合上盒子。它似乎迫不及待地要追逐阳光。

你可以对它先进行测试,把它带到一个黑暗的房间,然后打开手机手电筒,再观看实际效果。

这看起来很难,但实际上很简单,所以大胆的去做吧!

arduino向日葵代码:

#include <Servo.h> // include Servo library 

Servo horizontal; // horizontal servo
int servoh = 90; // stand horizontal servo

Servo vertical; // vertical servo 
int servov = 90; // stand vertical servo

// LDR pin connections
// name = analogpin;
int ldrrd =0; 
int ldrld =1;
int ldrlt = 2; 
int ldrrt = 3; 
 


void setup()
{
  Serial.begin(9600);
// servo connections
// name.attacht(pin);
  horizontal.attach(9); 
  vertical.attach(10);
}

void loop() 
{
  int lt = analogRead(ldrlt); // top left
  int rt = analogRead(ldrrt); // top right
  int ld = analogRead(ldrld); // down left
  int rd = analogRead(ldrrd); // down rigt

  int dtime = analogRead(4)/20; // read potentiometers  
int tol = analogRead(5)/4;

int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right

int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt

if (-1*tol > dvert || dvert > tol) // check if the diffirence is in the tolerance else change vertical angle
{
if (avt > avd)
{
servov = ++servov;
if (servov > 180)
{
servov = 180;
}
}
else if (avt < avd)
{
servov= --servov;
if (servov < 0)
{
servov = 0;
}
}
vertical.write(servov);
}

if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
{
if (avl > avr)
{
servoh = --servoh;
if (servoh < 0)
{
servoh = 0;
}
}
else if (avl < avr)
{
servoh = ++servoh;
if (servoh > 180)
{
servoh = 180;
}
}
else if (avl == avr)
{
// nothing
}
horizontal.write(servoh);
}
delay(dtime);

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:SURYATEJA,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论