步驟1:
取決于您用作跟蹤機制的內容,您的可能與我的有所不同。
I從購物者那里拿起一個通常用于剃須或化妝的放大鏡。它有一個底座和一個可上下旋轉鏡子的轉環。我切掉了轉環的一側,然后換了一個伺服器。我進行了測量,以使伺服器的軸與鏡子的旋轉點對齊。然后我不得不在伺服軸上鉆一個孔。
我用熱膠和扎帶將伺服器固定到基座上,然后將伺服軸固定在我鉆的孔內。
步驟2:X軸
我標記了底座的大致中心并鉆了一個大孔足以擰入用于伺服電樞的固定螺絲。然后我將電樞熱粘合到基座的下側,確保不要在鉆孔的孔中粘上膠。
膠干后,我將伺服器固定并擰緊
步驟3:傳感器
我使用了3個光傳感器和1個傾斜傳感器。您可以用LED或光電晶體管代替CDS電池,和/或用汞開關代替滾珠軸承的傾斜傳感器,但是您的代碼必須能反映出這種變化。每個光傳感器和位于另一端的2針接頭可輕松連接到面包板上。在電線的裸露部分上使用膠帶/熱收縮/液體絕緣體,以免它們短路。
完成后,圍繞鏡面的圓周以相等的間隔熱粘合傳感器。我放置了傳感器,使傳感器的收集面與鏡子的平面平行,并與中心稍微成角度。
我發現的傾斜傳感器是一個塑料盒,其中有四個觸點,里面有一個滾珠軸承。該傳感器可防止跟蹤器指向地面,并為y軸提供一個終點擋塊。
將焊線連接到傾斜傳感器的4個引腳上,然后將其膠粘在反光鏡的背面,并使導線水平放置。鏡子指向上方,BB應該放在2條中間引線上。
我上傳的圖像與傾斜傳感器相似但不完全相同。我使用的一根導線只有4條。
第4步:接線
看圖片的接線圖和原理圖。 (對混亂的示意圖感到抱歉,仍在學習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輪詢傳感器并做出相應的反應,以確保永遠不會傾斜得太高或太低。光線的差異決定了跟蹤器的反應速度。
-
太陽能
+關注
關注
37文章
3433瀏覽量
114450 -
跟蹤器
+關注
關注
0文章
131瀏覽量
20067 -
Arduino
+關注
關注
188文章
6477瀏覽量
187602
發布評論請先 登錄
相關推薦
評論