nRF24L01 multi sensor

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: nRF24L01 multi sensor

Příspěvek od ohruska » 28 pro 2017, 09:07

Dnes jsem testoval uspávací režim arduina. Pro úsporu energie z baterie to bude přínos.
Na arduinu nano se spotřeba sníží asi 3x na 3.2mA.

Kód: Vybrat vše

// potřebné knihovny
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
 
#define LED_PIN (11) // pojmenování pinu 13
 
// zde se bude ukládat zda přišel impuls z watchdog timeru
// hodnota 1 simuluje impuls po zapnutí, aby jsme nečekali
volatile int impuls_z_wdt=1;
// zde se ukládají impulsy
volatile int citac_impulsu= 2;
// zde nastavíme potřebný počet impulsů
// podle nastavení WDT viz níže je jeden impuls 8 sekund
volatile int impulsu_ke_spusteni = 2;
 
/* klíčové slovo volatile říká kompilítoru jak má zacházet z proměnou
   načte proměné z paměti RAM a ne z paměťového registru. Vzhledem k
   spánkovému režimu budou tyto hodnoty určitě poté přesné.
*/
 
 
 
// impuls z WATCHDOG TIMERU /////////////////
ISR(WDT_vect)
{
  //když je proměnná impuls_z_wdt na 0
  if(impuls_z_wdt == 0)
  {
    // zapiš do proměnné 1
    impuls_z_wdt=1;
  }
}
 
 
void enterSleep(void)
{
  //nastavení nejúspornějšího módu
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  // spánkový režim je povolený
  sleep_enable();  
  // spuštění režimu spánku
  sleep_mode();
 
  // tady bude program pokračovat když se probudí
 
  // spánek zakázán
  sleep_disable();  
  //znovu zapojení všech funkcí
  power_all_enable();
}
 
 
 
void setup()
{
   //nastaví pin 13 jako výstup
  pinMode(LED_PIN,OUTPUT);
 
  // nastavení WATCHDOG TIMERU    
  MCUSR &= ~(1<<WDRF); // neřešte
  WDTCSR |= (1<<WDCE) | (1<<WDE); // neřešte
 
  // nastavení času impulsu
  WDTCSR = 1<<WDP0 | 1<<WDP3; // 8 sekund, WDTCSR = B0110 --> 1 sekunda
 
  WDTCSR |= _BV(WDIE); //neřešte
}
 
 
void loop()
{
  //když je impuls z WATCHDOG TIMERU a zároveň i potřebný jejich počet
  if ((impuls_z_wdt == 1) & (impulsu_ke_spusteni == citac_impulsu))
  {
    ///////////////////////////////////////////////////////////////
    // zde je ukázkový kód, upravte si sami podle potřeby
    digitalWrite(LED_PIN, HIGH);
    delay(3000);
    digitalWrite(LED_PIN, LOW);
    // konec ukázkového kódu, který se v nastaveném intervalu
    // bude provádět
    //////////////////////////////////////////////////////////////
   
    citac_impulsu = 0;// vynuluj čítač
    impuls_z_wdt = 0; // vynuluj impuls    
    enterSleep();// znovu do spánku
  }
  else
  {
    enterSleep();//znovu do spánku
  }
  citac_impulsu++; // inpuls se přičte i když nic neproběhlo  
}

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: nRF24L01 multi sensor

Příspěvek od ohruska » 05 led 2018, 23:08

Jenom pro doplnění, jak lze snížit spotřebu odstraněním diody "power" a stabilizátoru. Na grafu je vidět režim sleep a krátce režim normal.
nano_bat.jpg

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

Re: nRF24L01 multi sensor

Příspěvek od pavel1tu » 06 led 2018, 09:50

ohruska píše:
05 led 2018, 23:08
Jenom pro doplnění, jak lze snížit spotřebu odstraněním diody "power" a stabilizátoru. Na grafu je vidět režim sleep a krátce režim normal.
nano_bat.jpg
Pěkné,
je toho i dost na netu, co se ale opomíjí jsou další věci připojené k Arduinu, docela mne zaráží, že se používá WiFi k řenosu pár metrů, když je to doslova energetický žrout.
Já nemám WiFi modul, myslíš že by jsi někdy změřil kolik Arduino žere v různých fázích používání WiFi (připojování k routeru, přenos dat, sleep mod), ja to teď budu konečně měřit na těch RFM69, ale měřák co tu nově mám má k PC připojení jen po USB a zatím neumím nastavit rychlost vzorkování do grafu a další věci - manuál je anglicky.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: nRF24L01 multi sensor

Příspěvek od ohruska » 06 led 2018, 11:28

Při vysílání by ten modul nRF24L01, měl žrát 12mA a po vysílání se i modul uspí a žere 32µA.

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: nRF24L01 multi sensor

Příspěvek od ohruska » 07 úno 2018, 17:20

Zdravím.
Jenom, pro doplnění.
Protože jsem tvor líný, tak jsem testoval připojení další sady jednotek, tedy + dalších 6 vysílačů na jeden přijímač.
Zjistil jsem, že to není žádný problém. Stačí nadefinovat další sadu šesti adres a v hlavní smyčce programu přepínat čtení z první šestice a z druhé šestice s prodlevou 1sekundy. Tak by se mělo dát přidávat až do vyčerpání počtu volných komunikačních kanálů.
Celkové zpracování všech dat by mělo být 1x za minutu. Už se těším až budu mít všechny komponenty a začnu to skládat.

Odpovědět

Kdo je online

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