Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino mega2560 + ethernet shield oszczędność energii

04 Kwi 2013 11:54 4230 2
  • Poziom 18  
    Witam,

    Nie mam żadnego problemu, ale chciałem się podzielić moimi doświadczeniami z arduino i ethernetem z chipem w5100 w roli monitora działki. Działka zasilana z ogniw fotowoltaicznych 90W + akumulator 80Ah więc mały pobór prądu to priorytet. Urządzenie komunikuje się z serwerem co 30 minut.

    Układ zbudowany na Arduino mega2560 + ethernet shield jako prototyp, i chyba tak zostanie :)

    Schemat blokowy:
    dzialka (alarm -> mega -> ethernet shield -> router3g) -> dom (serwer)

    Podstawowy problem to oszczędność energii, arduino ethernet shield na w5100 nie ma żadnego trybu power down, bierze 150mA non stop. To prawie drugie tyle co alarm. Router 3g bierze 250mA (TP-LINK wersja mini), wszystko dla 5V.

    Pobór prądu:
    Arduino mega ~30mA
    Ethernet shield ~150mA
    Alarm ~180mA
    Router3g ~250mA

    Sporo jak na stałe obciążenie dobowe. Tak więc zastosowałem następujące triki:

    - Arduino wchodzi co 2 sekundy na 8 sekund w tryb power down wybudzany przerwaniem watchdoga. Cykle są więc 10 sekundowe. Można użyć przerwania zewnętrznego i ne555 ale chwilowo jest to WD.
    - Raz na pół godziny uruchamia router3g na 3 minuty aby przesłać poprzez ethernet shield i router3g dane do serwera. (1.5 minuty power-up routera, 1 minuta zestawienie połączenia i tunelu VPN, 0.5 minuty na transmisję) Następnie router jest wyłączany.

    Zagadnienia:
    - Alarm, jak to alarm chodzi non-stop.
    - w5100 nie ma trybu power down.

    I tu pojawił się problem, dane potrzebuje wysłać co 30 minut, dlaczego więc w5100 ma pobierać 150mA całą dobę. No niestety tryb power down pokazał się dopiero w w5200 który u nas jest trudno dostępny, poza tym mam już płytkę z w5100. Fora zagraniczne naświetliły ten sam problem, ludzie szukają power down a nie ma. Pomyślałem co za problem, ethernet shield zasila się z 5V i ma własny regulator 3.3V, odgiąłem piny GND dałem 2n2222 sterowany jednym z pinów megi i nic, układ pozostaje dalej zasilany. Cała sztuka to odgiąć piny GND nie tylko ze złączy po obu bokach (2xGND + 1xGND) ale i złącze SPI ma GND, wszystkie są zmostkowane (pastwie się nad GND po 2N2222 to NPN). Po tym zabiegu tranzystor elegancko steruje płytką ethernet shield (2N2222 800mA vs 150mA). Programowo to dziecinnie proste, w funkcji wysłania komunikacji wywołuje 2 funkcje, na początku i końcu (o ile nie wystąpią błędy) właczenia routera i płytki oraz wyłączenia routera i płytki. Dodatkowo prosta obsługa retransmisji która nie pozwoli na wyłączenie płytki i routera nim transmisja nie osiągnie 3 powtórzeń lub zakończy się pomyślnie.


    Daje to 3 tryby pracy:
    - Transmisja 610mA przez 2.4 godzin / dobe
    - Pomiar 210mA przez 4.3 godzin /dobe
    - Standby 185mA przez 17.2 godzin / dobe

    Przy akumulatorze 80Ah i zerowym ładowaniu na skutek zachmurzenia może się zasilać przez 9dni co uważam za wartość akceptowalną. Bez wyłączania ethernetu było by to już tylko 5.5 dnia, różnica jest spora za jeden 2n2222.


    void etherStart() {
    digitalWrite(etherPin, HIGH); // wlacz ethernet shield
    delay(50); //czas na stabilizacje
    Serial3.println("Ether: Requesting IP...");
    Ethernet.begin(mac); //moduł był bez zasilania wiec nic nie wie...
    Serial3.print("Ether: My IP address: ");
    Serial3.print(Ethernet.localIP());
    Serial3.println();
    }

    void etherStop() {
    client.stop();
    digitalWrite(etherPin, LOW);
    }


    Ktoś zapyta po co router, a po to że korzystam z Aero2 więc za darmo jednocześnie mam internet na działce. Gdy alarm jest rozbrojony funkcja oszczędzania energii jest wyłączana i router zasilany non stop. Monitor zakłada że jak są domownicy to wiedzą co robią.

    Może się komuś przyda do w5100.


    Pzdr,
    M
  • Moderator Mikrokontrolery Projektowanie
    A nie prościej do zbierania i wysyłania wyników zastosować np. ZigBee - na pastylce od zegarka działa to latami. A nawet tańszy moduł np. RFM22. Średnie zużycie wyszłoby z pewnością poniżej 1 mA bez nadmiernych cudów. ATMega też ma tryby power down, można je wykorzystać, albo zastosować inny AVR - moc obliczeniowa nie jest potrzebna, spokojnie w trybie aktywnym taka np. XMEGA zejdzie poniżej 1-2mA, a średnio grubo poniżej 1 mA.
    BTW, odłączając moduł poprzez odcięcie Vcc trzeba pamiętać o właściwym ustawieniu portów sterujących - w przeciwnym p[rzypadku moduł będzie zasilany przez piny IO, co grozi uszkodzeniem procka i modułu. Do odcinania Vcc wygodnie jest też używać tranzystory P-MOSFET.
  • Poziom 18  
    Pewnie kolego można to znacznie uprościć, miałem pod ręką arduino i miał to być prototyp. Nie chciało mi się męczyć z żelazkowym transferem a tu same gotowe klocki. Oczywiście można usypiac atmegę i wzbudzać po 13 minutach i po innym dowolnym czasie przerwaniem zewnętrznym i inne różne bajery też można.


    To jest tylko hint dla ludków co już mają w5100 arduino i męczyli odginanie pinów zapominając o zlączu SPI. Nie jest to najlepszy sposób na osiągnięcie celu :)


    Odnośnie portów to mega porty ma ustawione w czasie inicjacji programu, jej nie wyłączam tylko usypiam, natomiast za inicjację wyłączanego w5100 odpowiada biblioteka Ethernet i funkcja Ethernet.begin();

    Tutaj ciężko się troche odnieść do gołej megi ponieważ arduino wprowadza swoje biblioteki które w zasadzie kod znacznie upraszczają, caly stos IP, obsługa przerwań etc. Taki dummy mode, w szoku byłem że nigdzie nie trzeba pisać bezpośrednio do rejestrów, wywołujesz funkcję i już. Np. pisanie do EEPROMU to tylko to:

    void writeEEPROMbigInt(int p_address, int p_value) {
    byte lowByte = ((p_value >> 0) & 0xFF);
    byte highByte = ((p_value >> 8) & 0xFF);
    EEPROM.write(p_address, lowByte);
    EEPROM.write(p_address + 1, highByte);
    }

    Żadnych rejestrów czy flag nie ustawiam, wszystko robi biblioteka EEPROM. Moim zdaniem do robienia prototypów fajna sprawa.


    Odnośnie RFM22 to może to by zdało egzamin w ramach tej samej nieruchomości. Kiedyś używałem RFM22 do zbierania danych z czujników temperatury w różnych pokojach. Działkę mam 60km od domu więc polegam na 3g :)


    M