mercoledì 28 agosto 2019

Arduino N° 12 - Beacon per ARDF - selezionabile


Arduino N° 11

 Achille De Santis

Arduino N° 13



Foto 1: il modulo beacon su 
Arduino Nano;


Beacon  selezionabile - 5 banchi di memoria.

Questo identificatore telegrafico trasmette una nota di bassa frequenza, direttamente ricevibile con Apparati in AM o FM a banda stretta.
I messaggi impostati per la radiocaccia sono MO1... MO5, selezionabili a piacere.
La selezione del beacon si opera mettendo a massa, con un dip-switch, il piedino associato (beaconsetX).
In questo caso, la selezione della memoria può essere fatta anche "a caldo", senza bisogno di resettare il modulo. Viene terminato il beacon in riproduzione ed inserito in loop il nuovo beacon.
La temporizzazione è calcolata in modo da avere sempre un rapporto 1-3-5, come da standard del codice Morse.





/* --------------- Inizio programma --------------------------
  Achille De Santis V2.0 del 12-12-2014 V3.0 del 13-12-2015
  Beacon RDF CW Multiplo, con 5 messaggi pre-selezionabili.
  1 linea di uscita per il comando di PTT
  1 linea di uscita per il testo CW_BF
  5 testi beacon, in uscita, selezionabili alternativamente;
  il pin 13 è l'uscita del testo beacon;
  il pin 12 è il comando di PTT.
*/

// --------------------------- I/O ------------------------------------------
#define pin 13                 // Uscita testo beacon sul piedino 13.
#define ptt 12                 // comando ptt sul piedino 12.
#define beaconset1 11
#define beaconset2 10
#define beaconset3 9
#define beaconset4 8
#define beaconset5 7
// ------------------------------------------------------------------------

const int T = 100;   // Definizione costante base tempi T.
const int T3=3*T;
const int T4=4*T;
const int T10=10*T;
const int freq = 1000;

void genera(int T1)
{
  tone(pin, freq); delay(T1);
  noTone(pin);     delay(T);
}

void punto()  {   genera(T);   }
void linea()  {   genera(T3);   }

void MO()
{
  linea(); linea();                 delay (4*T);            // M
  linea(); linea(); linea();        delay (4*T);         // O
}

void beacon1()    {    MO();    punto(); linea(); linea(); linea(); linea(); delay (T4);     }   //MO1   
void beacon2()    {    MO();    punto(); punto(); linea(); linea(); linea(); delay (T4);    }   //MO2 
void beacon3()    {    MO();    punto(); punto(); punto(); linea(); linea(); delay (T4);   }   //MO3 
void beacon4()    {    MO();    punto(); punto(); punto(); punto(); linea(); delay (T4);  }   //MO4 
void beacon5()    {    MO();    punto(); punto(); punto(); punto(); punto(); delay (T4); }   //MO5
void setup()
{
 pinMode(pin, OUTPUT);                            //Variabile di uscita tono
 pinMode(ptt, OUTPUT);                             //Variabile di uscita PTT
 pinMode(beaconset1, INPUT_PULLUP);
 pinMode(beaconset2, INPUT_PULLUP);
 pinMode(beaconset3, INPUT_PULLUP);
 pinMode(beaconset4, INPUT_PULLUP);
 pinMode(beaconset5, INPUT_PULLUP);
}

void loop()
{ digitalWrite(ptt, 1);     delay (T);     // attiva PTT
  if (digitalRead(beaconset1)==0)                  { beacon1();  // delay (T3);   }
    else if (digitalRead(beaconset2)==0)                { beacon2();   // delay (T3);         }
           else if (digitalRead(beaconset3)==0)                 { beacon3();   // delay (T3);     }
                 else if (digitalRead(beaconset4)==0)                    { beacon4();  // delay (T3);   }
                     else if (digitalRead(beaconset5)==0)                         {beacon5();  // delay (T3);       } 

  digitalWrite(ptt, 0);    // disattiva PTT
  delay (T10);
 }
// ---------------- Fine programma ---------------------------------


Nota: inserendo il comando di "portante" all'interno del beacon scelto si evita di far partire la trasmissione se non c'è alcun messaggio beacon selezionato.
In questo modo si ha anche una indicazione, sullo stesso LED, dell'attivazione di un qualunque messaggio beacon. Nel primo caso, comandando la portante "a priori" e non selezionando lo specifico messaggio si avrebbe l'emissione della sola portante non modulata (che può avere comunque un significato, n.d.a.).

mercoledì 21 agosto 2019

Arduino N° 11 - Movimento servomotore


Arduino N° 10

 Achille De Santis

Arduino N° 12





/* -------  inizio programma ---------------------
  ing. Achille De Santis - tecnatron#gmail.com
Pilotaggio di un servomotore. Attraverso il potenziometro è possibile variare l'escursione angolare dell'asse del servomotore.
*/

#include <Servo.h>
#include <SoftwareSerial.h>

const int T=15;                    // tempo di ritardo;

int pos = 0;
int sensorValue = 0;
int i = 0;

Servo servo_9;

void setup()
{
  servo_9.attach(9);
  pinMode(A0, INPUT);
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
   sensorValue = analogRead(A0);
   pos = map(sensorValue,0,1023,0,180);

  Serial.print("sensorValue ");
  Serial.println(sensorValue);
  Serial.print("pos ");
  Serial.println(pos);

  for (i = 0; i <= pos; i++)
  {               
    servo_9.write(i);        // tell servo to go to position in variable 'pos'
    delay(T);                   // wait 15 ms for servo to reach the position
  }

  for (i= pos; i >= 0; i --)
  {
    servo_9.write(i);        // tell servo to go to position in variable 'pos'
    delay(T);                   // wait 15 ms for servo to reach the position
  }
}
// ----------------------------- fine programma ------------------------------


Arduino N° 12

mercoledì 14 agosto 2019

Arduino N° 10 - Radiotransponder con COR in bassa frequenza


Arduino N° 9

 Achille De Santis

Arduino N° 11




Questo SW può essere utile per realizzare rapidamente un modulo COR (Carrier Operated Relay) per il comando di un transponder RF a tre vie.
Utile soprattutto in situazioni di emergenza o di Protezione Civile, per realizzare una tratta di trasferimento VHF/UHF.

Fig. 1: schema applicativo del COR

Il firmware è stato da me ideato, realizzato e collaudato. Il programma, adeguatamente "strutturato" risulta molto efficiente e funzionale.

Sulle uscite, sono disponibili sia segnali "diretti" che "complementari" per una facile interfaccia con i dispositivi esterni da collegare.





v. anche: 

Dispositivo COR per Ripetitori o Transponder - RadioRama n° 95 agosto 2019


/* ---------------------------------- Inizio programma -----------------------------------------------
 * COR in bassa frequenza per Transponder Radio a tre moduli TRX.
 * Achille De Santis - tecnatron@gmail.com - V6.0 del 05-05-2019
 * prelevare i segnali di BF da ogni uscita altoparlante attraverso un potenziometro da 10 KOhm
 * I segnali di PTT sono "interbloccati".
 * La scansione ciclica della BF permette la rilevazione del segnale che, se presente, manda in 
 * trasmissione gli altri due moduli.
 * La sequenza di priorità è: 1,2,3.
 * Ridurre opportunamente il segnale di BF da iniettare sugli ingressi microfonici.
*/

// --------------- parametri di I/O ---------------------------
#define BF1   A1     // ingresso 1
#define PTT1  12    // uscita   1
#define PTT1A   7  // uscita ausiliaria invertita 1

#define BF2   A2     // ingresso 2
#define PTT2  11    // uscita   2
#define PTT2A   6  // uscita ausiliaria invertita 2

#define BF3   A3     // ingresso 3
#define PTT3  10    // uscita   3
#define PTT3A   5  // uscita ausiliaria invertita 3
// ---------------------------------------------------------------

const int soglia1=200;  // soglia di intervento I modulo
const int soglia2=200;  // soglia di intervento II modulo
const int soglia3=200;  // soglia di intervento III modulo
const int T1=200;         // tempo di ritardo rilascio portante

int S=0;

void attivalink (bool A, bool B, bool C) 
  {
    digitalWrite(PTT1, A);
    digitalWrite(PTT2, B);
    digitalWrite(PTT3, C);
 
    digitalWrite(PTT1A, !A);
    digitalWrite(PTT2A, !B);
    digitalWrite(PTT3A, !C);
  }

void disattiva()   { attivalink(0,0,0); }

void setup()
  {
    pinMode(BF1, INPUT);
    pinMode(BF2, INPUT);
    pinMode(BF3, INPUT);

    pinMode(PTT1, OUTPUT);
    pinMode(PTT2, OUTPUT);
    pinMode(PTT3, OUTPUT);

    pinMode(PTT1A, OUTPUT);
    pinMode(PTT2A, OUTPUT);
    pinMode(PTT3A, OUTPUT);
  }

void loop()
{
    S=analogRead(BF1);
    if (S>=soglia1) {attivalink(0,1,1);}
      else
      {S=analogRead(BF2);
          if (S>=soglia2)  {attivalink(1,0,1);}
            else
                {
                  S=analogRead(BF3);
            if (S>=soglia3)  {attivalink(1,1,0);}
                else {delay(T1); disattiva();}
                }
        }
}
// ------------------------------ fine programma ------------- tecnatronATgmail.com ------------------

Simulazione: Radiotransponder con COR in bassa frequenza

v. anche RadioRama n° 95-pag 57

Arduino N° 11

mercoledì 7 agosto 2019

Arduino N° 9 - Effetto Alba/Tramonto


Arduino N° 8

 Achille De Santis

Arduino N° 10


Effetto Alba/Tramonto, con l'uso di una uscita analogica ed una piccola routine che viene richiamata per effettuare le variazioni di luminosità
Collegare una resistenza da 470 Ohm in serie ad un LED sull'uscita, verso massa.


/* -----------------Inizio Programma ------------------------
 *  Varia la luminosità di un LED
 *  Uso dei valori analogici di uscita (da 0 a 255)
*/
// ------------------------- I/O ---------------------------------------
#define  LED    9        // definiamo il piedino per il LED
// ----------------------------------------------------------------
const int T1= 20;
const int T2= 1000;    // durata giorno e notte
// ----------------------------------------------------------------
int i=0;                  // definiamo ed inizializziamo il contatore

void varia() // routine che viene richiamata per variare la luminosità
  {
    analogWrite(LED, i);      // assegna il valore a LED
    delay(T1);                       // attesa T1 ms
  }

void setup()
{
  pinMode(LED, OUTPUT);     // LED come uscita
}

void loop()
{
  for (i=0; i<=255; i++)
  { // ciclo da 0 a 255 (affievolimento)
    varia();          // viene richiamata la routine "varia"
                         // contatore up - down
  }
   delay(T2);

  for (i=255; i>=0; i--)
    {    varia();    }
  delay(T2);
}

// ---------------- Fine Programma -------------------------

Simulazione: 

Effetto Alba/Tramonto


Argomenti correlati:

Fader per canali RGB

Arduino N° 10