1. 程式人生 > >智能小車二十一 《電壓檢測模塊設計》

智能小車二十一 《電壓檢測模塊設計》

引腳 電源 mode 技術 檢測模塊 write 個數 波特 用兩個

小車經常出現一個問題:玩著玩著,操作它前後左右動,但它不動。這時候就不知道到底是那兒的問題,是線斷了還是電壓不夠了。經過我很多次的經驗得出,這是因為沒電了。因為我每次這時候都會拿電壓表去測一下,發現電池電壓都在6v以下了。根據這個線索我設計了一個小電路來測電壓。

技術分享

我計劃是用小led燈來報警,當電壓不足時,燈就常亮。電壓不夠時(6v)一般小燈還是能夠點亮的。經查資料,5mm小燈的工作電流是20ma,紅、黃顏色電壓是1.8-2.4之間,藍、白、綠的電壓則是3.0-3.6之間.我現在有一個白燈,那麽需要的電阻上的電壓是2v(5v-3v),而電阻是20ma,那麽電阻值就應該是100歐(2/0.02)。上面是計算出的理論值,而我實際測試發現220歐的太亮,用10k歐的亮度還比較合適,電壓是2.6v。我就用這個電阻了。

技術分享



測試的電壓需小於5v,那麽最小電阻是250歐(5/0.02)。因為這兩電阻要直接串到電源兩端,相當於放電,那麽電阻要足夠大,這樣電流比較小才不會很快放完電。我用兩個440k的,這樣電流是2微安,應該可以了。

技術分享

最終搭建電路效果如圖:

技術分享

最後是寫代碼來測試電壓與控制小燈的開和關。代碼如下:
float tVoltage=0;//ao讀取電壓值
float tCurrent; //電流
float tResistance=500000;//電阻
int tVcc=5;//電壓換算單位,最大5v
int limitVoltage=3;//電壓在這個數以下就報警
int time=0;//計數
int lightFlagPin=3;//電燈開頭引腳
void setup() {
pinMode(lightFlagPin,OUTPUT);
digitalWrite(lightFlagPin,LOW);
Serial.begin(9600); //定義串口波特率為9600
}

void loop() {
time=time+1;
tVoltage = analogRead(A0); //讀取A0口值
tVoltage=tVoltage/1023*tVcc; //換算為電壓值
if(tVoltage<limitVoltage){
digitalWrite(lightFlagPin,HIGH);
}else{
digitalWrite(lightFlagPin,LOW);
}
tCurrent=tVoltage/tResistance;
delay(3000); // 3秒刷新一次
}

智能小車二十一 《電壓檢測模塊設計》