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

sabato 10 gennaio 2015

Senso di rotazione.



     /* Due fotointerruttori a forcella affiancati.
        Il fascio di luce viene interrotto da un disco rotante.
        Il senso di rotazione viene stabilito in
        funzione di quale fotodiodo viene illuminato
        per primo.
     */     
      int canaleA=6;
      int canaleB=9;
      int contatore=0;
      boolean avanti;
      boolean indietro;
      boolean memoriaA;
      boolean memoriaB;
      boolean direzione;
       
      void setup()
          { Serial.begin(9600);
            pinMode(6,INPUT);
            pinMode(9,INPUT); }
      
      void loop() {
      
      canaleA=digitalRead(6);
      canaleB=digitalRead(9);
      Serial.print(contatore);
      Serial.print("  Avanti ");
      Serial.print(avanti);
      Serial.print("  indietro ");
      Serial.println(indietro);
                
      if ( canaleB==1 && canaleA==1)
         { direzione=1;
           memoriaA=0;
           memoriaB=0;             }
  
      if ( canaleA==0 && direzione==1)
         { indietro=1;
           avanti=0;
           direzione=0;              }
    
      if ( canaleB==0 && direzione==1)
         { avanti=1;
           indietro=0;
           direzione=0;              }
              
     if ( canaleB==0 && avanti==1 && memoriaA==0)
        { contatore=contatore+1;
          memoriaA=1;                           }
   
     if ( canaleA==0 && indietro==1 && memoriaB==0)
        { contatore=contatore-1;
          memoriaB=1;                             }
       
     
    }//---------FINE LOOP--------------
       

venerdì 21 novembre 2014

ARDUINO ridotto all'essenziale.





Programmate un chip ATMEGA328 fornito di bootlader con una scheda Arduino.
Rimuovete dallo zoccolo di Arduino ed inseritolo nello zoccolo saldato su una piastra millefori.
Aggiunete i due condensatori ed il quarzo.


Sulla stessa base millefori costruite uno o più stadi di uscita a relè.





Ed uno o più stadi di ingresso.Attenzione che lo stato è invertito: quando il diodo led riceve corrente il pin di ingresso di Arduino è LOW.
Un'ingresso analogico sul fotoaccoppiatore non va bene perchè 1,5V servono al diodo per cui la tensione in ingresso su Arduino andrebbe da circa 2V.




venerdì 14 novembre 2014

Maffucci.

La maggiore fonte dei miei sketch.Da visitare.

http://www.maffucci.it/2011/06/29/personalizzazione-dellide-arduino/

sabato 25 ottobre 2014

CRONOMETRO HIGH/LOW



Lo sketch permette di cronometrare il tempo di ON e di OFF di un onda quadra.


   /* Cronómetro modificato, creado por 
      Javier Sirgo Blanco http://zygzax.com/webpcronometro/
      
      Ingresso al pin 2.
      Misura il tempo di ON e di OFF di un segnale ad onda quadra.
      I due tempi si azzerano al reinizio del ciclo.
  */
    
    #include <LiquidCrystal.h>                
   
    # define SET   2
   
    LiquidCrystal lcd(8, 9, 10, 11, 12, 13); 
    int m, mu=0,md=0;                          
    int s, su=0,sd=0;
    int l, lu=0,ld=0,lc=0;
    int  pin2;
    long int tempo,inizio;
         
    void setup()
        
         { pinMode(SET, INPUT);                      
           pin2=LOW;
           lcd.begin(16, 2);                      
           lcd.setCursor(0, 0); 
           lcd.print("ON");         
           lcd.setCursor(5, 0);                  
           lcd.print("00:00:000");                
           lcd.setCursor(0, 1); 
           lcd.print("OFF");         
           lcd.setCursor(5, 1);                  
           lcd.print("00:00:000");
                                }
     
    
    void loop() {
//**************** Tempo in cui il pin 2 è HIGH ********************
      pin2=digitalRead(2);                 
      if ( pin2==HIGH)
         { inizio=millis();                      
         //Cronometra e trasforma in sessagesimali il tempo di ON
           while (pin2==HIGH)
                { tempo=millis()-inizio;            
                  m=(tempo/1000)/60;                 
                  mu=m%10;                           
                  md=(m-mu)/10;                       
                  s=(tempo/1000)%60;                 
                  su=s%10;                          
                  sd=(s-su)/10;                       
                  l=(tempo%1000);                    
                  lu=l%10;                            
                  ld=((l-lu)/10)%10;                  
                  lc=(l-(ld*10)-lu)/100;              
               // Stampa sulla prima riga il tempo di ON
                  lcd.setCursor(5, 0);                
                  lcd.print(md);                      
                  lcd.print(mu);              
                  lcd.print(":");
                  lcd.print(sd);
                  lcd.print(su);
                  lcd.print(":");
                  lcd.print(lc);
                  lcd.print(ld);
                  lcd.print(lu);
                  pin2=digitalRead(SET); } } // Fine sottoprogramma tempo di HIGH
                  
 //**************** Tempo in cui il pin 2 è LOW ********************                 
      pin2=digitalRead(2);                 
      if ( pin2==LOW)
         { inizio=millis();                      
         //Cronometra e trasforma in sessagesimali il tempo di OFF
           while( pin2==LOW)
                { tempo=millis()-inizio;            
                  m=(tempo/1000)/60;                 
                  mu=m%10;                           
                  md=(m-mu)/10;                       
                  s=(tempo/1000)%60;                 
                  su=s%10;                          
                  sd=(s-su)/10;                       
                  l=(tempo%1000);                    
                  lu=l%10;                            
                  ld=((l-lu)/10)%10;                  
                  lc=(l-(ld*10)-lu)/100;              
               // Stampa sulla seconda riga il tempo di OFF
                  lcd.setCursor(5, 1);                
                  lcd.print(md);                      
                  lcd.print(mu);              
                  lcd.print(":");
                  lcd.print(sd);
                  lcd.print(su);
                  lcd.print(":");
                  lcd.print(lc);
                  lcd.print(ld);
                  lcd.print(lu);
                  pin2=digitalRead(SET); }}  // Fine sottoprogramma tempo di LOW                   
                                            
           }//----------Fine Programma

sabato 1 dicembre 2012

Dissolvenza con un diodo Led

// Un led collegato al pin 9
   # define LED 9

   int Luminosita = 0;  
   int Dissolvenza = 5;  

   void setup()  
         {pinMode(LED, OUTPUT);} 

void loop()  { 
        analogWrite(LED, Luminosita);    
        Luminosita = Luminosita + Dissolvenza;
      if (Luminosita == 0 || Luminosita == 255)
         {Dissolvenza = -Dissolvenza ;}     
  
  delay(30);                            
}

Leggi variabile Luminosita.
Luminosita = Lumiosita + Dissolvenza = 5
La Luminosità del led si incrementa a step di 5.
Quando la variabile Luminosita arriva a 255 la variabile Dissolvenza diventa negativa (Dissolvenza = - Dissolvenza) e la luce decrementa. Quando la variabile Luminosita = 0 la variabile Dissolvenza(negativa) viene nuovamente negata diventando positiva ( -5= -5 --->= +5).

giovedì 29 novembre 2012

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.

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.