Ich bin neu hier im Forum und möchte ein Roboter Auto bauen, das von einem Raspberry Pi gesteuert wird.
Als Motoren habe ich zwei Nanotec Schrittmotoren (ST4118D1804-A) und zwei passende Controller (SMCI33-2).
Als Erweiterungsplatine für den Pi verwende ich das Modul RB-RS485.
Mit Hilfe des Buches "Raspberry Pi - Das umfassende Handbuch" von Kofler/Kühnast/Scherbeck habe ich die Bluetooth-Schnittstelle vom Pi deaktiviert, da sich wohl UART und Bluettoth beim Pi 3 gegenseitig behindern.
pyserial habe ich installiert auf dem Pi.
Leider gibt es auf der Seite für Joy-IT Anleitungen keine Anleitung mehr für die RB-RS485 Erweiterung. Die Kurzanleitung bei Conrad hilft mir auch nicht weiter.
Ich habe auf einem Windows Rechner das Programm "Free Serial Port Manager" installiert und getestet. Damit kann ich überprüfen, ob Pakete auf dem seriellen Port ankommen oder abgehen.
Obwohl aus der Erweiterungskarte die grüne LED für TX-Traffic blinkt wenn ich mein Skript ausführe, kommen keine Daten im Serial Port Manager an.
Hier mein Python Code.
Ich habe mich an das Programmierhandbuch für den SMCI33-2 Controller gehalten was die Ansteuerung des Motors angeht. Zum Test habe ich den Motor mit Hilfe des Nanotec Programms vom Windows PC aus angesteuert und den Port mit dem Serial Port Manager überwacht - das Telegramm ist gleich. Aber bisher nur in der Theorie - Mein Pi schickt keine Daten raus.
Code: Alles auswählen
#!/usr/bin/env python
import serial, time
ser = serial.Serial(
port='/dev/serial0',
baudrate = 115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout = 2)
print("Daten senden")
var = '#*$0\n' #Jeden Befehl habe ich vor dem Senden in die Variable "var" gespeichert und diese...
ser.write('#*$0\n'.encode())
print(var) #...nach dem Befehl anzeigen lassen.
print("Drehrichtung einstellen")
var = '#*d1\n'
ser.write('#*d1\n'.encode()) #dreht rechtsrum
print(var)
print("4000 Schritte")
var = '#*s4000\n'
ser.write('#*s4000\n'.encode()) #4000 Schritte
print(var)
print("Positionierart Drehzahlmodus")
var = '#*p5\n'
ser.write('#*p5\n'.encode()) #Positionierart auf 5
print(var)
print("minimale Frequenz von 1 Hz eingestellt")
var = '#*u1\n'
ser.write('#*u1\n'.encode()) #minimale Frequenz 1
print(var)
print("maximale Frequenz von 80 Hz eingestellt")
var = '#*o80\n'
ser.write('#*o80\n'.encode()) #maximale Frequenz 80
print(var)
print("Beschleunigung von 800 einstellen")
var = '#*b800\n'
ser.write('#*b800\n'.encode()) #Beschleunigung 800
print(var)
print("Motoren starten")
var = '#*A\n'
ser.write('#*A\n'.encode()) #Motoren starten
print(var)
time.sleep(2) #Der Motor sollte eigentlich 2 Sekunden lang laufen, bevor es gestoppt wird.
print("Motoren stoppen")
var = '#*S\n'
ser.write('#*S\n'.encode()) #Motoren stoppen
print(var)
ser.close()
Ich weiss dass mein Problem sehr speziell ist, ich habe es nur so genau wie möglich versucht zu beschreiben, damit mir möglichst geholfen werden kann. Hier nochmal in Kurzform meine Fragen:
-Muss ich auf dem Pi spezielle Treiber für das RB-RS485 Board installieren oder sollte es "Plug-and-Play" funktionieren?
-Welcher port ist der Richtige? Es funktioniert weder mit "ttyS0", noch mit "serial0". Mit "ttyAMA0" hängt sich das ganze Programm auf ähnlich wie bei diesem User, allerdings kann ich das Problem bei mir nicht beheben, indem ich de Port auf "ttyS0" ändere.
Alternativ:
-Ich habe ein USB-RS485 Kabel von Nanotec. Gibt es für den Pi bestimmte Treiber, die man installieren muss, damit das USB-Kabel erkannt wird?
Ich hoffe ich konnte mein Problem einigermaßen verständlich beschreiben.
Viele Grüße,
Der Praktikant