Archiv der Kategorie 'Workshop'

Pieps Musik

Der diesjährige Conrad Adventskalender beschäftigt sich mit dem Thema Sound. Passend verbirgt sich hinter der heutigen Tür ein Piezo-Speaker (sowie etwas Draht). Mangels weiterer Bauteile soll im heutigen Experiment die Funktionsweise des Piezo-Elements erläutert werden: Wird eine Spannung angelegt, verformt sich die Metallscheibe und gibt ein Knacken ab. Darüber hinaus wird das Element ähnlich wie ein Kondensator geladen. Ein weiteres knacken ist erst nach Entladung zu hören.

Solche Piezo-Elemente sorgen in Armbanduhren oder elektronischem Spielzeug für den piepsigen Sound, mit dem bereits Generationen von Eltern genervt wurden. Bringt man die Piezoscheibe zum Schwingen, indem man ihn mit schnellen elektrischen Impulsen versorgt, ertönen die bekannten LoFi-Klänge. Die Schwingungen könnte man z.B. mit einem 555 Timer erzeugen.

Oder man schließt das Piezo-Element kurzerhand an Arduino an, dann kann man sogar Melodien programmieren!

Arduino und Piezo

Ich habe eine Sketch aus dem offiziellen Arduino-Tutorial so abgewandelt, dass ein „weihnachtsliches“ JingleBells ertönt. Die JingleBells-Version findest Du hier (KLICK).

Arduino erzeugt durch schnelles High/Low-Setzen von Pin 9 eine Rechteck-Schwingung – die je nach Frequenz am Piezo verschiedene Töne erzeugt. Diese werden ab Zeile 11 definiert:

// TONES ==========================================
// Start by defining the relationship between
// note, period, & frequency.
#define c 3830 // 261 Hz
#define d 3400 // 294 Hz
#define e 3038 // 329 Hz
#define f 2864 // 349 Hz
#define g 2550 // 392 Hz
#define a 2272 // 440 Hz
#define b 2028 // 493 Hz
#define C 1912 // 523 Hz
// Define a special note, 'R', to represent a rest
#define R 0

Rechteckschwingung
Rechteckschwingung. Bild von Saure. cc-by-sa

„Period“ ist jeweils eine Periodendauer der Schwingung (in der Grafik als T gekennzeichnet). Der Ton selbst wird in der Funktion playTone() erzeugt. In Zeilen 63 / 64 wird Pin9 für eine halbe Periode (tone_ / 2) auf HIGH gesetzt; anschließend in Zeile 67/68 auf LOW. Dies wiederholt sich so lange, bis die Tondauer erreicht ist.

while (elapsed_time < duration) {

digitalWrite(speakerOut,HIGH);
delayMicroseconds(tone_ / 2);

// DOWN
digitalWrite(speakerOut, LOW);
delayMicroseconds(tone_ / 2);

// Keep track of how long we pulsed
elapsed_time += (tone_);

Möchtest Du die Melodie ändern, schau dir die Zeilen 34-40 an. Viel Spaß beim experimentieren!

Roboter basteln – Prototyp v0.2

Nun ist der zweite Prototyp fertig, verbunden per Bluetooth mit Snap4Arduino macht er seine ersten Bewegungen.


Link zu einem kurzen Video.

Arduino per Bluetooth mit s4a und Snap4Arduino verbinden (Linux)

Arduino und Bluetooth vorbereiten

1. Arduino vorbereiten

Der Arduino muss mit einer Firmware bespielt werden, um mit s4a oder Snap4Arduino über die serielle Schnittstelle zu kommunizieren. Für Snap4Arduino wird diese Firmware bereits mit der Arduino Entwicklungsumgebung mitgeliefert.

Verbinde Arduino per USB-Kabel mit dem Computer und starte die Arduino-IDE. Unter "Datei/Beispiele/Firmata" findet sich die StandardFirmata, welche auf den Arduino geladen wird. Vergiss nicht unter "Werkzeuge" das richtige Board (Arduino UNO) sowie die richtige serielle Schnittstelle auszuwählen. Oft erkennt die Arduino-IDE diese automatisch.

Ist die Firmata-Firmware auf den Arduino geladen, kannst Du sie sofort mit Snap4Arduino verwenden. In der grafischen Snap-Oberfläche klickst Du auf "Arduino" und "mit Arduino verbinden". Erscheint die Meldung "Ein Arduino Board wurde verbunden. Fröhliche Prototyping" ist die Umgebung für erste Versuche eingerichtet.

Ähnlich funktioniert das mit s4a, wobei du hier eine andere Firmware benutzen musst. Diese findest Du auf der s4a-Website unter "Downloads".

2. Bluetooth-Board vorbereiten

Das Bluetooth-Shield ITead BT-Shield V2.2 ist im Grunde bereits vorbereitet. Bei mir kam es mit einer voreingestellten Baut-Rate (Datenübertragungsgeschwindigkeit) von 38400 Baud, die auch die s4a-Firmware benutzt. Sollte dies allerdings nicht der Fall sein, musst Du die Baud-Rate selbst einstellen. Darüber hinaus kannst Du den Namen des Bluetooth-Modul verändern, um es zu personalisieren und zB. erkennbar zu machen wenn Du mehrere der Module im selben Raum verwendest. Es gibt noch einige andere Einstellungen, die wir ignorieren können.

Arduino und ITead BT-Shield V2.2

Für Snap4Arduino benötigst Du allerdings eine Übertragungsrate von 57600 Baud. Möchtest Du diese Programmierumgebung benutzen, musst Du also die Baudrate anpassen – entweder im Quellcode der Firmata-Firmware, oder auf dem Bluetooth-Board. Da wir dem Bluetooth-Board sowieso einen eigenen Namen geben wollen, zeige ich hier diese Variante.

Bluetooth-Shield mit dem Computer verbinden

Auf dem Bluetooth-Board findest Du einen Schalter mit der Beschriftung CMD und DAT. Um das Board anzupassen benötigen wir den Command-Modus, der Schalter wird also in Richtung CMD geschoben. Außerdem müssen die Jumper in die richtige Position gebracht werden, damit das Board mit dem FTDI-Chip des Arduino und nicht mit dem Arduino Microcontroller kommuniziert. Auf dem Foto siehst Du die richtige Einstellung hierfür.

Nun wird es etwas fummelig. Aus dem Arduino-Board musst Du vorsichtig den Microcontroller entfernen. Dies gelingt am besten mit einem kleinen Schraubendreher und langen Fingernägeln. Pass auf, dass keine der Füße abbrechen, sonst kannst Du ihn später nicht mehr einsetzen. Außerdem solltest Du dich vor dieser Arbeit kurz „Erden“. Damit ist keine Meditation gemeint, du musst nur ein unisoliertes Heizungsrohr anfassen. Durch Reibung bei Bewegung ist dein Körper elektrisch geladen. Diese Ladung kann den Chip beschädigen. Durch das Berühren eines großen Metallgegenstandes, der mit der Erde verbunden ist, wird dein Körper entladen und du kannst sicher mit dem Chip hantieren.

Mit einem kleinen Schraubenzieher hebst Du den Chip auf einer Seite ein wenig an, dann tust Du dasselbe auf der anderen Seite. Schritt für Schritt in Micrometerschritten hebelst Du den Controller langsam aus der Halterung bis du ihn mit den Fingern herausziehen kannst.

Arduino mit herausgelöstem Microcontroller

Jetzt wird das Bluetooth-Board auf den Arduino aufgesteckt und per USB-Kabel mit dem Computer verbunden. Nun startest Du die Arduino-Umgebung. Kontrolliere, ob das richtige Board und der richtige Port ausgewählt ist.

Mit dem eingebauten Serial Monitor kannst Du nun so genannte AT-Befehle an dein Bluetooth-Board senden. Mit diesen lässt sich das Board einstellen. Stelle unten Links im Serial Monitor die Verbindungsgeschwindigkeit auf 38400 Baud, und den Modus daneben auf "Sowohl NL als auch CR" ein.

Wenn Du nun in die Befehlszeile oben "AT" eingibst und die Enter-Taste drückst, sollte im Ausgabefeld ein OK erscheinen. Nun kannst Du deinem Bluetooth-Board Befehle erteilen:

1. Namen verändern:

mit dem Befehl AT+NAME? wird er aktuelle Name des Boards ausgegeben. Willst Du ihn z.B. in "KLARA" ändern, tippe

AT+NAME=KLARA

2. Baudrate verändern

Wenn Du Snap4Arduino verwenden willst, musst Du die Bautrate mit folgendem Befehl anpassen:

AT+UART=57600,0,0

Mit dem Befehl AT+UART? überprüfst Du die Werte nochmal, dann kannst Du den Seriellen Monitor schließen und die USB-Verbindung wieder lösen.

Vorsichtig kannst Du nun den Microcontroller wieder in dein Arduino-Board einsetzen. Beachte, dass die kleine Kerbe an der richtigen Seite ist. Sie korrespondiert mit einer kleinen Kerbe in der Halterung. Richtig herum zeigt sie auf die gegenüberliegende Seite vom USB-Anschluss.

Pairing

Nun muss der Computer per Bluetooth mit dem Modul verbunden werden. Der Prozess nennt nich "Pairing". Zunächst ändern wir die Jumperposition wieder wie auf dem Bild zu sehen und der kleine Schalter wird auf die Position DAT gestellt. Das Shield wird auf den Arduino aufgesteckt und dieser per USB mit Strom versorgt. Dies kann nun auch mit einem Netzteil erfolgen, denn die Verbindung wird ja nun über Funk hergestellt.

Unter Linux starten wir den Bluetooth-Manager (grafische Oberfläche). Wenn ein Bluetooth-Device im Computer eingebaut ist, erscheit es als blaues Bluetooth-Symbol in der Task-Leiste (z.B. unter Ubuntu oder Linux Mint). Der Rechner scannt die Umgebung nach aktiven Bluetooth-Geräten und irgendwo sollte in der Liste unser Modul mit dem vorher vergebenen Namen auftauchen. Nach einem Doppelklick darauf werden wir aufgefordert, einen Pin einzugeben. Wenn dieser nicht im letzten Schritt per AT-Befehl verändert wurde, ist er "1234".

Arduino mit aufgestecktem Bluetooth Shield

Neben dem Namen in der Liste erscheint dann kurz "connected" und anschließend wieder "disconnected", doch dies ist kein Problem. Die Verbindung bauen wir später wieder auf.

Rechner und Bluetooth-Shield sind nun "gepaired".

Serielle Verbindung unter Linux einrichten

Nun gehts auf der Kommandozeile weiter. Wir öffnen ein Terminal-Fenster und tippen:

hcitool scan

Dieser Befehl gibt uns eine Liste von Bluetooth-Geräten mit ihren MAC Adressen aus. In der Liste sollte auch unser Modul zu finden sein. Wir benötigen die MAC-Adresse für den nächsten Schritt:

sudo rfcomm bind /dev/rfcomm0 MAC-Adresse

wobei "MAC-Adresse" durch die lange, mit Doppelpunkten bestückte Nummer ersetzt wird. Mit dem Root-Passwort weisen wir uns als berechtigter Superuser aus.

Workaround für s4a (funktioniert nicht richtig)

s4a scannt beim Start auf der Suche nach dem Arduino-Modul die Standard-Ports für eine USB-Verbindung. Es gibt leider keine eingebaute Möglichkeit s4a eine andere Verbindung beizubringen. Deshalb behelfen wir uns mit einem kleinen Hack, der allerdings (das muss ich vorausschieben) nicht richtig funktioniert.

Um s4a vorzugaukeln mit einer USB-Verbindung zu kommunizieren setzen wir einen Symlink von der Bluetooth-Adresse zu einer Fake-USB Adresse:

sudo sudo ln -s /dev/rfcomm0 /dev/ttyACM0

Wenn anschließend s4a gestartet wird, findet es tatsächlich den Arduino über Bluetooth – zu erkennen über die sich verändernden Werte der analogen Inputs.

Dieser Hack ist aber alles andere als stabil, weshalb ich letztendlich von s4a Abstand genommen habe und mich für Snap4Arduino entschieden hab.

Snap4Arduino – Bluetooth-Verbindung herstellen

In Snap4Arduino kann nämlich ein Verbindungsport ausgewählt werden. Aus dem Arduino-Menü wählen wir den Baustein "verbinde Arduino mit Port []" (siehe Bild) und ziehen ihn ins Scripte-Fenster. In das Eingabefeld schreiben wir die Adresse unseres Bluetooth-Geräts:

/dev/rfcomm0

Arduino Portauswahl

Durch einen Klick auf diesen Baustein wird nun eine Bluetooth-Verbindung aufgebaut und wir können endlich "Hello World" sagen:

hello world

Mit Kindern basteln

Gestern war der erste Tag des Mignon Game Kit Workshops im FIZ in Berlin-Spandau. Mein erster Workshoptag überhaupt – so als Leiter. Wider Erwarten sind es nun 10 Teilnehmer + 2 erwachsene Begleiterinnen geworden, was schon ganz schön viel ist für einen Anleiter und zehn Anfänger ohne Vorerfahrung. Die Kinder sind so zwischen 8-12 Jahren alt, und gerade die jüngeren ohne Begleitung haben schwierigkeiten. Aus diesem Grund war es ja auch erwünscht dass die unter 10jährigen mit Elternteil o.ä. kommen. Seis drum. Es macht allen Spaß, auch wenn es gerade für die kleineren Jungs eine ganz schöne Herausforderung an die Konzentration ist.

Löten

Gestern haben wir den ganzen Tag gelötet. Ich finde es nicht erstaunlich, jedoch bemerkenswert, dass die Mädchen die begabteren Löterinnen sind. Konzentriert setzen sie ordentliche Lötstellen, wo es bei den Jungs nur so qualmt – da wird schonmal das Plastikgehäuse der Lötstation malträtiert. Zwei Platinen habe ich dann auch am Abend mit nach Haus genommen – ich musste noch ein paar Widerstände aus- und wieder einlöten, da die beiden die falschen genommen hatten. Schließlich sollen heute alle auf dem gleichen Stand sein.

Ich denke heut Abend haben alle ihre Gamekits fertig und ich bin gespannt, wieviele dann auch funktionieren :)

mignon game kit

Mignon Game Kit Workshop

In der letzten Oktoberwoche werde ich einen Workshop mit dem Mignon Game Kit leiten. Das Kit ist ein Bausatz mit dem man eine tragbare Spielkonsole mit einem LED Matrix Display basteln kann. Der Workshop richtet sich an Kinder von 8-12 und interessierte Erwachsene als Begleitung/Coach – gerade für die kleineren Kinder.

Es ist der erste Workshop dieser Art, den ich durchführe und ich bin sehr gespannt, ob meine Planung und meine Ideen soweit aufgehen. Infos, Folien, Beispielprogramme findest Du auf https://mischk.neocities.org/ .

Ich denke ich werde hier berichten wie es lief und evtl auch ein paar Bilder posten.