RF433MHz

Da raspibo.
Jump to navigation Jump to search
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)