- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 34

Thema: 1 Jahr erfolglos progrmmiert - verzweifelt - python-Programmierer gesucht

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.09.2017
    Beiträge
    52
    Nun, bei der Sprachwahl bin ich ganz offen. Ob C++, Java oder Python ist mir insofern egal.
    Die Wahl ist damals auf Python gefallen, weil wie gesagt die GPIO einfach angesprochen werde konnten, ich überall gelesen habe, dass es die beste Möglichkeit sei und ich am meisten Tutorials gefunden habe.
    Aber da lasse ich mich gerne eines Besseren belehren, denn die meisten in diesem Forum habe sicher mehr Erfahrung im Modellbau und der Programmierung als ich. Meine Stärke liegt da eher bei Datenbanken, Excel und Finanzanalysen...

    Die Latenzzeiten bei diesem Konstrukt sind mir auch aufgefallen. Daher wollte ich über Variablen nachschauen, ob sich der aktuelle Wert der Einstellung für die Motoren um einen gewissen Prozentsatz, z.B. 5%, verändert hat und ansonsten soll nichts am aktuellen PWM-Signal verändert werden. Das Umschalten der Lichter/Kameras und die Blinker funktionieren soweit einwandfrei, manchmal zwar erst auf den zweiten Klick, aber damit könnte ich leben.

  2. #2
    HaWe
    Gast
    probier erst mal, ob du dein Problem, wie ich es vorgeschlagen habe, eingrenzen kannst. Dann kann man weiter entscheiden.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    18.01.2012
    Beiträge
    485
    Hallo,
    das schon gelesen ?
    https://www.elektormagazine.de/files/attachment/196

    Gruß

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    07.09.2017
    Beiträge
    52
    So, ich habe die Skizze des Programms nun zusammen.
    Links ist der Teil des PC, von dem aus der LKW gesteuert werden soll.
    Rechts ist der Teil, der die Motoren usw. ansteuern soll.
    Einerseits werden die Steuerbefehle in einem String vom PC zum RPi geschickt, andererseits soll zwischen den beiden Programmen kontinuierlich eine Kette von vier "Pings" hin und her geschickt werden, damit die Signalstärke über die Antwortzeit gemessen werden kann. Aktuell kein kritischer Teil und noch nicht implementiert.
    Morgen Abend habe ich Zeit die einzelnen Code-Fragmente zu testen.
    Ich hoffe, die Skizze ist einigermassen verständlich. Heute funktioniert der Code nicht parallel sondern nur sequenziell, was vermutlich die Ursache meines Problems ist. Parallel mit Python habe ich nicht hinbekommen.
    Klicke auf die Grafik für eine größere Ansicht

Name:	Programm.jpg
Hits:	29
Größe:	40,7 KB
ID:	33808

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.668
    Zwei Dinge sind bei der Sache:

    Einmal hast Du geschrieben, reagiert manchmal etwas nicht / nicht sofort. HaWe hatte schon geschrieben, dass das am Netz liegen kann. Klingt für mich aber auch ein wenig nach UDP, statt TCP.
    Dann hast Du geschrieben, dass er manchmal in die falsche Richtung lenkt. Das hört sich nach einem Fehler in der Programmlogik an, die ist aber eng verknüpft mit der Sprache selbst, so dass es dann auch Fehler aufgrund nicht verstehen der Programmiersprache sind, bzw. falscher Umsetzung mit der Programmiersprache.


    MfG
    Moppi

    PS: wegen besserer Lesbarkeit:

    1. Datenflussdiagramm (https://de.wikipedia.org/wiki/Datenflussdiagramm)
    2. Programmablaufplan (https://www.heise.de/download/product/papdesigner-51889)
    Kann bei der Dokumentation helfen, bzw. Sachverhalte übersichtlich und durchsichtig darzustellen.
    Geändert von Moppi (28.11.2018 um 11:25 Uhr)

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    07.09.2017
    Beiträge
    52
    Nun hatte ich endlich wieder Zeit, an der Steuerung weiterzubauen.
    Bin mit euren Vorschlägen systematisch an die Sache ran und habe die ganze Verkabelung getestet, vielleicht ist da ja eine Lötstelle schlecht. Alles geprüft, alles i.O.
    Also habe ich ein kleines Programm geschrieben, mit dem ich nur die Servos und nur in bestimmten Werten ansteuere. Das Programm läuft direkt auf dem RPi. So kann ich zumindest mal Übertragungsprobleme aus dem WLAN ausschliessen.
    Zum Testen habe ich ebenfalls die Last von den Servos genommen. Unter Last läuft einer nicht, ohne Last laufen alle drei. Akku evtl. zu schwach?
    Anbei die gewünschten Bilder des Lenkungsaufbaus, der Verkabelung und des Akkus.
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20181221_221623.jpg
Hits:	14
Größe:	101,5 KB
ID:	33873Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20181221_221640.jpg
Hits:	14
Größe:	106,4 KB
ID:	33874Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20181221_221703.jpg
Hits:	13
Größe:	71,1 KB
ID:	33875

    Auf dem Video wäre zu sehen, dass die Servos auch ohne Last zittern. Daher gehe ich eher davon aus, dass irgendwo was mit dem PWM-Signal nicht passt.
    Wie kann ich das hier einfügen, ohne einen Google- oder Facebook-Account erstellen zu müssen?

    Hier der Code, mit dem ich die Steuerung prüfe:
    Code:
    import sys
    import time
    import socket
    import RPi.GPIO as gpio
    from decimal import Decimal
    
    print "Setting up board"
    #General board settings
    gpio.setmode(gpio.BCM)
    
    print "Setting pins"
    #Pin settings for X axis
    gpio.setup(16, gpio.OUT)
    gpio.setup(20, gpio.OUT)
    gpio.setup(21, gpio.OUT)
    
    #Check LED on pwmServo Pin
    #gpio.output(16, True)
    #gpio.output(20, True)
    #gpio.output(21, True)
    #time.sleep(3)
    
    #gpio.output(16, False)
    #gpio.output(20, False)
    #gpio.output(21, False)
    #time.sleep(1)
    
    #Set pwmServo Pins as PWM
    pwmServo1 = gpio.PWM(16, 50)
    pwmServo2 = gpio.PWM(20, 50)
    pwmServo3 = gpio.PWM(21, 50)
    
    #Pin settings for blinker
    #gpio.setup(19, gpio.OUT)
    #gpio.setup(26, gpio.OUT)
    
    #Blinkers off
    #gpio.output(19, False)
    #gpio.output(26, False)
    
    time.sleep(1)
    
    #************************************************************************************************
    #Change from left to right
    fltCounter = float(7.5)
    pwmServo1.start(fltCounter)
    pwmServo2.start(fltCounter)
    pwmServo3.start(fltCounter)
    
    while fltCounter < 10.0: #12.5:
    	print "Angle % 0.2f" % fltCounter
    	pwmServo1.ChangeDutyCycle(fltCounter)
    	pwmServo2.ChangeDutyCycle(fltCounter)
    	pwmServo3.ChangeDutyCycle(fltCounter)
    	time.sleep(0.1)
    	fltCounter = float(fltCounter + 0.1)
    		
    #************************************************************************************************
    #Change from right to left
    fltCounter = float(10) #float(12.5)
    while fltCounter > 5:
    	print "Angle % 0.2f" % fltCounter
    	pwmServo1.ChangeDutyCycle(fltCounter)
    	pwmServo2.ChangeDutyCycle(fltCounter)
    	pwmServo3.ChangeDutyCycle(fltCounter)
    	time.sleep(0.1)
    	fltCounter = float(fltCounter - 0.1)
    
    #************************************************************************************************
    #Reset pins, turn off
    print "Stop"
    fltCounter = float(7.5)
    pwmServo1.ChangeDutyCycle(fltCounter)
    pwmServo2.ChangeDutyCycle(fltCounter)
    pwmServo3.ChangeDutyCycle(fltCounter)
    time.sleep(1)
    	
    #X axis stop
    pwmServo1.stop()
    pwmServo2.stop()
    pwmServo3.stop()
    gpio.output(16, False)
    gpio.output(20, False)
    gpio.output(21, False)
    
    #Right and left blinker off
    #gpio.output(19, False)
    #gpio.output(26, False)
    		
    gpio.cleanup()
    
    print "Exiting"

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.668
    Wenn ein PWM-Signal erzeugt wird, könnten Interrupts/Timerereignisse dieses stören. So dass das Timing des PWM-Signals geringfügig durcheinandergerät und sich also die Frequenz ändert. Besser ist vielleicht, einen externen PWM-Generator zu verwenden, der sich von nichts durcheinanderbringen lässt.

    Noch eine Idee wäre, nur mal ein Programm dafür zu schreiben, dass eine PWM-Signal ausgegeben wird, aber sonst nichts gemacht wird. - Glaube das hast Du ja schon. Vielleicht kann man für kurze Zeit dort auch mal die Interrupts alle abstellen und sehen, ob die Servos während dieser Zeit ruhig sind.

    Oder es ist ein äußerer Einfluss, der die Frequenz des Signals beeinflusst.

    RPi kenne ich mich leider nicht aus, daher kann ich dazu nichts Konkretes sagen.

    Eine Idee zum externen Test mit einem PWM-Signal wäre vielleicht der TL494.


    Nachtrag:

    Habe gerade gelesen, dass andere auch das Problem bei RPi haben, dass die PWM-Frequenz instabil ist. Mit externem PWM-Generator ist das dann wohl verschwunden.

    MfG
    Geändert von Moppi (22.12.2018 um 08:32 Uhr)

Ähnliche Themen

  1. Anleitung alter Alphaluxx Empfänger verzweifelt gesucht ..
    Von PsiQ_unterwegs im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 1
    Letzter Beitrag: 06.12.2013, 09:44
  2. Biete Job Programmierer gesucht
    Von darkzone666 im Forum Jobs/Hilfen/Stellen - Gesuche und Angebote
    Antworten: 0
    Letzter Beitrag: 25.10.2011, 17:54
  3. C- Programmierer gesucht
    Von nonoboy im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 14.10.2008, 22:56
  4. Programmierer(in) gesucht
    Von ricoderrichter im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 24.03.2005, 22:17
  5. Programmierer Gesucht
    Von johnjudge im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 16.03.2005, 19:16

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests