-         

Ergebnis 1 bis 9 von 9

Thema: Propelleruhr und Ansteuerung über RaspPi

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.06.2013
    Beiträge
    5

    Propelleruhr und Ansteuerung über RaspPi

    Anzeige

    Hallo!

    Im Folgenden werde ich meine Propelleruhr vorstellen. Benutzt wurde die Propelleruhrplatine von Roboternetz. Lieben Dank an Hicki, der mich unterstützt hat wo er konnte . À propos: Hicki hat ein paar Platinen nachbauen lassen und hat noch ein paar Stück übrig, falls Ihr also Interesse habt, so seht einfach in diesem Faden vorbei: http://www.roboternetz.de/community/...ropeller-Clock

    Zur Story: Ich will ein hübsches Mädel, in das ich verknallt bin, zum Essen ausführen. Ich will sie jedoch auf besondere Weise fragen. Über die Propelleruhr
    Die Idee ist, dass man beliebige Texte auf dem Propeller ausgeben kann, und dass dann mein Objekt der Begierde über Bedienknöpfe auf bestimmte Fragen mit "Ja" oder "Nein" antworten kann. Fürderhin soll das Ding nach Überbringen der Nachricht nicht nutzlos herumstehen, sondern einen Zweck erfüllen können. Ich dachte mir eine Uhr mit Alarmfunktion wäre ganz schön.

    Die ursprüngliche Wunschliste:
    - Die Uhr soll beliebige Zeichenketten auf dem Propellerdisplay ausgeben können, frei konfigurierbar zur Laufzeit.
    - Die Uhr soll Töne ausgeben können.
    - Bedienknöpfe für Konfiguration der Uhr
    - DCF77 Empfänger
    - Datenübertragung auf Propeller
    - Raspberry Pi mit Netzwerkinterface. Ich wollte schon immer root auf meiner Uhr sein

    Offensichtlich lassen sich die meisten dieser gewünschten Features nicht mit der Roboternetz Platine alleine realisieren, es muss also ein statisches System her, das Daten auf die Platine zu übertragen vermag.

    Einige werden sich vielleicht denken, dass ein Raspberry Pi mit Kanonen auf Spatzen geschossen ist, aber da dieses Projekt anfangs unter extremem Zeitdruck entstand, war das eine sehr einfache Möglichkeit viele Features gleichzeitig zu erschlagen. Ein Raspberry Pi hat einen GPIO pin header, über den man die DCF77 Empfängerhardware und die Bedienknöpfe leicht anschließen kann. Außerdem hat der Raspberry Pi einen analogen Audio output, ich kann also beliebige Sounds abspielen. Außerdem hat das Linux Betriebssystem bereits eine funktionierende Zeitverwaltung, und es existiert bereits Software für die Verarbeitung von DCF77 Signalen.

    Hier ein Bild vom Grundsystem:




    1. Sound
    Der Raspberry Pi hat zwar analog audio out, allerdings ist dieser äußerst schwachbrüstig und ist nicht zum Treiben von schweren Lasten geeignet. Ich habe irgendeinen 08/15 Audio Operationsverstärker genommen der in der Lage ist 500mW auf einen Kleinlautsprecher zu übertragen. Reicht für unsere Zwecke, wir wollen nur einen Aufweckpiepton. Viel mehr gibt es eigentlich nicht zu sagen zu dem Thema. Im Bild kann man den Achtbeiner auf der Lochrasterplatine sehen.


    2. DCF77 Empfänger
    Dieses Thema ist schon etwas schwieriger. Es gibt bereits fertige Empfangsmodule, ich habe das von Conrad gewählt, weil es in meiner lokalen Conrad Filiale schnell und einfach abzuholen war: http://www.conrad.de/ce/de/product/6...omSuggest=true
    Wie bereits erwähnt besitzt der Raspberry Pi einen frei programmieren GPIO Pin Header. An diesen lässt sich die Empfängerplatine relativ problemlos anschließen. Das einzige Problem stellt hier die Softwareseite dar.

    Die Verarbeitung von DCF77-Zeitsignalen wurde schon mehrfach implementiert, ich habe mich für die radioclkd2 Software entschieden. Dieser Daemon ist für PCs ausgelegt, üblicherweise werden die DCF-Pulse auf die Steuerleitungen einer RS232 Schnittstelle gegeben, die ein Hardware Interrupt auslösen können, so dass eine recht genaue Bestimmung der Pulslängen möglich ist. Wenn eine gültige Zeit empfangen worden ist, so wird das Ergebnis an einen lokalen NTP-Zeitserver weitergereicht, der die Systemuhr entsprechend stellt.
    Leider ist die Software für eine RS232 Schnittstelle ausgelegt, nicht für den Raspberry Pi. Glücklicherweise ist der Code zum Öffnen des seriellen Interfaces recht gut gekapselt, so dass ich meinen eigenen Code einfügen konnte. Ich habe hierfür die WiringPi Software benutzt, die den Zugriff auf den GPIO Header abstrahiert. Im Anhang befindet sich ein Patch, mit dem der radioclkd2 Sourcecode für den Raspberry Pi umgemodelt werden kann.


    Nachdem man das "configure" von radioclkd2 ausgeführt hat, muss man aber noch in der Makefile die Zeile:
    radioclkd2_LDADD = -lm
    wie folgt modifizieren:
    radioclkd2_LDADD = -lm -lwiringPi

    Als Parameter gibt man beim Start von radioclkd2 die WiringPi ID von dem Pin auf dem GPIO header an, an dem das DCF Signal anliegt. Der Pin ist als hochohmiger Input konfiguriert, das lässt sich aber mit einer kleinen Änderung an folgender Zeile in serial.c leicht ändern:
    pullUpDnControl(pinNum, PUD_OFF);

    Die Software ist außerdem so modifiziert, dass sie die Datei /var/run/clock/decfail erzeugt wenn ein ungültiger Zeitpuls empfangen wurde, und diese wieder löscht wenn ein gültiger Zeitpuls empfangen wurde. So kann der radioclkd2 nach außen signalisieren, ob die Antenne korrekt ausgerichtet ist.

    Leider funktioniert in meiner finalen Version der DCF77 Empfangsteil aber nicht, da im fertigen Gehäuse zu viel Metall in der Nähe der Ferritantenne ist. Entweder das, oder sie ist mir kaputt gegangen als ein Äderchen zur Antenne abriss, und ich es wieder rangelötet habe. Es ist mir auf jeden Fall zu viel Mühe das fertige Gerät wieder aufzuschrauben, es lässt sich vom Design her jetzt auch nur noch schlecht ändern. Ich hätte es gerne zusammen mit dem Übertrager im Betrieb getestet, aber es funktioniert leider auch mit ausgeschaltetem Übertrager nicht mehr.


    3. Stromübertragung
    Ein großes Thema ist natürlich wie man den Strom auf den rotierenden Teil bekommt. Wie schon vorher angedeutet benutze ich hier einen Übertrager. Wie dieser zu dimensionieren ist, steht in der Propelleruhr-PDF von Roboternetz.
    Hier ein Bild von der Sekundärspule, aufgebracht auf die Nabe eines PC-Gehäuselüfters.
    Die Spulenkörper waren etwas größer als die Nabe des Lüfters, um ihn mechanisch zu befestigen habe ich vier kleine Blöcke aus Plexiglas geschliffen, diese von vier Seiten auf die Nabe aufgeklebt, und dann den Spulenkörper mit vier Schräubchen befestigt, die in besagte Blöcke getrieben werden. Das hat den Vorteil, dass der Spulenkörper jederzeit wieder abgelöst werden kann, und innerhalb einer gewissen Toleranz der Schwerpunkt der gesamten Anordnung (Platine + Spulenkörper) genau ausgerichtet werden kann, so dass nicht zu große Unwuchten entstehen.

    Um die Spule mit Strom zu beschicken habe ich einen L298 H-Brückentreiber gewählt. Er hat vier Ausgänge, von denen sich jeweils zwei parallel schalten lassen, so dass laut Datenblatt Ströme bis zu 4A möglich sind. Mehr als genug für unsere Zwecke. Für die Ansteuerung des L298 ist der Raspberry Pi leider nicht geeignet, Linux ist schließlich kein Echtzeitbetriebssystem. Deshalb übernimmt ein ATTiny2313 die Ansteuerung, aber dazu gleich mehr.


    4. Datenübertragung
    Das gesamte Nutzerinterface soll natürlich auf dem Raspberry Pi laufen. Der Propeller selbst ist in meinem Konzept "dumm". Er hat eine Anzeige von 4 Zeilen à 16 Zeichen, die anzuzeigenden Zeichenketten werden in einem Front- und Backbuffer abgelegt. Während die Datenübertragung in den Backbuffer stattfindet, wird einfach der Text im Frontbuffer ausgegeben.

    Die Datenübertragung findet bei mir über den Übertrager statt. Dankenswerterweise hat der Designer der Propellerplatine eine Halbwelle der Versorgungsspannung auf einen Interrupt Capture Eingang des ATMegas gelegt. Die Daten werden durch Veränderung der Periodendauer übertragen. Den Übertrager steuere ich standardmäßig mit 6756Hz an (möglichst so, dass keine Oberschwingungen bei 77,5 kHz 'DCF77' entstehen), was Pulse mit 148µs Länge sind. Kodiert wird eine logische '1' dann mit einer Pulslänge von 122µs, logisch '0' 96µs. In meinen Experimenten hatte ich sogar einmal 256 verschiedene Pulslängen erfolgreich getestet, konnte also mit einem Puls ein ganzes Zeichen übertragen! Habe mich dann aber dagegen entschieden, da eine Bitrate von 7kBit/s für meine Zwecke mehr als ausreicht, und wesentlich robuster ist.

    Der ATTiny2313 wird über RS232 Schnittstelle angesprochen. Der Raspberry Pi schiebt Bytes in den ATTiny2313, und dieser schickt diese Bytes ohne Umschweife weiter über den Übertrager. Ausgenommen davon sind ein paar Steuerbytes an den ATTiny2313 selbst, nämlich "Stromversorgung Propellerplatine an", "Stromversorgung Propellerplatine + Lüftermotor an" sowie "alles aus".

    Ich habe sämtliche Software für die Mikroprozessoren in C geschrieben. Da ich aus der Linuxwelt komme und dort schon viel mit C programmiert habe, habe ich mich bei avr-gcc und der avr-libc sofort heimisch gefühlt. Hier ist der Code für den ATTiny2313:
    Anhang 25648


    5. Ansteuerung Propellerplatine
    Ich habe die Möglichkeiten der Propellerplatine bei weitem nicht ausgenutzt. Vor allem habe ich den ATMega644 internen, Hardware TWI-Bus genutzt. Dadurch hatte ich genug Zeit für die Datenübertragung. Es ist nicht spektakuläres, falls jemand daran interessiert ist, werde ich das mal zusammenpacken und auch hier hochladen.


    Das neu hinzugekommende Bauteil ganz unten am Bildrand ist ein n-Kanal Mosfet, über den nachher der Lüftermotor an- und ausgeschaltet wird.


    Ich bin per ssh auf dem Raspberry Pi eingeloggt, und kann beliebige Zeichenketten ausgeben lassen


    6. Gehäuse

    Jetzt muss die ganze Steuerelektronik natürlich noch in einen präsentableren Zustand gebracht werden. Ich habe bei Conrad ein einfaches Plastikgehäuse gekauft, zwei Plexiglasplatten angebracht, den Lüfter auf die Rückwand aufgesetzt, die Bedienknöpfe ins Gehäuse eingelassen und am Raspberry Pi an den GPIO-Header angeschlossen. Das fertige Produkt sieht schließlich so aus:



    Es sind zwei Lüftungsschlitze mit dem Dremel - zugegebenermaßen etwas hässlich - eingearbeitet. Habe leider keinen Schaltregler auf die Schnelle bekommen und stattdessen Linearregler benutzt, die etwas warm werden. Naja. Hauptsache es tut.


    Ansicht von hinten

    7. Romance



    Und wenn sie "nein" sagt:



    8. Normalbetrieb





    Die Uhr wird - wegen des dysfunktionalen DCF-Empfängers jetzt über die Bedienknöpfe gestellt. Bin nicht ganz glücklich, aber beim nächsten Versuch wird es sicher klappen mit der Empfängerplatine
    Angehängte Dateien Angehängte Dateien
    Geändert von Manf (04.06.2013 um 07:42 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.02.2013
    Ort
    Bergisch Gladbach
    Beiträge
    146
    Wow , nettes Teil was du da gebaut hast. Ich verstehe nicht wie der Propeller die Buchstaben darstellt. Hab sowas bis jetzt noch nicht gesehen, und ist die Idee von dir ? Und hast du die kleine schon klar gemacht?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.06.2013
    Beiträge
    5
    Zitat Zitat von Croal Beitrag anzeigen
    Wow , nettes Teil was du da gebaut hast.
    Danke!

    Ich verstehe nicht wie der Propeller die Buchstaben darstellt. Hab sowas bis jetzt noch nicht gesehen,
    Auf dem Bild mit dem stehenden Propeller siehst Du eine Reihe von Leuchtdioden. Wenn sich der Propeller dreht, werden diese genau zu den richtigen Zeitpunkten geschaltet, so dass an den entsprechenden Stellen eine Lichtquelle steht.

    und ist die Idee von dir?
    Die Propelleruhr selbst sicherlich nicht - da war ja mit der Platine von roboternetz.de ziemlich viel Arbeit schon gemacht.
    Das mit den Knöpfen und der interaktiven Textausgabe war meine Idee.

    Und hast du die kleine schon klar gemacht?
    Noch nicht. Ist etwas kompliziert alles. Ich zier mich etwas -.-

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    04.06.2013
    Beiträge
    5
    Es sieht wohl leider nach einem Korb aus

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.06.2008
    Beiträge
    183
    Naja, macht ja nichts! Kopf hoch!!

    Andere Mütter haben auch schöne Töchter.

    Und bedenke, was Dir in etwa möglicherweise erspart geblieben ist.

    Wenn Du eine neue Flamme hast, und ernsthaft dran bist, dann wirf auch ein Auge auf deine zukünftige Schwiegermutter.

    Deine neue Flamme wird in zig Jahren in etwa genau so aussehen. -> Ob dir das dann noch gefällt?


    P.S. Schöne Uhr. Du kannst sie ja öfters verwenden.
    MfG
    Hans

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.02.2005
    Beiträge
    102
    Und Du hast jetzt jede menge Zeit den Code schön zu machen und zu veröffentlichen
    ---------------o00o----' (_)' ----o00o----------------
    Wer Rechtschreibfehler findet darf sie behalten.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    04.06.2013
    Beiträge
    5
    Zitat Zitat von hans99 Beitrag anzeigen
    Naja, macht ja nichts! Kopf hoch!!
    Andere Mütter haben auch schöne Töchter.
    Danke für die aufbauenden Worte

    P.S. Schöne Uhr. Du kannst sie ja öfters verwenden.
    Dat könnt ich nicht. Hab sie ja in gewisser Weise für sie gebaut.
    Außerdem hab ich sie gefragt ob sie sie behalten will und noch hat sie sie nicht zurückgehen lassen.

    Zitat Zitat von mws-h Beitrag anzeigen
    Und Du hast jetzt jede menge Zeit den Code schön zu machen und zu veröffentlichen
    Und das tue ich hiermit!
    *click*

    Es ist jetzt der komplette Code dabei. Für den ATMega auf dem Propeller (unter leddriver), den AT2313 für die Ansteuerung des Übertragers (pcdriver), und die Software die auf dem Raspberry Pi läuft
    Habe ein paar persönlich identifizierbare Merkmale rauseditiert. Ansonsten ist alles wie im Original.
    Die AVR Geschichten müssen übrigens mit der AVR-GCC / avr-libc kompiliert werden. Die Software für den Raspberry Pi am besten auf dem Pi selbst oder mit irgendnem Cross-Compiler.
    Viel Spaß beim Nachbau!
    Geändert von quinze (22.08.2013 um 15:58 Uhr)

  8. #8
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    34
    Beiträge
    4.528
    Blog-Einträge
    1
    Nicht gleich aufgeben, bei deiner Uhr wird sicher auch nicht alles gleich auf Anhieb geklappt haben. Rückschläge gehören nun mal dazu und die gibt es nicht nur in der Technik, auch bei den Damen muss man dran bleiben, genauso wie bei seinen Projekten!

  9. #9
    Vielen Dank für deinen Code. Ich bin grad dabei die Stromversorgung zu lösen
    fg
    Wolfgang

Ähnliche Themen

  1. Suche: RGB-LED´s für eine Propelleruhr
    Von Propeller Clock im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 8
    Letzter Beitrag: 30.11.2012, 00:09
  2. Propelleruhr
    Von Michandh im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 2
    Letzter Beitrag: 12.11.2012, 21:51
  3. Rotierender Trafo für Propelleruhr
    Von deko im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 14.12.2011, 20:51
  4. Antworten: 10
    Letzter Beitrag: 26.08.2007, 15:03
  5. Meine Propelleruhr
    Von izaseba im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 30
    Letzter Beitrag: 26.04.2006, 14:28

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •