本帖最后由 胡椒就是我 于 2018-3-15 04:58 编辑
最近闲来无事,于是买了一个电流传感器,我这个的测量范围是-30A到+30A
霍尔效应的基本原理我就不多说了,不清楚的可以回去翻一下初中课本。需要注意的一点是,当通电的时候,10位AD端口显示的不是0,而是在511左右变化,也就是说,初始电压不是0V,而是在2.5V 左右上下波动。
因为我买的是-30A 到 30 A ,所以我查了一下datasheet
所以我的灵敏度是0.066A基本注意事项解释完之后, 下面出代码。 [mw_shl_code=c,true]/*
* Author: Pfeffer
* Gassensor ACS712 Empfindlichkeit:0.066
*/
#define acs712 A0
float vpp = 0.0048828125;
float sensitivity = 0.066;
void setup(){
pinMode(acs712,INPUT);
Serial.begin(9600);
}
void loop(){
int counts = analogRead(acs712)+1;
float voltage = counts*vpp;
voltage -=2.5;// take away 2.5 v
float amperage = voltage/sensitivity;
Serial.println("amperage: "+String(amperage));
delay(500);
}[/mw_shl_code]
[size=14.6667px]代码上传后的提示1 :[size=14.6667px]er Sketch verwendet 5858 Bytes [size=14.6667px](18%) des Programmspeicherplatzes.[size=14.6667px] Das Maximum sind 32256 Bytes. Globale Variablen verwenden 208 Bytes (10%) des dynamischen Speichers, 1840 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes. 结论: SRAM动态内存还可以优化. 我来再加点料. 程序上传之后,没有通电,串口如下: 通电之后, 用的电池(单位是安培): [mw_shl_code=c,true]/*
* Author: pfeffer
* Gassensor ACS712 Empfindlichkeit: 0.185V/A
*/
#define acs712 A0
const float PROGMEM vpp = 0.0048828125;//将常量存放在flash里面
const float PROGMEM sensitivity = 0.066;
void setup(){
pinMode(acs712,INPUT);
Serial.begin(9600);
}
void loop(){
float counts = analogRead(acs712)+1;
float voltage = counts*vpp;
voltage -=2.5;// take away 2.5 v
float amperage = voltage/sensitivity;
Serial.print(F("amperage: "));
//Serial.println(“Taichi-Maker”),这个里面有字符串, 原来这个是存储在SRAM, 但是这样会消耗资源, 那么该怎么办呢? 我们可以该改写 Serial.println(F("amperage: ") ) ;
Serial.println(String(amperage));
delay(500);
}[/mw_shl_code]
[size=14.6667px]代码上传后的提示2 :Der Sketch verwendet 5642 Bytes (17%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes. Globale Variablen verwenden 198 Bytes (9%) des dynamischen Speichers, 1850 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes. 结论: SRAM动态内存明显被优化了.
|