Maschinenliebe #2

Page 1

1/ 2013

machina eX || FFT D端sseldorf || Kulturstiftung des Bundes

LOVE 4 TIMING.

#2 sponsored by:

1


Editorial

Wir frühstücken Open Source. Wir verdienen unsere Brötchen mit Technologien die andere für uns gemeistert haben. Wir atmen die unzähligen How-tos, Tutorials und Forenthreads, in denen Menschen mit extrem viel Ahnung, ganz selbstverständlich Zeit und Nerven opfern, um Noobs wie uns zu ermächtigen unsere eigenen Projekte zu materialisieren. Und es geht noch weiter: Seit einigen Jahren poppen in der ganzen Welt analoge Versionen dieser Foren auf: FabLabs, offene Werkstätten, gefüllt mit Expertinnen und Lötzinn, mit 3D Druckern, Kabelsalat und Menschen die ihr Wissen vermitteln. Im GarageLab e.V. in Düsseldorf Bilk können wir das zur Zeit selbst erleben: Eine Garage voller Werkzeug, Elektroschrott und Leute die uns mal zeigen wie man eine Dreieckskurve singt. Und weil wir daraus schöpfen, schöpfen wir jetzt zum zweiten Mal ab und senden euch Maschinenliebe, ein Magazin mit zwei Bastelanleitungen und viel viel Liebe zu Open Source Hardware & Maker Culture. Diesmal geht es um Zeitkritische Abfragen und was man mit denen anstellen kann. Mit Maschinenliebe für euch... eure Maschinistinnen

INHALT

EDITORIAL / IMPRESSUM / INHALT

2

PIMP MY BIKE

4

HACKING GRANDMAS TELEPHONE

10

Multitool Reed-Kontakter

Impulswahltelefonhack mit Arduino

IMPRESSUM/COPYRIGHT (

Alle Bilder, Grafiken, Texte und Codezeilen stehen, soweit nicht anders aufgeführt unter Creative Commons Lizenz by-nc-sa 3.0 (ccncsa) by machina eX (www.machinaex.de ).

Ausnahme bilden Logos und Schriftzüge der Fein GmbH. Cover Foto, Seite 2 und Illustrationen ccncsa by Philip Steimel Anleitungsfotos ccncsa by Norman Grotegut Bastelanleitungen von Philip Steimel und Lasse Marburg Du darfst (und sollst) das Werk bzw. den Inhalt vervielfältigen, verbreiten und öffentlich zugänglich machen Abwandlungen und Bearbeitungen des Werkes bzw. Inhaltes anfertigen Zu den folgenden Bedingungen: Namensnennung — Sie müssen den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen. Keine kommerzielle Nutzung — Dieses Werk bzw. dieser Inhalt darf nicht für kommerzielle Zwecke verwendet werden. Weitergabe unter gleichen Bedingungen — Wenn Sie das lizenzierte Werk bzw. den lizenzierten Inhalt bearbeiten oder in anderer Weise erkennbar als Grundlage für eigenes Schaffen verwenden, dürfen Sie die daraufhin neu entstandenen Werke bzw. Inhalte nur unter Verwendung von Lizenzbedingungen weitergeben, die mit denen dieses Lizenzvertrages identisch oder vergleichbar sind.

2


3


PIMP MY BIKE. Multitool Reed-Kontakter mit Arduino Abnahme Magnetkontakter und ihre superkleine Ausführung, die Reed-Kontakter, sind unfassbar mächtige Multifunktionswerkzeuge. Das Prinzip der kleinen Wunderteile ist simpel: Der Kontakter hat zwei Stadi, zwischen denen er wechselt, wenn er in die nähe eines Magnetfeldes kommt. Je nachdem ob es sich um einen sogenannten „Schließer“ oder einen „Öffner“ handelt, ist der Ausgangspunkt ein geöffneter Schalter, der Strom durchlässt ohne einen Magneten in Reichweite und sich schließt, wenn ein Magnet in seine Nähe kommt (Schließer) oder umgekehrt (Öffner). Das großartige daran ist, dass der Aufbau am Arduino so minimal ist, wie er nur sein kann: zwei Kabel, ein Widerstand zum GND Pin. Und trotzdem sind die Eingaben die man damit abnehmen kann vielfältig: Seien es sich öffnenende und Schließende Fenster und Türen, Rolltore oder Schubladen. Auf oder zu gibts halt bei einer Menge echter Dinge als Zustände. Richtig spannend wird aber vor allem, wenn man neben Zuständen auch noch Zeit misst. Um euch das etwas begreiflicher zu machen, haben wir Lasse ein bisschen strampeln lassen... Benötigte Materialien: - Trimm-Dich-Rad (oder irgendwas anderes was sich dreht.) - Arduino Uno - 10kOhm Widerstand - Reed-Kontakter (alternativ gehen auch die größeren Magnetkontakter für Alarmanlagen, aber Reed-Kontakter machen mehr Spaß und kosten weniger) - ein paar Meter Schaltlitze oder Kabel - kleiner Magnet

4


MASCHINENLIEBE #2

5


MASCHINENLIEBE #2

Der Basisaufbau ist denkbar einfach:

fernt der Magnet sich vom Kontakter schreibt das Arduino „Kein Kontakt“ in den Monitor.

Ihr nehmt den Widerstand, verbindet ihn auf der einen Seite mit DigitalPin 7 und auf der anderen mit GND. Dann nehm ihr ein bisschen Litze und lötet die an die beiden Seiten des Reed Kontakters. Da soll dann der Strom durchfließen wenn der Magnet in die Nähe kommt. Dann schließt ihr ein Ende des Reed-Kontakters an DigitalPin 7 (wenns nicht mehr passt lötet ihn ans Beinchen des Widerstands der schon da drin steckt). Und die andere Seite in den 5V Pin.

Damit könnt ihr jetzt schon eine simple Alarmanlagenschaltung bauen, die sich beschwert, wenn jemand eure Lieblingsschublade öffnet oder (wie wir in Maurice) die Fensteröffnung abnehmen und mit einem Geräusch verknüpfen (z.B. gruseliges Windheulen oder so). Ihr könnt aber auch noch einen Schritt weitergehen und die Zeit messen, die vergeht zwischen zwei Impulsen. Damit könntet ihr dann zum Beispiel ein sich drehendes Fahrradrad abhnehmen und eine Drehzahl errechnen.

Jetzt fließt Strom vom 5V Pin durch den Reed-Kontakter zu Digital Pin 7. Aber nur wenn der Kontakter geschlossen ist. Weil wir in unserem Beispiel einen Schließer benutzen, passiert das nur wenn der Kontakter in Nähe eines Magneten kommt. Ihr könntet jetzt schon den Arduino Code von machinaex.de/maschinenliebe/reed.zip runter-, auf das Arduino hochladen und euch anschauen was passiert wenn ihr einen Magnet in die Nähe des Reed-Kontakters bringt. Oder ihr tippt das hier ab:

Bild (1) der Gesamtaufbau für die Schaltung

int reedPin = 7; boolean reedState = false; void setup() { pinMode(reedPin, INPUT); Serial.begin(9600); }

Bild (2) close up des Aufbaus am Arduino. Wie man sieht: Nur ein 10kOhm Widerstand zwischen D7 und GND

void loop() { reedPin = digitalRead(7); if (reedPin == HIGH && reedStatus != true) { reedStatus = true; Serial.println(„Kontakt“); } else if (reedPin == LOW && reedStatus != false) { reedStatus = false; Serial.println(„Kein Kontakt“); } } Im Seriellen Monitor wird „Kontakt“ angezeigt, sobald der Magnet in die Nähe des Kontakters kommt. Ent-

Um das ganze an ein Trimm-Dich-Rad anzuschließen nehmen wir uns nun einen möglichst flachen Magneten und kleben ihn an eine günstige Stelle am Rad. Das kann eine Speiche sein oder (wie in Bild 3) die Felge. Dann sucht ihr eine günstige Stelle am Rahmen zu der ihr sowohl die zwei Kabel zum Reed-Kontakter ziehen, als auch den Kontakter sicher anbringen könnt. Seid dabei besonders vorsichtig wenn ihr einen Reed-Kontakter benutzt! Die kleinen Dinger sind meist aus Glas und zerbrechen schnell, wenn sie einen kräftigen Schlag (wie zum Beispiel von einem sich schnell drehenden Teil) abbekommen.

6


MASCHINENLIEBE #2

7


if (reedKontakt != reedState) { Serial.print(„Kontakt: „); Serial.println(reedKontakt);

Die Schaltung selbst verändert sich nicht. Wenn ihr jetzt trampelt und das Rad in Bewegung setzt, rast der Magnet mehrere Male pro Sekunde am Reed-Element vorbei und schaltet den Strom. Wenn ihr jetzt im Arduino Code mithilfe der millis() Funtion und einer Zeitvariablen und einer Countervariablen messt, wie häufig pro Sekunde ein Impuls durchkommt, habt ihr einen Drehzahlmesser.

if (reedKontakt == LOW && gateopen) { timeStamp = millis(); duration = timeStamp - recentTimeStamp;

Das hilft natürlich nicht, wenn ihr den nicht auch irgendwo anschließt. Ihr könntet zum Beispiel eine Steckdose damit ansteuern, die den Fernseher oder die Playstation steuert. Dann kann nur noch gezockt werden, wenn man sich dabei auch einen abstrampelt (wie wir das z.B. in „WIR ABER ERWACHEN“ gemacht haben). machina eX ist aber keine Freundin von Kindersicherungen. Deshalb hat Lasse euch zwei Programme geschrieben, mit denen ihr die Lautstärke einer mp3 kontrollieren könnt: Ein Arduino Sketch der die Drehgeschwindigkeit errechnet und an den Seriellen Monitor schickt und ein Processing Skizze (dafür müsst ihr die Processing IDE von www.processing.org runterladen), die daraus eine mp3 anschaltet, wenn eine bestimmte Geschwindigkeit erreicht wurde und danach die Lautstärke des Tracks mit der Geschwindigkeit kontrolliert.

Serial.print(„Zeitabstand/“); Serial.println(duration); gateopen = false; } else if (reedKontakt == HIGH) { gateopen = true; } recentTimeStamp = timeStamp; reedState = reedKontakt; Serial.println(); }

int reedPin = 7; boolean reedKontakt = false; boolean reedState = false;

die Sketches bekommt ihr unter www.machinaex. de/maschinenliebe/trimmdich.zip

long int timeStamp = 0; long int recentTimeStamp = 0; int duration = 0;

Ersteinmal unterscheidet sich das Arduino Programm nicht wesentlich von dem ersten: reedPin ist D7. Das Neue ist die If -Abfrage: Wenn der Magnetkontakt wieder ausgeht, nachdem er aktiviert war, setzt das Arduino die timestamp variable auf die aktuelle Programmzeit (millis()) und errechnet den Zeitabstand zwischen diesem Impuls und dem Letzten. Daraus lässt sich auf die Drehgeschwindigkeit schließen.

boolean gateopen = false; int count = 0;

void setup() { Serial.begin(9600);

Diese wird dann über die Serielle Schnittstelle geschickt und die kann Processing genauso lesen wie ihr wenn ihr den Seriellen Monitor offen habt.

Serial.println(„Trimm dich Rad“); }

}

Ladet die Arduino Skizze auf euer Arduino. Schließt dann die Arduino IDE, öffnet den Processing Sketch und drückt auf RUN (das kleine Dreieck oben in der Processing IDE), während ihr das Arduino mit dem Computer verbunden habt.

pinMode(reedPin, INPUT_PULLUP);

void loop() { reedKontakt = digitalRead(reedPin);

Et voilá! Habt ihr andere Anwendungsideen? Verbesserungen? Lasst es uns wissen: info@machinaex.de

8


MASCHINENLIEBE #2

9


ARDUINO KNUTSCHT TELEFON ImpulswahlTelefon mit Arduino Uno abfragen

10


11


MASCHINENLIEBE #2

Eines unserer ersten komplexeren Arduino Projekte konnte nur mit viel Hilfe von Lasses Papa gelöst werden: In “Maurice” galt es die schimpfende Nonne Schwester Ramona mit einem Telefonanruf abzulenken. Dafür mussten wir abnehmen können was auf dem Retro-Look-Wahlscheiben-Telefon gewählt wurde: Schwester Ramonas Nummer oder doch die Nummer von Pater Mertens (666666)? Und in Reaktion darauf sollten vorproduzierte Hörspiele aus dem Telefonhörer klingen. Es gab also zwei Hürden zu bewältigen: a) Sound auf die Hörm uschel zu bekommen und b) die gewählten Nummern abzufangen. Lasse ließ die Finger knacken und raus kam dieser schöne Workflow... Benötigte Materialien: - 1x 10kOhm Widerstand - 1x 22kOhm Widerstand - 6x Jumperkabel (oder Litze wenn ihr lieber gleich löten wollt) - 4x Krokokabel (oder Litzekabel wenn ihr lieber gleich löten wollt) - 1x 3,5mm Klingenstecker (mono) - 1x Arduino Uno oder ähnlich - 1x Soundquelle mit 3,5mm Klinkeanschluss (z.B. MP3-Player) - Impulswahltelefon (Flomarkt 5,- EUR)

(Bild 1) Die 3 zentralen Pins für die Schaltung: 5V, GND, A0

Zuerst öffnen wir das Telefonkabel. (Alternativ könnt ihr auch die Verbindungen an den Steckerpins testen). Bei deutschen Posttelefonen solltet ihr im Inneren des großen langen schwarzen Kabels auf insgesamt vier verschiedenfarbige Kabel stoßen (Bild 2): Das grüne und gelbe Kabel ingnorieren wir und konzentrieren uns auf das weiße und das braune Kabel. Weiß ist die Stromversorgung, die wir mit dem 5Volt Pin des Arduinos verbinden. Braun wird unser Signalkabel, das wir einerseits direkt mit Analog-Eingang 0 (A0, s. Bild 5) verbinden, andererseits über einen 10 kOhm Widerstand an das Signalkabel unserer Soundquelle anschließen (hier rot und weiß am 3,5mm Klinke-Stecker) (Bild 5+7). An Analog Eingang 0 am Arduino sollten wir natürlich nicht vergessen einen hochohmigen Widerstand (hier 22kOhm) zum GND anzuschließen, damit wir auch saubere Null-Werte bekommen. Jetzt noch das Masse-Kabel des Klinkesteckers mit dem GND des Arduino verbinden und ihr solltet schon was aus dem Telefonhörer bekommen wenn ihr einen Sound abspielt (Bild 4). Außerdem können wir jetzt mit einem simplen Arduino-Code bereits Signale auslesen...

12

(Bild 2) beim Telefonkabel interessieren wir uns nur für Braun und Weiß


MASCHINENLIEBE #2

(Bild 3) die benรถtigten Materialien

13


MASCHINENLIEBE #2

(Bild 6) Das Erdungskabel (blau oder schwarz) der 3,5mm Klinke wird mit dem GND Pin verbunden.

(Bild 8) der weiße innere Draht des Telefonkabels gehört an den 5V Anschluss. (Eigentlich laufen da 48V drüber aber uns reicht das)

14


MASCHINENLIEBE #2

(Bild 7) Dabei wird das Signalführende Kabel (rot und weiß) über einen 10kOhm mit A0 verbunden

(Bild 9) das braune Kabel wird direkt mit A0 verbunden. Der wiederum wird mit einem Pull-Down Widerstand von 22kOhm auf GND verbunden

15


Um unseren Aufbau ersteinmal zu verstehen, lassen wir das Arduino zuerst einmal nur den AnalogEingang 0 (A0) mit dem Befehl analogRead(0) auslesen. Serial.println() schreibt uns das ganze dann in den SerialMonitor, den wir in der Arduino IDE erreichen indem wir oben rechts auf die Lupe klicken.

void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(0)); }

Im Serial Monitor der nun aufpoppt, sollten wir jetzt eine Menge zahlen durchrattern sehen. Solange ihr das Telefon aufgelegt hab, rasen hauptsächlich Nullen durch den Monitor. Wenn ihr abhebt, solltet ihr höhere Zahlen durchrattern sehen. Das ist so weil das Arduino merkt dass nun Strom am A0-Pin anliegt. Wenn dem nicht so ist, überprüft nochmal eure Schaltung. Wenn alles stimmt, könnt ihr jetzt schon abnehmen ob abgehoben oder aufgelegt ist.

Im nächsten Schritt schauen wir uns an, wie das Telefon wählt: Dafür modifizieren wir unseren Arduino-Sketch um die Stati “aufgelegt” und “abgehoben” direkt unterscheiden zu können. Wählt einen vernünftigen Mittelwert zwischen dem Nullwert und dem vorhin gemessenen Wert im Abgenommenstatus (die Zahlen die ihr im Serial Monitor beobachtet habt). Das kann je nach Telefon schonmal etwas variieren. Ich habe hier 400 als Schwellenwert benutzt. Durch eine if- Abfrage überprüft das Arduino nun ob der Schwellenwert überschritten oder unterschritten wird: if (analogRead(0) < 400) Daraufhin schreibt es uns dann in den Seriellen Monitor in welchem Status es sich gerade befindet. Das macht das auslesen etwas übersichtlicher. Vor allem weil wir nun mit einer sogenannten Statusvariablen arbeiten (der Teil hinter den && in

16


der if- Abfrage). Die dient dazu zu überprüfen ob sich der Status geändert hat oder gleichgeblieben ist. Das macht das Lesen im Monitor einfacher.

boolean telefonaufgelegt = false; boolean telefonaufgelegtContainer = false;

Wenn ihr jetzt auf die kleine Lupe oben rechts klickt und euch anschaut, was das Arduino uns erzählt, seht ihr je nachdem was ihr am Telefon macht “aufgelegt” oder “abgehoben” im Seriellen Monitor. Die Zahlen rasen aber nicht mehr wie wild durch. So können wir jetzt auch zählen wie häufig schon aufgelegt und abgehoben wurde.

void setup() { Serial.begin(9600); }

Wählt jetzt mal eine Zahl auf dem Telefon. Im Monitor werdet ihr sehen, dass das Telefon innerhalb kürzester Zeit mehrfach zwischen aufgelegt und abgehoben wechselt. Die Anzahl dieser Impulse entspricht der jeweils gewählten Nummer (wobei die 0 einer 10 entspricht). Das ist der Grund warum dieses Verfahren “Impulswahl” heißt.

void loop() { if (analogRead(0) < 400 && telefonaufgelegtContainer != false) { telefonaufgelegt = false; telefonaufgelegtContainer = false; Serial.println(“aufgelegt”);

Ihr könnt jetzt schon nachzählen und dadurch erfahren welche Zahl gewählt wurde. Aber wir wollen ja, dass das am Ende das Arduino selbst macht... Wenn ihr die // vor der Zeile Serial.println(millis()); löscht, und das Sketch nochmal auf das Arduino ladet, könnt ihr sehen wieviel Zeit zwischen den Impulsen vergeht und daraus lernen zu unterscheiden, ob es sich um einen Wahlimpuls handelt oder um ein echtes Auflegen oder Abnehmen.

} else if (analogRead(0) >= 400 && telefonaufgelegtContainer != true) { telefonaufgelegt = true; telefonaufgelegtContainer = true; Serial.println(“abgehoben”); // Serial.println(millis()); }

Darauf basiert auch Lasses großartiger Arduino Sketch den ihr unter

www.machinaex.de/TelefonImpuls.zip

}

herunterladen und benutzen könnt. Der ist schon so komplett dass ihr mit dem oben beschriebenen Aufbau ein Impulswahltelefon komplett abnehmen können solltet. Ausschließlich die Schwellenwerte müssten evtl. noch im Code angepasst werden (int high = 400 einfach auf eure Werte anpassen). Und fertig ist das interaktive Impulswahltelefonspielzeug mit das ihr mit den verschiedensten Sachen kombinieren könnt.

Gut zu wissen: Eigentlich laufen 48V übers Telefonnetz. Würdet ihr zum Beispiel euer Telefon zum Klingeln bringen wollen müsstet ihr diese Spannung und die Stromstärke des Netzes erreichen. Das ist durchaus möglich. Wir haben hier aber darauf verzichtet, weil es die Schaltung komplexer machen würde und für unsere Applikationen nicht notwendig ist. Wir freuen uns aber über Zusendungen.

17


sponsored by:

18


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.