mercoledì 27 novembre 2019

Arduino N° 25 - Termometro LCD














Arduino N°  24

 Achille De Santis

Arduino N° 26




Termometro a cristalli liquidi LCD, con sensore di temperatura TMP36 e display LCD 16x2 (2 righe x 16 colonne).


/* ------------------ Inizio Programma ------------------------------------------------
 * Termometro a cristalli liquidi LCD.
 * Elementi utilizzati:
 * display LCD 16x2  
 * potenziometro  
 * Sensore TMP36  
 * breadboard
 * Il sensore è un TMP36, incluso nello starter kit Ufficiale di Arduino,
 *  e va collegato al pin analogico A0.
 * modificato da Achille De Santis il 04/07/2019
 * V2.1

#include <LiquidCrystal.h>        // Include la libreria driver LCD
// ---------- I/O --------------
#define tempPin  A0                   // piedino analogico di ingresso
// -----------------------------
float tempC=0;                           // Variabile per memorizzare la temperatura in Celsius
float samples[100];                    // Array che contiene 100 esempi di calcolo di temperatura media
int   i;
float x ;                                               
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);       // Inizializzo la libreria con i numeri dei pin dell'interfaccia

void predisponedisplay()
  { lcd.clear(); lcd.setCursor(0,0);   }   // Cancello LCD

void setup()
{
  lcd.begin(16, 2);                          // Imposto il numero di colonne e righe (rispettivamente) del LCD
  predisponedisplay();   
  lcd.print("Attendere! Sto calcolando la temperatura");
  delay(600);
  for (int i=0; i<23; i++)
    {
      delay(400);
      lcd.scrollDisplayLeft();
    }
}

void loop()

  tempC=0 ;
  for(i=0; i<=99; i++)
  {
    x= analogRead(tempPin);
    samples[i]=(x-100)-((x-100)/2);  // (L'equazione è: 0 Celsius=100, 100 Celsius=300)
    tempC = tempC + samples[i];
    lcd.setCursor(int(i/10),1);
    delay(20);
  }
  tempC = tempC/100;
  predisponedisplay();           // predispone la posizione del cursore del LCD (colonna 0, riga 0)
  lcd.print("Temperatura");   // visualizza la stringa "Temperatura" sul LCD
  lcd.setCursor(0,1);             // vai a riga nuova: elimina gli spazi andando a capo (colonna 0, riga 1)
  lcd.print("corrente: ");      // scrive la stringa "corrente " (da colonna 0, riga 1)
  lcd.setCursor(10,1);          // mette il cursore del LCD in posizione (colonna 10, riga 1)
  lcd.print(tempC, " C");     // visualizza la temperatura corrente nel LCD
  lcd.noCursor();
//  tempC = 0;                // imposta la temperatura a 0 per ripetere la misura
}
// ------------------------ Fine programma ---------------------------------------------------------------



Arduino N° 26

mercoledì 20 novembre 2019

Arduino N° 24 - Pilotaggio di posizione angolare servo

Arduino N° 23

 Achille De Santis

Arduino N° 25




/* ------------------------------------ Inizio Programma ------------------------------------------

 Controlla la posizione angolare (escursione) di un servo attraverso un potenziometro
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

 modified on 8 Nov 2013 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob

 Aggiunta routine da Achille De Santis - 26-02-2019
 usare una resistenza in serie al potenziometro di uguale valore.
 In questo modo si riduce la corrente nel potenziometro e si limita l'escursione di tensione.
*/

#include <Servo.h>
// --------------------------------
#define U          9        // uscita servo
#define potpin  0        // piedino analogico usato per collegare il potenziometro
// --------------------------------
Servo myservo;          // crea l'oggetto servo per controllare un servomotore
int     val;                    // variabile per leggere il valore dall'ingresso analogico

void setup()
{
  myservo.attach(U);    // associa il servo al pin di uscita (9)
  Serial.begin(9600);
}

void muoviservo(Servo x, int v, int p)
{ // questa routine può essere convenientemente usata per altri servo
  v=analogRead(p);          // legge il livello del potenziometro (tra 0 e 1023)
    Serial.print(v); Serial.print(' ');
  v=map(v, 0, 900, 0, 180); // scala il valore in gradi, per usarlo con il servo (valore tra 0° e 180°)
  x.write(v);               // assegna la posizione al servo, in gradi
    Serial.println(v);
  delay(15);                // ritarda
}

void loop()
  {      muoviservo(myservo, val, potpin);     }

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

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ì 13 novembre 2019

Arduino N° 23 - Fader per canali RGB

Arduino N° 22

 Achille De Santis

Arduino N° 24




Gestione proporzionale PWM dei colori per un LED RGB a "catodo comune".
Lo sketch produce lo spegnimento progressivo dei LED (affievolimento).

Con facili modifiche è possibile ottenere l'accensione progressiva di ogni colore, lo spegnimento progressivo, il lampeggio, la miscelazione dei colori primari ecc...
I colori "primari" Rosso, Verde, Blu permettono di generare tutti gli altri colori, compreso il bianco, con opportuni coefficienti.

/* ------------------- Inizio Programma ----------------------------------------------------------------
 * Achille De Santis
 * fader per canali RGB  - V2.0 del 02-07-2019
 * collegare i LED con una resistenza, in serie, da 470 Ohm.
*/

// ------------- I/O -----------
#define VERDE   9
#define BLU     10
#define ROSSO   11
// -----------------------------

int delayTime = 20;

void setup()
  {
    pinMode(VERDE, OUTPUT);
    pinMode(BLU, OUTPUT);
    pinMode(ROSSO, OUTPUT);
 
  }

void accenditutto()
  {
    analogWrite(VERDE, 255);
    analogWrite(BLU, 255);
    analogWrite(ROSSO, 255);
  }

void spegni(int colore)
  {
    for (int i=0; i<255; i++)
     {
      analogWrite(colore, 255-i);
      delay (delayTime);
     } 
  }
 
void loop()
   { 
      accenditutto();
      spegni(VERDE); 
      spegni(BLU);
      spegni(ROSSO);
   }
 // ---------------------- Fine Programma -------------------------------------------------------------


Simulazione:
Fader per RGB a catodo comune
Fader per RGB ad anodo comune
Controllo di accelerazione per motore in DC con PWM


Arduino N° 24

mercoledì 6 novembre 2019

Umoristicamente sulle Radiosonde e i loro cacciatori

Fig. 2: Vetusta radiosonda RS 80-15; foto A. De Santis;


Fig. 1: Targa originale: il primo grande pallone a idrogeno;
 Parigi - giardini di  Champ de Mars (Campo di Marte); foto A. De Santis;





















"Sondosi" (sondosis) (codice ICD U.41.92) appartiene ad un gruppo di malattie incurabili derivanti dalle singole caratteristiche degli individui esposti alla sua azione. Non v'è alcuna chiara eziologia, tuttavia, abbiamo trovato un alto grado di suscettibilità alla malattia nell'ambiente dei radioamatori ed appunto in questo ambiente si dovrebbe cercare le cause di questa malattia.
Fig. 3: MySondy-GO,
Moderno apparato per tracking di radiosonde;


Al momento non vi è cura per questa patologia, si può soltanto agire sulla sintomatologia.



Esistono vari tipi di sondosi:

- Sondosi comune (s. vulgaris) - individui monitorano costantemente il movimento delle sonde in atmosfera, hanno gli strumenti statici e mobili di rilevamento in diverse configurazioni; attaccano, pur senza costrizione, gli oggetti fino a 25 km dal luogo di residenza abituale, casi non pericolosi per chi li circonda: parenti, amici.





- Sondosi presunta (s. suspicatis) – forma lieve della malattia, caratterizzata da sintomi che si notano periodicamente e scompaiono rapidamente, simile alla forma di sondosi comune, i sintomi spesso si innescano in modo non specifico.

Fig. 4: MySondyGO, versione sperimentale;


- Sondosi acuta (s. acuta) - individui affetti da questa variante della sondosi costantemente monitorano il movimento della sonda nell'atmosfera, non si fanno sfuggire alcuna possibilità di attacco. Per seguire la sonda, possono percorrere oltre 100 km solo all’andata. Non saranno fermati da alcun problema meteorologico o ostacoli del terreno. Possono subire attacchi improvvisi della malattia come descritto in letteratura; l'individuo colpito dal sondosi acuta si è svegliato urlando di notte: "la sonda è in volo" e poi è scappato di casa. È stato trovato mezzo nudo a circa 40 km da casa tenendo in mano una sonda. Si è rifiutato di indossare abiti e tornare a casa, sostenendo che "tra 2 ore ci sarà una seconda sonda e forse anche una terza";


Fig. 5: Nodo/Gateway  per tracking di radiosonde;

- Sondosi malevola (s. malicious) - individui con sintomi caratteristici delle sondosi riportate sopra; tuttavia, coloro che sono affetti da questa forma agiscono in modo segreto come i cosiddetti "sordomuti" e spesso, nella fase di caccia, sottraggono la sonda ad altri individui. Questa variante include anche individui che disabilitano deliberatamente la propria stazione di localizzazione quando la sonda scende al di sotto di 2000 m, in modo che nessuno, tranne lui stesso, possa trovare l'oggetto.


E tu a quale forma di sondosi appartieni?:) 



tecnatronATgmail.com


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