Lezione 12: Comunicazioni wireless low cost con Arduino

Lezione 12: Comunicazioni wireless low cost con Arduino

In questa dodicesima puntata, vedremo come poter inviare tra diversi dispositivi dati in maniera wireless a bassissimo costo.

Le comunicazioni wireless (“senza fili”) sono diventante ormai uno standard ben consolidato nei vari dispositivi che si dispone, come Smartphone, PC, telecomandi etc… La comodità di poter navigare su Internet per casa o in giro senza avere un “cavo dati” collegato è davvero senza paragoni !

Sul mercato è possibile trovare tantissimi modelli per far comunicare vari Arduino e dispositivi tra di loro. Per esempio, in questo articolo, verrà trattato il modulo wireless low-cost che funziona sulle frequenze 433 MHz. Il suo nome è MX-05V e MX-FS-03V,

HCMODU0007_800_600

 

Il kit può essere acquistato su Ebay, oppure direttamente sul sito https://www.hobbycomponents.com.

Ecco gli schemi circuitali dei kit wireless:

MX-05V schema:

MX-05V

MX-FS-03V schema:

MX-FS-03V

 

Receiver module parameters from http://www.buildcircuit.com/how-to-use-rf-module-with-arduino/

receiver-only
1. Product Model: MX-05V
2. Operating voltage: DC5V
3. Quiescent Current: 4mA
4. Receiving frequency:315Mhz
5. Receiver sensitivity:-105DB
6. Size: 30 * 14 * 7mm

transmitter-only
1. Product Model: MX-FS-03V
2. Launch distance :20-200 meters (different voltage, different results)
3. Operating voltage :3.5-12V
4. Dimensions: 19 * 19mm
5. Operating mode: AM
6. Transfer rate: 4KB / S
7. Transmitting power: 10mW
8. Transmitting frequency: 315Mhz
9. An external antenna: 25cm ordinary multi-core or single-core line
10. Pinout from left → right: (DATA; VCC; GND) – See more at: http://www.buildcircuit.com/how-to-use-rf-module-with-arduino/#sthash.tDeERzrm.dpuf

– See more at: http://www.buildcircuit.com/how-to-use-rf-module-with-arduino/#sthash.tDeERzrm.dpuf

Facciamo qualche piccolo esempio di utilizzo di dispositivi wireless per comunicazioni con Arduino;

1° Progetto: Stazione meteo

La prima idea che mi viene in mente sull’utilizzo di questo modulo wireless è quello di creare una piccola stazione meteo, composta da un Arduino connesso ad Internet e un altro Arduino posto fuori casa, con collegato il sensore per rilevare la temperatura, per esempio il DHT22. Per poter trasmettere la lettura del valore della temperatura, è possibile usare il modulo wireless riportato nelle righe precedente.

Meteo

 

Introduzione del progetto in formato PDF

 

pdf

 

2° Progetto: Relè comandati a distanza

Un altro interessante utilizzo, può essere quello di azionare delle prese elettriche comandate da un relè, a distanza, attraverso il modulo wireless. Per esempio potremmo avere un’unica base, con Arduino, modulo TX e webserver, che comanda vari RX.

0-96d41f35-800

 

3° Progetto: Sistema di sicurezza con sensori PIR

Un altro esempio di utilizzo dei moduli di comunicazioni è quello di creare un sistema di allarme con i sensori PIR sparsi per la casa, e collegati ad un’unità centrale, che rileva tutti i movimenti e li registra in qualche modo.

pir_iso_botm_annot

 

4° Progetto: Apertura del garage di casa

Un ultimo interessante progetto, può essere aprire il garage di casa, sfruttando Arduino, Internet e i moduli wireless, che funzionano sulle frequenze 443 MHz.

Sectional-type_overhead_garage_door

 

Questi progetti, verranno trattati nei prossimi capitoli, quando verranno introdotti altri dispositivi importantissimi con Arduino, come ad esempio la Shield Ethernet, che permette di collegare il micro controllore alla rete.

1° Programma: “Hello wireless”

In questo programma, verrà mostrato come poter inviare una stringa tra il TX e RX e mostrata sul seriale di quest’ultimo. Per poter far mandare in esecuzione il programma, occorre disporre di 2 Arduino. I collegamenti sono riportati in queste due immagini:

HCARDU0007_MXFS03_MX05V_433MHz_Wireless_Module_Pinout

 

Tx MODULE CONNECTIONS:

PIN  DESCRIPTION      ARDUINO PIN
1    GND              GND
2    VCC (3.5-12V)    VCC
3    TX DATA          D2

Rx MODULE CONNECTIONS:

PIN  DESCRIPTION      ARDUINO PIN
1    GND              GND
2    RX DATA          D2
3    RX DATA          N/A
4    VCC (5V)         VCC

 

Codice per TX

/**
Questo programma va caricato sul TX e permette di inviare una stringa ad un altro Arduino
*/

#include <VirtualWire.h>

void setup()
{
    Serial.begin(9600);   // Debugging only
    Serial.println("setup");
    vw_set_tx_pin(2);
    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);  // Bits per sec
}

void loop()
{
    const char *msg = "hello";

    digitalWrite(13, true); // Flash a light to show transmitting
    vw_send((uint8_t *)msg, strlen(msg));
    vw_wait_tx(); // Wait until the whole message is gone
    digitalWrite(13, false);
    delay(200);
}

Mentre sul RX:

/**
Questo programma va caricato sul RX e permette di ricevere una stringa che è stata inviata da un altro Arduino
*/
#include <VirtualWire.h>
 
void setup()
{
 Serial.begin(9600); // Debugging only
 Serial.println("setup");
 vw_set_rx_pin(2);
 // Initialise the IO and ISR
 vw_set_ptt_inverted(true); // Required for DR3100
 vw_setup(2000); // Bits per sec
 
 vw_rx_start(); // Start the receiver PLL running
}
 
void loop()
{
 uint8_t buf[VW_MAX_MESSAGE_LEN];
 uint8_t buflen = VW_MAX_MESSAGE_LEN;
 
 if (vw_get_message(buf, &buflen)) // Non-blocking
 {
 int i;
 
 digitalWrite(13, true); // Flash a light to show received good message
 // Message with a good checksum received, dump it.
 Serial.print("Got: ");
 
 for (i = 0; i < buflen; i++)
 {
 Serial.print(buf[i], HEX);
 Serial.print(" ");
 }
 Serial.println("");
 digitalWrite(13, false);
 }

}

2° Programma: Inviare un valore di un segnale analogico 

In questo secondo programma, vedremo come inviare il valore di un segnale analogico (A0), tra i due dispositivi. Anche in questo caso, vanno caricati due differenti programmi, uno sul TX e uno sul RX.

Codice TX

/* FILE:    MXFS03V_433MHZ_MODULE_HCMODU0007_TRANSMIT_EXAMPLE.pde
   DATE:    03/03/13
   VERSION: 0.1
   AUTHOR:  Andrew Davies

This is an example of how to use the 433MHz wireless transmitter module 
(HCMODU0007) which is the Tx part of the tranmitter and receiver module pair.
This example makes use of the VirtualWire library written by Mike McCauley.
The sketch will read a value from the analogue input A0 and transmit it as 
2 bytes to the receiver module once every second.

Tx MODULE CONNECTIONS:

PIN  DESCRIPTION      ARDUINO PIN
1    GND              GND
2    VCC (3.5-12V)    VCC
3    TX DATA          D2

You may copy, alter and reuse this code in any way you like, but please leave 
reference to HobbyComponents.com in your comments if you redistribute this code. 

THIS SOFTWARE IS PROVIDED "AS IS". HOBBY COMPONENTS LTD MAKES NO WARRANTIES, WHETHER 
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF 
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ACCURACY OR LACK OF NEGLIGENCE.
HOBBY COMPONENTS SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR ANY DAMAGES, 
INCLUDING, BUT NOT LIMITED TO, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY 
REASON WHATSOEVER.
*/

/*Include the VirtualWire library */
#include <VirtualWire.h>

/* Digital IO pin that will be used for sending data to the transmitter */
const int TX_DIO_Pin = 2;

void setup()
{
  pinMode(13, OUTPUT);
  /* Initialises the DIO pin used to send data to the Tx module */
  vw_set_tx_pin(TX_DIO_Pin);
  /* Set the transmit logic level (LOW = transmit for this 
     version of module)*/ 
  vw_set_ptt_inverted(true); 

  /* Transmit at 2000 bits per second */
  vw_setup(2000);    // Bits per sec
}

/* Main program */
void loop()
{
  /* Temporarily holds the value read from analogue input A0 */
  unsigned int Data;
  /* The transmit buffer that will hold the data to be 
     transmitted. */
  byte TxBuffer[2];

  /* Read the analogue input A0... */
  Data = analogRead(A0);
  /* ...and store it as high and low bytes in the transmit 
     buffer */
  TxBuffer[0] = Data >> 8;
  TxBuffer[1] = Data;

  /* Turn on the LED on pin 13 to indicate that we are about 
    to transmit data */
  digitalWrite(13, HIGH); 
  /* Send the data (2 bytes) */
  vw_send((byte *)TxBuffer, 2);
  /* Wait until the data has been sent */
  vw_wait_tx(); 

  /* Turn off the LED on pin 13 to indicate that we have 
     now sent the data */
  digitalWrite(13, LOW); 

  /* Do nothing for a second. Lower this delay to send 
     data quicker */
  delay(1000);
}

Codice RX

/**
Questo programma va caricato sul RX e permette di ricevere una stringa che è stata inviata da un altro Arduino
*/ 
#include <virtualwire.h>

void setup()
{
    Serial.begin(9600); // Debugging only
    Serial.println("setup");
    vw_set_rx_pin(2);
    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);  // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &amp;buflen)) // Non-blocking
    {
 int i;

        digitalWrite(13, true); // Flash a light to show received good message
 // Message with a good checksum received, dump it.
 Serial.print("Got: ");

 for (i = 0; i &lt; buflen; i++)
 {
     Serial.print(buf[i], HEX);
     Serial.print(" ");
 }
 Serial.println("");
        digitalWrite(13, false);
    }
}

3° Programma: Inviamo la lettura delle temperatura esterna

In questo terzo programma, vedremo come poter poter inviare il valore delle temperatura e dell’umidità che c’è fuori casa, sfruttando il DHT22 (vedi lezione a riguardo) e il modulo wireless che stiamo discutendo.

TX codice:

/**
Questo programma permette di inviare diversi valori in maniera wireless tra due Arduino.
In questo caso verrà inviato il valore delle temperatura e dell'umidità, sfruttando il trasduttore DHT22
*/
#include <VirtualWire.h>
#include "DHT.h"

#define DHTPIN 2     // Il pin a cui è collegato il sensore
#define DHTTYPE DHT22   // DHT 22  (AM2302)
int ledPin = 13;
char Sensor1CharMsg[21];// The string that we are going to send trought rf 
DHT dht(DHTPIN, DHTTYPE); 
void setup() {

 // LED 
 pinMode(ledPin,OUTPUT);
 dht.begin();
 // VirtualWire setup
 vw_setup(2000); // Bits per sec
 vw_set_tx_pin(12);// Set the Tx pin. Default is 12

}

void loop() {

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  sprintf(Sensor1CharMsg, "%f,%f,", t, h);

   // Turn on a light to show transmitting
   vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));
   vw_wait_tx(); // Wait until the whole message is gone
   // Turn off a light after transmission
   delay(40);
}

RX codice

/**
Questo programma, caricato sul RX, permette di ricevere il valore della temperatura e dell'umidità che vengono inviate da
un Arduino, attraverso il modulo wireless, sfruttando il DHT22, come trasduttore
*/
#include <VirtualWire.h>

char StringReceived[22]; 

void setup() {
    // VirtualWire 
    // Initialise the IO and ISR
    // Required for DR3100

    // Bits per sec
    vw_setup(2000);
    vw_set_rx_pin(11);  

    // Start the receiver PLL running
    vw_rx_start();       

} // END void setup

void loop(){
  float t;
  float h;
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

//Taking the data from the control base
    if (vw_get_message(buf, &buflen)) 
    {
 int i;
        // Message with a good checksum received, dump it. 
        for (i = 0; i < buflen; i++)
 {            
          // Fill Sensor1CharMsg Char array with corresponding 
          // chars from buffer.   
          StringReceived[i] = char(buf[i]);
 }

      sscanf(StringReceived, "%f,%f",&t, &h); // Converts a string to an array

        // Turn off light to and await next message 

    }

 memset( StringReceived, 0, sizeof( StringReceived));// This line is for reset the StringReceived
}

ismanettoneblog

62 pensieri su “Lezione 12: Comunicazioni wireless low cost con Arduino

  1. Non converte la char in decimale….non vedo i valori decimali della temperatura e dell umidita nel ricevente….:(

    1. Il programma al momento della realizzazione mi funzionava. Proverò di nuovo prossimamente. Se vuole, è disponibile un nuovo programma, che svolge lo stesso compito; lo può trovare nella lezione 15.

  2. non riesco a compilare il tuo skecht: ‘vw_setup’ was not declared in this scope’ mi sai dire qualcosa ? grazie

  3. Bellissimo articolo complimenti. Avrei una domanda da farti. Nel caso in cui volessi fare il 3° progetto, come dovrei fare ad alimentare e gestire ciascun sensore PIR autonomamente, in modo che invii i dati alla stazione centrale (arduino)?
    Io ho già 2 PIR, e nei miei utilizzi passati li utilizzavo collegandoli direttamente ad arduino (in questo modo li alimentavo, e li gestivo direttamente da lì) ma nel caso questi siano isolati e messi per casa non capisco come dovrei fare in più dovranno avere il modulo radio per trasmettere immagino. Potresti farmi luce su questo? Ti ringrazio in anticipo

    1. Ciao,
      per quanto riguarda l’utilizzo di più sensori PIR, posti in casa, che inviano il segnale di passaggio di una persona, oltre al sensore Wireless, è necessario utilizzare un microcontrollore. Per poter minimizzare i costi, per la creazione di più dispositivi client, è sconveniente l’utilizzo di un Arduino per ciascuna stazione. Si potrebbe ricorrere alla creazione di un Arduino con l’ATMEGA328, oppure ancora meglio usando Attiny85, una sorta di piccolissimo Arduino, ma che ha tutto il necessario per il tuo progetto.
      Riassumendo, dovrai avere per ogni dispositivo:
      1 x PIR
      1 x KIT Wireless
      1 x Attiny85

      In questo modo, ti basterà avere un unico Arduino UNO, che farà da server, il quale riceverà tutte le notifiche da parte degli altri dispositivi. Sperando di esserti stato utile, ti consiglio di leggere un interessante progetto, che ho realizzato, che molto si avvicina alla tua richiesta
      http://ismanettoneblog.altervista.org/blog/come-realizzare-sistema-allarme-arduino/

      1. Ciao, dopo diversi mesi ma soprattutto x il fatto che adesso ho molto tempo a disposizione mi sono rimesso nel mio progetto di sistema di allarme. Mi sto imbattendo su un problema che non so come poter risolvere. Ho acquistato un kit di 10 trasmettitori e 10 ricevitori RF 315mhz, però non so come poter procedere per poter farli tutti trasmettere (a ciascuno è collegato un pir) e poter ricevere i valori su l’unico arduino (quello centrale) in cui è collecato il ricevitore Rf. Hai qualche idea? Ti ringrazio in anticipo dell’aiuto.

        1. Salve,
          un progetto simile lo trova nel mio blog; il nome è sistema d’allarme con Arduino. La logica sottostante è la medesima.

  4. Ti ringrazio della celere risposta sei stato gentilissimo. Grazie dell’articolo che mi hai riportato che comunque non si discosta tanto da quello che già ho progettato io, visto che entrambi si appoggiano al web. Anzi se può esserti utile ti linko anche il mio progetto http://www.domoticarduino.netsons.org
    Nella sezione “progetto” potrai vedere tutto, dai sorgenti a tutta la guida. E’ un progetto abbastanza ampio in cui è possibile controllare luci, temperatura, umidità, fughe di gas e rilevamento intrusioni attraverso un PIR, i dati vengono letti e salvati su un DB in SQL interrogando il Database attraverso script PHP (simile di molto al tuo). L’unica cosa che vorrei migliorare è la reattività ed implementare appunto il concetto di più sensori PIR collegati a distanza attraverso trasmittori wireless. Secondo te vanno bene questi trasmettitori? http://www.ebay.com/itm/10pcs-sets-433Mhz-RF-transmitter-and-receiver-link-kit-for-Arduino-ARM-MCU-WL-/370823977631

    Sto invece cercando sulla rete qualcosa che riguardi i client collegati attraverso l’attiny85 ho paura a comprare qualcosa finchè non vedo qualcuno che l’abbia fatto concretamente. C’è qualche pezzo di codice e qualche schema di chi ha collegato attiny85 ad un trasmettitore wireless? Per ora ho potuto vedere solo chi utilizza direttamente un arduino.

    1. Ciao,
      per quanto riguardo i sensori Wireless, quelli che hai indicato, sono quelli più economici sul mercato e che ho trattato nei vari articoli presenti sul blog. Sono abbastanza semplici da usare sia dal punto di vista software, che dal punto di vista hardware. Tuttavia, per avere una migliora copertura, è necessario alimentare il TX con 12 Volt e magari collegarci un’antenna esterna.
      Per quanto riguardo attiny85, io ho a casa due di questi microcontrollori; purtroppo non ho ancora avuto il modo di provarli. Da quello che ho letto sul Web e sul datasheet non vedo problemi ad utilizzare i sensori Wireless insieme ad un sensore PIR. Appena faccio qualche prova, pubblicherò una guida sul blog.

  5. Salve, dovrei collegare una centralina datalog ad un arduino e poi trasferire i dati da arduino ad altri dispositivi come pc, smartphone e tablet.
    Con questi i 3 seguenti moduli è possibile fare qualcosa del genere?
    1.Wireless transmission module 315M ARDUINO comp. super r
    2.Wireless transmission module 433M ARDUINO comp. super r
    3.Modulo ricevitore trasmettitore wireless a 2.4GHz NRF24L01+ arduino SPI.

    Quale mi consiglia dei 3?
    La ringrazio anticipatamente !!

    1. Salve,
      la risposta dipende molto da cosa si vuole trasferire; per gli smartphone è abbastanza difficile pensare di usare una di queste soluzioni, mentre per i PC è più facile.

      1. Buona sera, sono dati numerici, misure, niente di pesante, non si arriva ad 1 MB. Ma quali sono le differenze sostanziali tra i 3 moduli? Lei conosce qualche altro modulo da consigliarmi ? Ogni consiglio è ben accetto !!!

        1. Salve,
          le tre soluzioni riportate variano per modulazione utilizzate; per esempio quelle che viaggiano sulle frequenze 2.4 GHz sono digitali, mentre quelle sui 433 MHz sono una FM. Qual’è lo scopo delle misure ? La soluzione più semplice è quella di usare come RX Arduino e leggere i dati attraverso la porta USB.

          1. Buona sera, devo collegare l’arduino ad una centralina,poichè si tratta di misure a carico,a volte pericolose, ho la necessità di poter leggere i dati in tempo reale e distante dal luogo dove avviene l’esperimento e in tutta sicurezza.Perciò avevo pensato a questo sistema centralina Datalog-arduino + modulo wifi e leggere i dati su tablet o pc. Lei cosa mi consiglia ?

          2. Salve,
            se deve fare misure di carico, le consiglio di utilizzare una sensore basato sull’effetto HALL che regge correnti fino a 30 A. Per poter comunicare i dati, è possibile usare i sensori wireless a 433 MHz e quindi due Arduino: uno legge i dati e l’alto li carica su un server MySQL, oppure su una pagina WEB, accessibile da qualsiasi terminale. Spero di esserLe stato utile.

  6. si utilissimo grazie, ma ho già un datalog professionale con appositi sensori. Purtroppo attualmente il problema è un’altro, infatti sto cercando di collegare questo datalog ad arduino tramite porta seriale rs232, anche se per qualche strano motivo non riesco a farli comunicare.
    Grazie comunque !

  7. Perdonami se ti importuno,
    nella tua lezione n. 12, hai parlato di “2° Progetto: Relè comandati a distanza”, ora vorrei chiedere se è possibile comandare con un solo tx a 433 diversi rx in modo indipendente con funzioni diverse o è necessario collegare tanti tx quanti sono gli rx.
    Ti ringrazio per l’attenzione.

    1. Salve,
      è possibile con un solo trasmettitore azionare diversi ricevitori, basta che usino la stessa frequenza e lo stesso bit-rate e che è la velocità di trasmissione

  8. Error for RX CODICE : error: ‘f’ was not declared in this scope
    error: ‘vw_set_rx_pin’ was not declared in this scope

    Why is ERROR ?
    Thanks !

    1. Hi,
      I think the problem you are facing, is about a bad copy and paste from the web site. If you look better there isn’t any f as value. Please copy the code from the repo.

  9. salve ho acquistato il materiale indicato nell’articolo e copiato il programma che legge da dht 11 e trasmette. ho collegato rx a pin 12 su arduino uno.la routine che trasmette accende all’inizio il led quando ha finito dovrebbe spegnerlo ma non lo spegne(non è riuscito a trasmettere?). ci vuole una antenna oltre alla schedina?

    1. Salve,
      l’antenna serve solo per poter aumentare il raggio d’azione dei due dispositivi. Occorre prima verificare che tutti i collegamenti siano corretti. È possibile aumentare il raggio d’azione a livello software, modificando su entrambi i programmi (quello per il TX e quello per RX) con un valore basso di velocità di trasmissione (tale valore dovrà essere uguale per entrambi).

  10. Ciao sono uno studente del quarto anno dell’industriale sto realizzando un progetto come compito per le “vacanze” mi sono imbattuto nel primo codice riesco a mandare il segnale ma lo ricevo in hex non riuscendo a convertire come mai ?

    sto utilizzando un arduino nano per trasmettere e un uno per ricevere
    grazie in anticipo 🙂

    1. Che tipo di dati stai trasferendo ? I programmi che vengono caricati su Arduino, sono li stessi dell’articolo ?

  11. Ciao e complimenti per la guida. Io sto cercando di realizzare un sistema antintrusione con modulo gsm. Non riesco però a far comunicare più sensori pir con allegato il modulo tx con un unica stazione ricevente. Ho provato la comunicazione uno a uno è funziona tutto senza problemi ma molti ad uno proprio non riesco. Avrei più pir in più stanze che rilevato un movimento dovrebbero inviare un segnale alla stazione centrale con l’id della stanza. Come faccio? Grazie per le risposte. Saluti

    1. Salve,
      le librerie VirtualWire permettono l’utilizzo di più trasmettitori con un unico ricevitore. Ad ogni modo, le consiglio di usare i dispositivi Nrf24L01, che utilizzano la frequenza 2.4 GHz, che permette di avere una maggiore copertura.

      1. Grazie molte per la risposta. Mi potresti fare un esempio? Tipo due sensori che inviano il proprio id ad una stazione ricevente? Ho cercato su internet ma non ho trovato nulla di comprensibile e chiaro. Ti ringrazio sin da ora. Saluti, Andrea.

    2. se più moduli non funzionano potrebbe essere un problema di sovrapposizione di segnali. provi a reiterare la trasmissione n volte introducendo ogni volta un ritardo random tra un tx e l’altro superiore comunque alla lunghezza della trasmissione stessa

    1. Salve,
      cercherò di pubblicare il progetto completo, ad ogni modo è molto simile al progetto 1°. Occorre inviare i comandi/stringhe “ON” e “OFF” e mettere un if che controlla se il messaggio inviato è ON oppure OFF all’interno di: if (vw_get_message(buf, &buflen)) // Non-blocking

      1. Ciao purtroppo non ci sono riuscito. ti spiego meglio sono riuscito a farmi un server per la domotica con arduino mega ed un app android ma purtroppo non riesco a cablare tutto quindi la mia idea era quella di integrare i moduli RF per comandare altri Arduini collegati ad esempio alla macchina del caffè. ..premetto non sono un programmatore quindi non arrivo in alcune cose.

  12. Se volessi ottenere un relè per il comando di luci a distanza non mi basterebbe fornire al tx una tensione stabile di 5v ottenedo 5v sull’RX con i quali pilotare un microrelè o un transistor?

    1. Con il solo hardware sarebbe possibile fare un trig di un relè a distanza, però le librerie VirtualWire migliorano molto il discorso del rumore. Inoltre è molto più semplice con Arduino.

        1. Scusa avevo dimenticato di ride che ho due led bicolore distanti tra di loro, diciamo led a e led b.
          Se il led A e’ rosso devo far si che il LED b diventi rosso.
          Se il led A e’ spento devo far si che il led B si spenga.
          Se il led a è verde devo far si che il led b diventi verde.
          spero di avermi fatto capire

    1. sarà necessario quando viene accesso un LED sul primo arduino, inviare attraverso la libreria virtualwire, il valore on al secondo arduino, che accenderà il corretto led. È una configurazione master & slave.

      1. Grazie. Prendo 2 arduino UNO R3 un trasmettitore e due ricevitori.(ho due porte su cui installare led bicolore stato allarme).
        La logica mi sembra facile ma per il SW io ho esperienza con i micro PC in basic, ma dell’arduino ne so poco.
        Imparerò.
        Ciao

        1. È spiegato praticamente tutto nell’articolo per l’uso di dispositivi Wireless. Se dovessi avere qualche dubbio, scrivi pure un commento.

  13. Ciao,mi sono avvicinato da poco ad Ardunino. A livello di programmazione me la cavicchio invece a livello elettronico un po meno. Qualche domanda. Con in moduli wireless descritti è possibile inviare con un solo trasmettitore più comandi a ricevitori diversi?
    Cioè c’è una sorta di “canale” da poter indirizzare un comando ad un ricevitore invece che ad una altro o la discriminante deve essere fatta via software inviando nel messaggio una sorta di codice da valutare lato ricevitore?

    Utilizzando i moduli in frequenza 2,4 Ghz sarebbe più facile questo discorso?

    Spero di essermi spiegato.

    Grazie e complimenti per il blog

    1. Salve,
      si è possibile inviare a più ricevitore un comando. Serve sistemare un po’ il codice, nel senso che tale funzionalità è da implementare a livello software.

  14. Buonasera,
    vorrei chiederle, se possibile, a quale distanza riesce a ricevere in quanto ho provato alimentando con 12 volt e non riesco a spostarmi più di 1,5m e mi sembra un po’ assurdo. Vorrei precisare che sia il trasmettitore che il ricevitore hanno delle antenne a molla calibrate a 433mhz e diversamente riuscivo a comunicare ad al massimo 5cm. Se lei riesce a comunicare dall’esterno all’interno della propria abitazione, qual’è l’arcano mistero? 😀
    Grazie per la disponibilità

    D.

    1. Salve,
      premetto che nel mio esempio il collegamento è stato fatto da una distanza di non più di 2 metri, le soluzioni che hai scritto sono quelle corrette, ovvero alimentazione da 12 V e uso di antenne a molla. Questo link per modifiche ulteriori può essere utile.

  15. Ciao, secondo te è possibile utilizzare modulo wireless low-cost che funziona sulle frequenze 433 MHz. Il suo nome è MX-05V e MX-FS-03V, per trasmettere ad Arduino un segnale On/Off di un contatto magnetico installato su di una porta, per eccitare un relè.
    Se dico una castroneria, sorry

    Cordialmente

    Bob

    1. Si può fare tranquillamente con Arduino. Nel post mi pare ci sia un esempio a riguardo. Ad ogni modo serve un Arduino da RX e un Arduino da TX.

  16. Buongiorno,
    se volessi comandare una coppia di motori DC per far muovere, ad esempio, un robottino avrei bisogno di 2 arduino, uno per il robot e uno per il telecomando.
    TX-nel telecomando tradurrei il segnale analogico in un codice dgitale da inviare al trasmettitore.
    RX-nel robot il ricevitore invia il codice all’arduino che lo interpreta e lo invia ai driver sottoforma di PWM.
    se il mio joystik ha 3 assi (X, Y e R) secondo lei mi occorrerebbe una coppia di moduli rx/tx per ogni asse?

    1. Salve,
      secondo me basta un solo Arduino come RX, che comanda i due motori DC e con un ricevitore IR, che riceve i comandi da un altro Arduino con Led IR e con un Joystick (trovi un tutorial sul mio blog). Spero di esserti stato d’aiuto!

      P.S. Visto che l’Arduino RX deve sia comandare i motori che ricevere i comandi, ti consiglio di usare i Thread sul tuo Arduino.

  17. Ciao!
    interessantissima guida e molto ben fatta, grazie mille 😉
    ho però un problema, ovvero Arduino IDE non riesce a compilare il codice. Ho scaricato e inserito la libreria Virtualwire, ma non ne vuole sapere :S
    alcun suggerimento?

    grazie ancora
    Andrea

    1. Se copi il codice all sketch c’è qualche problema di formattazione con WordPress; ti consiglio di scaricarlo dalla repo su Github. Per sicurezza, che errore ti viene indicato?

  18. Il mio progetto di monitor della temperatura nelle varie stanze di casa prevede l’utilizzo per la ricezione wireless del modulo WeMos D1 R2. Il problema è che VirtualWire in fase di compilazione produce errori. tipo “error: ‘TCCR1A’ was not declared in this scope”.
    Cosa posso fare ?

  19. Ciao a tutti,

    sono alla ricerca di un progetto il più semplice possibile che mi aiuti ogni volta che esco di casa ad avvertirmi con un semplice led accesso per ogni finestra lasciata aperta

  20. Salve, vorrei maggiori informazioni sul progetto 3.
    premetto sono alle prime armi.
    ho provato a caricare lo sketch ma mi da errore: exit status 1
    ‘f’ was not declared in this scope
    riferito allo sscanf.
    puoi aiutarmi ?
    grazie mille

    1. Il problema era dovuto ad un errore di scrittura. La variabile f non esiste, mentre il nome corretto è h, che contiene l’umidità. Ho corretto il programma nell’articolo. Grazie per la segnalazione.

I commenti sono chiusi.