mercoledì 24 giugno 2020

Arduino N° 55 - Contatore per dieci - 2°

Arduino N°  54 

 Achille De Santis

 Arduino N°  56



 





Contatore per dieci ad una cifra, con display a sette segmenti.
Uso di una matrice 10x7 per la definizione delle cifre.



 /* 
  *  ---------------------- Inizio Programma -------------------------------------------
  * Contatore per 10 con Display a 7 segmenti con matrice
 */


 int Pin[7] = {13,12,11,10,9,8,7};        // inizializza pin board Arduino
 int R=0;                                 // inizializza indice di riga 
 int C=0;                                 // inizializza indice di colonna
    
 bool rom [10][7] =                        // matrice 10x7
           {          // definizione delle cifre a 7 segmenti
                 1,1,1,1,1,1,0,        // cifra 0
                 0,1,1,0,0,0,0,        // cifra 1    
                 1,1,0,1,1,0,1,        // cifra 2
                 1,1,1,1,0,0,1,        // cifra 3
                 0,1,1,0,0,1,1,        // cifra 4
                 1,0,1,1,0,1,1,        // cifra 5
                 1,0,1,1,1,1,1,        // cifra 6
                 1,1,1,0,0,0,0,        // cifra 7
                 1,1,1,1,1,1,1,        // cifra 8
                 1,1,1,1,0,1,1         // cifra 9
          };

 void setup() 
    {    
      for (C=0; C<=6; C++)   {  pinMode(Pin[C], OUTPUT);  }
    }
          
void loop() 
  {
    for(R=0; R<=9; R++)
      {
        for(C=0; C<=6; C++)   { digitalWrite(Pin[C], rom[R][C]); }  
        delay(1000);
      }
  }
// ---------------------- Fine Programma -------------------------------------------


Simulazione: 
Display Array 7 segmenti
Display Array 7 segmenti_V2

Argomenti correlati:


> Arduino N°  56

mercoledì 17 giugno 2020

Arduino N° 54 - Contatore per dieci - 1°

Arduino N°  53

 Achille De Santis

 Arduino N°  55








Contatore per dieci ad una cifra, con display a sette segmenti.

Uso di  routines per la definizione delle cifre.




/* --------------------- Inizio programma ----------------------------
 * Contatore per dieci con display a 7 segmenti - 1 cifra.
 * 
 */

#define a   2
#define b   3
#define c   4
#define d   5
#define e   6
#define f   7
#define g   8

const int T1=1000;
int i;

void spegni() { digitalWrite(a,0),(b,0),(c,0),(d,0),(e,0),(f,0),(g,0); }
void zero()   { digitalWrite(a,1),(b,1),(c,1),(d,1),(e,1),(f,1); }
void uno()    { digitalWrite(b,1),(c,1); }
void due()    { digitalWrite(a,1),(b,1),(d,1),(e,1),(g,1); }
void tre()    { digitalWrite(a,1),(b,1),(c,1),(d,1),(g,1); }
void quattro(){ digitalWrite(b,1),(c,1),(f,1),(g,1);  }
void cinque() { digitalWrite(a,1),(c,1),(d,1),(f,1),(g,1); }
void sei_()   { digitalWrite(a,1),(c,1),(d,1),(e,1),(f,1),(g,1); }
void sette()  { digitalWrite(a,1),(b,1),(c,1); }
void otto()   { digitalWrite(a,1),(b,1),(c,1),(d,1),(e,1),(f,1),(g,1); }
void nove()   { digitalWrite(a,1),(b,1),(c,1),(d,1),(f,1),(g,1); }
  
void setup() 
{
   pinMode(a,OUTPUT);
   pinMode(b,OUTPUT);
   pinMode(c,OUTPUT); 
   pinMode(d,OUTPUT); 
   pinMode(e,OUTPUT); 
   pinMode(f,OUTPUT); 
   pinMode(g,OUTPUT);
}

void loop()
   {
     for(i=0; i<=9; i++)
    {   spegni();
       switch(i)
       {
          case 0:   zero();     break;
          case 1:   uno();      break;
          case 2:   due();      break;
          case 3:   tre();      break;
          case 4:   quattro();  break;
          case 5:   cinque();   break;
          case 6:   sei_();     break;
          case 7:   sette();    break;
          case 8:   otto();     break;
          case 9:   nove();     break;
       }
       delay(T1);
    }      
   }
   // ------------- Fine programma ----------------------------


Simulazione: 
Display Array 7 segmenti
Display Array 7 segmenti_V2

Argomenti correlati:


> Arduino N°  55

mercoledì 10 giugno 2020

Arduino N° 53 - Modulo bluetooth 9 CH + 3 Servo

Arduino N°  52

 Achille De Santis

 Arduino N°  54




Foto 1: Il modulo bluetooth, su shield, e scheda Arduino;

Programma per la gestione con bluetooth di 9 canali digitali (ON/OFF) e di 3 canali per il comando di servomotori.



Le uscite digitali possono essere interfacciate con un modulo relais ad 8+1 canali, per il comando di altrettanti attuatori.








I tre canali "servo" possono comandare direttamente tre piccoli servomotori del tipo SG90 o similari, per un controllo a tre assi.

  1. Per il funzionamento con telefono Android occorre predisporre un modulo bluetooth ricevitore (HC06 o HC05) ed una opportuna APP sul telefono.
  2. Per il funzionamento con telefono IoS è consigliabile l'uso di un modulo bluetooth BLE 4.0 

Le uscite servo sono predisposte per effettuare una rotazione lenta di 90 gradi (in circa 10 secondi).

Foto 2: collaudo del comando servomotore;
In questo caso, dopo le prove operate su Arduino UNO, ho utilizzato una scheda Arduino Pro-Mini, sulla quale ho caricato lo sketch, una volta per tutte. 

Si tratta, quindi, di un modulo che può essere finalizzato ad applicazioni con un massimo di 9 canali di comando digitale e 3 canali di comando per servomotori. 
Le applicazioni possono essere numerose.


Per applicazioni a bassa potenza, sui canali "digitali" basta un semplice modulo relais.
Per i canali servo vale lo stesso principio ma con uscita "proporzionale", interfacciata con transistori.



Per applicazioni a tensioni diverse dai 5 volt della scheda Arduino, i "contatti puri" dei relais offrono la possibilità di separazione galvanica e di interfacciamento con tensioni continue o alternate, più o meno alte.

Al fine di soddisfare le richieste di alcuni lettori ho reso disponibile la scheda di controllo Pro-mini già programmata con firmware. Basta collegare la scheda, l'interfaccia bluetooth e l'interfaccia Relais per essere operativi. 

Naturalmente, per comandare da telefono occorre una opportuna APP, facilmente scaricabile.


Nota importante

In ogni caso, fino a 48 volt state lavorando con "tensioni di sicurezza". Oltre questo valore è necessario adottare tutte le ulteriori misure di sicurezza che le Norme richiedono.


---------------------------------------------------------------------------------------

Simulazione: 


Argomenti correlati:


tecnatronATgmail.com

> Arduino N°  54

mercoledì 3 giugno 2020

Arduino N° 52 - Numeri casuali con dado a sei facce.




< Segue da Arduino N° 51

 Achille De Santis

Arduino N°  53







  •   Estrazione di numeri casuali simulando un dado a sei facce.
  •   Visualizzazione su display a 7 segmenti.
  • Uso dei vettori per la definizione di variabili multiple.
  

Achille De Santis V5 del 22-05-2020 








/* 
 * -------------------- Inizio programma --------------------------------------
 * Estrazione numeri casuali con dado a sei facce.
 * Visualizzazione su display a 7 segmenti.
 * Uso dei vettori per la definizione di variabili multiple.
 * Achille De Santis V5 del 22-05-2020
 * ----------------------------------------------------------------------------
 * 
*/

// ------ display ----------------
#define a   13
#define b   12
#define c   11
#define d   10
#define e   9
#define f   8
#define g   7
// --------- comando -------------
#define button  2
// -------------------------------

const int T1=1000;
bool buttonState;
int i;
long ran;
int LED[]= {a,b,c,d,e,f,g};

// --- definizioni cifre ----------
const int uno[]=    {0,1,1,0,0,0,0};
const int due[]=    {1,1,0,1,1,0,1};
const int tre[]=    {1,1,1,1,0,0,1};
const int quattro[]={0,1,1,0,0,1,1};
const int cinque[]= {1,0,1,1,0,1,1};
const int sei[]=    {0,0,1,1,1,1,1};
// ---------------------------------

void setup ()
{
  Serial.begin (9600);
  for (i=0; i<=6; i++)    (pinMode (LED[i], OUTPUT));
  pinMode (button, INPUT_PULLUP);
  prova();
}

void SPENTO()    { for ( i=0; i<=6; i++) {digitalWrite(LED[i], LOW);  }}
void Accendi1()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], uno[i]);      Serial.print(uno[i]);     Serial.print(" "); }} 
void Accendi2()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], due[i]);      Serial.print(due[i]);     Serial.print(" "); }}
void Accendi3()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], tre[i]);      Serial.print(tre[i]);     Serial.print(" "); }}       
void Accendi4()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], quattro[i]);  Serial.print(quattro[i]); Serial.print(" "); }}
void Accendi5()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], cinque[i]);   Serial.print(cinque[i]);  Serial.print(" "); }}
void Accendi6()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], sei[i]);      Serial.print(sei[i]);     Serial.print(" "); }}

void prova()
{
  SPENTO(); 
  Accendi1(); delay(400);
  Accendi2(); delay(400);    
  Accendi3(); delay(400);
  Accendi4(); delay(400);
  Accendi5(); delay(400); 
  Accendi6(); delay(500);
  SPENTO();
}

void loop()
{
  buttonState = digitalRead(button);
  if (buttonState == LOW)
  {
    SPENTO();
    ran=random(1,7);
    Serial.print("\ta b c d e f g\n");
    Serial.print(ran); Serial.print("\t");  
    switch(ran)
      {
        case 1: Accendi1();  break;
        case 2: Accendi2();  break; 
        case 3: Accendi3();  break;
        case 4: Accendi4();  break; 
        case 5: Accendi5();  break; 
        case 6: Accendi6();  break; 
      }
    Serial.println();
  }
  delay(T1);
}
// ----------------- Fine Programma ---------------------------------------------


Simulazione: 

Argomenti correlati:

Dado Elettronico

Dado Elettronico V2





> Arduino N°  53