martedì 23 dicembre 2014

Motori passo passo (stepper ) 3a parte.

  const int buttonAvanti   = 2;
  const int buttonIndietro = 4;

  
  int StateAvanti   = 0;  
  int StateIndietro = 0;  
  
  int motorPin1 = 8;
  int motorPin2 = 9;
  int motorPin3 = 10;
  int motorPin4 = 11;
  int delayTime = 3;
     
   
  void setup()
      { pinMode(motorPin1, OUTPUT);
        pinMode(motorPin2, OUTPUT);
        pinMode(motorPin3, OUTPUT);
        pinMode(motorPin4, OUTPUT); 
        pinMode(buttonAvanti, INPUT);
        pinMode(buttonIndietro, INPUT);  }
       
  void loop() { //----INIZIO LOOP-----
         
       StateAvanti = digitalRead(buttonAvanti);
             if   ( StateAvanti == HIGH)
                  { MotoreAvanti();    } 
   
       
       StateIndietro = digitalRead(buttonIndietro);
             if   ( StateIndietro == HIGH)
                  { MotoreIndietro();    } 

   }//------------------FINE LOOP-------
       
      
      //--------- ROUTINE DI RICHIAMO-----------
   void MotoreAvanti() {
        digitalWrite(motorPin1, HIGH);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
        
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, HIGH);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
        
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, HIGH);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
       
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, HIGH);
        delay(delayTime); }

         //--------- ROUTINE DI RICHIAMO-----------
   void MotoreIndietro() {
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, HIGH);
        delay(delayTime);
        
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, HIGH);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
        
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, HIGH);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
       
        digitalWrite(motorPin1, HIGH);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime); }  

   
   }

lunedì 22 dicembre 2014

Motori passo passo (stepper ) 2a parte.




      #include <Stepper.h>
      
      const int StepMotore = 10;  
      Stepper   Motore(StepMotore, 8,9,10,11);            
      int       Velocita          = 200;
      long      ValueImposta     = 5;
      byte      contaImpulsi     = 0;
      int       ValueConta       = 0;
     
      void setup()
          
          { Motore.setSpeed(Velocita);
            Serial.begin(9600);        }
      
      void loop() {
        
        contaImpulsi = contaImpulsi + 1;
        Serial.println(contaImpulsi);
        Motore.step(StepMotore);
        if ( ValueImposta == contaImpulsi)
           { contaImpulsi=0;  
              delay(5000);     }
   
        delay(100);
   
   
      }

venerdì 19 dicembre 2014

Motori passo passo (stepper) 1a parte.

http://www.mauroalfieri.it/i


      /* Stepper Copal
       * -------------
       *
       * Program to drive a stepper motor coming from a 5'25 disk drive
       * according to the documentation I found, this stepper: "[...] motor
       * made by Copal Electronics, with 1.8 degrees per step and 96 ohms
       * per winding, with center taps brought out to separate leads [...]"
       * [http://www.cs.uiowa.edu/~jones/step/example.html]
       *
       *
       * Blu     ---> pin 16 di ULN2003AN
       * Viola   ---> pin 15 di ULN2003AN
       * Giallo  ---> pin 14 di ULN2003AN
       * Arancio ---> pin 13 di ULN2003AN
       * Rosso   ---> pin 9 di ULN2003AN --->(+Vcc)
       *
       * Blu     ---> pin  8 di Arduino
       * Viola   ---> pin  9 di Arduino
       * Giallo  ---> pin 10 di Arduino
       * Arancio ---> pin 11 di Arduino
       * 
       *
       * pin 9 di ULN2003AN ---> +Vcc
       * pin 8 di ULN2003AN ___> GND
       
       
       * (cleft) 2005 DojoDave for K3
       * http://www.0j0.org | http://arduino.berlios.de
       *
       * @author: David Cuartielles
       * @date: 20 Oct. 2005
       */
       
      int motorPin1 = 8;
      int motorPin2 = 9;
      int motorPin3 = 10;
      int motorPin4 = 11;
      int delayTime = 500;
       
      void setup()
           { pinMode(motorPin1, OUTPUT);
             pinMode(motorPin2, OUTPUT);
             pinMode(motorPin3, OUTPUT);
             pinMode(motorPin4, OUTPUT); }
       
      void loop() {
        
        digitalWrite(motorPin1, HIGH);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
        
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, HIGH);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
        
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, HIGH);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
       
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, HIGH);
        delay(delayTime);
     
   
  }

domenica 14 dicembre 2014

TRASMISSIONE I2C - 3a parte


ARDUINO MASTER SLAVE
    
    //MASTER
    #include <Wire.h>
   
    #define ADDRESS1 2
   
    #define LED1  8
    #define LED2  9
    #define LED3 10
    #define LED4 11  
    
    int NumByte = 1;
  
    void setup()
       
        { Wire.begin();        
          pinMode (LED1,OUTPUT);
          pinMode (LED2,OUTPUT);
          pinMode (LED3,OUTPUT);
          pinMode (LED4,OUTPUT); }
  
    void loop()  {
    

      Wire.requestFrom(ADDRESS1,NumByte); 
      char c = Wire.read(); 
      
      //Se la stringa in rx è a accendo LED1
      String a = "";
      a = a + c;
      delay (100);
      if ( a == "a")
         { digitalWrite(LED1, HIGH); }
      else
         { digitalWrite(LED1, LOW); }
      delay(10);
   
      //Se la stringa in rx è b accendo LED2
     String b = "";
     b = b + c;
      delay (100);
      if ( b == "b")
      { digitalWrite(LED2, HIGH); }
      else
         { digitalWrite(LED2, LOW); }
      delay(10);
   
     //Se la stringa in rx è g accendo LED3
      String g = "";
      g = g + c;
      if ( g == "c")
         { digitalWrite(LED3, HIGH); }
      else
         { digitalWrite(LED3, LOW); }
      delay(10);
   
    //Se la stringa in rx è da accendo LED4
    String d = "";
     d = d + c;
      delay (100);
      if ( d == "d")
         { digitalWrite(LED4, HIGH); }
      else
         { digitalWrite(LED4, LOW); }
      delay(10);
 
  }




ARDUINO SLAVE CODE

    //  SLAVE VERONA
    #include <Wire.h>
    #define ADDRESS 2
    
    #define SWITCH1 2
    #define SWITCH2 3
    #define SWITCH3 4
    #define SWITCH4 5
    
    void setup()
   
        { pinMode(SWITCH1, INPUT);
          pinMode(SWITCH2, INPUT);
          pinMode(SWITCH3, INPUT);
          pinMode(SWITCH4, INPUT);
          Wire.begin(ADDRESS);     
          Wire.onRequest(requestEvent);  }
   
    void loop(){
         delay(100);
         }
   
    void requestEvent() {
      
      if ( digitalRead(SWITCH1) == HIGH)
         { Wire.write("a");     }
   
      if ( digitalRead(SWITCH2) == HIGH)
         { Wire.write("b");     }
  
      if ( digitalRead(SWITCH3) == HIGH)
         { Wire.write("c");     }
   
      if ( digitalRead(SWITCH4) == HIGH)
         { Wire.write("d");     }

}


TRASMISSIONE I2C - 2a parte


La pressione del tasto su Arduino Slave determina l'accensione del led su Arduino Master

ARDUINO MASTER CODE

    //MASTER
    #include <Wire.h>
   
    #define ADDRESS1 2
   
    #define LED1 8
   
    int NumByte = 1;
  
    void setup()
       
        { Wire.begin();        
          pinMode (LED1,OUTPUT); }
  
    void loop()  {
    

      Wire.requestFrom(ADDRESS1,NumByte); 
      String b = "";
      char c = Wire.read(); 
      b = b + c;
      delay (100);
      if ( b == "a")
         { digitalWrite(LED1, HIGH); }
      else
         { digitalWrite(LED1, LOW); }
      delay(10);
    }




ARDUINO SLAVE CODE
    //  SLAVE VERONA
    #include <Wire.h>
    #define ADDRESS 2
    # define SWITCH 2
   
    void setup()
   
        { pinMode(SWITCH, INPUT);
          Wire.begin(ADDRESS);     
          Wire.onRequest(requestEvent);  }
   
    void loop(){
         delay(100);
         }
   
    void requestEvent() {
      
      if ( digitalRead(SWITCH) == HIGH)
         { Wire.write("a");     }
      else
         { Wire.write("s"); }
   
  }


TRASMISSIONE I2C 1a parte


Premendo il pulsante (aggiungere una R da 10Kohm verso GND) su Arduino SLAVE viene trasmessa ad Arduino Master (aprire l'IDE) l'informazione "acceso" o "spento".

Gli Arduino includono la libreria Wire.h, comunicano sull'indirizzo 2 e trasmettono 6 byte.

ARDUINO MASTER CODE


      #include <Wire.h>
      #define ADDRESS 2  
      
      int NumByte =6; 
 
      void setup()
               {  Wire.begin(); 
                 Serial.begin(9600); }
      
      void loop() {
        
        Wire.requestFrom(ADDRESS, NumByte);  
        while(Wire.available())    
             {char c = Wire.read(); 
              Serial.print(c); }
       
       delay(200);
        
      }



ARDUINO SLAVE CODE

      #include <Wire.h>
      #define ADDRESS 2
      #define SWITCH  2
      

      void setup()
            { pinMode(SWITCH, INPUT);
              Wire.begin(ADDRESS);              
              Wire.onRequest(rEvent); }
      
       
      
      void loop()
      
           { delay(10); }
      
            void rEvent()
                {if (digitalRead(SWITCH) == HIGH)
                    { Wire.write("acceso");        }
                 else
                   {Wire.write("spento"); } }
      
       

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);
 
      }

martedì 9 dicembre 2014

Fronte di discesa



      # define SWITCH1 2
      # define LED1    8
     
      int buttonPin  = 2;     
      int ledPin     = 8;   
      int buttonState      = 0;    
      int lastButtonState  = 0;    
      int ledState         = 0;     
      
      void setup() 
          { pinMode(buttonPin, INPUT);  
            pinMode(ledPin, OUTPUT); }
       
      void loop() {
   
      buttonState = digitalRead(SWITCH1);
         if ( buttonState != lastButtonState)
            { if ( buttonState == 0) 
                 { if( ledState==0 )
                       ledState=1;
                   else ledState=0;   }
             lastButtonState = buttonState;}
      digitalWrite(LED1, ledState);
        delay(20);
      }

Fronte di salita


      # define SWITCH1 2
      # define LED1    8
     
      int buttonPin  = 2;     
      int ledPin     = 8;   
      int buttonState      = 0;    
      int lastButtonState  = 0;    
      int ledState         = 0;     
      
      void setup() 
          { pinMode(buttonPin, INPUT);  
            pinMode(ledPin, OUTPUT); }
       
      void loop() {
   
      buttonState = digitalRead(SWITCH1);
         if ( buttonState != lastButtonState)
            { if ( buttonState == 1) 
                 { if( ledState==1 )
                       ledState=0;
                   else ledState=1;   }
             lastButtonState = buttonState;}
      digitalWrite(LED1, ledState);
        delay(20);
      }

venerdì 5 dicembre 2014

ATtiny85 - terza parte

PASSO 7
Caricare lo sketch rammmentadosi che non tutte le istruzioni di Arduino Uno vengono accettate, della piedinatura del chip e della non eccessiva memoria dell'ATtiny.
Non confondere il pin del chip con la porta.

Sketch di prova:blink

     /* Piedinatura di ATtiny85
         PB0 (0) = pin 5 tested
         PB1 (1) = pin 6 tested
         PB2 (2) = pin 7 tested
         PB3 (3) = pin 2 tested
         PB4 (4) = pin 3 tested (mio led)
         PB5 (5) = pin 1 non riuscito.Forse perchè è anche RESET?
         
      */

      # define LED 4
      void setup()
          
          { pinMode(LED, OUTPUT);}
       
      void loop() {
     
        digitalWrite(LED, HIGH);
        delay(300);
        digitalWrite(LED, LOW);
        delay(300);
      
      }


Sketch di prova: ATtiny85 lancia un S.O.S.



      #define  LED  4 // PB4 pin 3 di ATtiny
      #define  BUT  3 // PB3 pin 2 di ATtiny

      int buttonState = 0;

      void setup()
                 { pinMode(LED, OUTPUT); 
                   pinMode(BUT, INPUT);  }
      
      void loop(){

        buttonState = digitalRead(BUT);
        if ( buttonState == HIGH)
           { digitalWrite(LED, HIGH);
             delay(400);
             digitalWrite(LED, LOW);
             delay(200);             
             digitalWrite(LED, HIGH);
             delay(400);
             digitalWrite(LED, LOW);
             delay(200);  
             digitalWrite(LED, HIGH);
             delay(400);
             digitalWrite(LED, LOW);
             delay(500); 
         
             digitalWrite(LED, HIGH);
             delay(200);
             digitalWrite(LED, LOW);
             delay(200);             
             digitalWrite(LED, HIGH);
             delay(200);
             digitalWrite(LED, LOW);
             delay(200);      
             digitalWrite(LED, HIGH);
             delay(200);
             digitalWrite(LED, LOW);
             delay(500);

             digitalWrite(LED, HIGH);
             delay(400);
             digitalWrite(LED, LOW);
             delay(200);             
             digitalWrite(LED, HIGH);
             delay(400);
             digitalWrite(LED, LOW);
             delay(200);  
             digitalWrite(LED, HIGH);
             delay(400);
             digitalWrite(LED, LOW);
             delay(1200); } 
 
      }

ATtiny85 - seconda parte

PROCEDURA:
Passo 1:

Controllate il tipo di ARDUINO in uso.


Passo2:
Caricando lo sketch ISP ARDUINO UNO diventa un programmatore ISP.

Passo3:
Fare i dovuti collegamenti fra ARDUINO UNO ed il chip ATTiny, mettere un condensatore elettolitico da 47 yF fra il pin RESET di Arduino e GND.

Passo 4:
Specificare che Arduino è ora un programmatore ISP.

PASSO 5 e PASSO 6:
Selezionare il chip ATtiny e la relativa frequenza.
Scrivere il booloader.



ATtiny85 - prima parte


Criterio generale:
Si crea un'apposita cartella affinchè il software includa oltre alla famiglia Arduino anche quella degli ATtiny.
Arduino diventa poi un programmatore ISP.

Arduino diventa un programmatore tipo ISP:
• caricando lo sketch ARDUINO ISP
• selezionando la voce ARDUINO as ISP

Si collega ATtiny e:
• si specifica il tipo e la frequenza
• si carica il Bootloader
• si carica lo sketch

Tipo di Arduino : ARDUINO UNO
Software : 1.0.5-r2

Tipo di ATtiny : ATtiny85
f. selezionata : ATtiny85 1 MHz internal oscillator BOD disabled.

file di supporto : arduino-tiny-0100-0012.

sketch di prova1 : Blink
sketch di prova2 : messaggio di SOS

NOTE:
• Importante è il condensatore elettrolitico da 47 yF fra il pin RESET di Arduino e GND.
• Ricordarsi che ARDUINO funge da piattaforma ARDUINO oppure da programmatore ISP.
• Questo fatto è ingannevole nel proseguo delle esperienze.
• Ignorare tutti i messaggi di errore di Arduino.


lunedì 1 dicembre 2014

Blink regolabile

# define LEDA 2
# define LEDB 3
# define POT A0

int ledStateA = LOW;  
int ledStateB = LOW; 

long pMillisA = 0;  
long pMillisB = 0;  

long pausa = 0;

void setup()
    { pinMode (POT, INPUT);
      pinMode(LEDA, OUTPUT);
      pinMode(LEDB, OUTPUT); }

void loop(){

  pausa = analogRead(POT);
  
  unsigned long cMillisA = millis();
  
  if( cMillisA - pMillisA > (pausa + 50))
    { pMillisA = cMillisA;   
      if ( ledStateA== LOW)
           ledStateA = HIGH;
           else
              ledStateA = LOW;
              digitalWrite(LEDA, ledStateA);}
 
              
 unsigned long cMillisB = millis();
 
  if( cMillisB - pMillisB > ( pausa + 275) )
    { pMillisB = cMillisB;   
      if ( ledStateB == LOW)
           ledStateB = HIGH;
           else
              ledStateB = LOW;
              digitalWrite(LEDB, ledStateB);}
}


Blink regolabile (delay).



# define Sensore A0
# define LED1 2
# define LED2 3

int tempo = 0;


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

   void loop(){
       
       tempo = analogRead(Sensore);
       digitalWrite (LED1,HIGH);        
       delay(tempo *0.5 );
       digitalWrite (LED1,LOW);  
       digitalWrite (LED2,HIGH);        
       delay(tempo*2);
       digitalWrite (LED2,LOW);  
       delay(tempo);
        }