djtulan Hackerspace, Retrocomputing

Aquarium Computer - Teil 4 - Die Real Time Clock

Einer der wichtigsten Bestandteile eines Aquarium Computers ist eine Uhr. Diese wird benötigt um beispielsweise die Beleuchtung ein- bzw. auszuschalten.  Da der verwendete uController, der Arduino Nano, selber keine Real Time Clock besitzt, muss man diese erweitern. Das "Tiny RTC I2C module" eignet sich für diese Zwecke sehr gut.

undefined

 

Auf dem Modul befinden sich 2 Chips, ein DS1307 (Real Time Clock von Dallas) und zusätzlich ein HK24C32 (EEPROM mit 32 kByte).

Weiters ist auch der Quarz für die Uhr verbaut.

Die restlichen SMD Bauteile sind passive Bauteile wie Widerstände, Dioden und Kondensatoren. 

 

undefined

 

Auf der Rückseite befindet sich eine Batteriehalterung, der für eine Akku Zelle vom Typ LIR2032 (wiederaufladbar!!!) vorgesehen ist. Wenn man darin eine Standard CR2032 Lithium Zellen verwenden würde, könnte diese durch die Ladeschaltung explodieren.

 

 

 

Um dennoch eine gewöhnliche Batterie verwenden zu können, ist lediglich eine kleine Modifikation notwendig. R5, D1 R4 und R6 müssen entfernt werden. Statt dem Widerstand R6 wird eine Lötbrücke gemacht.

 

 undefined

Außerdem sollte man den Quarz mit etwas Zinn auf der Massefläche, auf der er aufliegt, festlöten, so schreibt es das Datenblatt vor. Zur Verwendung mit dem Arduino Nano, muss das Modul mit 4 Leitungen verbunden werden, wenn man eine fertige Bibliothek verwenden möchte.

RTC Module Arduino
VCC 5V
GND GND
SDA A4
SCL A5

Ich habe die von playground.arduino.cc vorgeschlagenen Bibliotheken Time und DS1307RTC verwendet. Die Einbindung ging super einfach.

#include <Time.h> // includes for time
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

// MACRO TO GET COMPILE TIME IN SECONDS
#define t(index, multiplier)  ((__TIME__[index]-'0') * (multiplier))
// use hours, minutes and seconds
#define hhmmss() (t(0,36000) + t(1,3600) + t(3,600) + t(4,60) + t(6,10) + t(7,1))

void setup() {
  // is the RTC running?
  if (RTC.get() == 0) {
    // set the RTC to the time this example was compiled
    RTC.set(hhmmss());
  }

  setSyncProvider(RTC.get); // the function to get the time from the RTC
}

Das RTC Objekt wird bekommt man bereits durch die Lib DS1307RTC, man braucht es nur noch verwenden. Diese Bespiel setzt die Uhr auf die Uhrzeit der Kompilierung, falls sie nicht laufen sollte.

Die aktuelle Uhrzeit kann man mit den Funktionen der Bibliothek Time dann ganz einfach auslesen.

  char buffer[32];
  snprintf(buffer, 30, "%.2d:%.2d:%.2d", hour(), minute(), second());
  print(buffer);

Viel Spaß beim Ausprobieren!

Aquarium Computer - Teil 3 - Der Temperatursensor

Nun beginnt das große Zusammenfügen der einzelnen Module.
Einer der ersten Versuche war die Einbindung des Dallas Temperatur Sensors DS18B20. Die Hardware dafür ist recht simpel. Alles was man dazu benötigt sind der Sensor selbst und ein 4,7kΩ Widerstand. Die Schaltung habe ich ja bereits bei meinem letzten Post angehängt.

undefined

Die Ansteuerung des Sensors wird über das sogenannte "One-Wire-Protocol" realisiert. Das heißt so, weil nur eine Datenleitung (1-Wire BUS) zum Sensor verläuft. Zusätzlich benötigt der Sensor aber noch eine Versorgung (VDD) und eine Masse (GND). Die fertigen Kabel mit dem Sensor am Ende haben dafür 3 Adern ausgeführt, die meist folgende Farben haben:

     Spannungsversorgung (VDD)
     Masse (GND)
     1-Wire BUS

Masse wird mit GND des Arduino Boards verbunden. Die Spannungsversorgung (VDD) kommt an den 5V Pin des Arduinos. Die 1-Wire BUS Leitung wird mit einem Digital Pin des Arduinos und zusätzlich über den 4,7kΩ Widerstand (Pullup) mit 5V verbunden.

Thomas Wenzlaff hat in seinem Blog eine nette Anleitung dazu geschrieben.
Er verwendet dazu die Bibliotheken OneWire 2.2 und Dallas Temperature Control Library 3.7.2.
Die Bibliotheken kommen in das sketchbook/libraries Verzeichnis, das von der Arduino IDE bereitgestellt wird. Das eigentliche Programm fällt durch die Bibliotheken relativ klein aus. Ich habe das Beispielprogramm von Thomas Wenzlaff dazu etwas gekürzt, um es übersichtlicher zu halten.

// benötigte Bibliotheken importieren
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire onewire(2); // Digitalport Pin 2 als 1-Wire-BUS verwenden
DallasTemperature temp(&onewire); // "Dallas Temperature Library" instanzieren

void setup() {
  Serial.begin(9600);  // serielle Schnittstelle mit 9600 Baud starten
  temp.begin();        // "Dallas Temperature library" starten
}

void loop() {
  temp.requestTemperatures(); // Temperatur abfragen (blockiert etwa 800ms)

  Serial.print(temp.getTempCByIndex(0)); // gibt die Temperatur aus
  Serial.println(" Grad Celsius");       // gibt " Grad Celsius" aus
}

Wie man sieht gestaltet sich die Abfrage des Sensors recht einfach. Später soll natürlich die Temperatur nicht über die serielle Schnittstelle ausgegeben werden, sondern wird auf dem kleinen Display angezeigt.

Viel Spaß beim Ausprobieren!

 

Nachtrag 10. Februar 2016:

Die Schaltung dazu in KiCad gezeichnet.

undefined

Aquarium Computer - Teil 2

Meine ersten Überlegungen für einen Eigenbau Aquarium Computer sind folgende:
Was benötige ich überhaupt und was darf das System maximal kosten? (Arbeitszeit nicht eingerechnet!) Ich habe mir daher eine Liste von Anforderungen überlegt, die das System erfüllen sollte:

Requirements

  • Zeitsteuerung für die Beleuchtung (kein Dimmer, Keine LED Ansteuerung)
  • Messung der Temperatur
  • Steuerung des Heizstabes (optional)
  • Messung des pH-Wertes (optional)
  • Messung anderer chemisch/physikalischer Werte (optional)
  • Anzeige der Werte auf einem Display
  • Einstellmöglichkeit über Tasten
  • Einfacher Aufbau, damit es auch von anderen nachgebaut werden kann
  • Die Kosten sollten sich bis maximal 40€ belaufen

Mein 240L Aquarium betreibe ich derzeit mit sehr einfachen Mitteln.
Die Temperatur messe ich über ein Thermometer, das an der Beckenaußenwand klebt. Die Beleuchtung wird über eine ganz einfache Zeitschaltuhr realisiert. Den pH-Wert erfasse ich gar nicht. Der Heizstab schaltet sich gegebenenfalls selbst ein.

Auswahl der Hardware Module

Mit dem Gedanken einer etwas komfortableren Steuerung und Überwachung des Beckens spiele ich schon länger. Ich habe mir auch schon überlegt, das Projekt mit Hilfe eines Raspberry Pi umzusetzen, aber ich kam zu dem Schuß, dass diese Lösung überfeatured wäre. Außerdem ließen sich damit die maximalen Kosten nicht einhalten und der Nachbau wäre wohl zu kompliziert.

Als günstigere Alternative ist mir der Arduino in den Sinn gekommen. Er bietet bereits einige Schnittstellen, es gibt Unmengen von Bibliotheken auf die man zurückgreifen kann und es gibt viele Möglichkeiten ihn durch Hardware zu erweitern. Da ich von anderen Projekten noch ein paar Stück Arduino Nanos herumliegen hatte, machte ich mich erst einmal auf die Suche nach passender Hardware. Den Arduino Nano Nachbau bekommt man bereits für wenige Euro auf Amazon oder Ebay.

undefined

Da der Arduino keine Real Time Clock (RTC) besitzt, eine Uhrzeit für das Projekt aber unentbehrlich ist, suchte ich nach adäquater Hardware. Die Auswahl viel auf das RTC DS1307 I2C Modul. Es besitzt einen DS1307 Chip (RTC), der von einer CR2032 Batterie versorgt wird, damit die Uhr auch im stromlosen Zustand weiter läuft. Zusätzlich ist auf dem Modul noch ein AT24C32 EEPROM, indem man Daten ablegen kann. Module findet man wie auch die Arduinos auf Amazon oder ebay.

 undefined

Um die Temperatur messen zu können, benötigt man einen Sensor. Man könnte zwar den Aufwand betreiben, die Wassertemperatur über eine PTC oder NTC Schaltung analog zu messen, weil der Arduino auch 8 ADCs besitzt, jedoch wäre das mit erheblichen Kalibrierungsaufwand verbunden. Der einfachere Weg ist es, einen digitalen Sensor zu verwenden, der bereits die gemessene Temperatur als Wert liefert. Die ehemalige Firma Dallas Semiconductor (jetzt ein Teil von Maxim Integrated) hilft uns hier ebenso, wie bei der RTC, mit einem geeigneten Chip aus der Patsche. Den DS18B20 Sensor gibt es entweder nackt in einem TO92 Gehäuse oder gleich wasserdicht verpackt in einer Metallröhre mit einem Meter Anschlussleitung. Ebenfalls zu finden auf Amazon oder ebay.

 

undefined

Mit dem Sensor kommuniziert man über das sogenannte One-Wire-Protokol, das lediglich einen Pin des Microcontrollers benötigt. Die Beschaltung ist ebenfalls sehr simpel. Es reicht ein einzelner 4,7K Pullup-Widerstand. die anderen 2 Pins gehen einfach auf GND und +5V des Arduino Boards.

undefined

Für die Schaltung der Beleuchtung und des Heizstabes gibt es auch eine recht einfache Lösung, nämlich Funksteckdosen. Bevor ich auf diese Idee kam, habe ich oft nachgedacht, wie ich am besten die Relais in meine Schaltung integrieren sollte. Ich habe auch mit dem Gedanken gespielt, eine Steckdosenleiste zu modifizieren. Doch auf eine einfach umsetzbare Lösung bin ich nie gekommen. In einem Forum habe ich dann zufällig etwas von Funkmodulen gelesen, die sich für Microcontroller verwenden lassen, um unter anderen auch Funksteckdosen anzusteuern. Die Teile werden im Fünferpack um 3-4€ auf ebay verkauft. Am besten sucht man nach " 433Mhz RF transmitter", dann bekommt man ca. 200 Angebote. Eigentlich benötigt man nur den Sendeteil, das Teil in der Abbildung mit den 3 Anschlüssen und dem Knopfbatterie ähnlichen Teil. Aber diese gibt es scheinbar nicht einzel zu kaufen. Der Sender benötigt ebenfalls nur einen Digi-Pin des Arduinos.

 undefined

Um die eingelesenen Daten und Schaltzustände auch ordentlich zu visualisieren, soll der Arduino mit einem kleinen Display versehen werden.
Sehr günstige Displays gibt es ebenfalls wieder auf ebay zu erwerben. Ein sehr bekannter Display Controller ist der ST7735S, mit dem sehr viele dieser mini TFT-Displays angesteuert werden. Meine Auswahl viel auf ein 128x160 Pixel großes Modul, das für meine Zwecke ausreichend ist.

 undefined

Außer einem pH-Wert Sensor und den Tasten für die Bedienung wären somit alle HW-Module ausgewählt. Macht man eine kurze Hochrechnung dann errechnen sich folgende Kosten:

Arduino Nano ca. €2,50
RTC Modul ca. €1,00
Temperatur Sensor ca. €3,00
Funksender ca. €1,00
Display ca. €4,00
SUMME
€11,50

Ein paar Tasten werden den Preis nicht in wesentlich die Höhe treiben, wohl aber die Elektrode zum Messen des pH-Wertes. Ich muss noch etwas recherchieren, wo man diese am besten her bekommt. Und wenn sie zu teuer wird, lasse ich sie bei meinem Aquarium einfach weg.

 

Aquarium Computer

Eigentlich ist es schon eine Unart, was man für ein gutes Aquarium bezahlen muss. Und sobald man sich dann eines zugelegt hat, geht der Spaß erst so richtig los. Da gibt es spezielle Filter, Reflektoren für die Beleuchtung und diverse Sensoren, die den Zustand des Wassers des Aquariums erfassen. Möchte man sich eine professionelle Überwachung für sein Becken zulegen, so ist man schnell einige hundert Euros los. Daher habe ich mich entschlossen, selber einen Aquarium Computer zu basteln. Dieser soll all meine Zwecke erfüllen und nicht zuviel kosten.

Über den Verlauf werdet ihr natürlich informiert werden. Den Quellcode werde ich auf GitHub veröffentlichen.

Home