mercoledì 30 dicembre 2020

Arduino N° 75 - Pulsante di abilitazione ON/OFF

                                  

Arduino N°  74

 Achille De Santis

Arduino N°  76

 

Foto 1: pulsante di abilitazione "toggle"

Pulsante PULL-UP di abilitazione ON/OFF.
Semplice pulsante per abilitare/disabilitare una uscita digitale.
Lo sketch e la simulazione del circuito sono disponibili per l'analisi e il download.






Simulazione:  

Pulsante di abilitazione_Toggle



> Arduino N°  76


mercoledì 23 dicembre 2020

Arduino N° 74 - Albero di Natale


Arduino N°  73

 Achille De Santis

Arduino N°  75




Fig. 1: verifica su scheda di prova;

    

    Sotto Natale non poteva mancare un semplice programma per il comando delle luci del tradizionale albero natalizio o anche del più classico presepe.
     In questo caso, il dispositivo è sviluppato su tre sezioni di uscita per le luci, ognuna facente capo ad un transistore utilizzato come interfaccia pilota, per dispensare l'Arduino dalla erogazione di tutta la corrente assorbita dai led. 
    Cambiando il tipo di transistore ed aumentandone la portata in corrente sarà anche possibile espandere il numero di led di uscita da collegare, in questo caso, a gruppi di tre led con relativa resistenza di polarizzazione. Basta replicare un settore come quelli già inseriti, da disporre in parallelo su quelli esistenti.

Il primo circuito  viene mostrato nella simulazione Albero di Natale.

Un secondo dispositivo di viene mostrato nella simulazione Luci natalizie e prevede una serie di led ad accensione pseudo-casuale.

Quello che manca è un opportuno circuito di interfaccia atto ad aumentare la portata in corrente. Potete avere un'idea del circuito da realizzare visonando la pagina al link riportato nelle simulazioni.
  
Con questo vi saluto augurandovi buon lavoro e buon divertimento.


Argomenti correlati:
Arduino N° 50 - Modulo di prova per 6 uscite digitali

Simulazione:  
Albero di Natale
Albero di Natale con Arduino



> Arduino N°  75

mercoledì 16 dicembre 2020

Arduino N° 73 - Routine per la commutazione di due LED

< Segue da Arduino N° 72   

 Achille De Santis

Arduino N°  74





Fig. 1: Commutazione di due led su scheda di prova;



Continuiamo con la presentazione di un'altra semplice  "routine" utile per gestire la commutazione ripetuta di più led. 
In questo modo si guadagna tempo nella stesura del programma e si riduce l'occupazione di memoria nelle operazioni ripetitive.

Naturalmente, sulle uscite è possibile interconnettere uno stadio a transistori per il pilotaggio di un carico che assorba più corrente del semplice LED.



/* 

 * Piccola Routine comoda per semplificare e velocizzare la stesura di programmi 

 * con accensione e spegnimento ripetuti di LED, anche RGB.

 * La routine va richiamata ad ogni commutazione.

 */

// per accendere LED2: commuta(LED1, LED2);

// per accendere LED1: commuta(LED2,LED1);

In pratica, il primo parametro spegne il LED, il secondo accende il successivo.

Buon divertimento e buon lavoro!


Argomenti correlati: 


Simulazione: 

Routine per la commutazione di due LED



> Arduino N°  74

mercoledì 9 dicembre 2020

Arduino N° 72 - Lampeggio LED N volte per T millisecondi

Arduino N° 71 

 Achille De Santis

 > Arduino N°  73

Fig. 1: collaudo della routine;


Questa funzione permette di velocizzare la stesura di un programma nel caso si debbano gestire più led con una temporizzazione e una ripetizione multipla.

La routine non è nulla di eccezionale ma è direttamente fruibile su un programma molto più complesso e permette al programmatore di concentrarsi sulle parti essenziali del programma da sviluppare.

Inoltre, permette all'iniziando di comprendere l'uso delle "routines"

e l'organizzazione delle stesse.



Simulazione: 

Lampeggio LED N volte per T millisecondi.


tecnatronATgmail.com


> Arduino N°  73

mercoledì 2 dicembre 2020

Arduino N° 71 - Uso della definizione LED_BUILTIN

< Segue da Arduino N° 70  

 Achille De Santis

Arduino N°  72


Fig. 1: valutazione della funzione su scheda di prova;
La funzione predefinita LED_BUILTIN permette di definire in modo implicito il piedino della scheda Arduino riferito al  led collegato a bordo scheda. Non tutti i tipi di schede hanno il led collegato allo stesso piedino; Arduino UNO usa il piedino D13 ma altre schede possono avere collegamenti diversi, che occorre conoscere. In alternativa, si può utilizzare questa "definizione" generica che assegna in modo automatico il piedino collegato al led a bordo scheda.

Questa funzione risulta molto comoda ed aumenta la "portabilità" dello sketch sulle varie schede Arduino.




/* ------------------- Inizio programma ---------------------------------------------------------------

  This program blinks pin D13 of the Arduino UNO (the built-in LED)

  Achille De Santis

// -----------------------------------------------------------------------------------

*/


// ------ I/O -------------------------------------------------------------------------------------------------------

#define Led  LED_BUILTIN        // implicitamente è il piedino digitale collegato al led interno

// ------------------------------------------------------------------------------------------------------------------

void setup()

{  pinMode(Led, OUTPUT);

}

void loop()

{

  digitalWrite(Led, HIGH); // turn the LED on (HIGH is the voltage level)

  delay(2000);  // Wait for 2000 millisecond(s)

  digitalWrite(Led, LOW); // turn the LED off by making the voltage LOW

  delay(1000);  // Wait for 1000 millisecond(s)

} // ---------------------- Fine programma ---------------------------------------------


Nota: non tutte le schede supportano questa istruzione; verificate!


Simulazione: Uso della definizione LED_BUILTIN


Argomenti correlati: Arduino N° 50 - Modulo di prova per 6 uscite digitali


tecnatronATgmail.com


> Arduino N°  72

mercoledì 25 novembre 2020

Arduino N° 70 - Multivibratore "Monostabile Retriggerabile" senza ritardo

< Segue da Arduino N° 69 

 Achille De Santis

Arduino N°  71




Figura 1: Collaudo della procedura
con una scheda "protoboard"; 
Analogamente a quanto detto nel precedente post, un temporizzatore monostabile per tempi lunghi realizzato con la funzione "delay()" bloccherebbe l'esecuzione di altre istruzioni fino all'esaurimento del tempo di ritardo impostato. Si può ovviare al problema utilizzando la funzione "millis()" per le necessarie temporizzazioni. In questo modo il controllore sarà in grado, nel frattempo, di svolgere altre funzioni.

Questo sketch realizza un "Multivibratore Monostabile Retriggerabile" senza bloccare l'esecuzione del programma. Permette di utilizzare la temporizzazione con la funzione predefinita "millis()" senza usare la funzione "delay()" che inevitabilmente bloccherebbe l'esecuzione di altre istruzioni fino alla fine del "ritardo" impostato.

Attraverso il segnale di comando è anche possibile "Retriggerare" la temporizzazione, che in questo caso si prolunga per un'altra unità di tempo.


L'organizzazione come "procedura" permette il suo utilizzo in modo rapido e multiplo, semplicemente richiamando la funzione con la relativa variabile.


E' possibile provare lo sketch senza ulteriore hardware, ad eccezione della scheda Arduino. Il LED utilizzato per il temporizzatore è quello a bordo, collegato su uno dei piedini digitali (D13 su Arduino UNO). 

Per provare la modalità di "retriggering", lo dico per i meno esperti, avviare la simulazione e premere qualche volta il pulsante, mentre il LED è acceso. La temporizzazione riparte dall'ultima pressione del pulsante. In pratica, si ottiene un "prolungamento" della temporizzazione stessa.


Simulazione: 

Multivibratore "Monostabile Retriggerabile" senza ritardo


>Arduino N°  71

mercoledì 18 novembre 2020

Arduino N° 69 - Multivibratore astabile senza ritardo

< Segue da Arduino N° 68  

 Achille De Santis

Arduino N°  70 


Fig. 1: Scheda di collaudo;

Questo sketch permette di utilizzare la temporizzazione con la funzione predefinita "millis()" senza usare la funzione "delay()" che inevitabilmente bloccherebbe l'esecuzione di altre istruzioni fino alla fine del "ritardo" impostato.

In questo modo si realizza un "Multivibratore astabile" senza ritardo nell'esecuzione del programma.

L'organizzazione come "procedura" permette il suo utilizzo in modo rapido e multiplo, semplicemente richiamando la funzione con la relativa variabile.

Facciamo l'esempio di un robot che debba essere comandato via infrarosso o bluetooth; il robot deve muoversi, rispondere ai comandi durante il movimento, accendere qualche luce per un determinato tempo e, contemporaneamente, rispondere ad ulteriori comandi impartiti. Un solo LED che si trovasse a lampeggiare con un tempo piuttosto lungo usando la funzione "delay()" bloccherebbe irrimediabilmente l'esecuzione di importanti comandi, come "svolta a destra", "svolta a sinistra", "stop", rendendo instabile governarne i movimenti.


Questa procedura risolve molto bene il problema menzionato. Basta familiarizzarsi con le poche istruzioni necessarie e assimilarne il principio informatore.

Buon lavoro!


Simulazione:  Multivibratore astabile senza ritardo



> Arduino N°  70 

mercoledì 11 novembre 2020

Arduino N° 68 - Sensore Luci temporizzate - retriggerabile

Arduino N° 67 

 Achille De Santis

 Arduino N°  69


Interruttore per luci temporizzate. Premendo l'interruttore, verso la fine del tempo di accensione, il dispositivo fa ripartire la temporizzazione senza spegnere le luci.


Fig, 1: la scheda di prova;
Fig. 2: collaudo dello sketch su modulo a led;


   






/*  ------
















----------- Inizio programma -----------------------------------------
 * Sensore Luci temporizzate - retriggerabile
 * Achille De Santis 03-11-2020
 * Versione 4.0
 * 
*/
// ---------- I/O ---------------------------------------------   
#define sensore   7        // sensore touch, interruttore 
// ------------------------------------------------------------

const int  T0 = 1000;
const int  T1 = 5000;   // millisecondi

bool S; 
int U = 11;             // uscita digitale per comando luci 
int PreviousTime;

void intestazione()
{ Serial.println(" ---------------------------------------------- ");
  Serial.println(" - Tecnatron - ing. Achille De Santis         - ");
  Serial.println(" - Sensore Luci temporizzate - retriggerabile - "); 
  Serial.println(" - Versione 4.0                               - "); 
  Serial.println(" - I/O                                        - ");
  Serial.println(" - D11: uscita                                - ");  
  Serial.println(" - D7: sensore/interruttore attivo basso      - "); 
  Serial.println(" ---------------------------------------------- ");
}

void ManovraLuci(int t)  
  { 
    digitalWrite(U,HIGH);
    delay(t); 
    digitalWrite(U,!digitalRead(U));
  }
  
void setup() 
{
  Serial.begin(9600);      // setto la velocità di comunicazione
  intestazione();          // intestazione, inviata alla seriale
  pinMode(sensore, INPUT_PULLUP); 
  pinMode(U, OUTPUT); 
  ManovraLuci(T0); // prova
}

void loop() 
{  
  S=digitalRead(sensore);               // lettura valore del sensore al tocco.
  while(S==false)  
    { 
      Serial.print("\nTemporizzatore ON\t"); 
      digitalWrite(U,HIGH);
      delay(T1); 
      S=digitalRead(sensore);
      if (S==true) 
        { digitalWrite(U,LOW);  Serial.print("OFF");  }
    }
}
// -------------------------- Fine programma --------------------------------------



Simulazione: Multivibratore Monostabile,


Argomenti correlati: 


mercoledì 4 novembre 2020

Arduino N° 67 - Sensore Luci temporizzate

Arduino N°  66

 Achille De Santis

 Arduino N°  68



Fig 1: Sensore di luci temporizzate; 
Fig 2: Sensore di luci temporizzate. collaudo; 























Questo firmware implementa un sensore di luci temporizzate, con un controllore ATmega168.
Il temporizzatore si potrebbe realizzare anche a "logica cablata": a transistori, a relay, a logica TTL, CMOS e quant'altro. Non me ne vogliano, quindi, i "puristi" o i nostalgici. Lo "sketch" viene qui presentato come parte ben funzionante da integrare in dispositivi molto più complessi, con un hardware ridotto veramente al minimo.
Buon lavoro! tecnatronATgmail.com



  
/* ------------------- Inizio programma -----------------------------
 * Sensore Luci temporizzate
 * Achille De Santis 02-11-2020
 * Versione 4.0
 * 
*/
// ---------- I/O ----------------------------------------
#define sensore   7        // sensore touch, interruttore 
// -------------------------------------------------------

const int  T0 = 1000;
const int  T1 = 5000;   // millisecondi

bool S; 
int U = 11;             // uscita digitale per comando luci 
int PreviousTime;

void intestazione()
{ Serial.println(" ---------------------------------------------- ");
  Serial.println(" - Tecnatron - ing. Achille De Santis         - ");
  Serial.println(" - Sensore Luci temporizzate                  - "); 
  Serial.println(" - Versione 4.0                               - "); 
  Serial.println(" - I/O                                        - ");
  Serial.println(" - D11: uscita                                - ");  
  Serial.println(" - D7: sensore/interruttore attivo basso      - "); 
  Serial.println(" ---------------------------------------------- ");
}

void ManovraLuci(int t)  
  { 
    digitalWrite(U,HIGH);
    delay(t); 
    digitalWrite(U,!digitalRead(U));
  }
  
void setup() 
{
  Serial.begin(9600);      // setto la velocità di comunicazione
  intestazione();          // intestazione, inviata alla seriale
  pinMode(sensore, INPUT_PULLUP); 
  pinMode(U, OUTPUT); 
  ManovraLuci(T0); // prova
}

void loop() 
{  
  S=digitalRead(sensore);               // lettura valore del sensore al tocco.
  while(S==false)  
    { 
      Serial.print("Temporizzatore ON\t"); 
      ManovraLuci(T1);
      Serial.print("OFF\n"); 
      S=digitalRead(sensore);
    }
}
// ----------------------- Fine programma -------------------------------
 


Simulazione: 


Argomenti correlati:

mercoledì 16 settembre 2020

Arduino N° 66 - Beacon multiplo sequenziale

Arduino N°  65 

 Achille De Santis

 Arduino N°  67




Fig. 1: Beacon multiplo sequenziale;
Ultimato il beacon multiplo sequenziale.

Può pilotare 5 TX beacon, in sequenza, dando la possibilità di riceverne uno solo per volta sequenzialmente.
In questo modo, dal lato ricevitore, è possibile valutare la propagazione del segnale a RF sulle varie bande e la "apertura" di propagazione DX.

Nella tabella, è possibile vedere come è organizzata la trasmissione dei testi beacon con i call specifici, per ogni banda.








Simulazione: 


Argomenti correlati: 

mercoledì 2 settembre 2020

Arduino N° 65 - Rotore azimutale a controllo digitale diretto - da Radiorama

Arduino N° 64 

 Achille De Santis

 Arduino N°  66


Fig. 1: Assemblaggio generale del circuito di prova del firmware.




Rotore azimutale a controllo digitale diretto.

Movimentazione di un motore "a passo" per applicazione come rotore azimutale a 360 gradi.
Un potenziometro lineare (meglio se multigiri) rileva la posizione da impostare.
Inserire un condensatore da 47uF/16VL elettrolitico ai capi del potenziometro (in parallelo sull'alimentazione).
Il funzionamento è molto preciso;  si potrebbe lasciare sempre inserito il comando di consenso ma questo non permetterebbe di leggere e predisporre con precisione l'angolo impostato.
Operando la selezione della posizione angolare viene visualizzato il valore di set-point.
Premendo, poi, il pulsante di consenso (start), fino all'accensione del LED, si avvia la movimentazione.
Il LED resta acceso per tutta la durata della movimentazione del motore ed indica la ricerca e l'assetto sulla posizione di set-point, precedentemente impostata.
Un display LCD 16X2 visualizza i valori impostati ed i relativi movimenti.
Con questi parametri si ottiene una rotazione completa in circa 90 secondi, valore ritenuto idoneo per la movimentazione assiale di antenne direttive.

In figura 1) viene mostrato lo schema generale del circuito, dove manca soltanto il motore passo-passo ed il modulo di potenza per il suo pilotaggio (L298).

Fig: 2: Control box all'accensione;
In fig. 2) è visibile il dispositivo completo e funzionante, ancora assemblato su breadboard.

Nella versione finale, il controllore programmabile è stato sostituito dal più semplice e meno costoso ATmega168, con le stesse caratteristiche di funzionamento.

Il display è il classico ed economico LCD 16X2 (2 righe x 16 colonne) nella versione senza I2C, compatibile con altri moduli gestiti da integrato Itachi HD44780; volendo, il display può essere sostituito con altro fornito di I2C, cablando opportunamente.


Fig. 3: sequenza delle fasi operative: preselezione dell'angolo,
consenso al movimento, visualizzazione del raggiunto set-point;
Il potenziometro a sinistra (v. fig. 2) regola la luminosità del display; l'altro, quello a destra in foto, regola la posizione angolare di azimuth prescelto, a sua volta segnalata sul display.
In questo modo è possibile operare una regolazione fine prima di attivare la movimentazione con il pulsante di consenso.

Il pulsante gestisce il consenso al movimento, che viene confermato sia dall'accensione del LED di segnalazione che dall'indicazione in testo, visibile sul display.

A fine movimento, sul display viene visualizzato il valore finale raggiunto.

Con i parametri inseriti, la rotazione completa viene effettuata in circa 90 secondi, valore ritenuto ottimale per movimentazione azimutale di antenne.
Nella foto animata di figura 3) viene visualizzata la sequenza delle operazioni e delle relative schermate sul display.


Per gli interessati, è disponibile il microcontrollore già programmato e facilmente integrabile in un sistema di gestione di un rotore azimutale con motore a passo.


by Achille De Santis - V4 del 20-06-2020 - tecnatronATgmail.com



Simulazione: 


Argomenti correlati:

Arduino N°  59 - Pilotaggio Stepper Motor





mercoledì 26 agosto 2020

Arduino N° 64 - Beacon per caccia alla volpe

Arduino N°  63

 Achille De Santis

 Arduino N°  65



Fig.1: Collaudo del modulo beacon con un cicalino;
Un "beacon" è un radiofaro che trasmette ciclicamente alcune informazioni. 
Un beacon per "caccia alla volpe" non è un dispositivo per uso cruento sul povero animale ma semplicemente un piccolo radiotrasmettitore utilizzato per il "Radio-orienteering" o per la cosiddetta caccia al segnale RF (RDF: Radio Direction Finding).

Con questo sistema vengono normalmente organizzate delle gare di ricerca.

Il trasmettitore può essere "anonimo" o può contenere il suo nominativo specifico, comodo soprattutto nel caso di presenza contemporanea di più microtrasmettitori dislocati sul campo di gara.

Quello che viene qui presentato è un modulatore beacon, con tanto di nominativo, da associare ad un microtrasmettitore a bassissima potenza.


 






Simulazione: Beacon per caccia alla volpe


Argomenti correlati: