Odběr klonu Nano při spánku

speedy_xx
Příspěvky: 4
Registrován: 08 srp 2020, 20:09
Reputation: 0

Odběr klonu Nano při spánku

Příspěvek od speedy_xx » 08 srp 2020, 21:33

Zdravím ctěné fórum,
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);
  }
}
Schéma na obrázku
schema_voda.png
schema_voda.png (6.71 KiB) Zobrazeno 4026 x
-

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ě ?

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Odběr klonu Nano při spánku

Příspěvek od KamilV » 08 srp 2020, 21:43

K tématu bohužel nevím, ale rád bych se zeptal, zda nemáš nějaký zdroj k tomu přetaktování? Díky.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Odběr klonu Nano při spánku

Příspěvek od Ludek » 08 srp 2020, 21:57

Ahoj Speedy, je to jednoduchá aplikace, a co se vykašlat na celé Arduino,
a vypálit to rovnou do brouka? Třeba ATiny 13 nebo ATtiny 25. Ty nežerou skoro nic,
a kdyby se to monitorovalo 1x za minutu na 1 milisekundu a zbytek by byl ve Sleep Mode...

speedy_xx
Příspěvky: 4
Registrován: 08 srp 2020, 20:09
Reputation: 0

Re: Odběr klonu Nano při spánku

Příspěvek od speedy_xx » 08 srp 2020, 22:12

KamilV píše:
08 srp 2020, 21:43
K tématu bohužel nevím, ale rád bych se zeptal, zda nemáš nějaký zdroj k tomu přetaktování? Díky.
nevím jestli to je přesně to video, z kterého jsem vycházel, ale mluví tam o tom cca od 2:55 min. Vychází z Datasheetu.
https://youtu.be/iMC6eG24S9g

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Odběr klonu Nano při spánku

Příspěvek od AstroMiK » 08 srp 2020, 22:17

Arduino NANO se k tomu účelu moc nehodí, protože má trvale napájený USB převodník.
Jak píše Luděk, i já bych pro něco tak jednoduchého zkusil spíš nějaké to ATtiny.

Pro bateriově napájený GSM alarm jsem použil "Arduino MINI PRO", které USB převodník nemá.
A tam se mi povedlo snížit proud na 6uA (jako značka mikro se používá malé 'U').

Tady je návod i s kódem:
http://astromik.org/raspi/gsmalarm/index.htm

speedy_xx
Příspěvky: 4
Registrován: 08 srp 2020, 20:09
Reputation: 0

Re: Odběr klonu Nano při spánku

Příspěvek od speedy_xx » 09 srp 2020, 00:29

Dík kluci za rady.

NANO jsem vybíral z důvodu že se dá programovat přes USB, ale nedomyslel jsem, že tím bude mít trvalý odběr. Nevadí, určitě poslouží na jiné pokusy, minimálně jsem se na něm něco naučil.

Jdu studovat ATtiny...
Attiny13 = Microcontroller with 1KB of programable memory
Attiny25 = Micocontroller with 2KB " "
Attiny45 = Microcontroller with 4KB " "
Attiny85 = Microcontroller with 8KB " "

můj program má teď 2200 bytů, neumím odhadnout, jestli bych ho uměl stlačit pod 2kB, nebo dokonce 1kB abych ho mohl uspat. Nebo porovnávám jabka s hruškami?
MINI PRO je taky řešení.
Vyčetl jsem, že jako programátor se dá použít např. UNO(mám verzi s vybíratelným broukem), takže ani to by neměl být problém.
Zajímavé návody od AstroMiKa, asi se nechám rád inspirovat.
Na uA (už to umím, dík :D ) se prostě musím dostat.

analytik
Příspěvky: 148
Registrován: 26 čer 2020, 12:48
Reputation: 0
Bydliště: Děčín

Re: Odběr klonu Nano při spánku

Příspěvek od analytik » 09 srp 2020, 08:37

Existuje ještě úspornější verse. Čidlo připojit na bázi NPN darlingtonu nebo v nouzi šuplíkového nf tranzistoru a do kolektoru bzučák. Nenabere-li čidlo vzdušnou vlhkost, odběr energie se limitně blíží nule.
Upravil jsem magnetický senzor uzavřených oken/dveří, který má hlasitou sirénku i napájení 3 x AG13, takže stačilo jen vykuchat jazýčkové relé, nahradit ho tranzistorem, přidat snímací elektrody a s původními baterkami vydrží léta páně. V té době totiž ještě neexistovalo Arduino ;-)

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Odběr klonu Nano při spánku

Příspěvek od AstroMiK » 09 srp 2020, 08:48

Splácal jsem takový jednoduchý kód pro ATtiny25.

Předpokládám, že voda dokáže na pinu PB2 vytvořit stav LOW.
Pro zvýšení citlivosti jsem nepoužil vnitřní Pull-Up odpor, ale zvenku jsem na pin PB2 připojil 470k proti Vcc.

V kódu je i ochrana před falešnými poplachy - voda musí vytvořit stav LOW na PB2 alespoň na 1 sekundu.
Krátkodobý LOW na PB2 sice ATtiny probudí, ale pískák ještě nespustí.
Když se PB2 přepne zpátky do HIGH, ATtiny se znova uspí.

Odběr v neaktivním stavu je tak malý, že to domácím měřákem ani nezměřím.

Velikost kódu 1186 Bajtů (57%), takže je tam i prostor pro nějaké přerušování pískání.
Teď je to jen obyčejné rychlé střídání HIGH/LOW na pinu PB0.
Funkce tone() zabírá moc paměti a kód by se do ATtiny už nevešel.

Kód: Vybrat vše

//============================================
// Hlidani vody s obvodem ATtiny25
//               verze 1
//              (9.8.2020)
//============================================
//
//
//  Zapojeni:
//=============
//                                           ATtiny25
//                                          +--\_/--+
//              nezapojeno (RESET)  - PB5  1|       |8  Vcc
//                                  - PB3  2|       |7  PB2  - INT0     - snimac vlhkosti proti GND, zvenku doplneny Pull-Up 470k proti Vcc
//                                  - PB4  3|       |6  PB1  
//                                    GND  4|       |5  PB0  - piskak (reproduktorek) spinany pres nejaky tranzistor
//                                          +-------+
//
//=============================================================================================================

#include <avr/interrupt.h>
#include <avr/sleep.h>




// ===================================================================
// Podprogram pro uspani a opetovne probuzeni ATtiny25
// Opsano ze stranek :
//    http://www.avrfreaks.net/forum/attiny85-wake-pin-interrupt-not-working

void sleep()
  {
    MCUCR &= ~_BV(ISC01); MCUCR &= ~_BV(ISC00); // The low level of INT0 generates an interrupt request.
    ADCSRA &= ~_BV(ADEN); // ADC off
    MCUCR |= _BV(SM1); MCUCR &= ~_BV(SM0); // Select "Power-down" sleep mode
    
    sleep_enable(); // Enable sleep mode
    GIMSK |= _BV(INT0); // Enable External Interrupt INT0
    
    sei(); // Enable all interrupts
    sleep_cpu(); // GO TO SLEEP
  
    cli(); // Disable all interrupts
    GIMSK &= ~_BV(INT0); // Disable External Interrupt INT0
    
    sleep_disable(); // Disable sleep mode
    ADCSRA |= _BV(ADEN); // ADC on
    
    sei(); // Enable all interrupts
  }



// ===================================================================
void setup()
  { 
    delay(500);                 // Po zapnuti napajeni chvili nic nedelej (to je kvuli zakmitavani napajeni pri zasunovani baterie)

    pinMode(2,INPUT);           // Pin pro cidlo vlhkosti
    pinMode(0,OUTPUT);          // Piskak
  }



// ===================================================================
// hlavni smycka
void loop()
  {

    sleep();                                            // Uspani do doby, nez dojde k sestupne hrane impulzu na INT0 (PB2)

    unsigned int odruseni = 1000;                       // Signal LOW na cidle vlhkosti musi trvat alespon 1 sekundu (jinak se jedna jen o nejake ruseni)
    while(digitalRead(2) == LOW and odruseni > 0)
      {
        odruseni --;
        delay(1);
      }

    while (digitalRead(2) == LOW and odruseni == 0)     // Pokud i po te 1 sekunde trva LOW na cidle vlhkosti, zacne se piskat.
      {
        digitalWrite(0,HIGH);                           // V tomhle miste se postarat o piskani, nebo treba o nejake prerusovane pipani ....)
        delayMicroseconds(300);
        digitalWrite(0,LOW);
        delayMicroseconds(300);
                               
      }
    

    // Kdyz voda klesne (PB2 se preklopi zpatky do HIGH), ATtiny se vrati na zacatek loopu, kde se znova uspi

  }
 



// ===================================================================
// Podprogram pro obslouzeni preruseni - (nic nedela, jen musi byt definovany)
ISR(INT0_vect)
    {

    }


Ukázkové video:

https://youtu.be/bkBa5Q3aMjA

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Odběr klonu Nano při spánku

Příspěvek od pavel1tu » 09 srp 2020, 22:27

Jsou jen 2 možnosti (což se píše i výše):
- použít jen ATmegu nebo ATtiny
- použít Arduino bez USB převodníku

Normálně těch jednotek i desítek mikroA dosahuji, záleží jaký SLEEP mod se využívá
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

passion
Příspěvky: 10
Registrován: 27 dub 2018, 16:33
Reputation: 0

Re: Odběr klonu Nano při spánku

Příspěvek od passion » 10 srp 2020, 09:13

Klávesová skratka pre mikro Alt + 0181

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů