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.