Arduino: Telecomando per presentazioni fai da te

Ciao a tutti!
questo progetto è nato dal bisogno di un telecomando per cambiare le slide ai miei corsi di Arduino,
so che ce ne sono in vendita di diversi tipi,
ma perchè comprare una cosa quando è possibile farsela da soli in modo molto più divertente..
Inoltre il costo totale dovrebbe aggirarsi sui 10 euro o poco più, quindi molto meno di quelli in commercio!

Massimo Banzi, il creatore di Arduino




Quello che ho fatto è un semplice sistema di trasmissione basato su moduli rf e chip Attiny85,
il ricevitore comunica con il pc tramite un Arduino Pro Micro (cercalo su eBay, costa pochi euro).
Il concetto è semplice: sul trasmettitori ci sono 2 tasti, alla pressione si un tasto o dell'altro vengono inviati 2 differenti valori al ricevitore



Ecco un video che illustra il comportamento del progetto:



Questi sono i 2 circuiti da realizzare, ecco il trasmettitore:



Ed ecco quello del ricevitore:


Gli sketch in questo caso sono 3,
uno da caricare nell'Attiny85 del trasmettitore, uno in quello del ricevitore e uno nell'Arduino Pro Micro.

Gli sketch che andranno caricati nell'attiny85 devono essere caricati con un programmatore apposito,
se non lo avete potete utilizzare un Arduino Uno come programmatore come mostrato qui:

Per caricare gli sketch di trasmettitore e ricevitore ho utilizzato la libreria "manchester".
Inoltre il creatore della libreria consiglia di utilizzare l'IDE di Arduino in versione 0022 che trovate in questa lista.

Ora che siamo pronti possiamo cominciare!

Partiamo dallo sketch del trasmettitore:

  1. #include <Manchester.h>
  2. /*
  3.  Manchester Transmitter example
  4.  In this example transmitter will send one 16 bit number per transmittion
  5.  try different speeds using this constants, your maximum possible speed will
  6.  depend on various factors like transmitter type, distance, microcontroller speed, ...
  7.  MAN_300 0
  8.  MAN_600 1
  9.  MAN_1200 2
  10.  MAN_2400 3
  11.  MAN_4800 4
  12.  MAN_9600 5
  13.  MAN_19200 6
  14.  MAN_38400 7
  15.  */
  16. #define BUTTON2_PIN 3
  17. #define BUTTON1_PIN 2
  18. #define TX_PIN 1
  19. #define LED_PIN 0
  20. int transmit_data1 = 1;
  21. int transmit_data2 = 2;
  22. void setup() {
  23.   pinMode(BUTTON1_PIN , INPUT_PULLUP);
  24.   pinMode(BUTTON2_PIN , INPUT_PULLUP);
  25.   pinMode(LED_PIN, OUTPUT);
  26.   //man.workAround1MhzTinyCore(); //add this in order for transmitter to work with 1Mhz Attiny85/84
  27.   man.setupTransmit(TX_PIN, MAN_1200);
  28. }
  29. void loop() {
  30.   int BUTTON1_STATE = digitalRead (BUTTON1_PIN);
  31.   if (BUTTON1_STATE == LOW)
  32.   {
  33.     man.transmit(transmit_data1);
  34.     digitalWrite (LED_PIN, HIGH);
  35.   }
  36.   else
  37.   {
  38.   digitalWrite (LED_PIN, LOW);
  39.   }
  40.   int BUTTON2_STATE = digitalRead (BUTTON2_PIN);
  41.   if (BUTTON2_STATE == LOW)
  42.   {
  43.     man.transmit(transmit_data2);
  44.     digitalWrite (LED_PIN, HIGH);
  45.   }
  46.   else
  47.   {
  48.   digitalWrite (LED_PIN, LOW);
  49.   }
  50. }

Ecco invece quello del ricevitore:

  1. #include <Manchester.h>
  2. /*
  3.  Manchester Receiver example
  4.  In this example receiver will receive one 16 bit number per transmittion
  5.  try different speeds using this constants, your maximum possible speed will
  6.  depend on various factors like transmitter type, distance, microcontroller speed, ...
  7.  MAN_300 0
  8.  MAN_600 1
  9.  MAN_1200 2
  10.  MAN_2400 3
  11.  MAN_4800 4
  12.  MAN_9600 5
  13.  MAN_19200 6
  14.  MAN_38400 7
  15.  */
  16. #define RX_PIN 1
  17. #define LED_PIN1 0
  18. #define LED_PIN2 2
  19. int m;
  20. void setup() {
  21.   pinMode(LED_PIN1, OUTPUT);  
  22.   pinMode(LED_PIN2, OUTPUT);
  23.   man.setupReceive(RX_PIN, MAN_1200);
  24.   man.beginReceive();
  25. }
  26. void loop() {
  27.   if (man.receiveComplete()) {
  28.     m = man.getMessage();
  29.     man.beginReceive(); //start listening for next message right after you retrieve the message
  30.   }
  31.   if (m == 1)
  32.   {
  33.     digitalWrite (LED_PIN1, HIGH);
  34.     delay(100);
  35.     digitalWrite (LED_PIN1, LOW);
  36.     m=0;
  37.   }
  38.   else
  39.   {
  40.     digitalWrite (LED_PIN1, LOW);
  41.   }
  42.   if (m == 2)
  43.   {
  44.     digitalWrite (LED_PIN2, HIGH);
  45.     delay(100);
  46.     digitalWrite (LED_PIN2, LOW);
  47.     m=0;
  48.   }
  49.   else
  50.   {
  51.     digitalWrite (LED_PIN2, LOW);
  52.   }
  53. }


Ed infine ecco quello da caricare nell'Arduino Pro Micro:

  1. int leftButton = 2;
  2. int rightButton = 3;
  3. void setup()
  4. {
  5.   pinMode(leftButton, INPUT_PULLUP);
  6.   pinMode(rightButton, INPUT_PULLUP);
  7.   Keyboard.begin();
  8. }
  9. void loop()
  10. {
  11.   int rightState = digitalRead(rightButton);
  12.   int leftState= digitalRead(leftButton);
  13.   if (rightState == HIGH){
  14.   Keyboard.write (KEY_RIGHT_ARROW);
  15.   delay(500);  

Se avete un Arduino Leonardo, anzichè il Pro Micro, va bene lo stesso.
L'Arduino Uno invece non è compatibile con questo progetto, perchè non dispone la possibilità di emulare la tastiera del pc (infatti sfrutto questa funzione per simulare la pressione delle frecce destra e sinistra per cambiare le slide).

Finito! questo è tutto,
se avete domande come al solito scrivete qui sotto, ciao!

Segui Daniele Alberti su Google+ e su Twitter!

8 commenti:

  1. Ottima guida! E' sempre bello trovare un progetto ben commentato come questo da cui trarre spunto per nuove invenzioni.

    Noi siamo una startup appena nata (ci siamo presentati in occasione della Maker Faire Rome) con l'obiettivo di avvicinare quanta più gente possibile al mondo dell'automazione DIY tramite guide come queste. Se ti può far piacere avere un altro canale su cui condividere i tuoi progetti prova a dare un'occhiata al nostro sito www.umake.it - the makers marketplace! E' una sorta di marketplace dedicato ai makers, quindi speriamo ti piacerà!

    Buon making e ancora complimenti per il tuo blog!

    RispondiElimina
  2. Questo commento è stato eliminato dall'autore.

    RispondiElimina
    Risposte
    1. Ciao, bellina l'idea e lo spunto eventualmente per altro (la simulazione della tastiera mi ha ha fatto sorridere davanti al monitor...)...
      Domandina sul ricevitore: come mai hai unsato un Attiny85 + Arduino Pro Micro , non si riesce a scaricare tutto sul Arduino Pro Micro ?
      grazie

      Ciao
      Roberto

      Elimina
    2. Ciao, alla fine il mio obiettivo è quello, cercare di proporre cose abbastanza generiche in modo da essere utili a più persone possibili.

      Per il secondo attiny il motivo è che non sono riuscito a far comunicare l'attiny con il micro, probabilmente a causa delle diverse librerie.

      Elimina
  3. Ciao io avrei intensione di fare una cosa del genere, ovvero collegare un ricevitore ir ad arduino e poi con il telecomando posso comandare un pc (ad esempio i classici pulsanti di avanzamento quando si guarda un film) secondo te è possibile farlo?

    RispondiElimina
    Risposte
    1. ciao, devi cercare di capire quali sono i tasti che ti servono, se sono la freccia dx e sx lo sketch é identico a questo.

      Elimina
  4. Ciao Daniele, sto provando a costruire un apri porta con telecomando con gli stessi moduli che hai usato tu. Solo che la distanza tra ricevitore ed emettitore non supera i 10 metri, ho usato antenne in rame elicoidale acquistate da ebay. Cosa posso fare per aumentare il raggio d'azione?

    RispondiElimina
    Risposte
    1. Ciao, purtroppo il raggio di questi moduli non è un granchè, ti consiglio questi che tirano decisamente di più.
      http://www.danielealberti.it/2016/01/ricetrasmettitore-rf-per-arduino.html
      ciao!

      Elimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Related Posts Plugin for WordPress, Blogger...