Differenze tra le versioni di "Bike glove"

Da raspibo.
Jump to navigation Jump to search
 
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)  
boolean lampeggio=0;
 
 
  #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(inputPIN, INPUT);  
  pinMode(emitterPIN, OUTPUT);  
+
  pinMode(emitterPIN, OUTPUT);  
  pinMode(A1, OUTPUT);  
+
  pinMode(A1, OUTPUT);  
  Serial.begin(115200);  
+
  Serial.begin(115200);  
  // setta  prescale a 32  
+
  // setta  prescale a 32  
  // riduci la durata della lettura analogica da 128 micros (standard) a 32
+
  // riduci la durata della lettura analogica da 128 micros (standard) a 32
  sbi(ADCSRA,ADPS2);  
+
  sbi(ADCSRA,ADPS2);  
  cbi(ADCSRA,ADPS1);  
+
  cbi(ADCSRA,ADPS1);  
  sbi(ADCSRA,ADPS0);  
+
  sbi(ADCSRA,ADPS0);  
 
  pixels.begin(); // This initializes the NeoPixel library.
 
 
  }  
 
  }  
 
  void getDistance() {  
 
  void getDistance() {  
  ambient = 0;  
+
  ambient = 0;  
  intensity = 0;  
+
  intensity = 0;  
  digitalWrite(emitterPIN, LOW); // Lettura ambientale  
+
  digitalWrite(emitterPIN, LOW); // Lettura ambientale  
  for(int i = 0; i < readings; i++) {  
+
  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  
+
    if(intensity > minDistanceIntensity) minDistanceIntensity = intensity; // Salva l'intensità maggiore percepita  
  distance = (distance * filterValue) + (sqrt(minDistanceIntensity / intensity) * (1 - filterValue));  
+
    distance = (distance * filterValue) + (sqrt(minDistanceIntensity / intensity) * (1 - filterValue));  
 
  }  
 
  }  
void freccia(int luce) {
 
  if (distance>2) {
 
    if (lampeggio==0) {
 
      pixels.setPixelColor(0, pixels.Color(255,70,0)); // Moderately bright green color.
 
      pixels.show(); 
 
      Serial.print("lampeggio");
 
      lampeggio=1;
 
    }
 
    else {
 
      pixels.setPixelColor(0, pixels.Color(0,0,0)); // Moderately bright green color.
 
      pixels.show(); 
 
      Serial.print("no lampeggio");
 
      lampeggio=0;
 
    } 
 
  } 
 
  else {
 
    if (luce==0) {
 
      pixels.setPixelColor(0, pixels.Color(0,0,0)); // Moderately bright green color.
 
    }
 
    else {
 
      pixels.setPixelColor(0, pixels.Color(255,255,255)); // Moderately bright green color.     
 
    }; 
 
    pixels.show(); 
 
    lampeggio=0;
 
  }
 
 
int fanale() {
 
  if (analogRead(photoresist)<400) {
 
    return (1);
 
  }
 
  else {
 
    return (0);
 
  };
 
 
 
  void loop() {  
 
  void loop() {  
  int luce=0;
 
 
   long time = millis();
 
   long time = millis();
 
   getDistance();
 
   getDistance();
   Serial.print(" distance:");
+
   Serial.print("Distanza: ");
 
   Serial.print(distance);
 
   Serial.print(distance);
   luce=fanale(); 
+
   Serial.print(" ");
  freccia(luce);
 
 
   Serial.print(" Luminosita:");
 
   Serial.print(" Luminosita:");
 
   Serial.print(analogRead(photoresist));
 
   Serial.print(analogRead(photoresist));
 
   Serial.print(" Luce:");
 
   Serial.print(" Luce:");
  Serial.print(luce); 
 
 
   Serial.println("");
 
   Serial.println("");
   delay(200);  
+
  fanale();
  }
+
   delay(200);
 
+
  }  
  
 
[[Category:Progetti]]
 
[[Category:Progetti]]

Versione attuale delle 06: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);
}