Arduino: Projeto Capacimetro e Ohmmimetro
Hoje, abordaremos um projeto que vai ser daqueles que são muito úteis de ter perto, um testador de componentes. O código eu não fiz 100%, algumas questões tive que pesquisar para fazer poder fazer e como faz tempo boa parte já esqueci. Eu tive essa ideia a um bom tempo mas ela foi maturada quando vi um video de um gringo que fez algo similar mas que gostei bastante, então busquei fazer parecido. Foi um projeto muito interessante de se fazer e futuramente talvez eu solde ele em alguma PCB pra ficar usando forever pra testar outros projetos em arduino assim como o do oscilóscópio que já está soldado.
Itens necessários
Este projeto não ficou 100% como deveria, no inicio ele tinha uma precisão maior, não sei se meus componentes já estão velhos ou a precisão não está calibrada exatamente. Nesse caso, esse projeto só precisa de componentes mesmo, ja que o código usado pode ser aproveitado para inumeras placas arduino.
- Alguns componentes como resistores, diodos, leds e capacitores para testar;
- 2 resistores (Um de 2.2kohms e outro de 220 ohms);
- 1 Botão push;
- 1 Display Oled 128x32 SSD1306;
- 1 Placa Arduino
- 1 Buzzer para o “barulhinho”;
- 1 Sensor BMP180 para temperatura e umidade;
- 1 Potênciometro de qualquer valor, o importante é ele controlar o sinal PWM;
As ligações devem ser feitas da seguinte forma:
A configuração acima tem 3 inputs básicos, infelismente não pude fazer ficar apenas 2, mas temos 3 configurações, uma para ler o sinal analógico do primeiro input, que pode servir tanto para sensores arduino quanto para outros, outra para o sinal PWM, que só pode ser emitido com um potenciometro ligado na primeira configuração, e outra que serve como o nosso testador. Nele, podemos testar a capacitância de capacidores, a voltagem de consumo de diodos e testar resistores. Obviamente não está tão preciso quanto eu queria, mas dá pra ter uma noção se algum componente está funcionando +-.
A seguir teremos o código completo do projeto
O coração desse esquema, é a função readVcc, ela nos permite pegar com maior precisão a voltagem da placa em millivolts para não usarmos uma constante padrão. Assim nossas medições podem ser mais precisas (infelismente no caso dos capacitores a leitura não ficou tão precisa, não sei se são os capacitores ou se com o passar do tempo o projeto deu aquela envelhecida).
long readVcc() { // retirado de https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
// Read 1.1V reference against AVcc
// set the reference to Vcc and the measurement to the internal 1.1V reference
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0);
#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
ADMUX = _BV(MUX3) | _BV(MUX2);
#else
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#endif
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Start conversion
while (bit_is_set(ADCSRA, ADSC)); // measuring
uint8_t low = ADCL; // must read ADCL first - it then locks ADCH
uint8_t high = ADCH; // unlocks both
long result = (high << 8) | low;
result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
return result; // Vcc in millivolts
}
Não vou explicar cada função pois tentei escrever o código de modo que ficasse fácil de ler, então não acredito que terá duvidas a respeito. Talvez apenas em como as equações são feitas.
No final do projeto eu fiz uma solda simples para que ele ficasse bacana, e tentei criar uma base para ele. Não saiu exatamente como o planejado, mas não ficou muito feio.
A seguir algumas imagens do protótipo em funcionamento.
Lendo o sinal analógico
Emitindo sinal PWM
Capacimetro
Ohmmimetro
Diodimetro / Drop voltage
Leituras do BMP 180
Até a proxima!