Sheeld-Bürgerstreich

Der Pragmatische Architekt  –  6 Kommentare

Den Arduino-Shields 1Sheeld und 1Sheeld+ liegt eine simple Idee zugrunde: Was, wenn Maker die zahlreichen Sensoren und Funktionalitäten eines Android- oder iOS-Smartphones durch Arduino-Boards nutzen könnten. Genau das ermöglicht ein 1Sheeld{+}, welches sich deshalb als Mutter aller Shields betrachten lässt.

Eine Frage der Hardware

Während 1Sheeld via Bluetooth mit Android-Geräten kommuniziert, erlaubt das neuere 1Sheeld+ sowohl Android- als auch iOS-Hardware. Beide Shields unterscheiden sich in der Art ihrer Bluetooth-Unterstützung. Während sich das genügsame 1Sheeld mit älteren Bluetooth-Versionen zufrieden gibt, setzt 1Sheeld+ einen BLE-Stack (Bluetooth Low Energy) voraus.

Wir sollten uns aber im wörtlichen Sinne erst einmal ein Bild von beiden Shields machen.

Auf der nachfolgenden Abbildung ist ein konventionelles 1Sheeld zu sehen, das nur Android als Spielkameraden akzeptiert. Es ist zwar schwarz, aber nicht das schwarze Schaf der Familie:

1Sheeld implementiert das Zusammenspiel von Arduino Boards mit Android-Geräten über Bluetooth

Im Gegensatz dazu bietet 1Sheeld+ Unterstützung für iOS und Android:

Das modernere 1Sheeld+ verwendet Bluetooth Low Energy und unterstützt die Kooperation von Arduino-Boards mit Android- und iOS-Geräten

Das Shield offeriert mehrere Einstellungsmöglichkeiten (siehe nachfolgende Abbildung).

  • Rechts unten im Bild lässt sich 1Sheeld+ per Dip-Switch zwischen 3.3V und 5V umschalten, je nachdem welches Arduino-Board Verwendung findet. Im vorliegenden Fall fällt die Wahl auf die vom UNO vorausgesetzten 5V. Bei anderen Arduino-Boards wie zum Beispiel dem DUE dürfen es nur 3.3V Versorgungsspannung sein.
  • Direkt rechts daneben ist der obligatorische RESET-Schalter platziert.
  • Links oben befindet sich der Serial-Switch, der zwischen Programmiermodus (SW) und Ausführungsmodus (HW) wechselt.
  • Die BT-LED rechts oben im Bild signalisiert, ob sich 1Sheeld+ im Kopplungsmodus befindet (LED blinkt) oder bereits eine Verbindung mit einem Smartphone hergestellt hat (LED leuchtet kontinuierlich).
Das vom Autor benutzte 1Sheeld+ sitzt huckepack auf einem Arduino Uno Board

Ein weiterer Unterschied zwischen 1Sheeld und seinem jüngeren Cousin 1Sheeld+ besteht in der Verwendung des seriellen Ports. Controller wie der Arduino Uno besitzen nur einen (!) seriellen Hardware-Port, weshalb dieser Port nicht mehr für andere Zwecke zur Verfügung steht, sobald ihn 1Sheeld für die Kommunikation mit dem Arduino-Board reserviert. Im Gegensatz dazu besitzt 1Sheeld+ eine eigene Pin-Reihe, die den seriellen Hardware-Port für andere Aufgaben freistellt, falls erwünscht.

Wie in der Abbildung ersichtlich, enthält das 1Sheeld+ dazu zwei Extra-Pinreihen. In der linken lässt sich ein alternativer Pin für TX wählen (5, 7, 9, 11 oder 13) und in der rechten ein alternativer Pin für RX (6, 8, 10 oder 12). Um einen Arduino-Port für RX oder TX zu selektieren, steckt der Maker einen Jumper auf die zwei ISheeld+-Pins für den gewünschten Arduino-Port.

Der Einfachheit halber, bezeichne ich im Rest des Artikel die 1Sheeld-Familie (1Sheeld, 1Sheeld+) als 1Sheeld. Bei direkten Bezüge auf das iOS-fähige Board sage ich explizit 1Sheeld+.

Statt den hardwaremäßigen seriellen Port des Arduino zur Kommunikation zu benutzen, bietet 1Sheeld+ eine Pinreihe, um alternative Pins zu benutzen. Dazu sind die jeweils erwünschten Pins zu jumpern.

Damit wären die Details für das Zusammenspiel von 1Sheeld und Arduino-Board erläutert. Wie aber kommen die beiden zu einem Rendezvouz mit dem Smartphone?

Koppeln von 1Sheeld+ und Smartphone

Damit das Arduino-Board über 1Sheeld mit einem iPhone oder Android-Phone zusammenspielen kann, müssen Benutzer die App 1Sheeld aus dem Apple App Store oder Google Play installieren. Nach Start der App erfolgt das Finden und Koppeln von 1Sheeld mit dem Smartphone:

Durch Betätigen von Scan startet der Benutzer die Suche nach dem BLE-basierten 1Sheeld+

Sind Smartphone beziehungsweise App mit 1Sheeld verbunden, bietet die App-Bedieneroberfläche zahlreiche virtuelle Shields zur Auswahl an, die sich einzeln oder gemeinsam mit anderen virtuellen Shields selektieren lassen:

Nach erfolgreicher Kopplung kann der Benutzer alle gewünschten virtuellen Shields selektieren. Im vorliegenden Fall sind das die Kamera und ein Barcode Scanner

Aufgabe der App ist zum einen die Bereitstellung der Sensoren und Funktionalitäten des Smartphones für den Arduino-Entwickler, und zum anderen die Interaktion mit dem Benutzer.

Shields, Shields, Shields

1Sheeld+ unterscheidet zwischen verschiedenen Kategorien virtueller Shields.

  • Basic I/O Shields dienen zur Ein- und Ausgabe. Darunter fallen das Vibration Shield (nur Android), Pattern Shield (zur Erkennung von Mustern aus einer 3 x 3 Punkte Matrix und Verbindungslinien), Gamepad Shield (Bereitstellung eines virtuellen Gamepads), Slider Shield, Push Button Shield, Toggle Button Shield, Buzzer Shield, 7 Segments Shield, LED Shield, Keypad Shield (virtuelle Tastatur beispielsweise zur Eingabe von Pin-Codes).
  • Sensor Shields erlauben einem Arduino-Sketch Zugriff auf interne Sensoren des Smartphones wie Sensoren für Fingerabdruck (nur iOS), Gesichtserkennung, Farberkennung, NFC (nur Android), Temperatur, Annäherung, Druck, Lage, Magnetfelderr, Licht (nur Android) Gravitation (nur Android), GPS, Mikrofon, Gyroskop, Beschleunigung.
  • Special Shields stellen spezielle Funktionalitäten des Smartphones zur Benutzung durch Arduino bereit. Darunter fallen Spracherkennung, Text-to-Speech, Terminal, Barcode Scanner (nur iOS), grafisches LCD (nur Android), Datenlogger, Music Player, LCD, Tastatur, Uhrzeit, Meldungen, Kamera.
  • Communication Shields bilden Kommunikationsschnittstellen für Arduino-Sketches wie Internet (HTTP), Telefone (nur Android), SMS (nur Android), Skype (nur Android), E-Mails.
  • Social Media Shields wiederum implementieren den Zugriff auf Foursquare, Facebook und Twitter.
Programmierung

Um auf die virtuellen Shields zuzugreifen, installiert der Maker zunächst wie folgt die Onesheeld-Bibliothek. Über den Menüpfad Sketch > Include Library > Manage Libraries ... öffnet sich das Fenster Library Manager. Bei Eingabe von "OneSheeld" im Suchfeld rechts oben taucht die gesuchte Bibliothek auf und lässt sich mit einem Knopfdruck installieren:

Installation der OneSheeld-Bibliothek in der Arduino IDE

Um die Bibliothek zu nutzen, sind am Anfang des Arduino-Codes diverse Definitionen notwendig. Diese legen fest, welche virtuellen Shields zum Einsatz kommen sollen, und binden nur die tatsächlich benötigten Codeteile ein:

#define CUSTOM_SETTINGS
// Alle benötigten virtuellen Shields legt
// der Entwickler über #define fest

#define INCLUDE_TEXT_TO_SPEECH_SHIELD
#define INCLUDE_VOICE_RECOGNIZER_SHIELD

/* Zugriff auf die Bibliothek für 1Sheeld und 1Sheeld+ */

#include <OneSheeld.h>

Würde die 1Sheeld-Bibliothek immer naiv alle virtuellen Shields inkludieren, gerieten ressourcenbeschränkte Boards wie Arduino Uno rasch an ihre (Speicher-)Grenzen.

Das obige Beispiel verwendet die virtuellen Shields Text-to-Speech und Voice Recognition.

In der Methode setup() des Beispiels startet die Kommunikation zwischen Arduino-Firmware und OneSheeld-App via 1Sheeld:

void setup()
{
/* Starte die Kommunikation mit der Smartphone App OneSheeld */

OneSheeld.begin();
...
}

Die eigentliche Zusammenarbeit mit den virtuellen Shields erfolgt überwiegend in loop().

Das soll exemplarisch das unten abgedruckte Beispiel illustrieren. Zunächst spricht der Benutzer mit Hilfe des VoiceRecognition-UI ein Sprachkommando ins Smartphone. In Reaktion auf den jeweils erkannten Sprachbefehl, erzeugt der Arduino-Sketch eine textuelle Antwort, die das Text-to-Speech-Shield in eine Sprachausgabe am Smartphone umwandelt.

void loop()
{
// Neuen Sprachbefehl über Voice Recognition Shield empfangen?
if(VoiceRecognition.isNewCommandReceived())
{
// Was wurde im letzten Sprachbefehl übermittelt?
if(!strcmp("Guten Morgen", VoiceRecognition.getLastCommand()))
{
// Falls es ein "Guten Morgen" war,
// erzeugen wir über das virtuelle Shield
// TextToSpeech eine entsprechende Sprachausgabe

TextToSpeech.say("Guten Morgen liebe Leser");
}

...

}

Sagt der Benutzer am Smartphone zum Beispiel "Guten Morgen", antwortet 1Sheeld im obigen Sketch mit "Guten Morgen liebe Leser".

Zum Aufspielen des Sketches auf das Arduino-Board stellen Entwickler den Serial-Schalter (Serial Switch) nach rechts auf Schalterstellung "SW". Zur Ausführung dient die linke Schalterstellung "HW".

Erst die rechte Schalterstellung des Serial Switch (SW) ermöglicht das Flashen des Arduino-Boards

Beispiel

Natürlich kann dieser Beitrag nicht Projekte für sämtliche Shields beschreiben. Stattdessen soll ein einzelnes, zugegeben sehr einfaches Beispiel die Verwendung mehrerer Shields aus den verschiedenen Kategorien demonstrieren. Es geht um die sprachgesteuerte Ansteuerung eines Servomotors über 1Sheeld.

Das Schaltungsdiagramm in Fritzing gestaltet sich nicht weiter aufregend:

Ein Servo ist über 5V, GND und Pin 8 (Steuerleitung) an 1Sheeld+/Arduino Uno angeschlossen

Der Sketch gestaltet sich sehr einfach, weil die meiste Funktionalität auf 1Sheeld und seine APIs fußt. Über das Voice Recognizer Shield formuliert der Benutzer ein Kommando an den Arduino. Kommandos können sein "rechts, "links", "gerade aus", "foto". Bei den ersten drei Kommandos bewegt der Sketch das Ruder (den Aufsatz am Servo-Motor) nach links, rechts oder gerade aus. Im Falle von "foto" löst der Arduino ein Foto am Smartphone aus und meldet dies zusätzlich über eine E-Mail.

///////////////////////////////////////////
//
// Demo von 1Sheeld
// Michael Stal, 2018
//
///////////////////////////////////////////



// Verwendete Shields:

#define CUSTOM_SETTINGS
#define INCLUDE_VOICE_RECOGNIZER_SHIELD
#define INCLUDE_TERMINAL_SHIELD
#define INCLUDE_TEXT_TO_SPEECH_SHIELD
#define INCLUDE_CAMERA_SHIELD
#define INCLUDE_EMAIL_SHIELD


#include <OneSheeld.h>

// Servo angeschlossen über Pin 8

#include <Servo.h>
const byte SERVOPIN = 8;

// Steuerung Servo wie ein Bootsruder
Servo ruder;
const char cmd_links[] = "links";
const char cmd_rechts[] = "rechts";
const char cmd_gerade[] = "gerade aus";
const int gerade = 90;
const int links = 135;
const int rechts = 45;

// Sprachbefehl für Kameraufnahme und email
const char cmd_foto[] = "foto";

// Erfolgreiche Befehlsdurchführung quittiert mit:
const char ready[] = "fertig";


/////////////////////////////////////////////////
//
// setup() initialisiert OneSheeld und
// meldet Servo an Pin SERVOPIN
//
/////////////////////////////////////////////////

void setup() {
OneSheeld.begin(); // initialisieren
ruder.attach(SERVOPIN);
}


/////////////////////////////////////////////////
//
// loop() enthält
// die Befehlsschleife
//
/////////////////////////////////////////////////

void loop() {
// Neues Sprachkommando verfügbar?
if(VoiceRecognition.isNewCommandReceived()) { // ja
const char * cmd = VoiceRecognition.getLastCommand(); // Kommando
Terminal.println(cmd);
if (!strcmp(cmd_links, cmd)) {
// "links" => ruder nach links
ruder.write(links);
}
if (!strcmp(cmd_rechts,cmd)) {
// "rechts" => ruder nach rechts
ruder.write(rechts);
}
if (!strcmp(cmd_gerade,cmd)) {
// "gerade aus" => ruder nach gerade aus
ruder.write(gerade);
}
if (!strcmp(cmd_foto, cmd)) {
// "foto" => Foto machen und email senden
Camera.setFlash(ON);
Camera.rearCapture();
Email.send("michael.stal@gmail.com", "Foto gemacht", "Jemand hat über 1Sheeld+ ein Foto ausgelöst");
OneSheeld.delay(2000);
}
// Bestätigung der Befehls-Ausführung:
TextToSpeech.say(ready);
}
}

Zum Upload des Sketches aus der Arduino IDE stellen wir am 1Sheeld den Serial Switch auf "SW", danach auf "HW".

Im Smartphone stellen wir über die App 1Sheeld die Verbindung zum erkannten 1Sheeld her. Daraufhin wechselt die blaue Bluetooth-LED, wie bereits weiter oben beschrieben, vom Blinken zum kontinuierlichen Leuchten.

Nun stellt der Benutzer in 1Sheeld die von ihm/ihr benötigten virtuellen Shields zusammen:

Schritt 2: Die benötigten Shields (Terminal, EMail, Camera, Voice Recognizer, Text-to-Speech) wurden in der App ausgewählt

Während der Sketchausführung dient die 1Sheeld-App als Bindeglied zwischen Smartphone und Arduino. Im Voice Recognizer geben wir Sprachbefehle ein, die der Arduino dann direkt umsetzt, indem er zum Beispiel den Servo ansteuert, ein Foto schießt, oder eine Email verschickt.

In der folgenden Abbildung hat der den Sprachbefehl "links" registriert. Daraufhin bewegt sich das Servo nach links. Und am Schluss meldet die Stimme des Text-to-Speech-Shields am Smartphone "fertig".

Schritt 3: Die App hat im Voice Recognizer den Befehl "links" erkannt

Das nächste Foto des Versuchsaufbaus hat der Sketch auf das Sprachkommando "foto" selbst geschossen:

Foto der Versuchsanordnung, von dem Sketch geschossen

Das Beispiel mag trivial sein, verdeutlicht aber die grundsätzlichen Möglichkeiten von 1Sheeld+. So lassen sich RC-Modelle steuern, Roboterbewegungen per Hand dirigieren, Octocoupler steuern, Lampen orchestrieren, soziale Medien einbinden, um nur wenige Beispiele zu nennen. Zahlreiche YouTube-Videos und Instructables zeigen, dass die Fantasie von Makern hier kaum Grenzen kennt.

Fazit

Echte Produkte auf Basis von 1Sheeld dürften eher selten das Ziel von Makern sein, wenn gleich dies nicht völlig auszuschließen ist. Immerhin müssten Erfinder das Smartphone als Bestandteil der Lösung mitliefern oder den Kunden dazu überreden, sein Phone mit der 1Sheeld-App auszustatten und mit der 1Sheeld-Hardware zu koppeln.

In der Abbildung ist eine der Ausnahmen zu sehen, die Schematik eines Amazon Echo Klons. Details zum Umsetzen des Do-it-Yourself-Projekts finden sich auf hackster.io.

Ahmed Ismail, einer der 1Sheeld-Erfinder, demonstriert den Bau eines Geräts mit Hilfe von 1Sheeld, das Alexa (Amazon Echo) imitiert (Bild: 1sheeld.com)

Das "Mega-Shield" eignet sich hervorragend dafür, prototypische Lösungen zu erstellen, und mit virtuellen Shields zu experimentieren statt sofort auf reale Shields zu setzen. Preise von knapp über 50 Euro erscheinen für das Produkt daher angemessen. Das gilt um so mehr, als es sich um Open Source Hardware handelt, für die der Maker auf alle Schaltungen, Pläne und den Source Code zugreifen kann.

Weiterer Vorteil sind die von den Erfindern auf YouTube und anderen Kanälen (z.B. auf der 1Sheeld-Website) bereitgestellten Video-Tutorials, weil sie die Funktionalitäten verständlich und in leicht verdaulichen Häppchen präsentieren.

Danksagung

Ich möchte mich bei Ahmed Ismail von 1Sheeld bzw. Integreight, Inc, bedanken, der mir für den Beitrag ein 1Sheeld+ kostenlos zur Verfügung gestellt hat. Ahmed ist Mitschöpfer des Shields und Autor vieler erfrischender YouTube-Tutorials von 1Sheeld. Die Firma selbst – wie gesagt 1Sheeld ist komplett Open Source – stammt aus Ägypten. Was beweist, dass coole Ideen auch aus dem Nahen Osten kommen können, nicht nur aus USA, Europa oder China.