SHOW:
|
|
- or go back to the newest paste.
1 | - | // Medição da Tensão Vcc do Arduino ATmega328 - Gustavo Murta 01/ago/2015 |
1 | + | // teste do Vout do sensor ACS712-30A com Arduino ATmega328 - Gustavo Murta 01/ago/2015 |
2 | // http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/ | |
3 | // https://code.google.com/p/tinkerit/wiki/SecretVoltmeter | |
4 | ||
5 | long readVcc() { | |
6 | // Leitura da tensão de Referencia de 1.1V para calcular AVcc | |
7 | // Configura Referencia do ADC para Vcc | |
8 | ||
9 | ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); | |
10 | ||
11 | delay(2); // Aguarda estabilização da Tensão Vref | |
12 | ADCSRA |= _BV(ADSC); // Inicia a conversão ADC | |
13 | while (bit_is_set(ADCSRA,ADSC)); // Comeca a leitura | |
14 | ||
15 | uint8_t low = ADCL; // Lê primeiro o registrador ADCL e depois o ADCH | |
16 | uint8_t high = ADCH; // destrava os dois registradores | |
17 | ||
18 | long result = (high<<8) | low; // Formata o resultado | |
19 | ||
20 | - | result = 1137254L / result; // Cálculo do Vcc (em mV); 1137254 = 1.1106*1024*1000 |
20 | + | // Conversor ADC do Arduino já calibrado |
21 | result = 1137330L / result; // Cálculo do Vcc (em mV) 1137330= 1.11176*1023*1000 | |
22 | return result; // Vcc em millivolts | |
23 | } | |
24 | - | // Primeiro readVcc = 4962 mV e medido com multimetro = 5,01 V |
24 | + | |
25 | - | // result = 1126400L / result; // Primeiro cálculo do Vcc (in mV); 1126400 = 1.1*1024*1000 |
25 | + | |
26 | - | // |
26 | + | |
27 | - | // 1.1Vrefcalc = 1.1 * Vcc1 (Multimetro) / Vcc2 (funcao readVcc) |
27 | + | |
28 | - | // escala = 1.1Vrefcalc * 1024 * 1000 |
28 | + | |
29 | - | // escala = 1137254 |
29 | + | |
30 | - | // Após calibração => medido = 5,01 V e readVcc = 5,009 V |
30 | + | long Vcc = (readVcc()); |
31 | - | // Despreze sempre a primeira leitura |
31 | + | |
32 | Serial.print(Vcc); | |
33 | Serial.println(" mV" ); | |
34 | ||
35 | int Vin = analogRead(A2)+1 ; // leitura da tensão no pino A2 + LSB | |
36 | long Vout = (Vin * Vcc) / 1023; | |
37 | Serial.print("Vout = " ); | |
38 | - | Serial.print( readVcc(), DEC ); |
38 | + | Serial.print( Vout ); // Vout do sensor ACS712-30A |
39 | Serial.println(" mV" ); | |
40 | Serial.println (); | |
41 | ||
42 | delay(1000); | |
43 | } |