Differenze tra le versioni di "Bike glove"
Jump to navigation
Jump to search
(Creata pagina con 'Uguanto da indossare in bici che rileva la luminosità ambientale ed al buio illumina di di bianco dl punta dell'indice. Si usa come fanale. Ma se si solleva la mano dal man...') |
|||
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 27: | Riga 27: | ||
int filterValue = 0.2; // COSTANTE GAIN DEL FILTRO | int filterValue = 0.2; // COSTANTE GAIN DEL FILTRO | ||
int photoresist = A3; // Controlla la luminosità ambientale per capire se accendere il led Bianco (Fanale) | int photoresist = A3; // Controlla la luminosità ambientale per capire se accendere il led Bianco (Fanale) | ||
− | |||
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) | #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) | ||
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) | #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) | ||
// SET PRESCALE PORTE ANALOGICHE | // SET PRESCALE PORTE ANALOGICHE | ||
void setup() { | void setup() { | ||
− | + | pinMode(inputPIN, INPUT); | |
− | + | pinMode(emitterPIN, OUTPUT); | |
− | + | pinMode(A1, OUTPUT); | |
− | + | Serial.begin(115200); | |
− | + | // setta prescale a 32 | |
− | + | // riduci la durata della lettura analogica da 128 micros (standard) a 32 | |
− | + | sbi(ADCSRA,ADPS2); | |
− | + | cbi(ADCSRA,ADPS1); | |
− | + | sbi(ADCSRA,ADPS0); | |
− | |||
− | |||
} | } | ||
void getDistance() { | void getDistance() { | ||
− | + | ambient = 0; | |
− | + | intensity = 0; | |
− | + | digitalWrite(emitterPIN, LOW); // Lettura ambientale | |
− | + | for(int i = 0; i < readings; i++) { | |
ambient = ambient + analogRead(inputPIN); | ambient = ambient + analogRead(inputPIN); | ||
} | } | ||
Riga 57: | Riga 54: | ||
digitalWrite(emitterPIN, LOW); | digitalWrite(emitterPIN, LOW); | ||
if(ambient < intensity) intensity = intensity - ambient; // Filtro luce ambientale | if(ambient < intensity) intensity = intensity - ambient; // Filtro luce ambientale | ||
− | + | if(intensity > minDistanceIntensity) minDistanceIntensity = intensity; // Salva l'intensità maggiore percepita | |
− | + | distance = (distance * filterValue) + (sqrt(minDistanceIntensity / intensity) * (1 - filterValue)); | |
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
void loop() { | void loop() { | ||
− | |||
long time = millis(); | long time = millis(); | ||
getDistance(); | getDistance(); | ||
− | Serial.print(" | + | Serial.print("Distanza: "); |
Serial.print(distance); | Serial.print(distance); | ||
− | + | Serial.print(" "); | |
− | |||
Serial.print(" Luminosita:"); | Serial.print(" Luminosita:"); | ||
Serial.print(analogRead(photoresist)); | Serial.print(analogRead(photoresist)); | ||
Serial.print(" Luce:"); | Serial.print(" Luce:"); | ||
− | |||
Serial.println(""); | Serial.println(""); | ||
− | delay(200); | + | fanale(); |
− | } | + | delay(200); |
+ | } | ||
+ | |||
+ | [[Category:Progetti]] |
Versione attuale delle 05:58, 21 ott 2014
Uguanto da indossare in bici che rileva la luminosità ambientale ed al buio illumina di di bianco dl punta dell'indice.
Si usa come fanale. Ma se si solleva la mano dal manubrio inizia la lampeggiare di colore arancione e si usa come freccia!
La base di partenza un misuratore di ditanze che usa due led, una board mini arduino, una fotoresistenza ed un led rgb digitale.
// SENSORE ERER DISTANZA E LUCE AMBIENTALE CON LED INFRAROSSI // ALGORITMO ERER E INVERSE SQUARE LAW // IDEATO DA GIOVANNI BLU MITOLO 2012 // WWW.GIOBLU.COM // LED based analog distance sensor by Giovanni Blu Mitolo //is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. #include <i2cmaster.h> #include "Wire.h" #include <Adafruit_NeoPixel.h> #define PIN 10 #define NUMPIXELS 1 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ400); int inputPIN = A0; // PIN LED RICEVITORE int emitterPIN = A2; // PIN LED EMETTITORE double minDistanceIntensity = 0; // MASSIMA INTENSITA' RILEVATA double intensity = 0; // INTENSITA' double distance = 0; // DISTANZA double reading = 0; // LETTURA ATTUALE double ambient = 0; // LETTURA AMBIENTALE int readings = 2000; // COSTANTE NUMERO LETTURE int filterValue = 0.2; // COSTANTE GAIN DEL FILTRO int photoresist = A3; // Controlla la luminosità ambientale per capire se accendere il led Bianco (Fanale) #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) // SET PRESCALE PORTE ANALOGICHE void setup() { pinMode(inputPIN, INPUT); pinMode(emitterPIN, OUTPUT); pinMode(A1, OUTPUT); Serial.begin(115200); // setta prescale a 32 // riduci la durata della lettura analogica da 128 micros (standard) a 32 sbi(ADCSRA,ADPS2); cbi(ADCSRA,ADPS1); sbi(ADCSRA,ADPS0); } void getDistance() { ambient = 0; intensity = 0; digitalWrite(emitterPIN, LOW); // Lettura ambientale for(int i = 0; i < readings; i++) { ambient = ambient + analogRead(inputPIN); } digitalWrite(emitterPIN, HIGH); // Lettura attiva for (int i = 0; i < readings; i++) { intensity = intensity + analogRead(inputPIN); } digitalWrite(emitterPIN, LOW); if(ambient < intensity) intensity = intensity - ambient; // Filtro luce ambientale if(intensity > minDistanceIntensity) minDistanceIntensity = intensity; // Salva l'intensità maggiore percepita distance = (distance * filterValue) + (sqrt(minDistanceIntensity / intensity) * (1 - filterValue)); } void loop() { long time = millis(); getDistance(); Serial.print("Distanza: "); Serial.print(distance); Serial.print(" "); Serial.print(" Luminosita:"); Serial.print(analogRead(photoresist)); Serial.print(" Luce:"); Serial.println(""); fanale(); delay(200); }