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); } }
martedì 23 dicembre 2014
Motori passo passo (stepper ) 3a parte.
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
ARDUINO SLAVE CODE
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
Sketch di prova: ATtiny85 lancia un S.O.S.
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.
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); }
Iscriviti a:
Post (Atom)