Visualizzazione post con etichetta Analogico. Mostra tutti i post
Visualizzazione post con etichetta Analogico. Mostra tutti i post

giovedì 11 dicembre 2014

Inseguitore solare 3


    /* VEDI LO SKETCH RIGINALE SU
       * Inseguitore solare - prima parte
       *
       * Autore: Mauro Alfieri
       * web: www.mauroalfieri.it
       * Tw: @mauroalfieri.it
       *
       */
       
      #include <Servo.h>
      
      #define FOTO     A0 
      #define MOTORE    8
     
      int sensorPin   = 0;
      int servoPin    = 0;
       
      int sensorValue = 0;
      int servoGrad   = 90;
       
      Servo myservo;
       
      void setup()
          { pinMode( FOTO, INPUT);
            myservo.attach( MOTORE );
            myservo.write( servoGrad ); }
       
      void loop() {
        
        sensorValue = analogRead(FOTO);
        
        if ( sensorValue < (512) )
           { if ( servoGrad < 180) 
                { servoGrad++;    }}
       
        if ( sensorValue > (512) )
           { if ( servoGrad > 0) 
                { servoGrad--;    }}
       
        myservo.write( servoGrad );
       
        delay(100);
      }

Inseguitore solare 2



 
      # define MOTORE    8
      # define FOTOuno  A0
      # define FOTOdue  A1
     
      #include <Servo.h>

        
      Servo myservo;
      int Value        = 0;
      int Centrato     =90;
      int sensorValue1 = 0;
      int sensorValue2 = 0;  
    
      void setup() 
          { pinMode (MOTORE, OUTPUT);
            pinMode (FOTOuno, INPUT);
            pinMode (FOTOdue, INPUT);
            myservo.attach(MOTORE); 
            Serial.begin(9600); }
       
      void loop() {
     
        int sensorValue = analogRead(FOTOuno);   
        int sensorValue2 = analogRead(FOTOdue);  
         
        Value=(sensorValue-sensorValue2)/10; 
   
          if   (Value==0) myservo.detach();//scollega MOTORE
          else myservo.attach(MOTORE);
            
          if ( Value>10 )
             { Value=10;}
         
          if ( Value<-10 )
             { Value=-10;}
        Serial.println(Value);  
        myservo.write(Centrato+Value);
    
        delay(15);
      
      }

mercoledì 10 dicembre 2014

Inseguitore solare 1/bis



Si aggiunge un servo e la relativa libreria.

     
      #include <Servo.h>
      # define POT       A0
      # define MOTORE     9
     
      int sensorValue = 0;
      int Value = 0;
      
      Servo myservo; 
        
      void setup() 
         
          { myservo.attach(MOTORE);
            pinMode(POT, INPUT);   
            Serial.begin(9600);   }
       
      void loop() {
        
        int sensorValue = analogRead(POT); 
        Value=map (sensorValue, 0, 1023, 0, 179); 
        myservo.write(Value);   
        delay(15);
 
      }


Sostituire il potenziometro con due fotoresistenze uguali e montate in opposizione sul servo. Quando entrambe le fotoresistenze riceveranno la stessa luce il servo sarà allineato.




Inseguitore solare 1


Collegare il centrale di un potenziometro ad AO e seguire le istruzioni sull'IDE di Arduino


      # define POT       A0
    
      int sensorValue1 = 0;
      int Value = 0;
   
        
      void setup() 
         
          { pinMode(POT, INPUT);   
            Serial.begin(9600);   }
       
      void loop() {
        
        int sensorValue = analogRead(POT); 
        Value=map (sensorValue, 0, 1023, 0, 179);     
            if ( Value==90) 
               { Serial.println (" CENTRATO");}
         
            if ( Value>90)
               { Serial.println ("Ruota a Sx");}
               
            if ( Value<90) 
               { Serial.println ("Ruota a Dx");}
  
        Serial.println(Value); 

         
        delay(500);
 
      }

lunedì 4 agosto 2014

Switch Case


 # define Sensore A0
   
   int ValoreSensore = 0;
   
   void setup() 
       { pinMode (Sensore,INPUT);
         Serial.begin(9600);}

   void loop(){
       
       ValoreSensore = analogRead(Sensore);
       
       ValoreSensore = map(ValoreSensore, 0, 1023, 0, 3);
       Serial.print("Lettura:   ");
       Serial.println(ValoreSensore);
      
       switch (ValoreSensore)
              { case 0:    
                Serial.println("Genova");
                break;
                case 1:   
                Serial.println("Palermo");
                break;
                case 2:    
                Serial.println("Venezia");
                break;
                case 3:    
                Serial.println("Napoli");
                break;                       } 

       delay(1000);
        }



Serial Read

/* 
Serial.flush();  svuota il buffer di ricezione seriale
Serial.available() >0) // buffer di ricezione > 0

*/
    #define LED 6  
   
    byte rx = 0;    
     
    void setup()
    	 { pinMode(LED, OUTPUT); 
           Serial.begin(9600);     	  
    	   Serial.flush(); }
     
    void loop() {
 
      if (Serial.available() >0) 
    	 { rx = Serial.read(); 
    	   Serial.flush(); 
           switch (rx) 
                {case 'a':    
                 digitalWrite(LED, HIGH);
                 break;
                 
                 case 'b':    
                 digitalWrite(LED, LOW);
                 break; }}
    	}

domenica 3 agosto 2014

Sensore analogico

Collegare un potenziometro da 47K fra +Vcc e GND.Il perno centrale su A0. Esso simulerà un qualunque sensore analogico.

 # define Sensore A0
   
   int ValoreSensore = 0;
   
   void setup() 
       { pinMode (Sensore,INPUT);
         Serial.begin(9600);}

   void loop(){
       
       ValoreSensore = analogRead(Sensore);
  
       Serial.print("Lettura:   ");
       Serial.println(ValoreSensore);
       
       delay(1000);
        }


map()
Il valore in ingresso varia da 0 a +5Vcc. Arduino lo elabora come un valore 0 -1023.
Con l'istruzione map questo valore viene rimappato avendo come limiti 20 e 200 (o altri valori. Quando la tensione in ingresso è zero la lettura sarà 20,quando è invece +5V sarà 200.

 # define Sensore A0
   
   int ValoreSensore = 0;
   
   void setup() 
       { pinMode (Sensore,INPUT);
         Serial.begin(9600);}

   void loop(){
       
       ValoreSensore = analogRead(Sensore);
       
       ValoreSensore = map(ValoreSensore, 0, 1023, 20, 200);
       Serial.print("Lettura:   ");
       Serial.println(ValoreSensore);
       
       delay(1000);
        }


lunedì 3 dicembre 2012

AnalogIN AnalogOUT

   # define SENSORE  A0
   # define LED      9

   int SensorValue = 0;       
   int outputValue = 0;   

   void setup() 
       { pinMode(SENSORE, INPUT); 
         pinMode(LED, OUTPUT);
         Serial.begin(9600);}

   void loop() {
       
        SensorValue = analogRead(SENSORE);            
       outputValue = map(SensorValue, 0, 1023, 0, 255);  
       analogWrite(LED, outputValue);           
       Serial.print("sensor = " );                       
       Serial.print(SensorValue);      
       Serial.print("\t output = ");      
       Serial.println(outputValue);   
       delay(1000);                     
}

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.