WLAN Modellfernsteuerung mit Pretzel Board und Android Smartphone (Vortrag Maker Faire 2016)

Auf der Maker Faire 2016 in Hannover habe ich vorgestellt, dass sich mit dem Pretzel Board und einer geeigneten Android App mit geringem Aufwand eine einfache Modellfernsteuerung über WLAN realisieren lässt.

Der Empfänger kann auf einem Prototypboard aufgebaut werden.

UDP_Receiver-Pretzelboard

Dann wird das Pretzelboard  über das Arduino IDE mit dem nachfolgenden Sketch „udp_RC.ino“ programmiert, der als Open Source bei github verfügbar ist.

Nun wird nur noch die Android App „udpRC4NanoESP“ benötigt, die über den Google Play Store kostenlos bezogen werden kann.

Wer einen dauerhafteren Aufbau des Empfängers realisieren möchte, findet im folgenden Beitrag weitere Informationen.

UMS-85 Monitorprogramm

UMS-85 Mikrocomputer-System mit Intel 8085

Vor einiger Zeit habe ich bei ebay ein UMS-85 Mikrocomputer-System erworben. Das System wurde in der Elektronikzeitschrift ELO aus dem Franzis Verlag Anfang der 80’er Jahre vorgestellt und es gab ein Sonderheft Nr. 70 mit dem Titel „Vom Bit zum Beispiel“, in dem das System beschrieben ist.

Meine Version war mit einem 2708 EPROM (1k bei 8 Bit- Datenlänge) bestückt und funktionsfähig. Allerdings sind mir bei der Beschäftigung mit dem System einige Unschönheiten aufgefallen, die ich beheben wollte.

Da ein 2708 EPROM aufgrund der zahlreichen Programmierspannungen von heute gängigen Programmierern nicht mehr unterstützt wird, habe ich die Systemleiterplatte durch umlöten von zwei Drahtbrücken – wie in der Beschreibung vorgesehen – auf den Einsatz eines 2716 EPROM, das auch vom meinem Programmierer unterstützt wird, hochgerüstet.

Die Übertragung des originalen EPROM Inhalts in das neue, größere  EPROM war problemlos möglich und ich konnte danach mein angepasstes Monitorprogramm einbauen.

Modellfernsteuerung mit Tablet oder Smartphone 2.0

Benutzen Sie Ihr Android Tablet oder Smartphone als Fernsteuerung: mit Touch-Kommandos oder durch Bewegen des Tablets kann beispielsweise ein Roboter oder ein Modellauto über Bluetooth ferngesteuert werden. Als Basis dient die Android App picCAR, die als Open Source released wurde und in ablauffähiger Version im Play Store erhältlich ist.  

Diese App unterstützt in der aktuellen Version 1.3 nun zusätzlich zur bisherigen Robotersteuerung ( = Richtungsänderung über Geschwindigkeitsänderung der Antriebsmotoren)  auch „normale“ Fahrzeuge, bei denen ein Kanal zur Lenkung und ein Kanal zur Geschwindigkeitsregelung verwendet wird.

Foto_hoch

Das Tablet oder Smartphone steuert einen PiKoder/SSC über BlueTooth an. Der Einbau und die Verdrahtung des PiKoder/SSC ist schnell vorgenommen.

Detail Einbau PiKoder

Nähere Informationen zum Aufbau des Empfängers finden Sie auf der PiKoder Bluetooth-Fernsteuerseite.

Android Based Robotics

Auf der Suche nach einer geeigneten Plattform für eigene Roboter-Experimente bin ich auf Android Based Robotics gestoßen. Die Idee, die Sensoren, die Kamera und die Rechnerperformance eines Android Smartphone zur Steuerung eines Roboters zu verwenden, hat mich angesprochen.

Die Ansteuerung der Roboterhardware, wie beispielsweise der Motoren, erfolgt über ein IOIO Board, das ja speziell dazu entwickelt wurde, über ein Android Smartphone Aktoren zu steuern.  Die Verbindung zwischen IOIO und Phone wird über Bluetooth realisiert.

Ansicht_02

Der Aufbau der Hardware ist nicht besonders schwierig und erfolgte in meinem Fall auf einer Pertinaxplatte. Das aktuelle PCB-Release des IOIO-Boards hat nur noch einen micro-USB Port, so dass der zur Kommunikation verwendete USB BT Dongle über das mitgelieferte (rote) Kabel adaptiert werden musste.

Die gesamte Verdrahtung kann wesentlich vereinfacht werden, wenn eine Prototyp-Leiterplatte, wie im Bild gezeigt, eingesetzt wird.

Android_Based_Robotics_02

Das komplette Android Based Robotics Projekt ist Open Source; allerdings war der verfügbare Source Code hinsichtlich der Entwicklungsumgebung und verwendeten Libraries für die Videoverarbeitung und IOIO Ansteuerung nicht auf dem neuesten Stand. Ein aktualisierter Stand des ABR_client ist bei github verfügbar.

Modellfernsteuerung mit Joystick

Die Möglichkeit, ein Modell mit Joystick zu steuern, gibt es schon viele Jahre.  Üblicherweise wird hierzu der Joystick mit einem Notebook mit einer entsprechenden Steuersoftware verbunden, die dann wiederum über eine serielle Schnittstelle – heutzutage ein USB Port – einen Fernsteuersender mit einem PPM-Signal über die Schüler-Buchse ansteuert.

Für das Notebook sind zwei „Open Source“-Programme erhältlich: das im Titelbild dargestellte „Flytron Compufly Joystick Interface“ und eine neuere Java-Version „Joystick-to-ppm“.

USB2PPM Java

Für die Verbindung zwischen USB Port und Fernsteuersender steht nun neben dem Original „Flytron USBtoPPM Converter“ eine „Single Chip“ – Selbstbaulösung „USB2PPM“ zur Verfügung, die beide Programme unterstützt.

USB2PPM_CompuFly_config

Der sehr einfache Aufbau dieser Lösung ist deshalb möglich, weil der verwendete, moderne PIC-Microcontroller 16F1455 bereits über eine USB-Schnittstelle und einen sehr genauen internen Oszillator (0,25% Genauigkeit) verfügt und damit nur eine entsprechende Firmware erforderlich ist.

Weitere Informationen und Bezugsquellen befinden sich auf der USB2PPM-Webseite.

Modellfernsteuerung mit Tablet oder Smartphone über Bluetooth

Benutzen Sie Ihr Android Tablet oder Smartphone als Fernsteuerung: mit Touch-Kommandos oder durch Bewegen des Tablets kann beispielsweise ein Roboter über Bluetooth ferngesteuert werden. Als Basis dient die Android App picCAR, die als Open Source released wurde und in ablauffähiger Version im Play Store erhältlich ist.  Diese App steuert einen PiKoder/SSC direkt an. Nähere Informationen zum Aufbau des Empfängers finden Sie auf der PiKoder Bluetooth-Fernsteuerseite.

Servosteuerung mit Raspberry Pi über I2C

Dieser Beitrag beschreibt die Ansteuerung von Modellbauservos durch den Raspberry Pi über den I2C-Bus. Hierbei wird, wie auch im vorherigen Beitrag, ein PiKoder/SSC PRO als I2C Slave eingesetzt, der die präzise Erzeugung der Impulse zur Servoansteuerung übernimmt.

Die erforderlichen Verbindungen zwischen dem Raspberry Pi und und dem PiKoder/SSC PRO sind im nachfolgenden Bild dargestellt. Der Raspberry Pi übernimmt die Spannungsversorgung.

Belegung Connector Raspberry Pi

Die Ansteuerung der Servos erfolgt über Python-Programme (Version 2.x). Das folgende Beispiel zeigt den prinzipiellen Ablauf:

# Control of RC servos by I2C with PiKoder/SSC PRO
#
# Please refer to www.pikoder.com for more information #
# Imports
import smbus, os
import time
import subprocess
#
# Init variables
ServoPosition = 0
ReturnCode = 0
bus = smbus.SMBus(1)
#
# Main Loop
while 1:
    try:
        bus.write_byte_data(0x40,0x1,ServoPosition)
        ReturnCode = 0
        ServoPosition = (ServoPosition + 20) % 255
    except IOError as err:
        ReturnCode = err.errno
        subprocess.call('i2cdetect','-y','1') print ("Servo position: ", ServoPosition, " - Return code: ", ReturnCode)
    time.sleep(1)

Weitere Informationen zum PiKoder/SSC PRO wie ein ausführliches USER’s Manual und Schaltungsvorschläge finden Sie auf der PiKoder/SSC PRO Webseite.

Servosteuerung mit Arduino über I2C

Modellbauservos sind in unzähligen Varianten erhältlich und können aufgrund hoher Stückzahlen preiswert angeboten werden. Daher finden Servos in großem Umfang über den Bereich des Modellbaus hinaus in Robotern, Drohnen und anderen Projekten, in denen Bewegungen realisiert werden muss, Verwendung.

Bei zeitkritischen Anwendungen realisieren Serielle Servo Controller die Schnittstelle zwischen einem PC oder einem Microcontroller wie einem Raspberry Pi oder Arduino als Hostrechner und den Modellbauservos. Außerdem spart ein SSC Controller PINs, von denen es ja nie genug geben kann, da mehrere Servos über einen PIN gesteuert werden können.

Die Auswahl des richtigen Servo Controllers hängt von der Anwendung ab. Für kleinere Projekte kommen überwiegend SSC mit einer UART Schnittstelle zum Einsatz.

Für größere Systeme mit mehreren eigenintelligenten Baugruppen (Beispiel Roboter) bietet der I2C Bus der PiKoder/SSC PRO Familie gegenüber einer UART-Verbindung den Vorteil, dass nur zwei Pins des Host-Controllers benötigt werden, um ein gesamtes Netzwerk anzusteuern. Ein einfaches, dem miniSSC sehr ähnliches Protokoll, steuert die einzelnen Servos.

Der I2C Bus bringt weitere Vorteile:

  • die bidirektionale Kommunikation und Konfliktauflösung wird über die vorhandene Buslogik sicher gestellt und
  • die Buslogik ist bereits in der Hardware realisiert, so dass der Rechenzeitbedarf aller Baugruppen für Kommunikationsaufgaben minimal ist.

Mit vorhandenen Baugruppen und fertigen Libraries ist die Ansteuerung einfach zu realisieren. Der folgende Sketch zeigt die Ansteuerung eines Modellbauservos mit dem Arduino über I2C.

// Control of RC servos by I2C with PiKoder/SSC PRO
// For more details on the PiKoder/SSC PRO goto www.pikoder.com
#include Wire.h
int x = 0;
int rc = 0;
void setup() {
  Serial.begin(9600); // Setup of host communication
  Wire.begin(); // Start I2C communication
}

void loop() {
  do { // make sure to sent message
    Serial.print("Servo position = ");
    Serial.print(x);
    Wire.beginTransmission(byte(0x40)); // Address Pikoder/SSC PRO
    Wire.write(byte(0x1)); // Servo @ channel 1
    Wire.write(byte(x)); // Transmit new servo position
    rc = Wire.endTransmission();
    Serial.print(" - Return code: ");
    Serial.println(rc);
    } while (rc != 0);
  x = (x + 20)% 255;
  delay(1000);
}

Weitere Informationen zum PiKoder/SSC PRO wie ein ausführliches USER’s Manual und Schaltungsvorschläge finden Sie auf der PiKoder/SSC PRO Webseite.

Servoansteuerung mit der Arduino Servo Library

Genauigkeit der Impulserzeugung

Ich habe mich gefragt, wie genau die Erzeugung der Impulslänge der Arduino Servo Library ist, da in der Beschreibung auf entsprechende Limitations hingewiesen wird:

„Limitations

This library does not stop your interrupts, so millis() will still work and you won’t lose incoming serial data, but a pulse end can be extended by the maximum length of your interrupt handles which can cause a small glitch in the servo position. If you have a large number of servos there will be a slight (1-3 degrees) position distortion in the ones with the lowest angular values.“

Quelle: http://playground.arduino.cc/ComponentLib/Servo

Hierzu habe ich zunächst mit dem PiKoder/PROBE die Impulslängen von 1.000 aufeinanderfolgenden Impulsen im unbelasteten Zustand, also auf dem Arduino wurde nur die Servo Library ausgeführt, gemessen. Bei einer Soll-Impulslänge von 1.500 µs ergibt sich folgende Verteilung der Impulslängen:

Verteilung ohne Last

Die erzeugten Impuls sind zwar etwas zu lang, aber die Streuung ist relativ gering und der Längenunterschied zwischen dem kürzesten und dem längstem Impuls beträgt nur 0,6 µs.

Die Verteilung der Impulslängen ändert sich deutlich, wenn auf dem Arduino weitere Anwendungen ablaufen und so zusätzliche Last erzeugt wird. Im folgenden Beispiel wird parallel zur Impulserzeugung der Programmspeicher eines PIC Controllers ausgelesen und über die USB Schnittstelle an einen PC übertragen.

Verteilung mit Last

Wie im Bild sichtbar ist, nimmt damit die Streuung der Impulslängen deutlich zu, da der Arduino immer wieder durch andere Aufgaben abgelenkt wird; der längste Impuls in dieser Messreihe hatte eine Länge von 1.508 µs.

Von daher ist bei einer hohen Anforderung an die Genauigkeit der Impulslänge und einer entsprechenden Prozessorauslastung des Arduino der Einsatz eines intelligenten Servo Controllers anzuraten – zumal davon auszugehen ist, dass sich die Genauigkeit und die Streuung beim Einsatz von mehr als einem Servo weiter verschlechtert.

 

Kalibrator 0 dBm (50 Ω)

 

Für einige meiner Projekte habe ich einen HF Kalibrator benötigt. Bei meinen Recherchen im Internet bin ich auf den Kalibriergenerator von Andreas Lindenau, DL4JAL (www.dl4jal.eu), gestoßen, der eine Schaltung von Thomas Moliere, DL7AV, überarbeitet und auf SMD umgestellt hat. Besonders ansprechend fand ich die Möglichkeit, den HF Pegel mit einem Vielfachmessgerät einzustellen.

Mit den Layout-Daten, die Andreas Lindenau mir freundlicherweise zur Verfügung gestellt hat, konnte ich eine Musterserie Leiterplatten fertigen lassen. Die Beschaffung der Bauteile war ebenfalls kein Problem.

Die Leiterplatte wurde mit Hilfe einer einglöteten und verklebten BNC-Einbaubuchse an der Frontplatte des vorgesehenen Gehäuses befestigt. Zusätzlich habe ich als Einschaltkontrolle noch eine LED mit Konstantstromquelle auf einer Lochrasterplatte eingebaut.

Einbau Frontplatte

Einbau Frontplatte Unterseite

Die folgenden Bilder zeigen das Gerät von vorne und hinten.

Vorderseite Kalibrator

Rückseite Kalibrator

Das Signal macht – im Rahmen meiner Messmöglichkeiten – einen sehr stabilen und guten Eindruck.

Screen Capture

P.S.: Ich habe noch einige Leiterplatten übrig, die ich gerne zu Selbstkosten (5 Euro plus Porto von 1,45 Euro) abgebe. Wenn Sie Interesse haben, dann senden Sie mir bitte eine E-mail (webmaster@makerprojekte.de) oder bestellen Sie direkt über PayPal im Store.