Pages: 1 [2]   Go Down
Author Topic: acquisizione segnale analogico e misurazione della frequenza  (Read 2761 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok domani provo
e ti faccio sapere
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

allora ho provato e il led che esce dal buffer è sincorno con il led che sta prima del buffer... com'è sta cosa che non prende  alcuni battiti? alcune volte il led si accende poco e l'arduino non li prende... altre volte il led si accende del tutto e non li prende...
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

allora ho provato e il led che esce dal buffer è sincorno con il led che sta prima del buffer... com'è sta cosa che non prende  alcuni battiti? alcune volte il led si accende poco e l'arduino non li prende... altre volte il led si accende del tutto e non li prende...

allora significa che il segnale di input in realtà non è un vero 5 volt pulito come si pensava ma delle volte è meno. Fai questa sostituzione (pseudocodice)

int val = analogread(cardiopin)
if val >100
  stato = HIGH
else
  stato = LOW
endif
 
e poi continui... vediamo cosa esce: prelevo un segnale più basso...

a... sarebbe bello vedere anche come lo attacchi questo affare... ci sono resistenze di pulldown?
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mm no ho collegato direttamente al pin di arduino l'ucita del sensore.... a che servono queste resistenze di cui parli?
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mm no ho collegato direttamente al pin di arduino l'ucita del sensore.... a che servono queste resistenze di cui parli?

dipenda un po' da che tipo di uscita hai da gestire. La prima cosa che ti invito a fare è gestire in analogica l'uscita di modo che se il segnale non è esattamente 5 volt lo becchiamo lo stesso.
Le resistenze di pulldown sono delle resistenze, di solito grandine, che si mettono tra il pin e massa: questo evita che eventuali disturbi possano alzare il pin... non sempre sono necessarie: sono necessarie ad esempio se metti un tasto... non so se servono: probabilmente non servono però va provato.
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao allora guarda alla fine è tutto a posto va bene cosi... volevo chiederti una cosa.... a seconda dei valori della variabile bpm devo regolare con la pwm la velocità di un motore..... questo è il pezzo di codice che ho scritto alla fine del programma... ma non accade nulla, la velocità del motore rimane sempre la stessa e non so se sia il massimo o un volero intermedio.... l'interfacciamento del motore è ok, ho provato con il programma fading e funziona non so perche non funziona con quest'altro programma... puoi aiutarmi?
 if ( 0 <= bpm <= 70)
  { analogWrite(tappetopin, 255);}
 if ( 70 < bpm <= 80)
  { analogWrite(tappetopin, 229);}
    if ( 80 < bpm <= 100)
    {analogWrite(tappetopin, 204);}
    if ( 100 < bpm <= 120)
  { analogWrite(tappetopin, 178);}
      if ( 120 < bpm <= 140)
  { analogWrite(tappetopin, 153);}
 if ( 140 < bpm <= 160)
  { analogWrite(tappetopin, 125);}
if ( 160 < bpm)
  { analogWrite(tappetopin, 102);}
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao allora guarda alla fine è tutto a posto va bene cosi... volevo chiederti una cosa.... a seconda dei valori della variabile bpm devo regolare con la pwm la velocità di un motore..... questo è il pezzo di codice che ho scritto alla fine del programma... ma non accade nulla, la velocità del motore rimane sempre la stessa e non so se sia il massimo o un volero intermedio.... l'interfacciamento del motore è ok, ho provato con il programma fading e funziona non so perche non funziona con quest'altro programma... puoi aiutarmi?
 if ( 0 <= bpm <= 70)
  { analogWrite(tappetopin, 255);}
 if ( 70 < bpm <= 80)
  { analogWrite(tappetopin, 229);}
    if ( 80 < bpm <= 100)
    {analogWrite(tappetopin, 204);}
    if ( 100 < bpm <= 120)
  { analogWrite(tappetopin, 178);}
      if ( 120 < bpm <= 140)
  { analogWrite(tappetopin, 153);}
 if ( 140 < bpm <= 160)
  { analogWrite(tappetopin, 125);}
if ( 160 < bpm)
  { analogWrite(tappetopin, 102);}


si non si fa così il test... si fa
if ((a > 100) && (a < 120))
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie mille mi hai aiutato moltissimo, è il mio progetto di maturità, te ne sono grato... un ultima richiesta che ti faccio se è possibile... potresti spiegarmi i passaggi di questo pezzo di codice? all'esame dovro saper spiegare bene tutti i passaggi e quellli su cui ho delle perplessità sono questi
Code:
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

ecc.
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

... dovresti sforzarti di capirlo se no è un imbroglio non un esame... ho messo anche dei commenti...
in ogni caso leggo lo stato della porta, se cambia di stato entro nell'if. All'interno dell'if se il segnale è high significa che siamo facendo una sistole, c'è un if di antirimbalzo che forse non serve e viene incrementato un contatore del battito. quando il segnale torna low significa che si è in fase di diastole e quindi modifica solo lo stato ed aspetta la prossima sistole.


grazie mille mi hai aiutato moltissimo, è il mio progetto di maturità, te ne sono grato... un ultima richiesta che ti faccio se è possibile... potresti spiegarmi i passaggi di questo pezzo di codice? all'esame dovro saper spiegare bene tutti i passaggi e quellli su cui ho delle perplessità sono questi
Code:
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

ecc.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, mi intrometto nella discussione.
Sono nuovo in tutti i sensi, sia di Arduino e conseguentemente del forum.
Poichè sono anche io interessato ad acquisire segnali analogici con Arduino, e anche io sono interessato a questo ambito, volevo chiedervi come alla fine avete implementato il sistema: con un display seriale o con tre display a 7 segmenti? Come avete collegato il tutto?
Comunque pensavo di produrre una modifica al circuito analogico, invece del secondo amplificatore identico al primo, sarebbe più interessante provare ad usare un comparatore a finestra con isteresi.... vediamo che mi viene.
Logged

Pages: 1 [2]   Go Up
Jump to: