Der PrototypIn den letzten Wochen habe ich mich ziemlich intensiv um ein Projekt gekümmert das schon seit fast einem dreiviertel Jahr in der Mache ist: einer Tagesablaufsteuerung für mein Aquarium.
Am Rande: Ja, ich habe ein Aquarium. Seit etwa einem dreiviertel Jahr. Und eine Menge Spaß dran gefunden, ein grösseres ist schon bestellt. Das aber auch nur am Rande. :-)
Böse Zungen behaupten, ich hätte das Hobby nur angefangen um da ein Mikrocontroller-Projekt raus zu machen. Ein für alle Mal: Das stimmt nicht — wenngleich ich nach der Anschaffung auch ziemlich schnell die Idee für ein Projekt hatte… und gemessen an meinen bisherigen Basteleien ist das ein echtes Mammutvorhaben. Ein kleiner Schritt für die Menschheit…
OK, was tut es?
Es steuert Aquarientechnik. Ich gebe mal ein paar Stichworte:

  • Leuchtstoffröhren dimmen (momentan vier Kanäle)
  • Nachtlicht- oder Effekt-LEDs dimmen (momentan auch vier Kanäle)
  • Temperaturen messen
  • Relais schalten — demnächst auch abhängig von Temperaturen, also ein Thermostat
  • Schalter zum manuellen Überbrücken der Automatik
  • Übersichtliche Darstellung der Zustände auf einem Display
  • Serielle Konsole zum Debuggen
  • Programmierung über Textdateien / SD-Karte

Der Aufbau wird modular sein, also ein Basisteil, ein Bedienteil mit Schaltern und Display, ein Dimmer-Teil (unter Verwendung meines I2C-Dimmers) und ein Relaisteil. Die Module werden per I2C-Bus untereinander verbunden. LEDs werden direkt an das Dimmer-Modul angeschlossen, dimmbare Vorschaltgeräte für Leuchtstoffröhren werden mit einer Spannung von 0-10V versorgt.
Programmiert wird das Gerät mit einer Textdatei die einfach auf einer SD-Karte gespeichert wird, also ohne Spezialsoftware und am Computer. So laesst sich einfach regeln welche Lampe um welche Uhrzeit wie hell sein soll, welches Relais wann und wie lange an sein soll, welche Relais zur Steuerung von Temperaturen benutzt werden sollen und noch einiges mehr. Damit die Betriebszustände auch nach einem Stromausfall wiederhergestellt werden können wird eine batteriegepufferte Echtzeituhr eingebaut.
Und das beste: durch den modularen Aufbau wird es möglich sein, das Gerät später um weitere Funktionen zu erweitern. Denkbar sind Module zur pH- oder Luftfeuchtigkeits-Messung und eben auch -Steuerung.
Vielleicht war das auch nur das zweitbeste: ich werde die Schaltpläne und die verwendete Software im Elektronik-Bereich der Schatenseite zur Verfügung stellen sobald es fertig und dokumentiert ist. Ich schätze dass ein Nachbau für etwa 50 Euro machbar wäre…
Wie man auf dem Bild sieht ist ein Prototyp auf einem Steckbrett fast fertig. Eigentlich kann ich die Hardware schon zusammenbauen, an der Software fehlt noch einiges. Allerdings nichts wirklich kompliziertes, die ganzen schwierigen Sachen laufen schon.
Jetzt der Aufruf an interessierte Aquarianer: welche Funktionen habe ich vergessen, was würdet Ihr Euch für so ein Gerät noch wünschen? Ich bin für alle Vorschläge offen. Ach ja, und: ich suche noch nach einem geeigneten Namen für das Projekt… ;-)

SD-AdapterSMD-Teile löten.

OK, zugegeben: was SMD-Teile angeht ist dies noch ein einfach zu verlötendes. Die Kontakte sind schön weit auseinander, und es sind auch nicht zu viele (nämlich 16). Aber auf der anderen Seite steht auch eine nicht zu verachtende Dosis Kaffee, und die sorgt nicht unbedingt für eine ruhigere Lötkolben-Führung… ;-)

Wie auch immer: es sieht fertig aus, ein erstes Durchpiepsen hat auch die Hoffnung geweckt dass es funktionieren könnte. Das wird sich dann Morgen beim Basteln zeigen.

Es handelt sich bei dem Ding übrigens um einen SD-Karten-Slot. Ich habe den auf eine Platine gebastelt, damit ich den im Steckbrett ausprobieren kann. Angeblich kann man mit vertretbarem Aufwand einen Mikrocontroller dazu bringen von so einer Karte zu lesen. Das will ausprobiert werden, wenn es nicht klappen sollte muss ich mein laufendes Projekt umdenken…

Dieser Text war 2007 noch nicht im Blog, den habe ich 2015 aus dem alten CMS übernommen.

Der neue Adapter

Der neue Adapter

Die üblichen Programmier-Adapter für AVR-Controller werden mit einem zehnpoligen Pfostenstecker an der Zielschaltung angeschlossen. Warum der zehn Pole haben muss ist mir nicht klar. An vieren liegt Masse, einer ist überhaupt nicht angeschlossen. Bleiben also effektiv sechs Pins die wirklich eine Funktion haben.

Das Problem

Wenn man einen Prototypen auf dem Steckbrett entwickelt, kann man den zehnpoligen Stecker nicht vernünftig darauf anschließen. Ich habe mir zu dem Zweck eine Art Adapterkabel gebastelt mit dem jeder Pin auf das Brett gebracht werden kann.

Wie man sieht ist das aber zum einen nicht gerade eine Schönheit, zum anderen auch nicht wirklich stabil. Die Plastikfassungen werden weich wenn man an den Pins lötet, daher kann man sich nicht sicher sein ob die Pins beim Einstecken wirklich Kontakt im Steckbrett finden, oder ob sie sich nach hinten rausdrücken.

Die Lösung

Der Adapter im Einsatz

Der Adapter im Einsatz

Um das etwas eleganter hinzubekommen habe ich mir dieses kleine Helferlein gebastelt. Die Beschriftung habe ich mit Eagle CAD gemacht, die Postscript-Datei zum Nachbasteln steht hier unten auf der Seite zum Download. So muss ich wenn ich was neues aufbaue nur noch in die Dokumentation des Controllers sehen, nicht mehr auch noch die Pinbelegung des Programmers heraussuchen.

Unter dem bedruckten Karton ist eine einfache Lochrasterplatine. Außerdem ein zehnpoliger Pfostenstecker zum Anschluss des Programmers und eine sechspolige Pfostenreihe die in das Steckbrett passt. Die Pins dieser Leiste habe ich nach unten durchgedrückt, so halten die besser im Brett.

Ach ja, die Drähte auf der Unterseite sind lackiert. Und nicht besonders schön verlötet, aber die Hauptsache ist: es funktioniert!

Download

Helligkeit 75 von 127Und wieder ein neues Mikrocontroller-Projekt auf der Schatenseite: der I2C-Dimmer.

Eigentlich ist es nur ein Teilprojekt, aber da man das Ding ziemlich universell verwenden kann habe ich es in ein einzelnes Projekt verpackt. Es handelt sich um einen ATtiny2313, der über ein gängiges Bussystem namens I2C (Inter-Integrated Circuit)gesteuert werden kann. I2C ist ein Warenzeichen von Philips, bei anderen Herstellern wird der Bus TWI (Two Wire Interface) genannt. Es handelt sich dabei um einen Bus an dem viele Bausteine wie Temperaturfühler, Echtzeituhren, Speichergeräte und vieles mehr angeschlossen werden können, mit denen sich ein Mikrocontroller dann unterhalten kann. Und jetzt eben auch mein I2C-Dimmer.

In meinem nächsten großen Projekt will ich wieder mehrere LEDs faden lassen. Unter anderem. Da soll auch eine Echtzeituhr und ein Speicher rein, daher wird es wohl eh auf einen I2C-Bus herauslaufen. Da es für einen Mikrocontroller halbwegs stressig ist, neben ‚richtigen‘ Aufgaben dauernd die LEDs ein- und auszuschalten, und man es ziemlich schnell sieht wenn er sich zwischen der ein- und ausschalterei noch mit anderen komplizierten Sachen beschäftigt, habe ich nach einem separaten Baustein gesucht der mir (bzw. dem Controller) das abnehmen kann. Ohne Erfolg. Ich habe zwar was gefunden mit dem man LEDs dimmen kann, aber der Baustein ist zum einen für mich unlötbar (SMD), zum anderen kann man die Ausgänge nicht frei steuern: jeder Ausgang ist entweder an, aus, oder er nimmt eine von zwei gedimmten Helligkeiten an. Die sind dann zwar variabel, aber man ist eben nicht voll flexibel.

Also habe ich mir überlegt, dafür einen eigenen Baustein zu bauen. Die AVRs können per I2C auch Kommandos entgegen nehmen, also muss nur noch eine Pulsweitenmodulation implementiert werden. Nach mehreren Versuchen ist Thomas Stegemann auf eine blendende Idee gekommen wie man das sehr effizient machen kann. Der Algorithmus ist auf der Projektseite beschrieben, ich weiß nicht ob es dafür einen Namen gibt. Sachdienliche Hinweise nehme ich gerne entgegen.

So ist es jetzt möglich, den Baustein quasi als Black Box in zukünftigen Projekten einzusetzen. Der ATtiny2313 wird mit 20MHz getaktet und kann so bis zu 13 Kanäle auf 128 Helligkeiten halten. Theoretisch wären da sogar noch mehr Kanäle möglich, allerdings müsste man dann einen anderen Controller benutzen: der kleine hat nicht mehr Pins… :-)

ISP-AdapterHeute habe ich mir ein kleines Helferlein gebastelt, das ich auch direkt auf der Schatenseite vorstelle: einen ISP-Adapter für das Steckbrett.
Das Ding löst einen wirklich wackeligen Behelf ab, den ich mal aus einem Flachbandkabel und ein paar Pfostenleisten zusammengebraten habe. Es ermöglicht mir, den eigentlichen Programmer für meine Mikrocontroller-Projekte auch an ein Steckbrett anzuschliessen. Mit dem originalen Pfostenstecker geht das leider nicht so ohne weiteres.

Da muss man erstmal drauf kommen, dass man nicht mit jedem Programmer alle Funktionen eines Mikrocontrollers steuern kann. Vor einem halben Jahr habe ich günstig einen USB-Programmer gekauft um nicht immer die parallele Schnittstelle für mein kleines Notebook mitnehmen zu müssen (da hängt nämlich auch noch ein optisches Laufwerk und so dran). Der funktioniert auch tadellos, damit habe ich schon meine Binäruhr gebaut.
Nachdem ich jetzt aber seit zwei Tagen versuche, die verdammten Fuse-Bits eines ATtiny2313 zu setzen (mein neuestes Projekt, der muss einen externen Quarz benutzen) hat mir jemand gesagt dass das eventuell wegen des Programmers nicht funktioniert. Ausprobiert, und richtig genug: mit dem alten parallelen Teil geht es. Auf Anhieb. Nach zwei Tagen… :-(
Edit: Ach ja, noch was positives: zum Berechnen der Fuse-Bits macht der AVR Fuse Calculator einen guten Eindruck.

Mir haben auch schon mehrere Leute gesagt, ich sollte mein USB-Servo-Projekt nicht nur als Mauszeigerzeiger benutzen sondern um ein zweites Servo erweitern und xeyes nachbauen (für nicht-X-Benutzer: ein kleines Spielzeugprogramm das Augen anzeigt die dem Mauszeiger folgen).
Das brauche ich nicht mehr zu tun, denn cooler als in diesem Projekt kriege ich es auch nicht hin: Elektronisch dürfte das ganz ähnlich sein wie meines, aber gesteuert werden die Servos über eine Kamera. Die Augen folgen also Bewegungen. Der Erbauer hat die Augen hinter seinem Fenster stehen so dass sie Passanten nachschauen. Ich bin tief beeindruckt!