RF433MHz
200px |
---|
Antenna RF 433MHz |
Antenna RF 433MHz, prove d'utilizzo |
Repository: non ancora |
Antenna RF 433MHz
- ATTENZIONE
- Le immagini sono puramente indicative.
- Fra i simboli di redirezione "<" e ">", sono inseriti i nomi fittizi da sostituire con reali (per esempio: <nomefile.txt>)
- Fra parentesi quadre "[]" sono indicati comandi opzionali.
Descrizione
Antenna RF 433MHz
Non e` un progetto vero e proprio, e` piu` una prova d'uso di questa antenna.
Hardware
I codici articolo stampigliati sulle schede RF sono:
Trasmettitore | FS1000A |
Ricevitore | XY-MK-5V |
Scheda Arduino Uno, ne servono due.
Poi per la prova ho collegato una forcina di controllo umidita` del terreno, codice YL-100, non necessita di modulo aggiuntivo, genera gia` di per se un'uscita analogica, che pero` non arrivera` mai a fondo scala (5V).
Il circuito e` semplice ed ancora non l'ho messo in bella copia, e` comunque sufficiente sbirciare i programmi, c'e` praticamente scritto dentro.
Software
Trasmettitore
/*
* Lettura e trasmissione del valore di umidita`
*/
// ask_transmitter.pde
// -*- mode: C++ -*-
// Simple example of how to use RadioHead to transmit messages
// with a simple ASK transmitter in a very simple way.
// Implements a simplex (one-way) transmitter with an TX-C1 module
/*
* (Derivato da esempio citato sopra)
*
* Legge l'ingresso analogico 0, fa` una media di 10 valori letti,
* ed invia il valore con una stringa in formato json al ricevitore.
*
* Ho dovuto ridurre il Topic perche` non funzionava, troppo lungo.
*/
#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile
/*
* RH_ASK (speed, rxPin, txPin, pttPin, false/true)
* speed = velocita` (default 2000)
* rxPin, il pin di ricezione (default 11)
* txPin, il pin di trasmissione (default 12)
* pttPin, il pin di abilitazione (default 10)
* false/true, se false, pttPin dev'essere alto per abilitare
* se true, pttPin dev'essere basso per abilitare
* (default false)
*
*/
RH_ASK driver;
// RH_ASK driver(2000, 2, 4, 5); // ESP8266: do not use pin 11
int hPin = 0; // Pin analogico sensore umidita` del terreno
String exitString; // Stringa da inviare
//String Topic; // Stringa Topic (json style)
String ID1; // Stringa per composizione iniziale (1)
String IDend; // Stringa per composizione finale (End)
void setup()
{
Serial.begin(9600); // Debugging only
if (!driver.init())
Serial.println("init failed");
}
void loop()
{
// Trasmettitore
Serial.println("\t * RF Transmitter *"); // myDebug
int SumH = 0; // Somma humidita`
for (int i = 0; i < 10; i++) {
SumH += analogRead(hPin); // Somma valori
Serial.print(i); // myDebug
Serial.print("\t"); // myDebug
Serial.println(SumH); // myDebug
delay(1000);
}
Serial.print(SumH); // myDebug
float ResH = SumH / 10.0; // Media humidity
Serial.print("\t"); // myDebug
Serial.println(ResH); // myDebug
// Creazione stringa da inviare
//Topic = "I/Giardino/PianoTerra/VasoFiori/Umidita";
ID1 = "{ \"ID\" : \"SThum\", \"Valore\" : \"";
IDend = "\" }";
//exitString = Topic+" "+ID1+String(ResH)+IDend;
exitString = ID1+String(ResH)+IDend;
Serial.println(exitString); // myDebug
// RF
const char *msg = exitString.c_str();
//const char *msg = "{ \"ID\" : \"SThum\", \"Valore\" : \"000\" }";
Serial.println(msg); // myDebug
// RF
driver.send((uint8_t *)msg, strlen(msg));
driver.waitPacketSent();
//delay(1000); // L'ho bypassata perche` ci sono gia` i delay nella lettura analogica
}
Ricevitore
// ask_receiver
// -*- mode: C++ -*-
// Simple example of how to use RadioHead to receive messages
// with a simple ASK transmitter in a very simple way.
// Implements a simplex (one-way) receiver with an Rx-B1 module
/*
* Modificato/riadattato per provare alcune possibilita`
* e verificare come poterlo utilizzare.
* Questo "ask" e` l'unico (di questa libreria) usabile
* per le RF a 433MHz.
*/
#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile
/*
* RH_ASK (speed, rxPin, txPin, pttPin, false/true)
* speed = velocita` (default 2000)
* rxPin, il pin di ricezione (default 11)
* txPin, il pin di trasmissione (default 12)
* pttPin, il pin di abilitazione (default 10)
* false/true, se false, pttPin dev'essere alto per abilitare
* se true, pttPin dev'essere basso per abilitare
* (default false)
*
*/
RH_ASK driver;
// RH_ASK driver(2000, 2, 4, 5); // ESP8266: do not use pin 11
void setup()
{
Serial.begin(9600); // Debugging only
if (!driver.init())
Serial.println("init failed");
}
void loop()
{
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen)) // Non-blocking
{
//int i;
// Message with a good checksum received, dump it.
driver.printBuffer("Got:", (char*)buf, buflen);
// Quello che segue serve a stampare i caratteri e non i numeri
for (int j=0; j<buflen; j++){
Serial.print((char)buf[j]);
}
Serial.print('\n');
Serial.println("\t receiver");
// end!
}
//Serial.println('\t receiver');
}
Utilizzo
Una volta accesi, il trasmettitore invia a cadenza regolare la media di 10 misurazioni effettuate dalla sonda.
Per verificare la trasmissione e i dati ci si deve collegare alla seriale arduino, nei programmi ho messo la stampa della stringa trasmettitore o ricevitore, per non confondersi ;)
Per effettuare alcune prove, ho avuto la necessita` di aggiungere un'unteriore progetto, un "visualizzatore" di seriale, anche questo e` una prova, lo troverete alla pagina SerialViewGLCD (al momento in cui scrivo, ancora non esiste).
Riferimenti
(Non tutti effettivamente consultati/utilizzati)
- http://www.airspayce.com/mikem/arduino/RadioHead/index.html
- http://randomnerdtutorials.com/rf-433mhz-transmitter-receiver-module-with-arduino/
- http://www.instructables.com/id/RC-Multi-Channel-Arduino-Proportional-Transmitter--1/
- http://wiki.seeedstudio.com/wiki/433Mhz_RF_link_kit
- http://arduinobasics.blogspot.it/2014/06/433-mhz-rf-module-with-arduino-tutorial.html
- http://www.instructables.com/id/RF-315433-MHz-Transmitter-receiver-Module-and-Ardu/