Dez 10


Seit geraumer Zeit sind Rauchmelder in Neubauten ja Pflicht. Macht ja auch durchaus Sinn. Gerade wenn man an solche USV-Aktionen denkt 🙂 Also muss ein Rauchmelder her. Der Otto-Normal-Nerd möchte aber mindestens irgendwas haben, was sich auch in die Standardhaustechnik integrieren lĂ€sst – am besten noch ein Set von mehreren Rauchmeldern. Da gibts es zig Varianten:

  1. Die Billigrauchmelder (um die 5-10 Euro)
  2. Die Billgrauchmelder die per 433MhZ miteinander sprechen (ab 60 Euro im Set mit 4 StĂŒck)
  3. Die teueren Systemrauchmelder die nichts anderes als (2) machen, nur das G*ra oder sonstwas draufsteht.
  4. Die sĂŒndhaft teueren Rauchmelder mit eingebauten GSM-Modul (ab ca. 150 Euro aufwĂ€rts…)

Gelinde gesagt: Alles doof – da es entweder meinen AnsprĂŒchen nicht genĂŒgt, oder massivst zu teuer ist.

Nun denn erstmal Dinge sichten – also ab zum Baumarkt und mal einen Rauchmelder der Kategorie „1“ gekauft. Schimpft sich RM120 und hat schlappe 8,- gekostet. Laut ist das Ding ja, wenn man Zigarettenrauch reinblĂ€st, oder mal den Testknopf drĂŒckt – bringt nur nix, wenn niemand zu hause ist 🙁 Nach dem öffnen des GerĂ€ts, schaut einen ein wenig SMD-Technik (Oha) an, darunter ein IC mit der Aufschrift „CS2105go„. Wie sollte es anders sein, dazu gibts leider kein Datenblatt. Aber Moment, vielleicht ist der CS2105GO-M12 ja Pinkompatibel mit dem MC145010 – Bingo, ist er ! Der MC145010 (manchmal auch MC145012) wird in fast allen Rauchmeldern der Kategorie 1 und 2 (teilweise auch 3) verkauft.

Der aufmerksame Leser merkt was: Bei 2 ist doch eine Vernetzung möglich ! Korrekt, so ist es. Mit anderen Worten: In den Rauchmeldern der Kat.1 ist derselbe IC verbaut, wie in 2, nur das in 1 halt das 433MhZ Modul fehlt. Brauch ich (zumindest jetzt zum Testen) eh erstmal nicht –  doch dazu spĂ€ter. Der MC145010 verfĂŒgt ĂŒber einen sog. I/O Pin, der bei 2er Rauchmeldern dann das 433MhZ-Modul per TTL-High triggert, sobald es qualmt. Beim 1er liegt PIN7 (I/O) tot herum. Perfekt. Also fix den Ground (-) und PIN7 per Kabel rausgefĂŒhrt und an den Arduino geklemmt:

 

Links (Schwarz) die Masse – Also GND direkt mit dem GND des Arduino’s verbinden,

Recht (Rot), etwas fuckeliger, den PIN7 (I/O) des CS2105GO-M12 auf einen Analogen Input-PIN des Mikrocontrollers legen.

Auf dem Arduino selbst habe ich derzeit die gute Wohnzimmerinfo-Anzeige am laufen, da ist also schon ein „Ethernet-Shield“ drauf. Da dort noch diverse Analoge Ports frei sind, und der Rauchmelder auch direkt deben dem Display wohnen soll, also optimal. Vom Code her gestaltet sich das ganze relativ simpel (siehe unten). Das allerfeinste ist jedoch, dass man nichtmal gegen irgendwelche Vorschriften verstösst, wenn man sich anstelle von Variante 1 fĂŒr einen Rauchmelder der Variante „2“ entscheidet. Denn alle Rauchmelder bleiben so wie sie sind (sprich: Die piepen trotzdem). Nur einen, in dem 433MhZ-„Netz“, muss man dann an den Arduino anklemmen. Der verbaute Standalone-RM120 piept ĂŒbrigens auch noch – denn genau dafĂŒr ist PIN7 gedacht: I/O !


#include
#include

#define SmokePIN 0

int Smoke=0;
boolean mailsent=false;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0, 100 };

void setup () {
Ethernet.begin(mac,ip);
}

void loop() {
// Read Smokedetector
Smoke=analogRead(SmokePIN);

// GGf. RESET der Variable mailsent

if (Smoke > 900) {
if (mailsent==false) {
firemail();
mailsent=true;
}
}
}

void firemail() {
// IP des Mailservers
byte mserver[] = {192,168,0,101};
Client Mail(mserver,25);
if (Mail.connect()) {
Mail.println(„HELO arduino.domain.tld“); /* say hello (statement after helo is needed but irrelevant)*/
Mail.println(„MAIL From: et_brennt@domain.tld“); /* identify sender, this should be the same as the smtp server you are using */
Mail.println(„RCPT To: et_brennt@domain.tld“); /* identify recipient */
Mail.println(„DATA“);
Mail.println(„To: et_brennt@domain.tld“); /* identify recipient */
Mail.println(„Subject: Burning down the House“); /* insert subject */
Mail.println(„WARNING – Smoke detected !“); /* insert body */
Mail.println(„.“); /* end email */
Mail.println(„QUIT“); /* terminate connection */
Mail.println();
Mail.stop();
}
}

Tagged with:
Mrz 26

Sehr cool was mit dem Arduino so alles machbar ist. Um es vorweg zu nehmen: Mit dem Ding habe ich eine Ansteuerung eines BetaBrite LED-Moduls via Netzwerk gebaut (also im „Live-Betrieb“ OHNE Rechner benutzbar).

Doch vorne angefangen:

Vor ein paar Jahren hatte ich mir bei eBay ein BetaBrite geschossen – Das ist so eine nette Laufschrift, die man zum Leute quĂ€len draussen an seinen Copyshop hĂ€ngen kann, so man(n) den einen hat. Die Idee war damals die Temperaturdaten meiner Wetterstation und ein paar andere Dinge anzeigen zu lassen. Ist aber nie so richtig umgesetzt worden, da mein „Serverpark“ im Keller steht, und die Anzeige dort natĂŒrlich null Nutzwert hat. Vor ein paar Tagen bin ich dann auf das Arduino-Projekt gestossen – klang (und ist auch) alles sehr vielversprechend:

Eine simple Plattform incl. Entwicklungsumgebung fĂŒr die ATMEGA-Microcontroller Serie mit massenweise Zubehör. Wer das Ding nicht kennt, einfach mal bei arduino.cc umschauen. Bezugsquellen sind u.a. watterod, komputer.de oder auch farnell.com, sofern man (bei farnell) denn im Besitz eines Stundentenausweises ist (Die Spareffekte dort sind vernachlĂ€ssigbar). Der Knaller an dem Ding ist jedoch der Preis. So gibt es den Arduino fĂŒr ca. 20-28 Euronen incl. Versand zu haben. Der Microcontroller lĂ€sst sich ĂŒber die USB-Schnittstelle (sowohl auf Mac, PC oder Linux) in einer Art C-Dialekt fĂŒr Kids programmieren (Ist wirklich extremst Easy). Das ganze geht so in Richtung SPS – daher heisst der Dialekt wohl auch „Processing“. Man hat im Template quasi 2 vorgefertigte „Prozeduren“:

  • void setup – wird einmalig aufgerufen, wenn der ATMEGA hochgefahren wird und dient zum initialisieren der Ports, etc.
  • void loop – wird, wie der Name schon sagt, im Loop kontinuierlich durchlaufen – bei mir kamen da direkt Errinerungen an die Lehrzeit wieder hoch (SPS – Merker setzen und sowas)

Hardwaretechnisch verfĂŒgt das Ding ĂŒber 14 Digitale I/O Pins, von denen 6 per PWM ansteuerbar sind (alles TTL-Pegel), sowie 6 Analoge ein/AusgĂ€nge mit einer 8bittigen genauigkeit im A/D bzw. D/A Wandler. SĂ€mtliche AnschlĂŒsse sind auch fĂŒr Wurstfinger, wie meine, leicht verfĂŒgbar, sodass Löten – wenn man es denn nicht gerade drauf anlegt – ausfĂ€llt.

ZurĂŒck zum Titel dieses Eintrags. ZusĂ€tzlich zum Board habe ich mir noch eine Ethernet-Shield gegönnt. Shields sind sowieso die Erfindung hier uberhaupt. Man kann sich das als „Huckepack“-Platine vorstellen, die bestimmte Pins des Arduinos belegen und dann weiter FunktionalitĂ€ten bereitstellen. Das eth-Shield stellt also einen Netzanschluss zur VerfĂŒgung, und genehmigt sich dafĂŒr 6 Pins. (Eine gute ĂŒbersicht ĂŒber den „Pinverbrauch“ und verfĂŒgbare Shields gibts ĂŒbrigens bei shieldlist.org). Das Shield selbst lĂ€sst sich dann im „Processing“ ĂŒber ein paar Simple Funktionen ansteuern / auslesen.

Problematisch beim BetaBrite war, dass dieses ĂŒber eine RS232 (vulgo: Serielle) Schnittstelle verfĂŒgt, der Arduino aber nur TTL-Pegel verarbeiten kann. Es gibt fĂŒr den Ard. eine Serial-Library, mit der man aus zwei weiteren Pins einen Seriellen Anschluss „emulieren“ kann, aber ohne korrekte RS232-Pegel ist das suboptimal. Was tun ? Mal ein wenig gekramt, und dann ist mir ein MAX232 zwischen die Finger gekommen – quasi genau das was man braucht. Die Schaltung mit dem MAX232 ist mehr als simpel (Einfach ausgedrĂŒckt konvertiert der 232 die Pegel). Somit steht das ganze HardwaremĂ€ssig schonmal. Ethernet-Shield -> Arduino -> MAX232 -> BetaBrite. Fehlt nur noch die „Software“. Die Ansteuerung der BetaBrites ist schnell im Netz gefunden (z.B. hier, bzw. als PDF direkt beim Hersteller). Der Code auf dem Arduino umfasst gerade mal 2kB (incl. inline-Dokumentation !!!). Falls interesse besteht, stell ich den gerne mal hier ein.

Was kann das ganze jetzt ?

Nun, Der Microcontroller mit Ethernetanschluss „horcht“ auf TCP-Port 23. Immer wenn sich etwas connected und eine Zeile schreibt, dann gibt der Controller das an das Betabrite weiter. Serverseitig kann ich nun, aus dem Keller heraus :-), das BetaBrite ansteuern, wo immer auch Netz verfĂŒgbar ist…

Tagged with:
preload preload preload