wiki:Projekte/EthersexStromzaehler

Version 35 (modified by weef, 13 years ago) (diff)

more text and links

/chrome/site/flattrbutton.png

Ethersex-Stromzaehler 1.0

Ziel war, einen Stromzähler per Ethernet fernauszulesen. Dazu wurden ein Ethernet-ISM-Funk-Gateway (pollin's AVR-NetIO mit 868MHz-RFM12) sowie ein Reflex-Lichtschranken-Funk-Sensorboard (freies Design auf ATMega168/ATMega328p-Basis und RFM12) aufgebaut. Die Software auf den beteiligten embedded CPUs sollte ethersex sein - hier ist der Funktionsumfang im Vergleich zum dazu nötigen Konfigurationsaufwand hervorragend.

Unser Aufbau verwendet RFM12-Module, nicht RFM12B! Die Schaltungen werden nicht funktionieren, wenn einfach nur der (neuere) RFM12B verwendet wird! Zu den Unterschieden siehe http://news.jeelabs.org/2009/05/06/rfm12-vs-rfm12b-revisited/.


Hardware für Ethernet-ISM-Funk-Gateway

Main PCB


Grundlage für das Gate ist ein AVR-NetIO von Pollin.

Änderungen am NetIO:

  • 7805 gegen TS2940-5.0 getauscht
  • ATMega32 gegen ATMega644 getauscht
  • 4 Elkos des RS-232-Pegelwandlers auf 1µF geändert (wieder einmal 4x10µF von Pollin falsch geliefert - dafür gab es eine DIL16-Fassung mehr in dieser Wundertüte)

Um trotz der Mehrlast für das RFM12-Modul ohne Kühlkörper auszukommen, ist außer dem LDO hier ein Schaltnetzteil (Handylader) mit 5,6V DC im Einsatz.

pollin AVR-NetIO mit RFM12 als Ethernet-RF-Gateway


RFM12-Aufsatzboard

Leider ist beim Eagle-Placement der beiden Steckerwannen bei Pollin etwas schiefgegangen, oder andere Absicht hat dazu geführt, daß die beiden um einen Betrag kleiner als eine 2,54-Rastereinheit versetzt sind:

AVR_NetIO_RFM12-ethersex-Aufsatzboard_Schema AVR_NetIO_detail_ISP+EXT


Hardware für Stromzaehler-Funk-Node


Main PCB

Der Prototyp ist ein ATMega168 auf einem Drittel Eurokarte, hier noch ohne Impulsformung (und Gehäuse):

ethersex-Stromzaehler-Funk-Node: ATMega168 m. RFM12, noch ohne Impulsaufbereitung


ethersex-Stromzaehler-Funk-Node: CPU, supply, RFM12 & Impulsformung:

ISP belegt nach AVRISPConnectorVariations, rowalt.de-Version

ethersex-Stromzaehler-Funk-Node: CPU, supply, RFM12 & Impulsformung


Sensorboard

Sender ist einen SFH409 (LED5), Empfänger ein SFH309 (T1, anstelle des gezeichneten BPW81).

R11 ist historisch gewachsen und dient nur noch als Weltraumheizung. Das Gehäuse läßt sich jedoch nicht mehr zerstörungsfrei öffnen, so daß erst das nächste Modell R11 nicht mehr haben wird.


ethersex-Stromzaehler-Funk-Node: Sensorkopf am Stromzaehler:

ethersex-Stromzaehler-Funk-Node: Foto-Sensor-Board


Software

Fuses für NetIO (ATMega644, 16MHz XTAL) zur Zeit:

Fuses: low=E7 high=DC ex=FF

Engbedded Atmel AVR® Fuse Calculator

ethersex-Buildsystem

Auf beiden beteiligten AVRs läuft Ethersex.

https://www.ethersex.de/index.php/Ethersex
oder https://dokucode.de/index.php/Ethersex
oder auch https://www.zerties.org/index.php/Ethersex

Download: https://www.ethersex.de/index.php/Download

ethersex scripten

https://www.ethersex.de/index.php/Kategorie:Control6


  • control6-Support im menuconfig anschalten
[*] control6 scripts (EXPERIMENTAL)


  • control6-code

Die Umdrehungen des Stromzählers werden durch den Komparator zu Rechteck-Impulsen geformt und an INT1 (im Fall der DIP28-AVRs Port D.3, Pin 5) zur Auswertung gebracht. Folgendes control6-script stellt die dadurch inkrementierte 16bit-Variable revolutionz zur Verfügung, die als ECMD-Kommando abgefragt werden kann:

~$ echo "c6 get revolutionz" | nc -q 1 <sensor_node's_ip> 2701
revolutionz 3230
~$
CONTROL_START
        ECMD_GLOBAL(revolutionz, 0, uint16_t);
        ON STARTUP DO
 
                // Pullup-Widerstaende aktivieren
                PORTD |= _BV(PORTD3);
                DDRD |= _BV(DDD3);
                PIND &= ~_BV(PIND3);
 
                _EIMSK |= _BV(INT1);
                
                // rising edge 
                _EICRA |= _BV(ISC10);
                _EICRA |= _BV(ISC11);
        END
CONTROL_END
 
ISR(INT1_vect)
{
        revolutionz ++;
}

(inspiriert von http://dokucode.de/index.php/Counter)


  • config.mk im buildroot anlegen und Pfad und filename anpassen:
C6_SOURCE = <path_to_source>/your_c6_scriptname.src


ifdef(`conf_STATUSLED_TX', `dnl
pin(STATUSLED_TX, PD6, OUTPUT)
')dnl

ifdef(`conf_STATUSLED_RX', `dnl
pin(STATUSLED_RX, PD7, OUTPUT)
')dnl

ifdef(`conf_RFM12', `dnl
/* port the rfm12 module CS is attached to */
pin(SPI_CS_RFM12, SPI_CS_HARDWARE)
RFM12_USE_INT(0)
dnl RFM12_USE_PCINT(0, PB0)
dnl RFM12_ASK_SENSE_USE_INT(1)
/* port the LEDS for rfm12 txrx attached to */
pin(RFM12_TX_PIN, STATUSLED_TX)
pin(RFM12_RX_PIN, STATUSLED_RX)
')dnl


Auswertungsscripte

  • python-script, welches alle 30sek per tcp den counter abfragt, den value in ein rrd steckt sowie ein shellscript, welches sechs Graphen (hour, 12h, day, week, month, year) draus macht: stromzaehler_rrdscripts.tgz
/
/graph.sh
/init.sh
/fetch_value.sh
/fetch_value.py
/README
/style.css
/do_graph.sh
/gpl.txt
/index.html


Beispiel: Wochengraph

Stromgraf, Beispiel: Woche

Attachments (12)

Download all attachments as: .zip