/* 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); }
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
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.
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); 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.
Iscriviti a:
Post (Atom)
