11. Receptor infraroig

Llibreria Irremote

La llibreria Irremote afegeix a Arduino la capacitat de gestionar tant els emissors com els receptors de control remot d’infrarojos amb els protocols més comuns.

: Ref: Com afegir una llibreria nova a l'entorn Arduino pas a pas. <Add-library>

Conexió

Conexión del sensor de infrarrojos TSOPP3848.

Exercicis

  1. Compareu i carregueu el programa següent a Arduino.

    Un cop carregat, obriu el monitor de la sèrie i canvieu la velocitat de recepció de dades de manera que sigui igual a la velocitat de transmissió del programa.

    Premeu diverses tecles del comandament a distància. Els codis de claus apareixeran al monitor de la sèrie i a la pantalla 7 -segment.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    /*
       Lee códigos de un mando a distancia con protocolo NEC
       desde un receptor de infrarrojos.
       Envía el código por el puerto de comunicaciones serie.
       Envía el código a un display de 7 segmentos.
    */
    
    #include <IRremote.h>
    #include <Picuino.h>
    #include <Serial.h>
    
    const long SERIAL_BAUD = 19200; // Velocidad del puerto serie en baudios
    const int  RECV_PIN = 2;        // Pin de recepción de datos infrarrojos
    
    // Inicia un receptor de infrarrojos
    IRrecv ir_recv(RECV_PIN);
    decode_results result;
    
    // Extrae el código de tecla de del receptor de infrarrojos.
    int ir_read(void) {
       int code;
       // Si se ha recibido un código
       if (ir_recv.decode(&result)) {
          // Si el código es de protocolo NEC, devuelve el código
          if (result.decode_type == NEC) {
             // Prepara para recibir el siguiente código
             code = result.value;
             ir_recv.resume();
             return code;
          }
          ir_recv.resume();
       }
       return -1;  // Devuelve un código de error
    }
    
    
    // Inicia todos los componentes
    void setup() {
       Serial.begin(SERIAL_BAUD); // Inicia las comunicaciones serie
       ir_recv.enableIRIn();      // Inicia el receptor de infrarrojos
       pio.begin();               // Inicia el shield Picuino UNO
    }
    
    // Bucle principal
    void loop() {
       int code;
    
       // Lee el código recibido por el receptor de infrarrojos
       code = ir_read();
    
       // Si es un código válido, envía el código al puerto serie y al display
       if (code != -1) {
          Serial.println(code, HEX);
          code = (unsigned)code >> 8;
          pio.dispWrite(code);
    
       }
    
       delay(50);
    }
    
  2. Modifiqueu el programa anterior perquè el LED D1 s’encengui quan es prem el número 1 al control remot.

    A continuació, es mostra un exemple de codi incomplet per realitzar la tasca.

    1
    2
    3
       // Enciende el led D1 cuando se pulse el número '1' del mando a distancia
       if (code ==  ) {
          pio.ledWrite(1, LED_ON);
    
  3. Modifiqueu el programa anterior per desactivar tots els LED quan es premeu el botó zero '0'.

  4. Modifiqueu el primer programa per activar i desactivar una columna de LEDs amb els botons "+" i "--" del comandament a distància.

    En prémer '+' del comandament a distància, un nou LED de columna s'encendrà. As you prescribe '+' all LEDs will be turned on one by one. En prémer '-' del comandament a distància, l'últim LED s'apagarà. Tal com es pressiona '-' totes les Ledes seran desactivades un per un.

    Per programar el codi, cal crear una variable que compti amb el nombre de LEDs que han d’estar en marxa. Aquesta variable s’incrementarà o disminuirà amb els clústers del control. Una instrucció per a cada LED comprovarà si la variable és superior a un valor determinat, s'encendrà el LED. En cas contrari, el LED s’apagarà.

    Abans de la `` configuració () ``:

    int num_leds;   // Declara la variable num_leds como un número entero
    

    Dins del `` bucle () `` `` `` `` `, la variable s'ha d'augmentar i disminuir segons el codi rebut del comandament a distància:

    // Si se pulsa '+' aumenta el número de ledes encendidos
    if (code ==    )
       num_leds = num_leds + 1;
    

    A continuació, els LED s’han d’encendre o desactivar segons el valor de la variable:

    // Si se pulsa '+' aumenta el número de ledes encendidos
    if (num_leds > 0)
       pio.ledWrite(1, LED_ON);
    else
       pio.ledWrite(1, LED_OFF);
    
  5. Modifica l'exercici anterior de manera que la variable no augmenta més que el nombre total de LED i que no disminueix per sota de zero. S’afegiran dues condicions, una condició limitarà la variable si augmenta massa i una altra condició limitarà la variable si es redueix per sota de zero