Dimmer -Schaltung Raspberry

Fragen zu Schaltungen, Elektronik, Elektrik usw.

Moderator: T.Hoffmann

Antworten
DadoDalel
Mini-User
Beiträge: 7
Registriert: Mi, 08.11.17, 15:07

Mi, 08.11.17, 17:21

Hallo,
ich bin neue in der Gruppe und wäre ganz froh, wenn jemand mir bei diesem Problem unterstützen konnte oder Behilflich sein konnte.
Also ich habe es soweit geschafft, dass ich mit zwei Tastern die Helligkeit der LED ändern konnte.
Ich möchte nun eine dritte Taste mit einbauen
Wenn die LED dunkler wird und die Taster 3 gedrückt wird, soll die LED leuchten.
Ich habs nun mal mit "while True: " versucht, hat nicht geklappt und habs auch beim Programm gelöscht.
Ich weiß nicht, wie ich es weiter machen soll.
Ich werde mich auf jeder Hilfe sehr freuen
Aufbau PWM.PNG
from time import sleep # Die Bibliothek wird in der Verzögerug gebracht

import RPi.GPIO as GPIO # Die RPi-Bibliothek importieren

GPIO.setmode(GPIO.BOARD) # Wir wollen das physikalische Pinnummernschema verwendem

taster1=16 # Namen für die Pinbelegung geben

taster2=12

LED1=18


GPIO.setup(taster1,GPIO.IN,pull_up_down=GPIO.PUD_UP) # Taster1 ist ein Eingang, und aktiviert den pullup Widerstand

GPIO.setup(taster2,GPIO.IN,pull_up_down=GPIO.PUD_UP) # Taster2 is an input, and activate pullup resistor

GPIO.setup(LED1,GPIO.OUT) # LED ist ein Ausgang

pwm1=GPIO.PWM(LED1,1000) # Die PWM wird auf LED realisiert, damit wir dimmen können, dafür wird 1000 Hz verwendet

pwm1.start(0) # Start PWM bei 0% Einschaltdauer (aus)


bright=1 # Die anfängliche Helligkeit wird auf 1% eingestellt


while(1): # Schleife für immer

if GPIO.input(taster1)==0: # Wenn Taster1 gedrückt wird

print ("taster1 wird gedrückt") # Benutzer benachrichtigen

bright=bright/2. # Die Helligkeit auf die Hälfte einstellen

pwm1.ChangeDutyCycle(bright) # Neue Helligkeit anwenden


sleep(.25) # Pause

print("Neue Helligkeit ist: ",bright) # Der Benutzer wird über die Helligkeit informiert

if GPIO.input(taster2)==0: # Wenn Taster2 gedrückt wird

print ("taster2 wird gedrückt") # Benutzer benachtrigen

bright=bright*2 # Doppelte Helligkeit

if bright>100: # Die Helligkeit wird auf oder unter 100%

bright=100

print ("Die maximale Helligkeit")

pwm1.ChangeDutyCycle(bright) # Neue Helligkeit wird angewndet


sleep(.25) # Pause

print ("Neue Helligkeit ist : ",bright) # Der Benutzer wird über die Helligkeit informiert
dieterr
Hyper-User
Hyper-User
Beiträge: 1144
Registriert: Mo, 04.01.16, 18:16

Mi, 08.11.17, 19:15

DadoDalel hat geschrieben: Wenn die LED dunkler wird und die Taster 3 gedrückt wird, soll die LED leuchten.
Ich verstehe schon nicht einmal was du genau willst. Kannst du das noch anders beschreiben? Meinst du mit leuchten 100% ?
DadoDalel
Mini-User
Beiträge: 7
Registriert: Mi, 08.11.17, 15:07

Mi, 08.11.17, 19:52

Wenn die LED unter 100% ist,leuchtet die LED schwacher. Wenn der Fall ist, soll die LED bei gedrückten Taster leuchten.
Borax
Star-Admin
Star-Admin
Beiträge: 11985
Registriert: Mo, 10.09.07, 16:28

Do, 09.11.17, 11:12

Kannst Du das mal in vernünftigem Deutsch erklären? Ich verstehe es immer noch nicht. Oder gerne auch in Form einer Wahrheitstabelle... Sprich was soll passieren wenn Taster 1 gedrückt wird, was bei Taster 2, und was bei Taster 3.
DadoDalel
Mini-User
Beiträge: 7
Registriert: Mi, 08.11.17, 15:07

Do, 09.11.17, 11:27

Es soll eine PWM-Signal mit der LED realisiert werden.
Es wird eine dimmbare LED erzeugt, die auf zwei Tastern reagiert. Wenn die Taste S1 gedrückt wird, wird die LED allmählich dunkler werden.Wenn die Taste S2 gedrückt wird, wird die LED allmählich heller. Wenn die LED dunkler wird, soll beim Drücken der Taste S3, die LED angehen.
Mit der beiden Tasten S1 und S2 funktioniert es.
Ich weiß nicht wie ich die Taste S3 mit einbaue, sodass sie funktioniert ?
dieterr
Hyper-User
Hyper-User
Beiträge: 1144
Registriert: Mo, 04.01.16, 18:16

Do, 09.11.17, 19:33

Du willst also Taste 3 gleichzeitig mit Taste 1 drücken, und dann soll es wieder auf 100% gehen?
DadoDalel
Mini-User
Beiträge: 7
Registriert: Mi, 08.11.17, 15:07

Do, 09.11.17, 19:41

Nein nicht gleichzeitig.
mit der Taste S1 kann ich die Helligkeit der LED einstellen und mit der Taste S3, soll die LED leuchten. Es gibt so einen Interrupt-Funktion, die habe ich nicht verstanden.
Borax
Star-Admin
Star-Admin
Beiträge: 11985
Registriert: Mo, 10.09.07, 16:28

Fr, 10.11.17, 00:00

und mit der Taste S3, soll die LED leuchten
Also soll beim drücken von Taste S3 die zuvor mit den Tastern S1 (oder S2) eingestellte Helligkeit 'sofort' auf 100% gehen? Weil leuchten tut die LED ja schon. Nur eben mit der (über S1 oder S2 eingestellten) Helligkeit (die ggf. auch 0 ist). Oder habe ich (bzw. wir) das immer noch nicht verstanden?
DadoDalel
Mini-User
Beiträge: 7
Registriert: Mi, 08.11.17, 15:07

Fr, 10.11.17, 10:13

j genau so
Borax
Star-Admin
Star-Admin
Beiträge: 11985
Registriert: Mo, 10.09.07, 16:28

Fr, 10.11.17, 13:07

Nur kurzfristig (also so lange Taste 3 gedrückt ist), oder soll der 100% Wert nach einmaligen drücken von Taste 3 dauerhaft bleiben (so lange die Helligkeit nicht über Taste 1 verändert wird)?
An welchem Pin (GPIO) hängt deine Taste 3? Ich kann das auf dem Fritzing Plan nicht erkennen. Und wofür sind die Widerstände an dem einen Taster (ist das der Taster 3?). Die beiden andern Taster gehen einfach gegen Masse (und werden über den GPIO internen PullUp mit Strom versorgt).
dieterr
Hyper-User
Hyper-User
Beiträge: 1144
Registriert: Mo, 04.01.16, 18:16

Fr, 10.11.17, 17:55

Borax hat geschrieben:Nur kurzfristig (also so lange Taste 3 gedrückt ist), oder soll der 100% Wert nach einmaligen drücken von Taste 3 dauerhaft bleiben (so lange die Helligkeit nicht über Taste 1 verändert wird)?
Da DaDoDalei es mit "while True" und Interrrupt versucht hat: aller Wahrscheinlichkeit nach ersteres
Warum der Taster so verschieden verschaltet ist, leuchtet mir aber auch nicht ein. Wobei, einen Verdacht habe ich :)

Aber bitte füge doch auch deinen Versuch mit "while True" hier an. Und was hast du beim Interrupt nicht verstanden, bzw. was schon verstanden bzw. versucht?
Benutzeravatar
Achim H
Star-Admin
Star-Admin
Beiträge: 13067
Registriert: Mi, 14.11.07, 02:14
Wohnort: Herdecke (NRW)
Kontaktdaten:

Fr, 10.11.17, 20:34

Was ich daran nicht verstehe:
Warum werden die Dimmstufen mit Faktoren von x2 bzw. /2 gemacht?

Das wären nur 7 Stufen hoch (2/4/8/16/32/64/128=100) und
7 Stufen runter (100/50/25/12.5/6.25/3.125/1.5625/0.78125)
und das mit einem Abstand von 0,25 Sekunden.

Ich würde bright nur um +1 bzw. -1 verändern und dafür die Zeit auf .05 verkürzen.
Von 1 auf 100 (= 100 Dimmstufen) in 5 Sekunden.
Von 100 auf 1 (= 100 Dimmstufen) in 5 Sekunden.

Es fehlt:
If bright<1:
bright=1

Welchen Wert hat GPIO.input(taster1), wenn der Taster nicht gedrückt wurde?
Welchen Wert hat GPIO.input(taster2), wenn der Taster nicht gedrückt wurde?
oscar
Mega-User
Mega-User
Beiträge: 412
Registriert: So, 15.06.14, 10:36

Sa, 11.11.17, 00:13

Ein Phyton-Programm möchte korrekt eingerückt sein. Was soll dieser an den linken Rand gequetschte Matsch?
Das wird aber so oder so nicht funktionieren. GPIO.input muß erstmal entprellt werden.
dieterr
Hyper-User
Hyper-User
Beiträge: 1144
Registriert: Mo, 04.01.16, 18:16

Sa, 11.11.17, 09:14

oscar hat geschrieben:Ein Phyton-Programm möchte korrekt eingerückt sein. Was soll dieser an den linken Rand gequetschte Matsch?
Das passiert, wenn man den Code nicht zwischen "" kopiert, sondern hintenan und es dann von der Forensoftware formatiert wird.
Benutzeravatar
Achim H
Star-Admin
Star-Admin
Beiträge: 13067
Registriert: Mi, 14.11.07, 02:14
Wohnort: Herdecke (NRW)
Kontaktdaten:

Sa, 11.11.17, 09:20

Der ist trotzdem nicht korrekt eingerückt.
Wenn man sich den Code aus dem HTML-Quelltext heraus sucht und in den Editor einfügt und alle <br/> entfernt und dafür einen Zeilenumbruch macht, dann hängt der ganze Klumpatsch ab der 5/6 Zeile (weiß nicht mehr genau) an der linken Seite.

Es wäre mir aber neu, wenn das Auswirkungen auf die Funktion einer Programmierung hätte.
Borax
Star-Admin
Star-Admin
Beiträge: 11985
Registriert: Mo, 10.09.07, 16:28

Sa, 11.11.17, 11:47

Es wäre mir aber neu, wenn das Auswirkungen auf die Funktion einer Programmierung hätte.
Das ist bei Phyton-Programmen aber so. Mir ist das auch nicht sympathisch. Entprellen ist hier nicht so wichtig. Die sleep(.25) sorgen ja dafür, dass nicht zu schnell ein neuer Tastendruck erkannt wird. Das Programm Ist ja (bisher) nicht interupt gesteuert.
Mal als Vorschlag (unter der Annahme dass dieterr recht hat und die LED nur kurzfristig auf 100% gehen soll)
1. Taster 3 genauso verschalten wie die beiden anderen. Z.B. an den nächsten Pin unter Pin 16 (Taster 2), was dann 18 wäre. Der andere Pin des Tasters nach GND. Keine Verbindung nach 3.3V! Keine Widerstände.
2. (Pseudocode - ich schreib hier nicht das ganze Progarmm...)
taster3=18 # Namen für die Pinbelegung geben
GPIO.setup(taster3,GPIO.IN,pull_up_down=GPIO.PUD_UP) # Taster3 is an input, and activate pullup resistor

Unten folgendes anfügen

Code: Alles auswählen

if GPIO.input(taster3)==0: # Wenn Taster3 gedrückt wird
    print ("taster3 wird gedrückt") # Benutzer benachrichtigen
    pwm1.ChangeDutyCycle(100) # 100% Helligkeit wird angewendet
    sleep(.25) # Pause
    print ("Neue Helligkeit ist : 100") # Der Benutzer wird über die Helligkeit informiert
else:
    pwm1.ChangeDutyCycle(bright) # Alte Helligkeit wird wieder angewendet
    sleep(.25) # Pause

@Achim
Warum werden die Dimmstufen mit Faktoren von x2 bzw. /2 gemacht?
Weil der Programmierer das so will?!
Welchen Wert hat GPIO.input(taster1), wenn der Taster nicht gedrückt wurde?
Welchen Wert hat GPIO.input(taster2), wenn der Taster nicht gedrückt wurde?
Anfangs 1 (nach Prorammstart - bevor irgendeine taste gedrückt wurde):
bright=1 # Die anfängliche Helligkeit wird auf 1% eingestellt
...danach bleibt einfach der letzte Wert stehen.
DadoDalel
Mini-User
Beiträge: 7
Registriert: Mi, 08.11.17, 15:07

Sa, 18.11.17, 15:10

Hallo,
tut mir Leid, dass ich mich nur jetzt wieder melde.
Ich habe einiges beim Programmcode was geändert.
Mit der Helligkeit der LED funktioniert das besser.
Ich habe noch das Problem mit der Taster 3.
Um besser zu erklären zu können, nenne ich einen Beispiel:
Ich habe eine Tischlampe und mit den beiden Tastern taster1 und taster2 kann ich die Helligkeit bzw. die Dunkelheit der Lampe bestimmen. Es ist momentan Dunkel und möchte die Lampe an machen. Ich drücke die Taste3 und die Lampe soll angehen.
ich hoffe, dass ich mit diesem Beispiel erklären konnt

Code: Alles auswählen

from time import sleep                                        
import RPi.GPIO as GPIO                                          
 

GPIO.setmode(GPIO.BOARD)                                           

 
taster1=16           #Für die Helligkeit                                   
  
taster2=12           # für die Dunkelheit

taster3=22          
 
LED1=18

GPIO.setup(taster1,GPIO.IN,pull_up_down=GPIO.PUD_UP)      

GPIO.setup(taster2,GPIO.IN,pull_up_down=GPIO.PUD_UP)   

GPIO.setup(taster3,GPIO.IN,pull_up_down=GPIO.PUD_UP)  

GPIO.add_event_detect(22, GPIO.BOTH)

GPIO.setup(LED1,GPIO.OUT)                                                                                                                                                                                              
pwm1=GPIO.PWM(LED1,1000)                                 
 

pwm1.start(0)                                          
  
bright=0                                          


def GPIO.input(taster3)==0:                         
 
   print ("taster2 wird gedrückt")             
    
    bright=100                           
		
  
 
while(1):
       
	  
        

	if GPIO.input(taster2)==0:                         
		
                           print ("taster2 wird gedrückt")             
		
                           bright=bright+2                            
		
                           if bright>100:                         
			 
                              bright=100
			
                             print ("Die maximale Helligkeit")
		
                             pwm1.ChangeDutyCycle(bright)                   
		
                             sleep(.25)                                    
		
                             print ("Neue Helligkeit ist : ",bright)
         
	
               if GPIO.input(taster1)==0:                         
		
                           print ("taster1 wird gedrückt")             
		
                           bright=bright-2                            
		
                           if bright<0:                         
			
                               bright=0
			
                               print ("Die maximale Helligkeit")
		
                               pwm1.ChangeDutyCycle(bright)                   
		
                               sleep(.25)                                    
		
                               print ("Neue Helligkeit ist : ",bright)
    
   
ich habs Versucht aber hat nicht funktioniert.
Ich werde auf jeder Hilfe mich freuen
Danke
Dateianhänge
PWM Dimmer-Schaltung.PNG
PWM Dimmer-Schaltung.PNG (49.02 KiB) 5846 mal betrachtet
dieterr
Hyper-User
Hyper-User
Beiträge: 1144
Registriert: Mo, 04.01.16, 18:16

Sa, 18.11.17, 19:00

So vielleicht?

Code: Alles auswählen

from time import sleep                                       
import RPi.GPIO as GPIO                                         
 

GPIO.setmode(GPIO.BOARD)                                           

 
taster1=16           #Für die Helligkeit                                   
 
taster2=12           # für die Dunkelheit

taster3=22         
 
LED1=18

GPIO.setup(taster1,GPIO.IN,pull_up_down=GPIO.PUD_UP)     

GPIO.setup(taster2,GPIO.IN,pull_up_down=GPIO.PUD_UP)   

GPIO.setup(taster3,GPIO.IN,pull_up_down=GPIO.PUD_UP) 

GPIO.add_event_detect(22, GPIO.BOTH)

GPIO.setup(LED1,GPIO.OUT)                                                                                                                                                                                             
pwm1=GPIO.PWM(LED1,1000)                                 
 

pwm1.start(0)                                         
 
bright=0                                         


while(1):
       
    if GPIO.input(taster3)==0:                         
 
                             print ("taster3 wird gedrückt")             
   
                             bright=100                           
      
                             print ("Die maximale Helligkeit")
      
                             pwm1.ChangeDutyCycle(bright)                   
      
                             sleep(.25)                                   
      
                             print ("Neue Helligkeit ist : ",bright)
    
       

   if GPIO.input(taster2)==0:                         
      
                           print ("taster2 wird gedrückt")             
      
                           bright=bright+2                           
      
                           if bright>100:                         
         
                              bright=100
         
                             print ("Die maximale Helligkeit")
      
                             pwm1.ChangeDutyCycle(bright)                   
      
                             sleep(.25)                                   
      
                             print ("Neue Helligkeit ist : ",bright)
         
   
               if GPIO.input(taster1)==0:                         
      
                           print ("taster1 wird gedrückt")             
      
                           bright=bright-2                           
      
                           if bright<0:                         
         
                               bright=0
         
                               print ("Die maximale Helligkeit")
      
                               pwm1.ChangeDutyCycle(bright)                   
      
                               sleep(.25)                                   
      
                               print ("Neue Helligkeit ist : ",bright)
   
   
Ich würde zwar sagen, der ganze Code ist schwerer Murks, müsste so aber das machen was du oben schreibst.
Meiner Ansicht nach
- sind die 3 Tasten massiver overkill, 2 davon sind unnötig
- ist ein zählen mit "+2" / "-2" zu langsam, da wartest du über 10 Sekunden bis es hell (oder wieder dunkel) ist
Aber das ist ja deine Sache.
Borax
Star-Admin
Star-Admin
Beiträge: 11985
Registriert: Mo, 10.09.07, 16:28

Sa, 18.11.17, 21:50

- sind die 3 Tasten massiver overkill, 2 davon sind unnötig
Ein Raspberry (nur) zum Dimmen ist sowieso schon ein massiver overkill. Der braucht ja mehr Strom als die LED(s)...
Wenn es nur um die Dimmung per Tasten geht, reicht ein ATTiny. Oder eine ESP8266 (der wäre sogar per Smartphone steuerbar). Nur wenn es um eine ganze Hausautomatisierung ginge, wäre ggf. ein Raspberry angemessen.
DadoDalel
Mini-User
Beiträge: 7
Registriert: Mi, 08.11.17, 15:07

Sa, 18.11.17, 22:00

  • - sind die 3 Tasten massiver overkill, 2 davon sind unnötig
Das ist eine Aufgabe vom Lehrer, kann nicht von alleiner entscheiden, dass ich zwei Tastern ausschließen soll
Antworten