Arduino双轴伺服太阳能跟踪器制作图解

电子说

1.2w人已加入

描述

步骤1:

Arduino

取决于您用作跟踪机制的内容,您的可能与我的有所不同。

I从购物者那里拿起一个通常用于剃须或化妆的放大镜。它有一个底座和一个可上下旋转镜子的转环。我切掉了转环的一侧,然后换了一个伺服器。我进行了测量,以使伺服器的轴与镜子的旋转点对齐。然后我不得不在伺服轴上钻一个孔。

我用热胶和扎带将伺服器固定到基座上,然后将伺服轴固定在我钻的孔内。

步骤2:X轴

Arduino

Arduino

我标记了底座的大致中心并钻了一个大孔足以拧入用于伺服电枢的固定螺丝。然后我将电枢热粘合到基座的下侧,确保不要在钻孔的孔中粘上胶。

胶干后,我将伺服器固定并拧紧

步骤3:传感器

Arduino

Arduino

Arduino

Arduino

我使用了3个光传感器和1个倾斜传感器。您可以用LED或光电晶体管代替CDS电池,和/或用汞开关代替滚珠轴承的倾斜传感器,但是您的代码必须能反映出这种变化。每个光传感器和位于另一端的2针接头可轻松连接到面包板上。在电线的裸露部分上使用胶带/热收缩/液体绝缘体,以免它们短路。

完成后,围绕镜面的圆周以相等的间隔热粘合传感器。我放置了传感器,使传感器的收集面与镜子的平面平行,并与中心稍微成角度。

我发现的倾斜传感器是一个塑料盒,其中有四个触点,里面有一个滚珠轴承。该传感器可防止跟踪器指向地面,并为y轴提供一个终点挡块。

将焊线连接到倾斜传感器的4个引脚上,然后将其胶粘在反光镜的背面,并使导线水平放置。镜子指向上方,BB应该放在2条中间引线上。

我上传的图像与倾斜传感器相似但不完全相同。我使用的一根导线只有4条。

第4步:接线

Arduino

Arduino

看图片的接线图和原理图。 (对混乱的示意图感到抱歉,仍在学习Fritzing)

***编辑(04/03/13)***更改图像以反映正确的接线并对其进行了一些清理。

步骤5:Arduino代码

#define TILTL 2

#define TILTH 3

#define底部2

#define TOPLEFT 0

#define返回页首1

#include

#include“ math.h”

Servo hservo;

Servo vservo;

int tlsense;

int trsense;

int bsense;

int tavg;

int diff;

int spd;

int除数;

int灵敏度;

intintll; intlintl; void设置( ){ hservo.attach(10);//将伺服器在针脚10上连接至伺服对象

除数= 10;//这将控制伺服器的速度。较低的数字=较高的速度

灵敏度= 5;//这可控制跟踪器的灵敏度。较小的数字=较高的灵敏度。如果您的跟踪器不断来回抖动,请增加数字

Serial.begin(19200);//打开串行com

Serial.print(“ SolarTracker ready!”);

pinMode(BOTTOM,INPUT);//设置输入

pinMode(TOPLEFT,INPUT);

pinMode(TOPRIGHT,INPUT);

pinMode(TILTL,INPUT);

pinMode(TILTH,INPUT);

}

void循环(){ tilth = digitalRead(TILTH);

tlsense = AnalogRead(TOPLEFT);//读取光传感器

trsense = AnalogRead(TOPRIGHT);

bsense = AnalogRead(BOTTOM);

//bsense = bsense * 1.05;//我必须调整此传感器的值以使其更准确。您可能必须做同样的事情,但首先将其保留

tavg =(tlsense + trsense)/2;//获得前2个传感器的平均值

diff = abs(tavg-bsense);//这将判断跟踪器必须转向多远

spd = diff/divisor;//并相应地调整反应速度

spd = max(spd,1);//将最低速度设置为1

Serial.print(“ nTOP:”); Serial.print(tavg,DEC);//将传感器值打印到串行com

Serial.print(“ tBOTTOM:”); Serial.print(bsense,DEC);

Serial.print(“ tLEFT:”); Serial.print(tlsense,DEC);

Serial.print(“ tRIGHT:”); Serial.print(trsense,DEC);

if((tavg 灵敏度)&&(tiltl == LOW)&&(tilth == LOW)){//如果顶部的平均值传感器比底部传感器小(更多的光线),并且倾斜传感器在正确的范围内

vservo.write(90-spd);//发送伺服命令使其向上旋转并增加速度

Serial.print(“ tState:”); Serial.print(“ UP!”);

}否则if((tavg 灵敏度)&&(tiltl == HIGH)&&(tilth == LOW)){//如果平均值顶部传感器的距离小于底部传感器(更多的光线),并且倾斜传感器在正确的范围内

vservo.write(90-spd);//发送伺服命令使其向上旋转并增加速度

Serial.print(“ tState:”); Serial.print(“ UP!”);

}否则if((tavg》 bsense)&&(diff》灵敏度)&&(tiltl == HIGH)&&(tilth == LOW)){//底部传感器比顶部传感器的平均值小(更亮),并且倾斜传感器在正确的范围内

vservo.write(90 + spd);//发送伺服命令以向下旋转并增加速度

Serial.print(“ tState:”); Serial.print(“ DOWN!”);

}否则if((tavg》 bsense)&&(diff》敏感性)&&(tiltl == LOW)&&(tilth == HIGH)){//底部传感器比顶部传感器的平均值小(更亮),并且倾斜传感器在正确的范围内

vservo.write(90 + spd);//发送伺服命令以向下旋转并增加速度

Serial.print(“ tState:”); Serial.print(“ DOWN!”);

}其他{//对于其他每个实例

vservo.write(90);//停止y轴电机

Serial.print(“ tState:”); Serial.print(“ STOP!”);

}

tlsense = AnalogRead(TOPLEFT);//再次读取前2个传感器,因为它们可能已更改

trsense = AnalogRead(TOPRIGHT);

//trsense = trsense * 1.03;//再一次,我不得不调整一个传感器的值以使跟踪器更准确

diff = abs(tlsense-trsense);//将diff变量重置为新值

spd = diff/divisor;//并据此生成速度

spd = max(spd,1);//将最小速度设置为1

if((tlsense 灵敏度)){//如果左上方的传感器值小于(更亮)右上方的传感器

hservo。写(90 + SPD);//发送伺服命令以左转

Serial.print(“ tState:”); Serial.print(“ LEFT!”);

}否则if((tlsense》 trsense)&&(diff》灵敏度)){//如果左上传感器的值大于(较少光)比右上传感器

hservo.write(90-spd);//发送伺服命令以右转

Serial.print(“ tState:”); Serial.print(“ RIGHT!”);

}其他{//对于其他每个实例

hservo.write(90);//停止x轴电机

Serial.print(“ tState:”); Serial.print( “住手!”);}搜索结果的延迟(10);//延迟10毫秒

}

Arduino轮询传感器并做出相应的反应,以确保永远不会倾斜得太高或太低。光线的差异决定了跟踪器的反应速度。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分