智能小车21:电压检测模块设计

小车经常出现一个问题:玩着玩着,操作它前后左右动,但它不动。这时候就不知道到底是那儿的问题,是线断了还是电压不够了。经过我很多次的经验得出,这是因为没电了。因为我每次这时候都会拿电压表去测一下,发现电池电压都在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秒刷新一次
}

文/中中 浏览次数:0次   2017-08-28 08:17:19

相关阅读


评论: