Ho realizzato questo progetto molto interessante per chi, come me, ha necessità di commutare svariate antenne direttamente dalla stazione in modo da avere poche discese di cavi dal tetto. Ma questo non toglie che i relè che commutano le antenne, non possano commutare altro...
Ho utilizzato un Nano in stazione e un Uno come ricevitore esterno (mi da più sicurezza l'Uno all'esterno)
Per i moduli RX e TX ho usato i seguenti: 433MHz Wireless Modules MX-FS-03V & MX-05
Le librerie sono le Virtualwire.
Per dare corrente ai relè (12V) tramite Arduino , ho utilizzato dei foto eccitatori per far passare la corrente e in più per optoisolare la parte Arduino da quella relè.
Noterete che nello sketch prima di ogni commutazione avviene un'azzeramento dei relè... questo in quanto ho usato relè che rimangono nella posizione in cui vengono commutati per evitare che giri tensione all'interno dell'avvolgimento mentre si utilizza la Radio.
Se aqualcuno necessita di altre informazioni sono a disposizione.
Per lo sketch ringrazio Giacomo del sito iSmanettone per avermi aiutato.
I due sketch sono i seguenti:
Sketch TX------------------------------------------------------------------------------------------------
#include <LiquidCrystal.h>
#include <VirtualWire.h>
//LiquidCrystal lcd(rs,rw,en,d4,5,6,7);
LiquidCrystal lcd(12, 7, 6, 5, 4, 3);
const int TX_DIO_Pin = 2;
const int PIN_BUTTON1 = A0; //antenna Delat Loop 20 e 10 mt
const int PIN_BUTTON2 = A1; //antenna MoreGain
const int PIN_BUTTON3 = A2; //antenna Dipolo rigido 15mt
const int PIN_BUTTON4 = A3; //Quadrifilare
const int PIN_BUTTON5 = A4; //antenna dualband V/UHF
const int PIN_BUTTON6 = A5; //Libero
unsigned int Data;
void setup()
{
pinMode(13, OUTPUT);
lcd.begin(16, 2);
lcd.print(" Switch antenna "); // Visualizzo il messaggio sul display
lcd.setCursor(0, 1);
lcd.print(" IZ3ZLU");
vw_set_tx_pin(TX_DIO_Pin);
vw_set_ptt_inverted(true);
vw_setup(1000);
}
/* Main program */
void loop()
{
if(hasBeenPressed(PIN_BUTTON1)){
Data = 1;
sendData(Data);
lcd.setCursor(0, 0);
lcd.print("HF- DeltaLoop"); // Visualizzo il messaggio sul display
}
if(hasBeenPressed(PIN_BUTTON2)){
Data = 2;
sendData(Data);
lcd.setCursor(0, 0);
lcd.print("HF- MoreGain"); // Visualizzo il messaggio sul display
}
if(hasBeenPressed(PIN_BUTTON3)){
Data = 3;
sendData(Data);
lcd.setCursor(0, 0);
lcd.print("HF- 15mt Dipole"); // Visualizzo il messaggio sul display
}
if(hasBeenPressed(PIN_BUTTON4)){
Data = 4;
sendData(Data);
lcd.setCursor(0, 1);
lcd.print("V/UHF- Quadrifil"); // Visualizzo il messaggio sul display
}
if(hasBeenPressed(PIN_BUTTON5)){
Data = 5;
sendData(Data);
lcd.setCursor(0, 1);
lcd.print("V/UHF-Yagi V/UHF"); // Visualizzo il messaggio sul display
}
}
boolean hasBeenPressed(int pin){
if(analogRead(pin)>1000){
return true;
}else{
return false;
}
}
void sendData(int Data){
byte TxBuffer[2];
TxBuffer[0] = Data >> 8;
TxBuffer[1] = Data;
digitalWrite(13, HIGH);
vw_send((byte *)TxBuffer, 2);
vw_wait_tx();
digitalWrite(13, LOW);
delay(1000);
}
Sketch RX--------------------------------------------------------------------------------------------------------------------
#include <VirtualWire.h>
const int RX_DIO_Pin = 2;
const int PIN_RELAY4 = 10;//antenne V/UHF Quadrifilare
const int PIN_RELAY5 = 11;//antenne V/UHF Yagi
const int PIN_RELAY1 = 3;//antenne HF Dipolo
const int PIN_RELAY2 = 4;//antenne HF MoreGain
const int PIN_RELAY3 = 5;//antenne HF Delta Loop
const int PIN_RELAYvhfOFF = 6;// resetta tutti i relè V/UHF
const int PIN_RELAYhfOFF = 7;// resetta tutti i relè HF
boolean RELAY1 = false;
boolean RELAY2 = false;
boolean RELAY3 = false;
boolean RELAY4 = false;
boolean RELAY5 = false;
boolean RELAYvhfOFF = false;
boolean RELAYhfOFF = false;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
pinMode(PIN_RELAY1,OUTPUT);
pinMode(PIN_RELAY2,OUTPUT);
pinMode(PIN_RELAY3,OUTPUT);
pinMode(PIN_RELAY4,OUTPUT);
pinMode(PIN_RELAY5,OUTPUT);
pinMode(PIN_RELAYvhfOFF,OUTPUT);
pinMode(PIN_RELAYhfOFF,OUTPUT);
vw_set_rx_pin(RX_DIO_Pin);
vw_setup(1000);
vw_rx_start();
}
/* Main program */
void loop()
{
uint8_t Buffer_Size = 2;
unsigned int Data;
uint8_t RxBuffer[Buffer_Size];
if (vw_get_message(RxBuffer, &Buffer_Size)){
Data = RxBuffer[0] << 8 | RxBuffer[1];
}
if(Data==1){ //antenne HF
Serial.println(Data);
digitalWrite(PIN_RELAYhfOFF,HIGH);// azzera tutti i relè
delay(500);
digitalWrite(PIN_RELAYhfOFF,LOW);// li lascia aperti
digitalWrite(PIN_RELAY3,HIGH);//attiva il relè.
delay(2000);// attendi due secondi.
digitalWrite(PIN_RELAY3,LOW);//stacca corrente (il relè rimane nel suo stato).
}
if(Data==2){
Serial.println(Data);
digitalWrite(PIN_RELAYhfOFF,HIGH);// azzera tutti i relè
delay(500);
digitalWrite(PIN_RELAYhfOFF,LOW);// li lascia aperti
digitalWrite(PIN_RELAY2,HIGH);//attiva il relè 2.
delay(2000);// attendi due secondi.
digitalWrite(PIN_RELAY2,LOW);//stacca corrente (il relè rimane nel suo stato).
}
if(Data==3){
Serial.println(Data);
digitalWrite(PIN_RELAYhfOFF,HIGH);// azzera tutti i relè
delay(500);
digitalWrite(PIN_RELAYhfOFF,LOW);// li lascia aperti
digitalWrite(PIN_RELAY1,HIGH);//attiva il relè 2.
delay(2000);// attendi due secondi.
digitalWrite(PIN_RELAY1,LOW);//stacca corrente (il relè rimane nel suo stato).
}
if(Data==4){ //Antenne V/HF
Serial.println(Data);
digitalWrite(PIN_RELAYvhfOFF,HIGH);// azzera tutti i relè
delay(500);
digitalWrite(PIN_RELAYvhfOFF,LOW);// li lascia aperti
digitalWrite(PIN_RELAY4,HIGH);//attiva il relè 2.
delay(2000);// attendi due secondi.
digitalWrite(PIN_RELAY4,LOW);//stacca corrente (il relè rimane nel suo stato).
}
if(Data==5){
Serial.println(Data);
digitalWrite(PIN_RELAYvhfOFF,HIGH);// azzera tutti i relè
delay(500);
digitalWrite(PIN_RELAYvhfOFF,LOW);// li lascia aperti
digitalWrite(PIN_RELAY5,HIGH);//attiva il relè 2.
delay(2000);// attendi due secondi.
digitalWrite(PIN_RELAY5,LOW);//stacca corrente (il relè rimane nel suo stato).
}
delay(500);
}