Funk Magnetkontakt/Reed Switch zur Fenster/Tür Überwachung - TinyTx3

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
    • Offizieller Beitrag

    Ziel des Projekts:
    Kabellose Überwachung von Fenstern und Türen

    Nach jeder Statusänderung (geöffnet o. geschlossen) soll der Raspberry Pi ein Funk Signal erhalten welches weiter verarbeitet wird. Verwendungszweck könnte sein: Tür-/Fenster Überwachung, Alarmanlage usw...



    Achtung:


    Vorwort
    Durch das Projekt "Temperatur Funk Sensor" von [user]meigrafd[/user] bin ich auf die Idee gekommen einen kabellosen Tür-/Fenstersensor zu basteln. Noch einmal ein Großes Dankeschön an [user]meigrafd[/user] für seine Arbeit. Es lohnt sich wirklich sein Thema (vor allem der erste Beitrag) zu lesen.

    Grundgerüst ist dabei das Projekt "TinyTX Wireless Sensor". Darauf baut dieses Projekt eigentlich zum größten Teil auf.

    Was wird benötigt:

    Empfänger:


    Sender:


    Sonstiges :

    Sender
    Der Sender muss aus verschiedenen Bauteilen zusammen gelötet werden.
    Ich habe mir 10 PCBs des TinyTX3 von iteadstudio.com (Chinesiche Firma) fertigen lassen.
    Auf dieser Platine habe ich ein Sendermodul (RFM12B) , zwei Kerkos (100nf) sowie einen 14 Pin IC Sockel verlötet. Durch den Sockel kann ich den ATTINY84 zum programmieren herunter nehmen und wieder drauf stecken. Man kann den ATtiny auch fest verlöten. Vorher sollte er aber programmiert werden.

    Wenn man ihn danach wieder programmieren möchte muss man sich einen "IC Test Clip" besorgen. Damit ist es möglich auf fest verlötet Microcontroller zu programmieren.
    Auf dem ATtiny läuft ein Sketch welches ebenfalls von Nathan zur Verfügung gestellt wird.


    Stromversorgung: Batterien
    Ich habe mir einen Batteriehalter mit Schalter (An/Aus) besorgt in dem 3 AAA Batterien (jeweils 1,5V) Platz finden. Ich habe mir noch einen PSK Stecker an die Batterien gelötet, damit der Stecker auch immer korrekt angeschlossen wird.

    Magnetkontakt
    Auf Ebay habe ich günstige Magnetschalter gefunden die wirklich klasse verarbeitet sind.
    Diese Schalter lösen aus, sobald sich das Gegenstück zu weit von dem eigentlichen Magnetschalter entfernt. Der Magnet wird also an dem Türblatt befestigt und der Magnetkontakt (Schalter) wird an der Zarge bzw Verkleidung angebracht.
    Reed-relais-ani.gif


    Empfänger
    Der Empfänger ist ein fertiges Modul für den Raspberry Pi. Es ist das RFM12Pi V2. Man kann sich natürlich auch den Empfänger selber zusammen löten, was durchaus günstiger ist. Mehr dazu findet ihr im Thread von meigrafd.

    Antenne
    Als Antenne habe ich einen 0,8mm Kupferdraht benutzt den ich auf 165mm abgelängt habe. Dieser wird ebenfalls auf das TinyTX3 Board gelötet. Es ist auch möglich einen "Spirale" als Antenne zu benutzten, welche vielleicht sogar im Gehäuse Platz finden kann. Das habe ich aber noch nicht ausprobiert und kann auch zu der Reichweite noch nichts sagen.

    Gehäuse
    Ich habe zuerst ein kleineres Gehäuse gehabt und mit einem Dremel bearbeitet. Jetzt habe ich mich für folgendes Gehäuse entschieden:
    Universal-Gehäuse ABS Licht-Grau (RAL 7035) 112 x 62 x 31 Hammond Electronics
    Ich habe etwas Schaumstoff zurecht geschnitten und als unterste Lage verwendet. Darauf kommt dann das TinyTx Board samt Batteriehalter. Auf dem batteriehalter und dem TinyTx habe ich zusätzlich Schaumstoff platziert damit es durch den Druck vom gehäusedeckel nicht verrutschen kann. Und das tut es auch nicht.
    Damit die Kabel nach außen geführt werden könne habe ich in Gehäuse und Gehäusedeckel eine kleine Öffnung gefräst.

    Derzeit habe ich 4 Sender zusammen gelötet!


    Software zum empfangen:

    Voraussetzen ist ein Raspberry Pi mit aktuellen Raspbian. Vorab bitte per "sudo raspi-config" das Dateisystem vergrößern.
    Das Empfängermodul wird einfach nur auf die GPIO Stiftleiste aufgesteckt und schickt alle empfangenen Daten per RS232 Schnittelle an den Raspberry Pi weiter. Es muss also kein Treiber oder sonst irgendwas installiert werden.
    Ich habe ein Python Script geschrieben, mit dem ich die Werte der Sender abfange und in der Konsole ausgebe.

    Geht wie folgt vor:

    Code
    sudo apt-get update
    sudo apt-get install python-serial
    sudo wget https://raw.github.com/lurch/rpi-serial-console/master/rpi-serial-console -O /usr/bin/rpi-serial-console && sudo chmod +x /usr/bin/rpi-serial-console
    sudo rpi-serial-console disable


    Mit diesem Befehlen installiert ihr für Python die serielle Unterstützung und "deaktiviert" (bzw befreit) die RS232 Schnittelle. Diese ist auf dem Raspberry Pi standardmäßig für die Konsoleneingabe konfiguriert.

    Mit diesem einfachen Python Script könnt ihr nun die einzelnen Sender auslesen/empfangen:
    tinyserial.py

    Die Ausgabe sieht wie folgt aus:


    Wenn eure Batterien allerdings mehr als 4,5 Volt liefern müsst ihr das Script hier anpassen:

    Zitat


    supp = round(4.5/255 * float(voltage),2)


    Sonst werden euch falsche Werte ausgegeben.
    In Zukunft möchte ich die Berechnung allerdings nicht mehr auf der Seite des Empfängers machen sondern gleich die korrekten Werte vom Sender empfangen. Dazu muss ich allerdings noch die Sender umprogrammieren. Das steht noch auf meiner To-Do Liste.


    Software für die Sender:
    Hier findest du den Sketch der auf den ATtiny programmiert werden muss.
    Wie man das ganze auf den ATtiny bekommt werde ich zu einem späteren Zeitpunkt erklären.

    Sketch:


    Die Sender ID legt ihr hier fest:
    #define myNodeID 1


    Sketch auf Sender(ATtiny) hochladen:
    Arduino und ATiny verkabeln:

    Code
    Arduino  ATtiny84
    D13 Pin 9
    D12 Pin 8
    D11 Pin 7
    D10 Pin 4
    3.3V Pin 1
    GND Pin 14


    Ich habe mir mit einer Lochrasterplatine ein kleines Board zusammen gelötet welches ich direkt auf den Arduino Uno stecken kann.

    Schritt 1: Arduino IDE, WinAVR sowie Treiber installieren
    Ardunio Uno - Treiberinstallation Windows
    Als nächstes installiert ihr: WinAVR


    Schritt 2: ATtiny Core installieren
    Als erstes ändert ihr euer Sketch Verzeichnis auf z.B "C:\Sketches"

    • Arduino IDE starten
    • Datei -> Einstellungen
    • Sketchbook Speicherort auf "C:\Sketches" ändern
    • Ausfürliche Ausgabe anzeigen während: [X]Kompilierung und [X] Upload


    Da die Arduino IDE standardmäßig keine ATtinys ansprechen kann, muss die ATtinyCore installiert werden.
    Folgende Datei herunterladen:


    Den Ordner "tiny" kopiert ihr nun in folgendes Verzeichnis: "C:\Sketches\hardware".
    Als nächstes geht ihr in den Ordner "C:\Sketches\hardware\tiny" und benennt folgende Datei um:

    • Prospective Boards.txt zu boards.txt


    Nun erscheinen unter Tools -> Board viele ATtinys!


    Schritt 3: Den Arduino zum ISP machen
    Wir benutzten den Arduino Uno nur dazu um die ATtinys zu programmieren.
    Deswegen müssen wir erst einmal den Arduino zum ISP Programmierer machen.

    Das geht wie folgt:

    • Arduino Uno über USB Kabel mit PC verbinden
    • Arduino IDE starten
    • Unter Datei –> Beispiele -> ArduinoISP auswählen
    • Unter Tools –> Board -> Arduino UNO auswählen
    • Unter Programer -> AVR ISP auswählen
    • anschließend Sketch hochladen


    Schritt 4: Benötigte libraries einfügen
    Nun ladet euch folgende libraries herunter:


    Nun fügt ihr den Inhalt der Archive in "C:\Sketches\libraries" ein.
    Die Ordnerstruktur muss danach so aussehen:

    • hardware

      • tiny
    • libraries

      • JeeLib
      • PinChangeInterrupt
      • PinChangeInterruptSimple
      • TinyTuner


    Achtet auf die korrekten Ordnernamen. Im Archiv sind diese manchmal anders.


    Schritt 5: ATtiny von 1MHZ auf 8MHZ umstellen.
    Also nächstes müssen wird den ATtiny auf 8Mhz umstellen. Dazu müssen wir einen Bootloader installieren:

    • Den ATtiny korrekt (richtig herum) in die Programmiereinheit stecken
    • Tools -> Board -> ATtiny84 @8MHz (internal oscillator; BOD disabled) auswählen
    • Tools -> Programmer -> Arduino as ISP auswählen
    • Tools -> Bootloader installieren


    Achtung: Bitte ändern/installiert immer erst den korrekten Bootloader. Ich habe bei einem ATtiny zuerst den Sketch hochgeladen und mich gewundert warum es nicht funktioniert hat. Als mir auffiel, dass der ATtiny noch mit 1MHz arbeitet wollte ich den Bootloader nachträglich ändern, was mit aber nicht gelang: "Fehler beim installieren des Bootloaders"
    Also Erst Bootloader und dann den Sketch! ;)

    Schritt 6: Sketch hochladen

    • Sketch bzw Code im großes Fenster der Arduino IDE einfügen
    • Oben links auf den Haken (Überprpüfen) klicken.
    • Wenn kein Fehler aufgetreten ist klickt ihr daneben auf den Pfeil der nach Rechts zeigt (Upload).


    Danach sollte der Sketch kompiliert und hochgeladen sein. Ihr könnt den ATtiny nun aus der Programmiereinrichtung herausnehmen (vorher den Arduino Uno stromlos machen) und in den Sockel auf eurem TinyTX stecken (achtet darauf, dass er richtig herum eingesteckt wird). Nun könnt ihr die Stomversorgung herstellen und euer Sender sollte die ersten Daten senden! ;)


    Ich werde dieses Projekt weiter pfelgen und neue Erkentnisse oder Veränderungen einpflegen.

    DHT Compile Error Fix
    http://forum.arduino.cc/index.php/topic,116674.0.html


    Erweiterung: PIR Infrarotsensor sowie mehrere Magnetkontakte an einem Sender.
    Ich habe nun nach einer kleinen Pause an dem Projekt weitergearbeitet und habe nun einen PIR Bewegungssensor (HC-SR501) angeschlossen.
    Außerdem kann ich nun mehrere einzelne auswertbare Magnetkontakte an den TinyTX anschließen. Das Problem, dass die Spannung nicht korrekt übertragen wird habe ich leider noch nicht lösen können, bzw weiß nicht wo der Fehler ist.

    Hier die beiden neuen Sketche:

    Türkontakte:


    Magnetkontakte bitte wie folgt anschließen:
    Pin 10 und GND
    Pin 9 und GND
    Pin 8 und GND
    Auf dem TinyTX sind nur 2 GNDs vorhanden. Der dritte Pin unter den GND Pins ist mit nichts verbunden. Ich habe diesen einfach über eine Lötzinnbrücke verbunden.
    p9p6qccs.jpg 5chwhp5y.jpg

    In folgendem Muster werden die Werte übertragen:

    1= geschlossen
    2= geöffnet

    111 -> alle Kontakte geschlossen
    211 -> Kontakt 1:geöffnet - Kontakt 2:geschlossen - Kontakt 3:geschlossen
    221 -> Kontakt 1:geöffnet - Kontakt 2:geöffnet - Kontakt 3:geschlossen
    222 -> Kontakt 1:geöffnet - Kontakt 2:geöffnet - Kontakt 3:geöffnet
    121 -> Kontakt 1:geschlossen - Kontakt 2:geöffnet - Kontakt 3:geschlossen
    usw...


    Pir Bewegungssensor: HC-SR501


    HC-SR501 bitte wie folgt anschließen:
    HC-SR501 Pins an TinyTx
    VCC -> VCC
    OUT -> Pin 3
    GND -> GND

    Zusätzlich kann an noch eine LED angeschlossen werden.
    Pin 7 und GND

    w2gik25f.jpg defs4cus.jpg hys4dagu.png


    To-Do Liste

    • Passendes Gehäuse finden erledigt
    • Mehrer Sensoren an einem Sensor (Sketch ändern) erledigt
    • Sketch: Spannung als Zeichen übertragen sodass nicht umgerechnet werden muss
    • Raspberry Pi: Graphische Auswertung mit Webanwendung erledigt
    • Raspberry Pi: Warnung wenn Spannung eines Sensors zu gering ist!
    • Infrarot Bewegungssensor HC-SR501 anschließen erledigt

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

    Einmal editiert, zuletzt von ps915 (26. September 2015 um 20:12)

  • Funk Magnetkontakt/Reed Switch zur Fenster/Tür Überwachung - TinyTx3? Schau mal ob du hier fündig wirst!

    • Offizieller Beitrag

    Sehr gut! Sehr gut!
    Habe lange darauf gewartet ;)

    Könnte man das jetzt nicht mit dem anderen Projekt von maigrafd kombinieren? Also das man damit z.B. dann alle x Minuten die Temperatur bekommt & wenn die Tür, das Fenster geöffnet wird, die übliche Nachricht.
    So benötigte man für jedes Zimmer nur eines dieser Module.

    Man könnte dann, falls man FHEM nutzt, die Temperatur und den Status des Fensters mit der Heizungssteuerung koppeln. Also bei geöffnetem Fenster die Heizung aug 12°C.
    Des weiteren eine Art Alarmanlage damit Koppeln. Schön wäre natürlich dann, wenn noch ein Piezolautsprecher (Heißen Sie so?) damit verbunden wäre, welcher schön lärm in jedem Raum macht. Dann benötigte man jedoch einen Empfänger auf dem Modul, sowie einen Sender am Pi. Als lassen wir das lieber :D

    Was ist mit denen wie mir, die das COC von Busware nutzen? Die Pins sind da leider belegt :(

    LG & tolles Projekt!!

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

    • Offizieller Beitrag

    Kleines Update zu den Gehäusen und meinem Arduino Extension Board!



    Könnte man das jetzt nicht mit dem anderen Projekt von maigrafd kombinieren? Also das man damit z.B. dann alle x Minuten die Temperatur bekommt & wenn die Tür, das Fenster geöffnet wird, die übliche Nachricht.
    So benötigte man für jedes Zimmer nur eines dieser Module.


    Das ist theoretisch möglich. Dafür müsstest du allerdings sehr tief in die Sketches rein schauen und beide miteinander vereinen. Die Frage ist auch, ob das Script dann nicht zu groß wird und auch noch auf den ATtiny passt.


    Schön wäre natürlich dann, wenn noch ein Piezolautsprecher (Heißen Sie so?) damit verbunden wäre, welcher schön lärm in jedem Raum macht. Dann benötigte man jedoch einen Empfänger auf dem Modul, sowie einen Sender am Pi. Als lassen wir das lieber :D


    Ich würde einen 12V Piezo Summer am Raspberry Pi (Empfänger) nehmen. Der macht ordentlich Krach. Im übrigen sind alle Sender auch Empfänger. Es sind Transreciever Module (senden/empfangen). Wenn jeder Sensor einen Summer hätte würde das die Batterielaufzeit aber sehr verrringern.



    Was ist mit denen wie mir, die das COC von Busware nutzen? Die Pins sind da leider belegt :(


    Ich habe auch ein COC. Man müsste schauen, welche Pins von beiden belegt werden und diese dann anders an die GPIOs anschließen! ;) Ich denke ich werde mein COC verkaufen. Noch nie benutzt und die Hardware dazu ist mir zu teuer!

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

  • Hey, super Thread. Werde glaube ich morgen mal fleißig bestellen.
    Kann es sein das die links nicht ganz richtig sind?

    Und[font="Tahoma, Verdana, Arial, sans-serif"] wo bekomme ich diese TinyTx3 PCB her?[/font]

    [font="Tahoma, Verdana, Arial, sans-serif"]Gruß Simon[/font]

    • Offizieller Beitrag


    super Sache. Hast du schon Erfahrungswerte, wie lange die Batterien ca. halten, bei Verwendung dieser Sketches?


    Bis jetzt halten Sie! ;) Ich kann demnächst mal die aktuelle Spannung messen.
    Ich habe ca 800 Events in der DB. Daraus könnte man schließen wie viele Übertragungen möglich sind.
    Da aber nur ein paar mal am Tag gesendet wird, nicht wie beim Tempsensor alle x Sekunden, gehe ich von einer sehr extrem langen Laufzeit aus.



    Hey, super Thread. Werde glaube ich morgen mal fleißig bestellen.
    Kann es sein das die links nicht ganz richtig sind?


    Danke dir! =) Welche Links meinst du genau?


    Und wo bekomme ich diese TinyTx3 PCB her?


    Ich habe mir 10 PCBs in China fertigen lassen. Der Bestellvorgang ist nicht schwer.
    Ich habe es oben ergänzt!

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

  • Hi ps915,

    vorab Danke für die Beschreibung. Wirklich top.
    Möchte dies gerade nachbauen. Habe dies auch theoretisch soweit hinbekommen. Inkl. Tiny aus China. Flashen mache ich direkt über den Pi.
    Am Pi ist auch das RFM12Pi.
    Es sollte eigentlich soweit alles passen. Leider kann ich jedoch noch kein Erfolg bei einer Übertragung/Empfang am Pi feststellen.

    Nun stelle ich mir die Frage wie ich dies am besten einschränken / debuggen kann? Bei Funk tue ich mich noch ein wenig schwer.
    Wie kann ich im ersten Schritt testen ob der Tiny den Interrupt / Reed Kontakt am PIN feststellt und etwas übertragen will?
    Wie kann ich den RFM12Pi testen ob der für den Empfang vorbereitet ist? Evtl. etwa anderes auf der Frequenz nutzen?
    Hast Du auf dem RFM12Pi die Firmware angepasst / aktualisiert oder ist die wie aus dem Shop erhalten?

    Danke für Anregungen zur Fehlereingrenzung.

  • Am besten dein Problem in einem eigenen Thread beschreiben - mit Bezug auf dieses Tutorial

    Weil wenn jeder sein individuelles Problem direkt in den Tutorial Threads postet werden diese sehr sehr schnell unübersichtlich

    :danke_ATDE:


    PS: Da dieses Tutorial auf meinem "Temperatur Funk Sensor" basiert, findet ihr in meinem Entwicklungs Thread Möglichkeiten den ATtiny via SPI an den PI zu packen und zu debuggen etc. Einfach mal durchlesen oder entsprechend suchen, da steht irgendwie alles drin da ich jeden Schritt usw dort damals gepostet hab (wirklich jeden Schritt)


  • Am besten dein Problem in einem eigenen Thread beschreiben - mit Bezug auf dieses Tutorial

    Weil wenn jeder sein individuelles Problem direkt in den Tutorial Threads postet werden diese sehr sehr schnell unübersichtlich

    :danke_ATDE:


    PS: Da dieses Tutorial auf meinem "Temperatur Funk Sensor" basiert, findet ihr in meinem Entwicklungs Thread Möglichkeiten den ATtiny via SPI an den PI zu packen und zu debuggen etc. Einfach mal durchlesen oder entsprechend suchen, da steht irgendwie alles drin da ich jeden Schritt usw dort damals gepostet hab (wirklich jeden Schritt)

    Alles klar, dann schaue ich mal dort. Mir war nicht klar das man in der Vorstellung/Tutorial keine Fragen stellen sollte.
    Ich schaue dann in Deinem Thread bzgl. des ATtiny per SPI an den PI...
    Mal sehen ob ich dort auch etwas zu dem RFM12Pi finde, der ja explizit hier zum Einsatz kam...
    Ansonsten neuer Thread...

  • ps915,

    ich habe gesehen, Du hast Deine To-Do Liste in ersten Beitrag bearbeitet.
    Hast Du neue Erkenntnisse, insb. mit den Spannungen? Ich kämpfe noch mit dem Verstehen der Sketche etc. ;)
    Dein Sketch für mehrere Sensoren an einem Sensor würde mich interessieren.
    Was wertest Du grafisch aus?
    Mit dem Infrarot Bewegungssensor HC-SR501 hast Du Deine angesprochene Alarmanlage realisiert, oder? Vom Sketch her sicherlich identisch zu den Reed/Switch, oder?
    Ach und eine Grundsatzfrage, wirst Du für Deine Projekte bei dem RFM12Pi_V2 bleiben? Bzw. nutzt Du den derzeit noch? Wie ich verstanden habe für die Alarmanlage ja. Ist die FW darauf unverändert?

    Einmal editiert, zuletzt von giovanne (15. Juni 2014 um 09:30)

    • Offizieller Beitrag

    PROJEKTUPDATE:

    • mehrere Sensoren pro Sender
    • PIR Bewegungsmelder
    • grafische Auswertung


    Nein, mit der Spannung habe ich mich noch nicht wirklich auseinandergesetzt. Ich wüsste auch nicht wo ich da anfangen sollte.
    Ich denke ich werde meine Software des RFM12Pi V1 anpassen, sodass ich Klartext empfangen kann. Da dies aber mein Erstes Projekt mit Mikrocontrollern ist und ich in C so gut wie keine Erfahrung habe dauert es noch ein wenig, es sein denn jemand kennt sich damit aus und hilft uns dabei! ;)

    Den Sketch für mehrere Sensoren und für den Bewegungsmelder habe ich hoch geladen.

    Derzeit nutze ich noch den V2 mit der originalen Firmware. Dieser kann aber mit den Sketches von Nathan keine Spannungswerte empfangen soweit ich es getestet habe. Deswegen werde ich auf Dauer auf den V1 umswitchen. Da ich aber denke, dass die Batterien bei den wenigen Funksendungen ewig halten werden, habe ich das erst mal ans Ende meiner To-Do Liste verbannt. Generell wäre es natürlich schön die einzelnen Spannungen einzusehen und eine Warnung zu bekommen wenn eine Spannung zu niedrig ist! ;)

    Soweit zu meinem aktuellen Projektstatus!

    ps915

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

  • giovanne: Bitte gewöhn es dir ab Beiträge die genau dadrüber stehen vollständig zu quoten! Das macht die Seite ebenfalls unnötig unübersichtlich und überladen (und schenk dir diesmal ne Anmerkung das du das nicht wusstest oder bla)
    Und erneut noch mals die Bitte deine individuellen (verständnis)Probleme in einem eigenen Thread zu stellen


    ps915: Ich wüßte jetzt nicht wieso Du nicht einfach meinen Sketch für den Empfänger nutzen können solltest - mit unserer letzten Entwicklung ( TinyRX4 ) haben wir uns auch am RFM2PI rev3 orientiert, also das PCB Layout entspricht diesem.. So wie ich es auch schon > hier < zusammengefasst hab.
    Die Verkabelung usw ist also identisch bzw muss es ja auch da das RFM12B Module immer gleich angesprochen wird und auch da der ATTiny84 verbaut wurde und via SPI angesprochen wird..

    Euer Problem mit der SupplyVoltage wird vermutlich die Binäre Übertragung sein - die ich aufgrund ähnlicher Probleme ebenfalls ziemlich früh über board geworfen hab und auf Klartext umgestiegen bin

    Den Sketch für mehrere Sensoren sehe ich hier jetzt aber nicht :huh:

    • Offizieller Beitrag

    meigrafd

    Den Sketch für mehrere Sensoren findest du im ersten Beitrag unten. ;)

    Klar könnte ich dein Empfängersketch nutzen, doch dann müssten auch die Sendersketches angepasst werden was mir noch nicht gelungen ist mangels C Erfahrung. ;)
    Es wäre Klasse wenn du mir anhand meiner Sendersketches das mal zeigen könntest bzw meine Sketche um programmieren könntest. Ich glaube dann sind wir alle glücklich.

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

  • Ich sehe nur ein Sketch für

    • Software für die Sender
    • Türkontakte
    • Pir Bewegungssensor

    aber den Universellen sehe ich im ersten Beitrag nicht :(
    ( der Sketch für "Sender" und "Türkontakt" sieht für mich auch fast identisch aus :huh: )


    Die Sketchs auf Klartext umzuschreiben ist nicht allzu schwer - derzeit wird eben eine Struktur erzeugt die übertragen wird: Payload tinytx;
    Das muss man rausschmeissen und stattdessen oben im Sketch einen char festlegen der dann weiter unten bearbeitet und übertragen wird..
    Ich versuch das mal zu erklären.

    Als Ausgangspunkt nehme ich den Sketch aus Beitrag#1 -> Software für die Sender
    Zunächst löschen wir folgende Zeilen:

    Code
    typedef struct {
           int switchState;  // Switch state
           int supplyV;      // Supply voltage
    } Payload;
    
    
    Payload tinytx;


    Und schreiben an die Stelle stattdessen:

    Code
    // String zum Versand
    char msg[26];

    Im loop() müssen wir dann das beschreiben des tinytx. ändern/löschen und für msg einfügen.
    Zunächst aber fügen wir eine kleine Zeile ein, da das sonst zu einem Konflikt kommt:

    Direkt nach dem öffnen des loop() fügen wir folgendes ein:

    Code
    int State;

    Es wird folgendes geändert:

    Code
    tinytx.switchState = 1;


    Ersetzen mit:

    Code
    State = 1;

    Und:

    Code
    tinytx.switchState = 0;


    Ersetzen mit:

    Code
    State = 0;

    Und:

    Code
    tinytx.supplyV = readVcc();


    Ersetzen mit:

    Code
    int supplyV = readVcc();

    Nun bauen wir msg zusammen und fügen vor dem Aufruf von rfwrite(); folgendes ein:

    Code
    strcpy(msg,"v=");
     itoa(supplyV,&msg[strlen(msg)],10);
     strcat(msg,"&r=");
     itoa(State,&msg[strlen(msg)],10);

    Nun scrollen wir runter bis static void rfwrite() und ändert dort folgendes:

    Code
    rf12_sendStart(RF12_HDR_ACK, &tinytx, sizeof tinytx);


    Ersetzen mit:

    Code
    rf12_sendStart(RF12_HDR_ACK, (uint8_t *)msg, strlen(msg));

    ...Das müsste es dann eigentlich auch schon gewesen sein :)


    Zum Vergleich hier noch mal beide Sketches:

    Spoiler anzeigen

    Vorher:

    Nachher:


    Binäre Sketchgröße: 4.464 Bytes (von einem Maximum von 8.192 Bytes)

    Dann würde er zum Beispiel folgendes übertragen:

    Code
    v=3300&r=1
  • ps915,
    so wie von meigrafd beschrieben geht es sehr gut. Kannst ja auch mal versuchen.
    Ich habe zum Test mal einen Sender dementsprechend umgeschrieben. Empfänger kann das RFM12Pi_v2 mit Original-FW (bei mir Full* Version) bleiben.
    Dann z.B. das Empfänger "Sensor.pl" Script nutzen / ändern, sodass die Characters aus den übertragenen ASCII-Werten zurück ermittelt werden (steht mir nun bevor).

    Code
    Received:
    20.06.2014 14:49:54 [40 118 61 52 54 49 54 38 114 61 48] => NoteID: 8 - Value: 0 - Vcc: 4616 [mV]
                          8  v  =  4   6  1  6  &  r   =  0
    20.06.2014 15:12:31 [40 118 61 52 54 49 54 38 114 61 49 49 50 53] => NoteID: 8 - Value: 1125 - Vcc: 4616 [mV]
                          8  v  =  4   6  1  6  &  r   =  1  1  2  5

    P.S. Wenn der Beitrag hier nicht gewünscht ist, dann kurze Info. Kann ihn dann wieder löschen...

    • Offizieller Beitrag

    Oh, gar nicht bemerkt, dass meigrafd editiert hat. Klasse, vielen Dank. Das werde ich ausprobieren und berichten.

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

    • Offizieller Beitrag

    meigrafd
    Habe nun versucht den Sketch auszuführen.
    Da ich meine Nodes ohne ACK benutzte habe ich es nun einfach deaktiviert:

    Code
    //#define USE_ACK           // Enable ACKs, comment out to disable

    Leider kann ich den Code dann nicht kompilieren:

    Zitat

    reciever_meigrafd_text.ino: In function 'void rfwrite()':
    reciever_meigrafd_text:105: error: 'tinytx' was not declared in this scope

    Wie muss der Code geändert werden, damit ich doch etwas empfangen kann ohne ACK zu benutzten. Bis jetzt hat mir der RFM12Pi (erste Version) noch nicht viel ausgespuckt.

    giovanne

    Zitat

    Dann z.B. das Empfänger "Sensor.pl" Script nutzen / ändern, sodass die Characters aus den übertragenen ASCII-Werten zurück ermittelt werden (steht mir nun bevor).


    Bist du da schon weitergekommen? Wie genau müssen die ASCII-Werten umgewandelt werden? Ich habe mich schon versucht, doch leider konnte ich es nicht entschlüsseln.

    Vielen Dank nochmal euch beiden!

    ps915

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

    Einmal editiert, zuletzt von ps915 (27. August 2014 um 17:50)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!