Visualizzazione post con etichetta Seriale. Mostra tutti i post
Visualizzazione post con etichetta Seriale. Mostra tutti i post

mercoledì 23 giugno 2021

Arduino N° 100 - Comando seriale remoto per LED RGB

< Arduino N° 99

 Achille De Santis

> Arduino N°  101


Fig 1: schema pratico di montaggio;
Questo esempio mostra come sia possibile inviare comandi sulla porta seriale di comunicazione.


Con due moduli Arduino (Uno, Nano) è possibile realizzare un dispositivo TX-RX di gestione seriale per LED RGB.

Il circuito può essere anche modificato per adattarlo alle proprie esigenze.

Il primo modulo (a sinistra, nella figura 1) viene usato come "Trasmettitore", il secondo (a destra, in figura) come ricevitore.

Tre ingressi analogici del modulo trasmettitore leggono i valori di tensione impostati in ingresso sui tre potenziometri, associati ai tre colori RGB.

I valori analogici vengono, poi, inviati sulla seriale e ricevuti dal secondo modulo, quello ricevitore, che li riconosce ed attua le tre uscite relative, formando il colore composito generato dai tre coefficienti primari utilizzati. Per fare questo, le tre uscite devono essere di tipo PWM; in particolare ho scelto le uscite PWM D3, ,D4, D5.

Le alimentazioni vanno separate ed associate ai rispettivi moduli; sul modulo TX verranno associati i potenziometri mentre su quello RX verrà associato il LED RGB.


Nel caso voleste alimentare più diodi LED il circuito di pilotaggio andrebbe modificato con un opportuno stadio driver/separatore, utilizzando tre BJT o MOSFET come amplificatori in configurazione "lineare".


La pagina di simulazione può essere molto esplicativa del funzionamento.

Le tre resistenze collegate in serie al rispettivo potenziometro servono per avere sul potenziometro tutta l'escursione della tensione per l'accensione del LED. Usando potenziometri rotativi da 300° l'accensione avviene entro una rotazione di circa 60-70°, lasciando altri 230° per la modulazione dei coefficienti tricromatici.

Fig. 2: Alimentazione separata per i due moduli;
Attenzione! Il firmware è diviso in due parti: una per il TX, l'altra per l'RX.

Inoltre, le due alimentazioni devono essere assolutamente separate! 
Del resto, se i due dispositivi sono sufficientemente lontani non può che essere così! In figura sono collegate insieme a puro titolo di prova. Quello che deve essere comune è soltanto la massa.

Il dispositivo si modifica come in figura 2:


Fig. 3: polarizzazione separata dei tre led RGB;


In figura 3 è riportato lo schema con una polarizzazione indipendente delle tre componenti RGB del LED.



Grazie a Gualtiero Piazzi per il costruttivo commento.

mercoledì 24 febbraio 2021

Arduino N° 83 - Prova Monitor seriale






 

< Arduino N° 82

 Achille De Santis

> Arduino N°  84







Avere una risposta del sistema, come stringa su "monitor seriale", può fare comodo in molti casi pratici.

In questo caso, è possibile controllare visivamente il valore PWM di uscita su un opportuno LED e verificare a monitor il valore attribuito alla variabile.

L'uscita, ovviamente, deve essere del tipo PWM altrimenti non si riesce ad ottenere un valore pseudo-analogico.

Il valore corrispondente viene letto in uscita, secondo la gradinata 0-255; opportunamente "mappato", viene visualizzato anche in percentuale.

Nell'esempio mostrato, ruotando il potenziometro si agisce sull'ingresso analogico in modo continuo.

Il valore corrispondente, in uscita, può essere letto aprendo il  monitor seriale.


Ad evitare inutili scorrimenti delle righe del monitor seriale, che ne renderebbe difficoltosa la lettura, i valori PWM vengono aggiornati soltanto quando si rilevi una variazione rispetto al valore precedente. Si risparmia anche sui tempi di scrittura a monitor e la lettura risulta molto agevole.
                         



Lo sketch e la simulazione del circuito sono disponibili per l'analisi e il download.


  • Il potenziometro, collegato sul piedino A0, fornisce la tensione analogica di ingresso
  • il LED verde segnala l'accensione del circuito;
  • il LED rosso segnala visivamente il valore analogico raggiunto. 


Simulazione:

Prova monitor seriale


Argomenti correlati:  






tecnatronATgmail.com

> Arduino N°  84

venerdì 15 novembre 2019

Arduino - Routine di Intestazione



prof. A. De Santis


Se non ricordate quale sia il programma o la versione di software che avete caricato sulla vostra scheda Arduino, e soprattutto se ne avete più di una in lavorazione, questa risorsa può essere molto utile.



Ho messo a punto questa piccola routine nella quale potete inserire alcune info per il vostro sketch.

La routine va inserita nel vostro FW e con essa, aprendo il monitor seriale, sarà possibile risalire alle info sul programma; la routine "Intestazione" è depositata sulla cartella "file" all'indirizzo: https://www.facebook.com/groups/197979647635131/permalink/573106700122422/ 

ed è visibile anche sulla pagina di simulazione.


Potete copiarla e "richiamarla" nel setup del programma; non occupa molto spazio ed è comoda per riconoscere immediatamente il vostro lavoro, aprendo il monitor seriale; serve soltanto qualche riga di commento.


Simulazione: "Intestazione"


Graditi feedback.

mercoledì 6 novembre 2019

Arduino N° 22 - Stampa seriale in vari formati

< Arduino N° 21

 Achille De Santis

> Arduino N° 23



Questo sketch è utile per familiarizzarsi con la scrittura seriale e con le basi delle numerazioni usate in Elettronica ed Informatica.


/* ----------------------------- Inizio Programma --------------------------------------------
 * Uses a FOR loop for data and prints a number in various formats.
 * Modificato da Achille De Santis 07-04-2019
 * Per vedere la stampa, aprire il monitor seriale.
*/

int x = 0;    // variable

void setup()
  { Serial.begin(9600); }   // open the serial port at 9600 bps: 

void loop()
{                           // print labels - stampa le etichette, tabulando opportunamente.
  Serial.print("NO FORMAT\t", "DEC\t", "HEX\t", "OCT\t", "BIN\n" );

  for(x=0; x<64; x++)
  {   // only part of the ASCII chart, change to suit
      // print it out in many formats: stampa, tabulando, in vari firmati
    Serial.print(x, "\t",x,DEC, "\t",x,HEX, "\t",x,OCT, "\t",x,BIN );  // print as an ASCII-encoded decimal
    delay(200);             // delay 200 milliseconds
  }
  Serial.println("");       // prints another carriage return
  delay(500);
}
// -------------------------------- Fine Programma ----------------------------------------------

> Arduino N° 23

mercoledì 18 settembre 2019

Arduino N° 15 - Prova telecomandi ad infrarosso e rivelatore di codici


< Arduino N° 14

 Achille De Santis

> Arduino N° 16




Molto spesso ci ritroviamo a dover lavorare con dei telecomandi ad infrarosso o a doverne provare soltanto l'efficienza.
Per la prova di funzionamento ci sono due metodi adatti alla maggior parte degli utenti:

  1. Fare uso di una radiolina ad onde medie: attivando i pulsanti del telecomando dovreste ascoltare il treno di impulsi sul ricevitore radio;
  2. Fare uso di un moderno telefono cellulare: premendo i pulsanti del telecomando si dovrebbero vedere a video, sullo schermo del telefono, gli impulsi di luce emessi.

Il problema, soprattutto se stiamo realizzando un progetto IoT, è conoscere i codici del telecomando, in modo da utilizzarli sul ricevitore per implementare le funzioni che a noi servono: Avvio/Arresto di motori, luci, servo, attuatori a relé ed altro. Infatti, non tutti i telecomandi hanno gli stessi codici.

Questo programma vi aiuta in questa ricerca e facilita la visualizzazione a monitor dei suddetti codici.
Successivamente, basta copiarli, memorizzarli in un file "DOC" o "TXT" e tenerli in evidenza per ogni ulteriore uso.

Ricordate! Ogni famiglia di telecomandi lavora in modo diverso ed è quindi molto utile conoscerne i codici ed il funzionamento. Alcuni ripetono il comando se si indugia sul pulsante, altri trasmettono codici diversi.
Per un corretto caricamento del programma, scollegare il pin RX e ricollegarlo a fine caricamento.

Buon lavoro!

/*----------------------------------------------- Inizio Programma -------------------------------
 * Arduino con test di ricezione Infrarosso.
 * Programma elaborato da Achille De Santis 27-10-2019.
 *
 * Utile per riconoscere a monitor i codici di comando del trasmettitore/telecomando.
 * Rileva gli impulsi sul LED connesso al piedino 13, senza aggiunta di altri componenti;
 * Rivela e visualizza a monitor i codici dei comandi.
 * A causa dei ritardi e del tipo di telecomando potremmo riceverli in due modi diversi;
 * niente paura: il comando viene trasmesso a "burst", l'importante è che uno (il primo) sia giusto.
 * Scegliere i codici dei comandi ed inserirli nelle istruzioni degli attuatori.
 * Collegare la seriale, avviare il programma ed aprire il monitor seriale.
 * I codici ricevuti verranno visualizzati a monitor.
 * Per "sincronizzare" al meglio i comandi agire sul delaytime.
 * Per una corretta decodifica, i comandi devono essere impulsivi. Si risparmia anche sul consumo della pila!
*/

#include <IRremote.h>    // usa la libreria
// ------------------ I/O -----------------------------
#define RX        0     // pin 1 (segnale) del ricevitore IR; ad Arduino, digital pin 0
#define U          13     // rivelatore dei comandi
// ----------------------------------------------------

IRrecv irrecv(RX);       // creo una istanza di 'irrecv'
decode_results results;

void setup()
{
  Serial.begin(9600);            // serial monitor output
  irrecv.enableIRIn();           // abilita la ricezione IR
  pinMode(U, OUTPUT);   // Pin di monitor output; segnala l'arrivo dei codici di comando
  visualizza(U);                   // accende una volta il LED, come test di uscita.
}

void visualizza(int p)
  {    digitalWrite(p, HIGH); delay(100); digitalWrite(p, LOW);     }

void loop()
{
  if (irrecv.decode(&results))          // se riceve un segnale IR
     {
      Serial.println(results.value, HEX); // lo mostra sul serial monitor in esadecimale
      // visualizza(U);                   // il piedino 13 è monitorato dal suo LED "a bordo" ma se si cambia                                                      // uscita... un LED può servire.
      delay(50);                           // IMPORTANTE! Blocca segnali spuri e "sincronizza". Da verificare                                                    // ed adattare. Con LG è perfetto!!!
      irrecv.resume();                  // si predispone a ricevere il codice successivo.
     } 
}
// ------------------------------- fine programma ---------------------------------------------



Simulazione: telecomando ad infrarosso-verifica codici

> Arduino N° 16