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: