2.0 Knoppen en LED’s

Meestal zijn er drie essentiële onderdelen in een compleet automatisch besturingsapparaat: INPUT, OUTPUT en CONTROL.
In het laatste gedeelte was de LED-module het outputgedeelte en RPI het besturingsgedeelte.
In praktische toepassingen laten we niet alleen LED’s knipperen, maar laten we een apparaat ook de omgeving waarnemen, instructies ontvangen en vervolgens de juiste actie ondernemen, zoals LED’s inschakelen, een zoemer laten piepen, enzovoort.
Vervolgens bouwen we een eenvoudig besturingssysteem om een ​​LED te bedienen via een drukknopschakelaar.
Project 2.1 Drukknopschakelaar en LED
In het project regelen we de LED-status via een drukknopschakelaar.
Wanneer de knop wordt ingedrukt, gaat onze LED AAN en wanneer deze wordt losgelaten, gaat de LED UIT.
Dit beschrijft een momentschakelaar.

Control:
RPI, Arduino,
MCU and etc.
Output: LED, buzzer, motor and etc.

Component List
Raspberry Pi (with 40 GPIO) x1
GPIO Extension Board & Wire x1
Breadboard x1
LED x1 Resistor 220Ω x1
Resistor 10kΩ x2
Push Button
Switch x1
Jumper Wire

Drukknopschakelaar
Dit type drukknopschakelaar heeft 4 pinnen (2-polige schakelaar). Twee pinnen aan de linkerkant zijn verbonden en zowel de linker-
als de rechterkant zijn hetzelfde volgens de illustratie:
Wanneer de knop op de schakelaar wordt ingedrukt, is het circuit voltooid (uw project is ingeschakeld). Schematisch diagram
van het circuit Hardwareverbinding. 

De schakelaar
Vierpuntsschakelaars zijn op een vergelijkbare manier bedraad als tweepuntsschakelaars.
Ze zijn gewoon veelzijdiger, omdat u meerdere geïsoleerde ingangen in hetzelfde schakelpunt kunt hebben.
Als u de diagrammen bekijkt, zijn pinnen 1 en 2 altijd verbonden, net als pinnen 3 en 4. Pins 1 en 2 zijn echter geïsoleerd van pinnen 3 en 4. Wanneer de knop wordt ingedrukt, worden de twee kanten verbonden en zijn pinnen 1, 2, 3 en 4 allemaal verbonden! 
Bij ‘momentane’ schakelaars wordt het circuit verbroken zodra de druk van de knop wordt gehaald, in tegenstelling tot ’tuimelschakelaars’ waarbij één druk op de knop verbinding maakt en de volgende druk op de knop het interne schakelcircuit weer verbreekt. 

#!/usr/bin/env python3
########################################################################
# Filename    : ButtonLED.py
# Description : Control led with button.
# Author      : www.freenove.com
# modification: 2023/05/11
########################################################################
from gpiozero import LED, Button

led = LED(17)       # define LED pin according to BCM Numbering
button = Button(18) # define Button pin according to BCM Numbering

def loop():
    while True:
        if button.is_pressed:  # if button is pressed
            led.on()        # turn on led
            print("Button is pressed, led turned on >>>") # print information on terminal 
        else : # if button is relessed
            led.off() # turn off led 
            print("Button is released, led turned off <<<")    

if __name__ == '__main__':     # Program entrance
    print ('Program is starting...')
    try:
        loop()
    except KeyboardInterrupt:  # Press ctrl-c to end the program.
        print("Ending program")

Orginele codes

Dit is hoe het werkt. Wanneer de knopschakelaar wordt losgelaten:

Dit project is ontworpen om te leren hoe je een drukknopschakelaar gebruikt om een ​​LED te bedienen.
We moeten eerst de status van de schakelaar lezen en vervolgens bepalen of we de LED AAN moeten zetten in overeenstemming met de status van de schakelaar.

Bekijk eerst het projectresultaat en leer vervolgens de code in detail kennen.
Als u vragen hebt, neem dan contact met ons op via: support@freenove.com

C Code 2.1.1 ButtonLED

  1. Open Tutorial_C_Code Bladzijde 59 (223 Pagina’s)
  2. Gebruik de volgende opdracht om de code “ButtonLED.c” te compileren en het uitvoerbare bestand “ButtonLED” te genereren
    gcc ButtonLED.c -o ButtonLED -lwiringPi
  3. Voer vervolgens het gegenereerde bestand “ButtonLED” uit.
    sudo ./ButtonLED
    Later blijft het terminalvenster de tekens “led off…” afdrukken. Druk op de knop, dan gaat de LED aan en dan drukt het terminalvenster de “led on…” af. Laat de knop los, dan gaat de LED uit en dan drukt het terminalvenster de “led off…” af.
    U kunt op “Ctrl+C” drukken om het programma te beëindigen.
    Het volgende is de programmacode:

Let op: In de code staat “knop” voor schakelactie.
Invoer:
knoppen, schakelaars,
sensoren, enz.
Besturing:
RPI, Arduino,
MCU, enz.
Uitvoer:
LED, zoemer,
motor, enz.

Project 2.2 MINI Tafellamp

Tablelamp.c

/**********************************************************************
* Filename    : Tablelamp.c
* Description : DIY MINI table lamp
* Author      : www.freenove.com
* modification: 2019/12/27
**********************************************************************/
#include <wiringPi.h>
#include <stdio.h>

#define ledPin    0  	//define the ledPin
#define buttonPin 1		//define the buttonPin
int ledState=LOW;		//store the State of led
int buttonState=HIGH;	//store the State of button
int lastbuttonState=HIGH;//store the lastState of button
long lastChangeTime;	//store the change time of button state
long captureTime=50;	//set the stable time for button state 
int reading;
int main(void)
{
	printf("Program is starting...\n");
	
	wiringPiSetup(); //Initialize wiringPi.	
	
	pinMode(ledPin, OUTPUT);   //Set ledPin to output
	pinMode(buttonPin, INPUT); //Set buttonPin to input

	pullUpDnControl(buttonPin, PUD_UP);  //pull up to high level
	while(1){
		reading = digitalRead(buttonPin); //read the current state of button
		if( reading != lastbuttonState){  //if the button state has changed, record the time point
			lastChangeTime = millis();
		}
		//if changing-state of the button last beyond the time we set, we consider that 
		//the current button state is an effective change rather than a buffeting
		if(millis() - lastChangeTime > captureTime){
			//if button state is changed, update the data.
			if(reading != buttonState){
				buttonState = reading;
				//if the state is low, it means the action is pressing
				if(buttonState == LOW){
					printf("Button is pressed!\n");
					ledState = !ledState; //Reverse the LED state
					if(ledState){
						printf("turn on LED ...\n");
					}
					else {
						printf("turn off LED ...\n");
					}
				}
				//if the state is high, it means the action is releasing
				else {
					printf("Button is released!\n");
				}
			}
		}
		digitalWrite(ledPin,ledState);
		lastbuttonState = reading;
	}

	return 0;
}


We zullen ook een Drukknopschakelaar, LED en RPi gebruiken om een ​​MINI Tafellamp te maken, maar dit zal anders werken:
Druk op de knop, de LED gaat AAN, en druk nogmaals op de knop, de LED gaat UIT.
De AAN-schakelaaractie is niet langer momentane actie (zoals een deurbel), maar blijft AAN zonder dat u voortdurend op de knopschakelaar hoeft te drukken.
Laten we eerst iets leren over de drukknopschakelaar.
Debounce een drukknopschakelaar
Wanneer een momentane drukknopschakelaar wordt ingedrukt, zal deze niet onmiddellijk van de ene staat naar de andere veranderen.
Vanwege kleine mechanische trillingen zal er een korte periode van continue trillingen zijn voordat deze te snel stabiliseert in een nieuwe staat voor mensen om te detecteren, maar niet voor computermicrocontrollers.
Hetzelfde geldt wanneer de drukknopschakelaar wordt losgelaten.
Dit ongewenste fenomeen staat bekend als “bounce”.

Als we de status van de drukknopschakelaar direct kunnen detecteren, zijn er meerdere in- en uitdrukacties in één drukcyclus. Deze buffeting zal de snelle werking van de microcontroller misleiden en veel verkeerde beslissingen veroorzaken. Daarom moeten we de impact van buffeting elimineren.
Onze oplossing: de status van de knop meerdere keren beoordelen. Alleen als de status van de knop stabiel (consistent) is gedurende een bepaalde periode, kan dit aangeven dat de knop daadwerkelijk in de AAN-status staat (wordt ingedrukt).
Dit project heeft dezelfde componenten en circuits nodig als die we in de vorige sectie hebben gebruikt.


Scroll naar boven