mercoledì 29 gennaio 2020

Arduino N° 34 - Tecnica del Charlieplexing

Arduino N° 33

 Achille De Santis

Arduino n° 35





Come applicare la tecnica del Charlieplexing usando Arduino.

In particolare, come comandare 6 LED con 3 linee di uscita.

Il Charlieplexing è una tecnica di multiplazione che permette di utilizzare meno linee di uscita rispetto a quanto necessario per commutarle singolarmente. Naturalmente, ci sono dei limiti ma è utile provare questa tecnica per applicarla al momento opportuno.
Del momento che non ho trovato, in rete, una specifica applicazione ho sviluppato alcune routines che permettono di implementare facilmente questa tecnica.

Ricordatevi di non eccedere con la corrente richiesta ad Arduino. Nel caso fosse necessario, per correnti maggiori, bisognerebbe utilizzare dei transistori in configurazione opportuna.

Valutate voi stessi la convenienza di utilizzare un integrato multiplexer o di implementare questa tecnica.



Simulazione: Charlieplexing,

Argomenti correlati:
Polarizzazione del BJT nelle tre zone di lavoro: interdizione, attiva, saturazione
Albero di Natale con Arduino

> Arduino n° 35

mercoledì 22 gennaio 2020

Arduino N° 33 - Pilotaggio di un relay con driver a BJT

Arduino N° 32

 Achille De Santis

Arduino N° 34





Pilotaggio di un relay attraverso uno stadio driver a BJT, in configurazione ad "Emettitore Comune" opportunamente polarizzato.

Un cicalino, escludibile, segnala l'avvenuta attuazione.

Per il dimensionamento dello stadio a transistore BJT, del tipo NPN, vedere la pagina a questo link.

Immettendo i dati indicati in rosso si ottengono i valori dei componenti. Non modificate gli altri campi!

Il transistore NPN può essere un comune BJT per usi generali (BC108, BC109, 2n1711, 2N1613, 2N2222); consigliato il 2N2369 che è ottimo per l'uso in commutazione.

Per carichi notevoli serve un BJT di potenza da utilizzare come stadio finale.

Nota:
Il buzzer NON è un altoparlante ma un cicalino (ronzatore)! L'altoparlante manderebbe in corto-circuito l'alimentazione di Arduino!


/* ------------------------ Inizio Programma -----------------------
 * Pilotaggio intermittente di un Relay con Arduino
 * Segnalazione acustica tramite Buzzer
 * Uso delle routines per le operazioni elementari ripetitive.
 */ ---------------------------------------------------------------------

// --------------- I/O ------------------------------
 #define R 13     // Uscita comando relay
 #define B 12     // Uscita comando buzzer
// --------------------------------------------------

 const int  T1=100,   // ritardo
                 T2=1000,
                 T3=3000;     // ritardo

void setup()
{
  pinMode(R, OUTPUT); // viene settato il pin R come uscita
  pinMode(B, OUTPUT); // viene settato il pin B come uscita
}

void accendi(int r, int b)
{
  digitalWrite(r, HIGH);  // mette R a livello alto facendo andare il BJT in saturazione
  digitalWrite(b, HIGH); // mette B a livello alto facendo suonare il buzzer
  delay(T1);                    // attende T1 millisecondi
}
void spegni(int r, int b)
{
  digitalWrite(r, LOW);  // spegne il bjt, spegne il relè e il buzzer
  digitalWrite(b, LOW);
  delay(T1);                    // ritardo
}
void loop()
{
  accendi(R,B);   delay(100);
  // digitalWrite(B, LOW);    // per segnalazione impulsiva.
  delay(T2);   

  spegni(R,B);    delay(T3);    // ritardo, poi il ciclo si ripete
}

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



Simulazione: 

Pilotaggio relay con Arduino e driver a BJT;


Argomenti correlati: 

dimensionamento dello stadio a transistore;



> Arduino N° 34


mercoledì 8 gennaio 2020

Arduino N° 31 - Antenna switch bluetooth 2 canali

Arduino N° 30

 Achille De Santis

Arduino N° 32





Selettore di antenna, 2 canali indipendenti, con uscite 1 via / 2 posizioni
Il primo canale viene usato per commutare due antenne; il secondo canale viene usato per commutare un preamplificatore di ricezione.


/* ---------------- Inizio Programma ----------------------------------------- 
 *  Programma di Achille De Santis    22-03-2018 V.2.2
 *  Selettore "2 vie/2 posizioni" a relé tramite collegamento Bluetooth
 *  Piedini usati per seriale bluetooth:  TX=>0, RX=>1 
 *  Linee di uscita: D2 = antenne,  D3 = preamplificatore
 *  Commuta 2 Antenne su una unica discesa in cavo coassiale.
 *  Un comando indipendente per preamplificatore di ricezione.
 *
 *  Comandi: 
 *  A = seleziona antenna A 
 *  B = seleziona antenna B 
 *  P = inserisce preamplificatore su linea antenna 
 *  p = disinserisce preamplificatore antenna   
 *  c = comandi
 *  t = titolo
*/

// ------------------- I/O -----------------------
#define i   2       // uscita comando relay
#define p3  3     // preamplificatore
// -----------------------------------------------

char dato;

void titolo()
  { 
    Serial.println("\n-           Tecnatron Creation   ");
    Serial.println("-          tecnatron@gmail.com     ");
    Serial.println("- Selettore:  2 canali - 1 via/2 posizioni");
    Serial.println("- posizione iniziale: Uscita A     ");
    Serial.println("- ---------------------------------------------");
  }

void comandi()
  {
    Serial.println(" - Comandi: -");
    Serial.println(" - A = antenna A ");
    Serial.println(" - B = antenna B ");
    Serial.println(" - P = inserisce preamplificatore ");
    Serial.println(" - p = disinserisce preamplificatore");
    Serial.println(" - c = comandi ");
    Serial.println(" - t = titolo ");
    Serial.println('  ------------------------------------------ ');
  }

void accendi(int pin)
  { digitalWrite(pin, HIGH); // eccito il relè collegato al pin
    scrivi(pin); Serial.println(" ON");
  }
void spegni(int pin)
  { digitalWrite(pin, LOW); // rilascio il relè collegato al pin
    scrivi(pin-1); delay(10); Serial.println(" ON");
  }
void scrivi(int pin)
  { Serial.print("Antenna ");
    Serial.print(pin);
  }
void accendiPRE(int pin)
  { digitalWrite(pin, HIGH); // eccito il relè collegato al pin
    Serial.println("Preampli RF: ON");
    // Serial.println();
  }
void spegniPRE(int pin)
  { digitalWrite(pin, LOW); // rilascio il relè collegato al pin 
    Serial.println("Preampli RF: OFF");
    // Serial.println();
  }

void setup()
  {
     pinMode(i, OUTPUT);              // comando switch antenna
     pinMode(p3, OUTPUT);            // comando preamplificatore
     Serial.begin(9600);                    // velocità di comunicazione
     accendi(i); delay(500); spegni(i);  // controllo iniziale
     accendiPRE(p3); delay(500); spegniPRE(p3);
     titolo();
  }

void loop()
  {while (Serial.available())
   {   dato= Serial.read();              // carattere che viene ricevuto dalla seriale
       Serial.print(dato); Serial.print(' ');
       switch(dato)
       { case 'A':  spegni(i);      break;       //
         case 'B':  accendi(i);     break;       //
         case 'P':  accendiPRE(p3); break; //
         case 'p':  spegniPRE(p3);  break;  //
         case 'c':  comandi();      break;      //
         case 't':  titolo();       break;           //
         default:   comandi();       
       }     
   }
  }
// ------------------------- Fine programma ------------------------------------



Simulazione: Antenna switch bluetooth

Argomenti correlati: 

mercoledì 1 gennaio 2020

Arduino N° 30 - Lampeggiatore per indicatori di direzione

Arduino N° 29

 Achille De Santis

Arduino N° 31




/* ----------------- Inizio Programma ------------------------------------------------------
  Lampeggiatore "destra e sinistra" per auto/moto/bici; più blinker 4 frecce di emergenza.
  Il programma fa uso di due routine di lampeggio/temporizzazione.
  Realizzato dal prof. Achille De Santis in data 18-07-2019 per i suoi studenti.
*/

// ----- Uscite ----------------------------
#define L1  9   // Linea L1 uscita SX
#define L2  8   // Linea L2 uscita DX
// ----- Ingressi --------------------------
#define S1  3   // linea S1 di ingresso (freccia a sinistra)
#define S2  2   // linea S2 di ingresso (freccia a destra)
#define SB  4  // Blinker 4 frecce
// ----------------------------------------------------------------

const int t1=500;  // durata

void titolo()
{
  Serial.println(" -          Tecnatron Creation                    - ");
  Serial.println(" -          tecnatron@gmail.com               - ");
  Serial.println(" - Lampeggiatore                                   -  ");
  Serial.println(" - per indicatori di direzione                  -  ");
  Serial.println(" ------------------------------------------------ ");
}

void lampeggia(int pin)
{
  digitalWrite(pin, HIGH); delay(t1);
  digitalWrite(pin, LOW); delay(t1);
}

void blinker()
{
  digitalWrite(L1, HIGH);
  digitalWrite(L2, HIGH);
  delay(t1);

  digitalWrite(L1, LOW);
  digitalWrite(L2, LOW);
  delay(t1);
}

 void setup()
 {
  Serial.begin(9600);             // velocità di comunicazione
  titolo();
  pinMode(L1, OUTPUT);
  pinMode(L2, OUTPUT);
 
  pinMode(S1, INPUT_PULLUP);
  pinMode(S2, INPUT_PULLUP);
  pinMode(SB, INPUT_PULLUP);
 }

void loop()
{
  while(digitalRead(S1)==LOW)    { lampeggia(L1); }
  while(digitalRead(S2)==LOW)    { lampeggia(L2); }
  while(digitalRead(SB)==LOW)    { blinker(); }
}
// --------- Fine programma --------------------------------------------------------------



Simulazione: 

Indicatori di direzione


Argomento correlati: 



Arduino N° 31


NomeQuantitàComponente
Indicatore di direzione1Arduino Uno R3
R2
R4
2470 Ω Resistenza
D1
D2
2Arancione/giallo  LED
S1
S2
S3
1deviatore a zero centrale + 1 switch N.O.