schaltlogik entwickeln für 8-gang-schaltung

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
geist4711
User
Beiträge: 47
Registriert: Montag 29. Juli 2019, 11:48

@deets, danke!
Damit werde ich mich Morgen beschäftigen, in einer neuen Datei wo es nur um diese Beleuchtung geht. mal seh'n ob ich das so hin bekomme ;-)
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
konkret, was muss ich wo bitte schreiben damit die 'class Licht' zb genutzt wird und nicht einfach nur 'nichts' passiert?
Du musst eine Instanz der Klasse bilden und dann kannst du bei der Instanz Attribute setzen und Methoden anwenden.

Also z.B.

Code: Alles auswählen

...
licht = Licht()
licht.fahrlicht_an() #der Methodenaufruf schaltet das Fahrlicht ein
Gruß, noisefloor
geist4711
User
Beiträge: 47
Registriert: Montag 29. Juli 2019, 11:48

So, heute ging es noch weiter.

Der Spagetti-code funktioniert nun.
Einzig Fern-licht schaltet nicht wie beim Auto, also
Fernlicht-tippen -> Fernlicht an,
Fernlicht-tippen -> Fernlicht aus
Sondern wie das Bremslicht, aber damit kann ich leben.

Aktueller code:

Code: Alles auswählen


#!/usr/bin/python3
from gpiozero import LED,Button,PWMLED,AngularServo
from time import sleep
from signal import pause
from functools import partial

fahrlicht_button = Button(26) #lichtschalter
fernlicht_button = Button(19) #fernlichtschalter
blinker_li = Button(13) #blinkschalter links
blinker_re = Button(6) #blinkschalter rechts
hupe = Button(5) #hupenschalter
gang_hoch = Button(11) #servo hoch-schalten
gang_runter = Button(9) #servo runter-schalten
bremse = Button(10)

GEAR2SERVO = [-90, -64.3, -38.6, -12.9, 12.8, 38.5, 64.2, 90] 

current_gear = 0
servo = AngularServo(25,
    initial_angle=GEAR2SERVO[current_gear],
    min_angle=min(GEAR2SERVO),
    max_angle=max(GEAR2SERVO), min_pulse_width=0.0008, max_pulse_width=0.0023)

fahrlicht = 0.5 #Abblendlicht vorn, wert
fernlicht = 1 #fernlicht vorn, wert
bremslicht = 1 #bremslicht hinten, wert
lichtaus = 0

led1 = PWMLED(21,initial_value=0) # Fahrlicht vorn
led2 = PWMLED(20,initial_value=0) # Fahrlicht hinten
led3 = LED(16) # blinker links
led4 = LED(12) # blinker rechts
led5 = LED(7)  # hupe

def clamp(value, lower, upper):
    return max(min(upper, value), lower)

def shift(direction):
    global current_gear
    current_gear = clamp(current_gear + direction, 0, len(GEAR2SERVO)-1)
    servo.angle = GEAR2SERVO[current_gear]

def blinker_links():
    led3.blink (on_time = 0.8, off_time = 0.2)

def blinker_rechts():
    led4.blink (on_time = 0.8, off_time = 0.2)

def fernlicht_an():
    if led1.value < 1: # wenn abgeblendet
        led1.value = 1 # dann aufblenden       
    else: fernlicht_aus

def fernlicht_aus():
    if fahrlicht_button.is_pressed:
        led1.value = fahrlicht
    else: led1.value =lichtaus

def fahrlicht_an():
    led1.value = fahrlicht
    led2.value = fahrlicht
    
def fahrlicht_aus():
    led1.value = lichtaus
    led2.value = lichtaus
    
def bremslicht_an():
    led2.value = bremslicht
    
def bremslicht_aus():
    if fahrlicht_button.is_pressed:
        led2.value = fahrlicht
    else: led2.value = lichtaus

gang_hoch.when_pressed = partial(shift, +1)
gang_runter.when_pressed = partial(shift, -1)

blinker_li.when_pressed = blinker_links                         
blinker_li.when_released = led3.off

blinker_re.when_pressed = blinker_rechts
blinker_re.when_released = led4.off

fahrlicht_button.when_pressed = fahrlicht_an
fahrlicht_button.when_released = fahrlicht_aus

fernlicht_button.when_pressed = fernlicht_an
fernlicht_button.when_released = fernlicht_aus

bremse.when_pressed = bremslicht_an
bremse.when_released = bremslicht_aus

hupe.when_pressed = led5.on
hupe.when_released = led5.off

pause()

Jetzt geht es an die 'Hardware' (Sobald ich das zweite Steckboard habe):
Optokoppler-Schaltung aufbauen, FET's verkabeln, LED's verkabeln, usw.
Hab mir übrigens LED's mit 0.5w/120° für Blinker und Rücklicht geholt, soll ja möglichst hell werden.
Welche LED's das Fahrlicht bekommt, ist noch nicht raus, da die Frontleuchten nochnicht feststehen.
Jedenfalls wird es wegen der Stvo noch Batterie-Stecklicht geben und diese Beleuchtung wird 'zusatzlicht', damit ist der Stvo genüge getan und trotzdem hab ich(zusätzlich) meine Beleuchtung.

für die die es interessiert werde ich weiter berichten.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Der Spagetti-code funktioniert nun.
Zu deiner Ehrenrettung muss man ja sagen, dass das kein Spaghetticode ist. Bei Verwendung von gpiozero ist das ja erst mal der normale Weg, dass man Funktionen definiert und die an Callbacks bindet.

Irgendwann kommt halt der Punkt, wo man das ganze besser in eine Klasse packt, um z.B. `global`zu vermeiden, s.o.

Wenn du Python lernst bzw. richtig lernen willst, dann _musst_ du dich mit Klassen und Instanzen beschäftigen. Weil ohne kannst du nie nie nie vernünftigt bzw. größere Sachen in Python programmieren.
Wenn Python mittel zum Zweck für dein Bastelprojekt ist, dann wäre der Code IMHO ok so. Wobei ich auch, wie oben schon von anderen gesagt wurde, eher eine Mikrocontroller wie den ESP32/ESP8266 dafür nehmen würde. Grund: läuft robuster, der Raspi ist ja letztendlich nur ein Computer, der abstützen kann wie jeder Computer.
Und die ESP kannst du auch mit Python programmien ;-) - wenn du willst.

Gruß, noisefloor
geist4711
User
Beiträge: 47
Registriert: Montag 29. Juli 2019, 11:48

ja, auf dauer komm ich da nicht drumrum, mich auch in klassen usw ein zu arbeiten.
noch kann ich aber die übersicht darüber behalten, was ich da so scripte -noch, wenn auch wohl nichtmehr lange, wenn es denn fortschreitet.

ich beschäftige mich auch in zukunft damit das zu realisieren wie das denn geht, weil es einfach sauberer ausschaut und man besser sachen hinzufügen etc kann :-)

klingt interessant mit dem kleinen controler, alleinschon dem platz wegen.

kann ich da auch eine camera anbinden?
wenn die beleuchtung und gangschaltung läuft, wäre das der nächste schritt.
so mit aufzeichnung der wegstrecke usw.
und danach was mir noch so einfällt :-)
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

also der ESP32 ist z.Zt. wahrscheinlich DER gängigste Mikrocontroller, der im Hobby- und Bastelbereich eingesetzt wird. Dazu findest du bergeweise Projekte und Doku im Internet.

Gruß, noisefloor
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der ESP32 kann auch Kamera und SD-Karte. ZB https://www.amazon.de/KeeYees-Bluetooth ... 9860611007
geist4711
User
Beiträge: 47
Registriert: Montag 29. Juli 2019, 11:48

haute hab ich die LED's mal mit FET's usw getestet.
läuft gut und die roten LED's sind dermaßen hell, das sich das 'ins auge brennt'
die gelben nicht ganz so, obwohl sie auch 20lm haben sollen wie die roten, aber immernoch stark genug das man die eigentlich kaum übersehen können wird -und sollte es doch draussen am tag nicht hell genug sein, kommen eben doch andere high-power-LED's zum einsatz(3w zb). das werde ich aber dann sehen wenn ich das mal draussen teste, später wenn alles auf platine und im gehäuse verbaut ist, also die FET's usw.
geist4711
User
Beiträge: 47
Registriert: Montag 29. Juli 2019, 11:48

nach einigen weiteren tests usw, mit fet's, optokopplern, anderen sachen, usw, stellte sich gesichert heraus, das der serve gerne 'zittert'.
soweit ich probiert hab, immer besonders gern, wenn de pi zb gleichzeitig ein video oderoder wieder gibt, also 'anderes' zu tun hat als die nebensächlichkeit mit den GPIO-ports.
das ist ziemlich doof ;-)
ich werde also nun schweren herzens doch etwas geld in die hand nehmen und auf einen arduino mega2560 umsteigen -den mega wegen den vielen vielen ports.
will noch einiges an sensoren, wie zb akku-überwachung und alarmanlage(beschleunigungssensor), leuchtweitenregulierung, usw dranbauen und zuviele port's kann man garnicht haben :-)
mal sehn ob's dann besser geht mit dem servo (und später auch dem servos für leuchtweitenregulierung/frontlampenverstellung).
das bisherige scripten mit python kann ich, leicht verändert, dann wieder verwenden, hab den 'arduino-code' zum teil schon fertig.
Antworten