venerdì 30 novembre 2012

Incrementa

 # define TASTOQ   7
 # define LED1     8
 # define RELE     9
 int  ValueQ     = 0;
 long Tempo1     = 0;
 long Tempo2     = 50; 
 int  ValueCombQ =20;

 void setup() 
     { pinMode(TASTOQ,INPUT );
       pinMode(LED1,  OUTPUT);
       pinMode(RELE,  OUTPUT);  
       Serial.begin(9600);    }

 void loop() {
//********** TASTO Q  ***************** 
  int StatoTastoQ;             
  int StatoTastoQa = LOW;  
  int valoreTastoQ = digitalRead(TASTOQ);
//-------- ANTIRIMBALZO-----------
  if (valoreTastoQ != StatoTastoQa)
     {Tempo1 = millis();} 
  if ((millis() - Tempo1) > Tempo2)
      {StatoTastoQ = valoreTastoQ;}
             StatoTastoQa = valoreTastoQ;
             
             
//--------INIZIO ESECUZIONE ------------  

  if (valoreTastoQ == HIGH)
       {digitalWrite(LED1, HIGH);
        delay (75);
        digitalWrite(LED1, LOW);
        ValueQ = (ValueQ + 1);
        Serial.print("APRI ");  
        Serial.println(ValueQ);
        delay (350);   }
  
  if (ValueQ == ValueCombQ)
          { digitalWrite(RELE, HIGH);
            Serial.println(ValueQ);
            delay (350); }
  else    { delay (350);  } 
}



Pigiando il tasto il led si accende per una frazione di secondo ad indicare l'avvenuta pressione, il relè si ecciterà dopo aver premuto 20 volte il pulsante.

giovedì 29 novembre 2012

Laboratorio Digitale




Economico laboratorio digitale di elettronica e per Arduino.
Un commutatore dispone l'alimentazione a 12 Vcc, tipica tensione per circuiti elettronici oppure su +5Vcc per Arduino.
Ai morsetti si hanno disponibili: Motori, potenziometri, led driver NPN ed PNP, altoparlante, buzzer, oscillatore onda quadra, sinusoidale, pulsanti antirimbazlo NA, senza antirimbalzo, deviatori GND/+Vcc....il tutto con materiali di recupero.




Temporizzatore con delay comandato da pulsante.

 
 
/* Premre il pulsante per qualche attimo.
Il relè rimarra acceso per 10 secondi */

# define TASTO1 7
# define LED1   8

int Stato1 = 0;    

void setup() 
{ pinMode(LED1, OUTPUT);      
  pinMode(TASTO1, INPUT);}

void loop(){

  Stato1 = digitalRead(TASTO1);

  if (Stato1 == HIGH)
  { digitalWrite(LED1, HIGH);  
    delay(10000);} 
  else {digitalWrite(LED1, LOW);}
}

Relè passo passo.


/* Rele passo-passo. Un impulso accedne,
l'impulso successivo spegne.*/

  # define TASTOQ  7
  # define LED1    8
  
  int  ValueQ     =  0;
  long Tempo1     =  0;
  long Tempo2     = 50; 
  int  ValueCombQ =  5;

 void setup() 
     { pinMode(TASTOQ,INPUT );
       pinMode(LED1,  OUTPUT);}

 void loop() {
//********** TASTO Q  ***************** 

    int valoreTastoQ = digitalRead(TASTOQ);
    
//-------- ANTIRIMBALZO------------------
      int StatoTastoQ;             
      int StatoTastoQa = LOW;  
      if (valoreTastoQ != StatoTastoQa)
         {Tempo1 = millis();} 
      if ((millis() - Tempo1) > Tempo2)
          {StatoTastoQ = valoreTastoQ;}
           StatoTastoQa = valoreTastoQ;/////
//-------- FINE ANTIRIMBALZO------------------
//--------INIZIO ESECUZIONE ------------  

   if (valoreTastoQ == HIGH)
       {ValueQ = (1 - ValueQ );}
        
      if   (ValueQ == 1)
           {digitalWrite(LED1, HIGH);}
      else {digitalWrite(LED1, LOW);}
      delay (350); 
      //----------FINE ESECUZIONE--------     
    
      
        
 
}

Set Reset


  # define TASTOSET   6
  # define TASTORESET   7
  # define RELE       8

  int ValueRELE    =  0;

 void setup() 
     { pinMode(TASTOSET,  INPUT );
       pinMode(TASTORESET,  INPUT );
       pinMode(RELE,      OUTPUT);
       Serial.begin(9600);  }

 void loop() {
//********** TASTO SET  ******************** 
      int valoreTastoSET = digitalRead(TASTOSET);

      if (valoreTastoSET == HIGH)
         {digitalWrite(RELE, HIGH);}
   
//********** TASTO RESET  ******************** 
      int valoreTastoRESET = digitalRead(TASTORESET);

      if (valoreTastoRESET == HIGH)
         {digitalWrite(RELE, LOW);}
    }

Auoritenuta


  # define TASTOSET   6
  # define RELE        8

  int ValueRELE    =  0;

 void setup() 
     { pinMode(TASTOSET,  INPUT );
       pinMode(RELE,      OUTPUT);
       Serial.begin(9600);  }

 void loop() {
//********** TASTO SET  ******************** 
      int valoreTastoSET = digitalRead(TASTOSET);

      if (valoreTastoSET == HIGH)
          {(ValueRELE =1);}
      if (ValueRELE == 1)
           {digitalWrite(RELE, HIGH);}
            
      delay (350); 
}

Alla pressione del pulsante il led si accende e rimane acceso.

Antirimbalzo


# define TASTO1 7
# define LED1 8

int statoLed1 = HIGH;        
int StatoTasto1;             
int StatoTasto2 = LOW;   

long Tempo1 = 0;
long Tempo2 = 50;    

void setup() 
     { pinMode(TASTO1, INPUT);
       pinMode(LED1, OUTPUT); }

void loop() {
//--------- LETTURA TASTO 1 -------------- 
  int valoreTasto1 = digitalRead(TASTO1);
//-------- ANTIRIMBALZO-----------
  if (valoreTasto1 != StatoTasto2)
     {Tempo1 = millis();} 
  if ((millis() - Tempo1) > Tempo2)
      {StatoTasto1 = valoreTasto1;}
      StatoTasto2 = valoreTasto1;
//--------INIZIO ESECUZIONE ------------      
       digitalWrite(LED1, StatoTasto1);
     
//----------FINE ESECUZIONE--------       
       
     }



Lo sketch presente all'interno dell'IDE di Arduino
Esempi--> Digital---> Debounce.

martedì 6 novembre 2012

Confronto fra due dati analogici - 2


# define Ventola  13
# define SensoreTemp  A0
# define Potenz  A1

long ValTemp = 0;
long ValPotenz = 0;

void setup()  { 
  pinMode(SensoreTemp, INPUT);
   pinMode(Potenz, INPUT);    
   pinMode(Ventola, OUTPUT);
   Serial.begin(9600);
 } 
 
void loop()
{ 
  ValTemp =analogRead(SensoreTemp);
  ValPotenz = analogRead(Potenz);
  
  Serial.print("Temperatura: ");
  Serial.println(ValTemp);
  Serial.print("Potenziometro:");
  Serial.println(ValPotenz);

    if (ValTemp >= ValPotenz) { 
    digitalWrite(Ventola, HIGH); 
  }
    else
    { 
    digitalWrite(Ventola, LOW);
  }  

  delay(2000);
}



lunedì 5 novembre 2012

Confronto fra due dati analogici - 1


 
# define FOTORES  A0    
# define RELE 2  

long Luce = 450;
long Val = 0;



void setup()  
{ 
  pinMode(RELE, OUTPUT);  
  pinMode(FOTORES, INPUT);
Serial.begin(9600);  
 } 
 

void loop()
{
  Val=analogRead(FOTORES);
  Serial.print("Fotoresistenza: ");
  Serial.println(Val);
  Serial.print("Taratura:");
  Serial.println(Luce);

    if (Val<=Luce)
  {
    digitalWrite(RELE,HIGH);
  }
  else
  {
    digitalWrite(RELE,LOW);
  }
  delay(2000);
}



domenica 4 novembre 2012

Elaborazione di un valore analogico


Il valore letto in byte (0 – 1023) può essere trasformato in qualunque valore decimale.

Supponiamo ora che il nostro potenziometro sia un sensore di temperatura con un range che va da 0°C a 100 °C, ovvero che ha in uscita un valore di 0V quando la temperatura è di 0°C e di 5V quando la temperatura è di 100°C. Essendo un dispositvo lineare quando la temperatura sarà di 50°C avrà in uscita una tensione di 2.5V e se di 25 °C una tensione di 1.25V.
Possiamo di già prepare una tabella ad hoc:


Il rapporto fra la temperatuira in gradi Celsius ed il valore di OUT è di 0.097752 .

long ValTemp = 0 ‘ valore da 0 a 1023
long ValTempC = ValTemp * 0.097752 gradi Celsius

e con le apposite formule ottenere altre scale di temperatura.

ValTemp * 0.097752 + 273.15 gradi Kelvin
ValTemp * 0.097752 * 1,8 + 32 gradi Fahrenait
ValTemp * 0.097752 * 0.8 gradi Reamur


Lo sketch.


#define SensoreTemp A0  

long ValTemp = 0;

void setup()  
{ 
   pinMode(SensoreTemp, INPUT);    
   Serial.begin(9600);
 } 
 
void loop()
{
  ValTemp=analogRead(SensoreTemp);
  
  Serial.print("Gradi Celsius   ");
  Serial.println(ValTemp * 0.09752);
  delay(2000);

  Serial.print("Gradi Kelvin   ");
  Serial.println(ValTemp * 0.09752 + 273.15);
  delay(2000);
  
  Serial.print("Gradi Fahrenait   ");
  Serial.println(ValTemp * 0.09752 *1.8 + 32);
  delay(2000); 
  
   Serial.print("Gradi Reamur   ");
   Serial.println(ValTemp * 0.09752 * 0.8);
   delay(2000);
  
   Serial.print("Gradi Rankine   ");
   Serial.println(ValTemp * 0.09752 * 1.8 + 491.67);
   delay(2000);
   
   Serial.print("Gradi Newton   ");
   Serial.println(ValTemp * 0.09752 * 0.33);
   delay(2000);
  }



Conclusioni :
Il valore analogico letto va opportunatamente elaborato.


venerdì 2 novembre 2012

Elaborazione di un segnale digitale 2a

La condizione logica del pin 2 viene acquisita ed elaborata tramite la condizione IF

    
      # define Sensore 2
      # define LED     7
      
      int StatoSensore= 0;
      
      void setup() 
          { pinMode (Sensore, INPUT); 
            pinMode (LED, OUTPUT);  
            digitalWrite(Sensore, HIGH);
            digitalWrite(LED, LOW); 
            Serial.begin (9600);  }
            
      void loop() {
       
           StatoSensore = digitalRead (Sensore);
           Serial.println("\n");
           if (StatoSensore == LOW) 
              { digitalWrite(LED, HIGH); 
                Serial.print ("Attenzione Ostacolo ");} 
           
           else 
              {digitalWrite(LED, LOW);
               Serial.print ("Nessun Ostacolo ");}
                  
           delay (500); 
      }

Elaborazione di un segnale digitale 1a



Gli shield che elaborano segnali digitali hanno 3 piedini: +5V; OUT;GND.
L'uscita OUT può essere HIGH (+5V) o LOW (0V) invertendo tale valore quando viene acquisita l'informazione: un ostacolo, la presenza di calore umano,un rumore...
Lo scketch è sostanzialemnte uguale per tutti e non prevede alcuna libreria.


giovedì 1 novembre 2012

Partitore di tensione.

Il partitore di tensione si usa er i componenti passivi lineari. Esso è composto dalla resistenza variabile in funzione del parametro da misurare in serie ad una resistenza di valore fisso appositamente calcolata.


Calcolo della resistenza Rx da porre in serie ad una fotoresistenza.
Il valore della fotoresistenza è stato misurato al buio FR(min)= 140 ohm e sotto una lampada FR(max)= 320.000 ohm. Usando il circuito del paragrafo 4 possiamo scegliere a quale luminosità eccitare un relè.

Il range di lettura andrà quindi da 0 a (1023 : 5 * 4.89)= 1000

Crepuscolare.
Allo sketch di base basta aggiunge la condizione IF:
Se il valore di A0 è maggiore di A1 accendi il pin12 = HIGH.




IF ELSE 2




   # define PIN3   3     
   # define PIN4   4  
   # define PIN5   5     
   # define PIN6   6  
   # define PIN7   7  
   
   int valorePin3       = 0;
   int valorePin4       = 0;
   int valorePin5       = 0;
   int valorePin6       = 0;
   int valorePin7       = 0;
   
 void setup()  
   {pinMode(PIN3, INPUT);
    pinMode(PIN4, INPUT);
    pinMode(PIN5, INPUT);
    pinMode(PIN6, INPUT);
    pinMode(PIN7, INPUT);
    Serial.begin(9600)  ;} 
    
 void loop() {
    valorePin3  = digitalRead(PIN3);
if (valorePin3 == HIGH ) 
   {Serial.print("PIN3HIGH");
    Serial.println();
    delay (2000); 
    valorePin4  = digitalRead(PIN4);
  if (valorePin4 == HIGH )                
     {Serial.print("PIN4HIGH");
     Serial.println();
     delay (2000); 
     valorePin5  = digitalRead(PIN5);
    if (valorePin5 == HIGH )                
       {Serial.print("PIN5HIGH");
        Serial.println();
        delay (2000);   
        valorePin6  = digitalRead(PIN6);
          if   (valorePin6 == HIGH )                
               {Serial.print("PIN6HIGH");
                Serial.println();
                delay (2000); }}
          
          else {Serial.print("PIN5LOW"); 
                Serial.println();
                delay (2000);
                valorePin7  = digitalRead(PIN7);
              if   (valorePin7 == HIGH )                
                   {Serial.print("PIN7HIGH");
                    Serial.println(); }
              else {Serial.print("PIN7LOW");
                   Serial.println(); }}}}              
                   
else {Serial.print("PIN3LOW");
      Serial.println(); 
      delay (2000);  }     
    }  
   
   
   

IF ELSE 1


   # define PIN3   3     
   # define PIN4   4  

   int valorePin3       = 0;
   int valorePin4       = 0;

   
 void setup()  
   {pinMode(PIN3, INPUT);
    pinMode(PIN4, INPUT);
    Serial.begin(9600)  ;} 
    
 void loop() {
  valorePin3  = digitalRead(PIN3);

   if   (valorePin3 == HIGH )                
       { Serial.print("   PIN3HIGH   ");
          delay (5000);                 
          valorePin4  = digitalRead(PIN4); 
           if   (valorePin4 == HIGH )                
                { Serial.print("   PIN4HIGH   ");
                  delay (5000); }  
           else { Serial.print("   PIN4LOW   ");
                  delay (5000); }} 
 
   else { Serial.print("   PIN3LOW   ");
          delay (5000); }        
 }
                
                
 
 

Librerie di Arduino

1a) La sottorectory delle librerie.

La sottodirectory in cui posizionare le librerie che si elaborano o si trovano.

1b) I file di una libreria specifica.

I file di una libreria. La sottodirectory example non è determinante.

1c) Inserimento delle librerie all’interno dello sketch.
Lo sketch inizia sempre con l’inserimento delle librerie.
NOTA: esistono diverse versioni di una medesima libreria.






Struttura di uno sketch