Accendere e spegnere 4 led tramite un ricevitore a infrarossi

Da raspibo.
Jump to navigation Jump to search

Hardware

E' stato usato un Raspberry PI modello B rev2, un ricevitore infrarossi universale che lavora sui 38khz (VS1838B), un mini telecomando universale da 38khz e 4 led blu (per gli altri colori probabilmente sarebbe il caso di inserire anche delle resistenze)

Il VS1838B ha 3 piedini (1 OUTPUT ,2 GND, 3 VCC). E' stato collegato con il piedino 1 alla GPIO23 che sarà il nostro ingresso per i segnali che poi dovranno essere decodificati da LIRC http://www.lirc.org , il piedno 2 a GROUND e il piedino 3 alla 3,3V.

Mentre i miei "stupendi e luminescenti" led blu sono stati collegati alla GPIO17,GPIO27,GPIO24 e GPIO25 che fungeranno da OUTPUT per l'accensione e lo spegnimento di questi (o qualsiasi altra cosa).

Installazione/Configurazione LIRC e test di funzionamento

Di fondamentale importanza è stato l'utilizzo del pacchetto LIRC (http://www.lirc.org/) che è stato incluso nelle ultime versioni di Raspbian e quindi non si necessita più della ricompilazione del kernel per poter abilitare i suoi moduli. L'installazione è la configurazione di LIRC è molto semplice, per prima cosa installiamo il pacchetto eseguendo il comando:

sudo apt-get install lirc

Aggiungiamo queste righe al file /etc/modules

lirc_dev
lirc_rpi gpio_in_pin=23

in cui abilitiamo i moduli e impostiamo che i segnali arriveranno dall'output del ricevitore infrarossi sulla GPIO23

aggiungiamo al file /boot/config.txt la riga

dtoverlay=lirc-rpi

Modifichiamo/Creiamo il file /etc/lirc/hardware.conf e aggiungiamo la seguente configurazione per il nostro hardware:

LIRCD_ARGS="--uinput"
LOAD_MODULES=true
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
LIRCD_CONF=""
LIRCMD_CONF=""

Ricarichiamo la configurazione eseguendo i comandi:

sudo /etc/init.d/lirc stop
sudo /etc/init.d/lirc start

Ora per testare che effettivamente il nostro ricevitore infrarossi sia stato collegato bene possiamo dare i seguenti comandi:

sudo /etc/init.d/lirc stop
mode2 -d /dev/lirc0

Ora puntando il telecomando verso il ricevitore e premendo un tasto dovremmo vendere comparire delle righe denominate "space" e "pulse", se ciò avviene il tutto è stato configurato bene, se ciò non avviene ricontrollate che abbiate eseguito tutti i suddetti passi come descritto.

Il prossimo passo è quello di mappare i nostri tasti del telecomando con alcune key che potete scegliere dal namespace valido dando il seguente comando:

irrecord --list-namespace


Ora utilizzando sempre irrecord creiamo la nostra "mappatura" delle frequenze eseguendo i comandi:

sudo /etc/init.d/lirc stop
irrecord -d /dev/lirc0 /home/pi/lircd.conf

Seguite le istruzioni riportare e assegnate le chiavi del namespace che preferite , io per il mio esperimento ho scelto KEY_1, KEY_2, KEY_3, KEY_4. Per concludere la mappatura dei vostri tasti premete invio e sarà generato il file di configurazione che al suo interno sarà del tipo:



 begin remote
 name  rasptest
 flags RAW_CODES|CONST_LENGTH
 eps            30
 aeps          100
 gap          106713
     begin raw_codes
           name KEY_1
            8891    4442     558     559     535     583
             565     535     563     554     535     561
             586     536     557     558     538     581
             565    1652     534    1670     577    1647
             590    1633     554    1682     556    1679
             565    1637     552    1682     555     561
             536    1667     571    1675     569     535
             563    1671     566     534     557     559
             536     582     564    1653     536     560
             587     535     564    1650     586     535
             556    1658     586    1633     555    1682
             562
           name KEY_2
            8938    4419     585     512     556     540
             556     581     592     493     574     540
             555     588     584     495     572     559
             535    1683     556    1657     612    1608


Ora copiatelo nelle configurazioni di lirc:

sudo mv /home/pi/lircd.conf /etc/lirc/lircd.conf

e ricaricatelo con:

sudo /etc/init.d/lirc start
sudo /etc/init.d/lirc stop

Test e script

Ora potete testare la mappatura del telecomando appena configurato dando il comando:

irw

Ad ogni tasto del telecomando premuto comparirà il tasto che gli è stato mappato con accanto il nome del telecomando (nel mio caso "rasptest").

Ora scriviamo la configurazione per irexec che si occupa essenzialmente di eseguire dei comandi sul nostro raspbian, mentre nel nostro caso richiamerà il programma dello step successivo:

Quindi creiamo il file .lircrc in /home/pi e inseriamo la seguente configurazione:

begin
   prog = irexec
   remote = rasptest
   button = KEY_1
   config = sudo python test_led_2.py -a 17 //comando eseguito alla prima pressione del tasto mappato su KEY_1
   config = sudo python test_led_2.py -s 17 // comando eseguito alla seconda pressione del tasto mappato su KEY_1 
   repeat = 0
end
begin
   prog = irexec
   remote = rasptest
   button = KEY_2
   config = sudo python test_led_2.py -a 27
   config = sudo python test_led_2.py -s 27
   repeat = 0
end
begin
   prog = irexec
   remote = rasptest
   button = KEY_3
   config = sudo python test_led_2.py -a 24
   config = sudo python test_led_2.py -s 24
   repeat = 0
end
begin
   prog = irexec
   remote = rasptest
   button = KEY_4
   config = sudo python test_led_2.py -a 25
   config = sudo python test_led_2.py -s 25
   repeat = 0
end

"rasptest" è il nome che avevo associato al mio telecomando, lo trovate comunque nel file /etc/lirc/lircd.conf (parametro "name")


Dovendo abilitare dei pin della GPIO ho scritto questo banalissimo programma che in base ai parametri passati abilita e disabilita il relativo pin della GPIO.

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import sys, getopt
 def main(argv):
   GPIO.setmode(GPIO.BCM)
   GPIO.setwarnings(False)
   outputOn = -1
   outputOff = -1
   try:
      opts, args = getopt.getopt(argv,"ha:s:",["acceso=","spento="])
      except getopt.GetoptError:
        print 'test_led_2.py -a <GPIOpin_led_on> -s <GPIOpin_led_off>'
        sys.exit(2)
      for opt, arg in opts:
        if opt == '-h':
          print 'test_led_2.py -a <GPIOpin_led_on> -s <GPIOpin_led_off>'
          sys.exit()
        elif opt in ("-a", "--acceso"):
          outputOn = int(arg)
        elif opt in ("-s", "--spento"):
          outputOff = int(arg)
      if outputOn != -1:
        print 'Abilito "', outputOn
        GPIO.setup(outputOn,GPIO.OUT)
        GPIO.output(outputOn, GPIO.HIGH)
      if outputOff != -1:
        print 'Disabilito "', outputOff
        GPIO.setup(outputOff,GPIO.OUT)
        GPIO.output(outputOff, GPIO.LOW)
if __name__ == "__main__":
   main(sys.argv[1:])
test_led_2.py -a <GPIOpin_led_on> -s <GPIOpin_led_off> 

-a sta per la GPIO che voglio abilitare e -s sta per la GPIO che voglio disabilitare.

ora eseguendo il comando

irexec &

e premendo i tasti che abbiamo mappato, noteremo che la prima volta il relativo led si accenderà, mentre premendo per la seconda volta lo stesso tasto si spegnerà.