po nějakých hracích projektech s Arduinem jsem si řekl, že udělám/zbastlím i něco užitečného a protože nám kapala trubka pod vanou, volba padla na jednoduchý alarm na přítomnost vody na podlaze s napájením na baterii.
Baterie: 2x do série 18650 ze starého NTB připojená na VIN
Deska: klon Arduino Nano s ATMEGA328P
Alarm: jednoduchý malý bzučák napájený přímo z desky
Senzor vody: jednoduché plíšky, které mají mezi sebou houbičku s kuchyňskou solí
Měřil jsem spotřebu na jednoduchém multimetru a postupně dělal úpravy, které jsem vypozoroval/vyčetl na internetu :
Odběr bez úprav: 24,7mA
"nepotřebné" piny nastavené jako Output 18,0mA
přetaktování na 8 MHz 13,2mA
přetaktování na 4 MHz 11,2mA
přetaktování na 2 MHz 8,5mA
vypnutí ADC 8,4mA
sleep mod 6,8mA
Odstranění LED signalizující napájení 3.7mA
změna napájecího pinu z VIN na 5V a zapojní baterek paralelně 3,4mA
Vyhození regulátoru 0,74mA
Odpájení pinu 1 (levý horní) na ATMEGA čipu 0,65mA
Pokud na konec do Setupu vložím delay na potvzení, že to uspím, mám v průběhu delay odběr 1,46mA, pak to klesne na 0,74mA (aktuálně mám připájený pin1, abych mohl programovat přes USB)
U malých hodnot jsem pak přepínal na rozsah mikroA a cca to odpovídalo (existuje klávesová zkratka na mikro? ).
Tady je kód:
Kód: Vybrat vše
#include "LowPower.h"
int stav = 0;
void wakeUp() {
//handler for the pin interrupt
}
void setup() {
CLKPR = 0x80;
CLKPR = 0x04;
pinMode(2, INPUT);
for(int i=3; i<20; i++){
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
}
void loop() {
attachInterrupt(0, wakeUp, LOW);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
detachInterrupt(0);
stav = digitalRead(2);
if(stav == HIGH){
tone(4, 700, 250);
}
}
Omlouvám se, jestli je to stupidní dotaz, ale stále se nemůžu dostat na různě uváděné odběry v jednotkách mikro. Co dělám špatně ?