Show Posts
Pages: 1 [2] 3 4 ... 11
16  International / Generale / Re: Sezione "Mercatino" on: February 16, 2013, 04:22:25 am
io penso che il problema sia opposto, una sezione mercartino imbordellirebbe così tanto il Forum che ne avremmo nuovamente di che lamentarci quanto a lentezza elefantiaca.... sono d'accordo per il no.


Concordo pienamente!
17  International / Generale / Discriminare ingresso analogico on: February 16, 2013, 04:20:32 am
Buongiorno a tutti!

Vi descrivo il mio problema: ho un sensore infrarosso che leggo in analogico attraverso il pin0 di Arduino...Vorrei discriminare le letture "spurie" come quelle che vengono attuate per i pulsanti (in buona sostanza vorrei escludere le letture ingannevoli per arduino tenendo solamente quelle che superano la soglia dei 100ms)
Insomma una specie di debounce analogico, il problema è però che essendo analogico mi risulta difficile da manovrare il segnale.

Sono a corto di idee, voi ne avete qualcuna?

Grazie.  smiley
18  International / Generale / Re: Problema nel rilvare Battito Cardiaco on: February 14, 2013, 05:34:29 am
Il sensore è un sensore di prossimità e in uscita mi fornisce 0 e 1 in base alla distanza dell'oggetto rilevato.

Che comparatore dovrei inserire?

Grazie.
19  International / Generale / Problema nel rilvare Battito Cardiaco on: February 13, 2013, 04:58:56 pm
Buonasera, mi sto dilettando nel rilevare il battito cardiaco attraverso un semplice sensore infrarosso composto da emettitore e ricevitore, collegato ad arduino in questo modo:



Attualmente, il codice che ho trovato e leggerissimamente modificato è questo:

Code:
const int  CardioPin = 2;    
const int ledPin = 13;      

long oldMillis;
long oldMillis_antiBounce;

byte contatore = 0;
byte stato = 0;
byte ultimoStato = 0;


void setup() {

  pinMode(CardioPin, INPUT);
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
  oldMillis = millis();
  oldMillis_antiBounce = oldMillis;
  
}


void loop() {
  
  stato = digitalRead(CardioPin);
  if (stato != ultimoStato) {

    if (stato == HIGH) {
      //sistole...fronte di salita...
      digitalWrite(ledPin, HIGH);
      if ( millis()- oldMillis_antiBounce  > 10)
              {  // se impiega meno di 10 millisecondi per cambiare di stato è un rimbalzo e non lo conto
              contatore ++;
              oldMillis_antiBounce = millis();

              };
                    
      } else {
      // else stato = low significa che sono in diastole
              digitalWrite(ledPin, LOW);
    
      
    }
    ultimoStato = stato;  // lo stato è variato
  }

   if ( millis()- oldMillis  > 15000) {
     //15 secodi di statistica... calcolo media
     Serial.print ("bpm:");
     Serial.println ( contatore * 4);
     Serial.print("Stato");
     Serial.println(stato);
     contatore = 0;
     oldMillis = millis();
     oldMillis_antiBounce =      oldMillis;
     }

  
}


Il problema è che non mi rileva i battiti del cuore, anzi, mi indica bpm = 0 e stato = 0.

Potreste darmi qualche dritta?
20  International / Generale / Re: Sensore + calibrazione on: February 07, 2013, 02:49:39 am
Ok, ma il colore del cartoncino è diverso, passa dal nero al bianco, quindi ho una variazione dei valori analogici in uscita.

Il problema che devo risolvere è il seguente: se una volta calibrato il cartoncino poi si sposta allontanandosi  e non spostandosi verso il lato bianco, rifaccio la calibrazione tenendo conto dei nuovi valori di riferimento.


...e poi, come faccio a discriminare il passaggio dal bianco al nero?
io ho pensato di fare così: (pseudo-codice) se il valore letto periodicamente è variato di un certo tot (una soglia che devo capire ancora come e su che base calcolarla...HELP???...) allora faccio 10 letture con due delay diversi per essere totalmente certo di essere nello stato bianco.
21  International / Generale / Sensore + calibrazione on: February 06, 2013, 03:25:39 pm
Buonasera  smiley-razz

Ho un problema : un sensore ottico che restituisce in uscita un segnale analogico in base alla distanza rilevata.
In Arduino eseguo la taratura nel setup con un cartoncino posto a 3 cm di distanza adesso voglio che nel loop vi sia il riconoscimento del movimento sull'asse orizzontale (in poche parole ad uno spostamento orizzontale del cartoncino, ma non so come fare, con un if non ci riesco, pensavo di fare in questo modo : if(lettura > le-ttura + media)/2)... Ma non ne sono sicuro...
22  International / Software / Re: Casino Totale on: January 23, 2013, 05:11:56 am
...Ho risolto, il problema era dovuto dal fatto che nell'immagine il pin sul collettore del fototransistor non andava collegato ai 5V,

Gli altri problemi a livello di codice li sto piano piano risolvendo...Scusate se nelle spiegazioni sono stato "ambiguo" smiley-grin


Grazie!
23  International / Software / Re: Casino Totale on: January 23, 2013, 04:58:43 am
Si, lo legge correttamente!
24  International / Software / Re: Casino Totale on: January 23, 2013, 04:46:13 am
No, con arduino lo leggo correttamente in digitale, senza avere problemi...non so che fare
25  International / Software / Re: Casino Totale on: January 23, 2013, 04:34:18 am
...è l'autocorrettore del telefono che ogni tanto scrive degli strafalcioni smiley-grin

Allora, ecco lo sketch di prova completo, modificato e senza alcuni pezzi superflui:

Code:
const int Foto_TR = 3; //Pin Fototransistor
int UltimoStato_TR = LOW;
int StatoTR;
  int Number;
long lastDebounceTime = 0;
long debounceDelay = 100;
const int Led_1 = 0; //Pin PWM Attiny
void setup() {
  // put your setup code here, to run once:
 pinMode(Foto_TR, INPUT);
}

void loop() {

 
 
      int reading_Tr = digitalRead(Foto_TR);
    if (reading_Tr != UltimoStato_TR)
    {
      lastDebounceTime = millis();
      if (reading_Tr == LOW)
      {
        Number++;
      }
    }
    if ((millis() - lastDebounceTime) > debounceDelay)
    {
      StatoTR = reading_Tr;

    } 
    UltimoStato_TR = reading_Tr;

    for(int i = 0; i< Number; i++)
    {
      analogWrite(Led_1, 255);
      delay(300);
      analogWrite(Led_1, 0);
     
   
  }
 // delay(1000);
}

Il tutto è collegato in questo modo:
Ma invece che mandare l'output del sensore al pin A0 di arduino lo mando al pin PB3 del mio Tiny. nulla di complicato...

26  International / Software / Re: Casino Totale on: January 23, 2013, 04:24:35 am
Ecco la pedinatura del Tiny85:




Il pin2 è di fatto il PB3...ecco cosa intendevo dire.


hai qualche idea su come risolvere?
27  International / Software / Re: Casino Totale on: January 23, 2013, 02:34:11 am
Allora:


1.) piloto in pwm il pin del led ir del sensore finché il sensore non visualizzare dopo di che setto il led con la luminosità trovata.
2.) poi dal pin 3 di attiny leggo lo stato digitale del sensore...ma qui ho dei problemi

help!!!   smiley-roll

28  International / Software / Casino Totale on: January 22, 2013, 06:03:21 pm
...si, casino totale (...e non intendo il film parodia di casino royale!)
bensì il mio sketch che posto qui da voi:
Code:

 int valoretarato;

  for(int i = 0; i<=255; i++)
  {
    spwm(i, Led_IR);
    delay(1);
    int sensorValue = digitalRead(Foto_TR);
    if (sensorValue == 1)
    {
      valoretarato = i;
    }
    digitalWrite(Led_IR, 0);
  }
  delay(500);
 Persistentspwm(i, Led_IR); //richiama funzione per pwm simulato


//  setup_watchdog(9);
}


void loop()
{
  if (f_wdt==1)
  {  // wait for timed out watchdog / flag is set when a watchdog timeout occurs
    f_wdt=0;       // reset flag
    
    //CODE HERE
    
    unsigned long currentMillis = millis();
    int sensorValue = digitalRead(Foto_TR);
    sensorValue = !sensorValue;
      if (sensorValue == 1)
  {
    DOA++;
   if(DOA > 5)
  {
    analogWrite(Led_1, 64);
    analogWrite(Led_2, 255);
    delay(800);
    
    analogWrite(Led_1, 0);
    analogWrite(Led_2, 0);
    }
  }

  if (DOA >= 5)
  {
 //do something


  }
system_sleep(); //addormento il Tiny.

Il problema che devo risolvere è il seguente:

Allora: una volta calibrato il sensore come faccio nel setup(), devo leggerlo (e in questo caso invertire la sua uscita), ma proprio qui ci casca l'asino, ho collegato l'output del fotosensore al pin 3 (ovvero il 2) del mio attiny, e nel setup lo leggo come input...ecco lo schema usato:



Poi però una volta programmato l'attiny funziona in maniera "anomala"...sembra che il pin 2 (ovvero il 3) non riesca a leggere il mio input digitale...ho provato a cambiare tiny, ma nulla da fare, il problema persiste...

Avete idee?
...magari è una stupidata...ma ci ho perso l'intero pomeriggio...
Grazie.
29  International / Generale / Re: Calcolare consumo Arduino on: January 17, 2013, 06:31:08 am
Ok, credo di aver risolto per quanto riguarda il risparmio energetico, adesso mi studio i manuali e i datasheet e vedrò smiley-grin

quindi ricapitolando per la durata della batteria, posso escludere la fase di setup nel consumo globale? (tanto dura pochissimo...)

e fare in questo modo: mAmedi= ((ConsumoAttivo*Tattivo)+(ConsumoPassivo*Tpassivo))
                                             -------------------------------------------------------------- = mA medi
                                                                       Tattivo+Tpassivo

Durata totale in ore = mABatteria
                             --------------- = [ore]
                               mAmedi

Confermi?
30  International / Generale / Re: Calcolare consumo Arduino on: January 17, 2013, 05:36:50 am
Sai come funziona almeno lo sketch che hai usato? Hai letto la libreria LowPower?
Immagino di no  smiley-wink

Funziona attivando il watchdog, che è un circuito interno alimentato separatamente dal clock principale. Il clock principale negli sleep "profondi" viene disattivato quindi tutto si ferma. Senza un qualcosa che risvegli il micro, il micro è in ibernazione. Lo sketch ti ho postato io usa appunto un interrupt esterno. La LowPower usa invece il watchdog per resettare il microcontrollore.
In pratica, ogni 8 secondi resetta l'Atmega e fa ripartire tutto lo sketch. Ecco perché leggi sempre anche il consumo generato dal setup(), perché ogni 8 secondi tutto il codice viene rieseguito.

Scusami Leo, ma nel datasheet leggo che è possibile utilizzare il timer watchdog per generare un interrupt e non un reset!
Pages: 1 [2] 3 4 ... 11