mercoledì 31 luglio 2019

Arduino N° 8 - Comando LED lampeggiante, con Bluetooth V3


 Achille De Santis







Con un modulo bluetooth HC06 unito ad una scheda Arduino possiamo realizzare un attuatore utilizzando il nostro telefono cellulare come telecomando; basta scaricare una idonea APP.

I comandi possono essere impartiti utilizzando i tasti sensibili da uno a cinque oppure, in modalità "terminale", premendo i tasti da uno a cinque sulla tastiera.

In caso di errore verrà visualizzato a monitor un messaggio di commento.







/*
  Comando LED lampeggiante con Bluetooth
  ideato da Achille De Santis il 28-12-2017
  V3.0 del 07-03-2018

  comandi:
  -1 effettua un lampeggio
  -2 effettua 2 lampeggi
  -3 effettua 3 lampeggi
  -4 effettua 4 lampeggi
  -5 effettua 5 lampeggi
 
*/

#define pin   13          // piedino usato come uscita comando

char data;
const int T=250;

void setup()
{
  Serial.begin(9600);             // baud-rate per la trasmissione seriale
  pinMode(pin, OUTPUT);   // pin del led di uscita
  lampeggia(pin, 1);              // prova iniziale LED; lampeggia 1 volta
}

void lampeggia(int p, int n) // lampeggia n volte
{
  for(int i=1; i<=n; i++)
  {
    digitalWrite(p, HIGH);  delay (T);
    digitalWrite(p, LOW);   delay (T);
  }
}
 
void loop()
{
  while(Serial.available())
  {
    data = Serial.read();      // Legge il dato in arrivo e lo mette in data
    Serial.print(data);  // Stampa il valore del dato nel Serial monitor (per vederlo ricordate di impostare il baud rate a 38400)
   
    switch (data)
    {         // Se il dato ricevuto è:
      case '1': {lampeggia(pin, 1); Serial.println(); break;}   // 1, lampeggia 1 volta ...
      case '2': {lampeggia(pin, 2); Serial.println(); break;}   // 2, effettua 2 lampeggi in sequenza;
      case '3': {lampeggia(pin, 3); Serial.println(); break;}   // 3, effettua 3 lampeggi in sequenza;
      case '4': {lampeggia(pin, 4); Serial.println(); break;}   // 4, effettua 4 lampeggi in sequenza;
      case '5': {lampeggia(pin, 5); Serial.println(); break;}   // 5, effettua 5 lampeggi in sequenza;
      default: Serial.println("  Comando NON ammesso! \n");    // negli altri casi
    }
  }
}

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


Nota: questo bluetooth funziona bene con telefono Android!

Arduino N° 9

mercoledì 24 luglio 2019

Arduino N° 7 - Comando LED lampeggiante, con Bluetooth


 Achille De Santis




 

Per questa realizzazione occorre un modulo ricevitore bluetooth HC05 / HC06 ed opportuna APP su telefono Android / IoS con i comandi da 1 a 5 (in modalità "terminale").




/* ---------------- Inizio Programma ------------------------
  Comando LED lampeggiante con Bluetooth
  ideato da Achille De Santis il 28-12-2017
  V3.0 del 07-03-2018

  comandi:
  -1 effettua un lampeggio
  -2 effettua 2 lampeggi
  -3 effettua 3 lampeggi
  -4 effettua 4 lampeggi
  -5 effettua 5 lampeggi
*/

#define pin 10       // piedino usato come uscita comando

char data = 0;

void setup()
{
  Serial.begin(9600);              // baud-rate per la trasmissione seriale
  pinMode(pin, OUTPUT);   // pin del led di uscita
  lampeggia(pin, 1);              // prova iniziale LED; lampeggia 1 volta
}

void lampeggia(int p, int n) // lampeggia n volte
{
  for(int i=1; i<=n; i++)
  {
    digitalWrite(p, HIGH);  delay (500);
    digitalWrite(p, LOW);   delay (500);
  }
}

void loop()
{
  while(Serial.available())
  {
    data = Serial.read();   // dato in arrivo
    Serial.print(data);     // Stampa il valore del dato nel Serial monitor (per vederlo ricordate di impostare il baud-rate a 9600)
 
    switch (data)
    {         // Se il dato ricevuto è:
      case ('1'):   {lampeggia(pin, 1); break;}   // 1,  ... 1 impulso; lampeggia 1 volta ...
      case ('2'):   {lampeggia(pin, 2); break;}   // 2,  ... 2 impulsi in sequenza;
      case ('3'):   {lampeggia(pin, 3); break;}   // 3,  ... 3 impulsi in sequenza;
      case ('4'):   {lampeggia(pin, 4); break;}   // 4,  ... 4 impulsi  in sequenza;
      case ('5'):   {lampeggia(pin, 5); break;}   // 5,  ... 5 impulsi in sequenza;
    }
  }
}

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

Nota: questo bluetooth funziona bene con telefono Android!

Arduino N° 8



mercoledì 17 luglio 2019

Arduino N° 6 - Comando Bluetooth 2 canali - 3 effetti


 Achille De Santis





Con un modulo Bluetooth  HC05 / HC06  possiamo realizzare un telecomando a due canali attivabili via telefono;
una qualunque APP a due canali è sufficiente. Dipende dal sistema telefonico utilizzato: Android/IoS.

Comandi da telefono (dopo aver installato idonea APP):

0 - USCITA 1 spenta
1 - USCITA 1 accesa - comando a tenuta
2 - USCITA 2 - comando impulsivo ACCESO/SPENTO

Il primo canale (D10) ha un effetto di tipo "Toggle", cioè cambia stato ad ogni comando; Il secondo canale (D11) ha un effetto "impulsivo", cioè genera un impulso ad ogni comando.





/* ----------------- Inizio Programma ---------------------
  Comando  2 canali, 3 effetti, con Bluetooth
  Accende/Spegne/Impulso
  Achille De Santis il 15-11-2018
*/

// ------------------- I/O --------------------------------------------------------
#define pin1       10  // uscita 1; piedino usato come uscita comando
#define pin2       11  // uscita 2;
// --------------------------------------------------------------------------------

unsigned const T = 500;
char data = 0;

void impulso(int p)
  {
    digitalWrite(p, HIGH);  delay(T); 
    digitalWrite(p, LOW);
    Serial.print(" impulso \n");
  }
  void spegni(int p)  { digitalWrite(p, LOW); Serial.print(" OFF \n"); }
  void accendi(int p) { digitalWrite(p, HIGH); Serial.print(" ON \n"); }

void setup()
{
  Serial.begin(9600);                   // baud-rate per la trasmissione seriale
  pinMode(pin1, OUTPUT);      // pin del 1^ canale (led) di uscita
  pinMode(pin2, OUTPUT);      // pin del 2^ canale (led) di uscita
  impulso(pin2);                         // prova iniziale con LED; si può escludere
}

void loop()
{
  while (Serial.available() )
  {
    data = Serial.read();      // Legge il dato in arrivo e lo mette in data
    Serial.print(data);        // Stampa il valore del dato nel Serial monitor
                                        // (per vederlo ricordate di impostare il baud-rate a 9600)
    switch(data)                // Se il dato ricevuto è...
    {               
      case '0': spegni(pin1);    break;  // comando a tenuta: //disattiva l'uscita e invia il messaggio "OFF"
      case '1': accendi(pin1);   break; // comando a tenuta; // attiva l'uscita e invia il messaggio "ON"
      case '2': impulso(pin2);  break;  // comando impulsivo;
      default: Serial.print (" Comando NON ammesso! \n");    // negli altri casi
    }
  }
}

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


Nota:
il modulo Bluetooth HC05/HC06 funziona bene con telefono Android!
Per telefoni IoS occorre un bluetooth BLE V.4.0.


schema; manca il modulo bluetooth
v. anche: http://tecnatron.blogspot.com/




mercoledì 10 luglio 2019

Arduino - giochi di luce


prof. De Santis

/*
  Achille De Santis - tecnatron@gmail.com
 questa semplice funzione è comoda nei giochi di luce e nell'uso di led RGB per la transizione di  colore.
*/

// per accendere LED2: commuta(LED1,  LED2);
// per accendere LED1: commuta(LED2, LED1);

void commuta(int a, int b) //funzione per la transizione ON/OFF di colore
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH); 
}
// ------------------------------------------------------------------

Argomenti correlati:

LED Rotanti
Luci sequenziali 8 canali avanti/indietro

Arduino N° 5 - LED rotanti


 Achille De Santis








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

 - da un'idea del prof. A. De Santis
  ----------------------------------------------
  Collegare i 5 LED sui piedini 13, 12, 11, 10, 9 di Arduino, con catodo a massa tramite resistenza da    220 Ohm.
  Uso delle funzioni "annidate".
 */

// ------------------- piedini di I/O ---------------------
#define led1  13
#define led2  12
#define led3  11
#define led4  10
#define led5  9
// ---------------------------------------------------------

const int T1=500, T2=500;

void setup()
{             
  // inizializza i pin digitali
    pinMode (led1, OUTPUT);
    pinMode (led2, OUTPUT);
    pinMode (led3, OUTPUT);
    pinMode (led4, OUTPUT);
    pinMode (led5, OUTPUT); 
}

void accendi(int led)                            // accensione del led generico
          {  digitalWrite(led, HIGH); delay(T1); }

void spegni (int led)                            // spegnimento del led generico
         { digitalWrite(led, LOW); delay(T2);   }

void commuta (int A, int B)               //accensione di un LED e spegnimento di un altro
         {   spegni(A);  accendi(B);   }

void loop()
{
  commuta(led1, led2);
  commuta(led2, led3);
  commuta(led3, led4);
  commuta(led4, led5);
  commuta(led5, led1);
}

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

LED Rotanti

Arduino N°6









mercoledì 3 luglio 2019

Arduino N° 4 - Beacon CW modulato in BF


 Achille De Santis








Eccoci alla quarta puntata di applicazioni con Arduino.

Questo beacon modula la portante con un segnale fonico (in bassa frequenza).

E', altresì, dotato di due comandi complementari per l'attivazione del PTT del trasmettitore. Si può scegliere l'uno o l'altro, secondo la necessità.

Se la nota modulante è troppo robusta si può attenuare.
E' conveniente inserire un condensatore all'uscita della modulante.
Buon lavoro!




* Questo sketch non è adatto per Arduino DUE!

/*----------------------------- Inizio Programma --------------------------------
 *  Achille De Santis 20-06-2019
 *  Beacon CW  Fonia - IU0EUF.
 *  - 2 linee di uscita per il comando di PTT (complementari)
 *  - 1 linea di uscita per il testo CW_BF
 *  - Testo beacon1:                                    IU0EUF / JN61KL      (da modificare!)
 *  il messaggio di identificazione viene trasmesso ciclicamente in audio Morse ogni 10 minuti;
 *  pin 13 = uscita del testo beacon;
 *  pin 3, 11 = uscite per il comando di PTT,
 *  -------------------------------------------------
*/

// -------------------------------- Parametri ----------------------------------------
#define   pin   13         // Uscita testo beacon sul piedino 13.
#define   ptt1   3         //  Uscita comando ptt1 sul piedino 3.
#define   ptt2  11        // Uscita comando ptt2 ausiliario.

const int TA= 10;          // 10 minuti di pausa
const int freq = 800;     // frequenza della nota di bassa frequenza (audio)
const int T = 100;         // base tempi T.

// ---------------------------- Fine parametri --------------------------------------

const int T2 = 2*T;
const int T3 = 3*T;
const int T4 = 4*T;
const int TS= 60*1000*TA;

void genera(int T1)
    {
       tone(pin, freq);  delay(T1);
       noTone(pin);      delay(T);
    }

void punto()         {genera(T);}
void linea()         {genera(T3);}

void DE()
    {
       linea(); punto(); punto();   delay(T2);                        // D
       punto();                             delay(T4);                        // E
    }

void K()
    {       linea(); punto(); linea(); delay(T4);     }              // K

void CALL()
  {
    // ----------------------- Da modificare -------------------------
    punto(); punto();                                      delay(T2);    // I
    punto(); punto(); linea();                         delay(T2);    // U
    linea(); linea(); linea(); linea(); linea();   delay(T2);    // 0
    punto();                                                    delay(T2);    // E
    punto(); punto(); linea();                         delay(T2);    // U
    punto(); punto(); linea(); punto();           delay(T4);     // F
    // -------------------------------------------------------------------
 }

  void LOCATOR()
  { 
    linea(); punto(); punto(); linea(); punto();  delay(T4);        //   /  (barra!)

    // ------------------- LOCATOR -------------- da Modificare -----------------
    punto(); linea(); linea(); linea();                   delay(T2);     // J
    linea(); punto();                                            delay(T2);     // N
    linea(); punto(); punto(); punto(); punto();  delay(T2);     // 6
    punto(); linea(); linea(); linea(); linea();      delay(T2);     // 1
    linea(); punto(); linea();                               delay(T2);     // K
    punto(); linea(); punto(); punto();                delay(T4);     // L
    // -----------------------------------------------------------------------------------
}

void PORTANTE(boolean p)
  {
    digitalWrite (ptt1, p);                      // ptt1
    digitalWrite (ptt2, !p);                    // ptt2 ausiliario.
    delay(100);
  }

void setup()
{
 // pinMode (pin, OUTPUT);            //Variabile di uscita testo
 pinMode (ptt1, OUTPUT);             //Variabile di uscita 1 PTT
 pinMode (ptt2, OUTPUT);            //Variabile di uscita 2 PTT
}

void loop()
{
    PORTANTE(1);
    DE();
    CALL();
    LOCATOR();
    K();
    PORTANTE(0);
    delay(TS);  // --
}

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

Arduino N°5