Go Down

Topic: Progetto EMF Lettura fissa (Read 919 times) previous topic - next topic

blulaserstar

Dec 09, 2018, 02:40 pm Last Edit: Dec 09, 2018, 02:42 pm by blulaserstar
Ciao a tutti sto provando a realizzare un emf detector preso da questa guidahttps://www.instructables.com/id/Arduino-Ghost-EMF-Detector/
Arduino nano, 7 led, sui pin digitali ed un'antenna sul pin analogico 5 con resistenza da 3.2M Ohm

Risultato quando carico il codice si accendono a palla tutti i led, guardo il monitor seriale e mi da fisso 1023:

Solo quando stringo l'antenna nella mano il valore scende e si spengono il blu e uno o due rossi!

Ovviamente vorrei che partisse tutto spento e come sente un campo elettromagnetico, segnalasse progressivamente dal verde al blu. Ps ma se ci metto un cellulare che chiama, a contatto con i fili scoperti dell'antenna non dovrebbe variare il livello della rilevazione?

Ho provato a giocare con queste due variabili ma non trovo una quadra sensata:
 #define NUMREADINGS 15
int senseLimit = 15;

Code: [Select]
#define NUMREADINGS 15 // raise this number to increase data smoothing

int senseLimit = 15; // raise this number to decrease sensitivity (up to 1023 max)
int probePin = A5; // analog 5
int val = 0; // reading from probePin

int LED1 = 3;  // connections
int LED2 = 4;  // to
int LED3 = 5;   // LED
int LED4 = 6;   // bargraph
int LED5 = 7;   // anodes
int LED6 = 8;   // with
int LED7 = 9;   // resistors


// variables for smoothing

int readings[NUMREADINGS];                // the readings from the analog input
int index = 0;                            // the index of the current reading
int total = 0;                            // the running total
int average = 0;                          // final average of the probe reading


void setup() {

  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  Serial.begin(9600);  // initiate serial connection for debugging/etc

  for (int i = 0; i < NUMREADINGS; i++)
    readings[i] = 0;                      // initialize all the readings to 0
}

void loop() {

  val = analogRead(probePin);  // take a reading from the probe

  if(val >= 1){                // if the reading isn't zero, proceed

    val = constrain(val, 1, senseLimit);  // turn any reading higher than the senseLimit value into the senseLimit value
    val = map(val, 1, senseLimit, 1, 1023);  // remap the constrained value within a 1 to 1023 range

    total -= readings[index];               // subtract the last reading
    readings[index] = val; // read from the sensor
    total += readings[index];               // add the reading to the total
    index = (index + 1);                    // advance to the next index

    if (index >= NUMREADINGS)               // if we're at the end of the array...
      index = 0;                            // ...wrap around to the beginning

    average = total / NUMREADINGS;          // calculate the average


    if (average > 50){                // if the average is over 50 ...
      digitalWrite(LED1, HIGH);   // light the first LED
    }
    else{                         // and if it's not ...
      digitalWrite(LED1, LOW);    // turn that LED off
    }


    if (average > 250){               // and so on ...
      digitalWrite(LED2, HIGH);
    }
    else{
      digitalWrite(LED2, LOW);
    }

    if (average > 500){
      digitalWrite(LED3, HIGH);
    }
    else{
      digitalWrite(LED3, LOW);
    }


    if (average > 600){
      digitalWrite(LED4, HIGH);
    }
    else{
      digitalWrite(LED4, LOW);
    }

    if (average > 700){
      digitalWrite(LED5, HIGH);
    }
    else{
      digitalWrite(LED5, LOW);
    }

    if (average > 800){
      digitalWrite(LED6, HIGH);
    }
    else{
      digitalWrite(LED6, LOW);
    }

    if (average > 900){
      digitalWrite(LED7, HIGH);
    }
    else{
      digitalWrite(LED7, LOW);
    }

    Serial.println(val); // use output to aid in calibrating
  }
}

gpb01

Come hai collegato la resistenza da 3.3MΩ ? 

Guglielmo
Search is Your friend ... or I am Your enemy !


gpb01

Fai una prova, per un momento togli la parte "antenna" e lascia solo la resistenza tra GND ed A5 ...
... la lettura dovrebbe dare 0 ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

blulaserstar

fatto!


A parte l'orribile saldatura, ho controllato che niente si toccasse la resistenza va da gnd a A5 diretta, da sempre1023

gpb01

C'è qualche cosa che non quadra ...
... ho provato io stesso qui da me e, con una resistenza da 3.7MΩ (misurati con il multimetro) tra GND ed A5, da sulla analogRead() ... ZERO !

Come t'avevo detto però, stacca tutto e fai un piccolo programmino semplice, semplice che legge solamente il pin A5 e lo stampa sulla seriale ... DEVE darto zero. Se neanche così ti da zero, è guasta la porta.

Guglielmo

Search is Your friend ... or I am Your enemy !

blulaserstar

innanzitutto grazie mille per il supporto, sei gentilissimo, anche perchè ci tengo molto in quanto dovrei regalarlo a Natale!
Io ho provato a prendere un nano nuovo, gli ho caricato lo sketch (il medesimo qua postato), e.... mi da sempre 1023  :o  non dovrebbe vero? provo semmai oggi posso munirmi di un arduino uno e provare se qualche cosa cambia!


gpb01

... la prova, come ti ho più volte scritto, la devi fare senza NULLA attaccato, SOLO ed ESCLUSIVAMENTE una resistenza da 3.3MΩ tra GND e il pin A5 ed un piccolo programma che non fa altro che leggere il valore ti tale ingresso analogico e stamparlo ... vedi se ti da zero, poi passiamo alla tua applicazione con i LED.

Inutile voler fare cose se non si è sicuri al 100% che il pin funzioni come si deve !!!

Guglielmo
Search is Your friend ... or I am Your enemy !

blulaserstar

Ah ok scusa! In pausa pranzo dissaldo tutto e ci provo. Grazie mille

gpb01

Ecco, come programmino di prova usa una cosa simile a questa, senza null'altro, e verifica che valore ti stampa sul monitor seriale ...

Code: [Select]
void setup() {
   delay(500);
   Serial.begin(9600);
}

void loop() {
   int lettura;
   lettura = analogRead(A5);
   Serial.print("Valore letto: ");
   Serial.println(lettura);
   delay(1000);
}

Guglielmo
Search is Your friend ... or I am Your enemy !

blulaserstar

#10
Dec 10, 2018, 01:55 pm Last Edit: Dec 10, 2018, 01:57 pm by blulaserstar
sei stato gentilissimo con lo sketch, avrei fatto un po di fatica!
Comunque riassumendo, preso un nano nuovo, messo lo sketch, messa reistenza su a5 e GND = 0 ;-) o al massimo 6 7, credo del sano rumore elettrostatico.

Per curiosità ci ho rimesso il mio emf sketch e nel monitor appare 1023 a raffica. Credo a questi punti che sia sbagliato il mio sketch!

gpb01

Fai una cosa, SENZA collegare i LED, carica il tuo programma e sposta la Serial.println() immediatamente sotto la lettura del pin analogico, prima delle varie elaborazioni ...

Code: [Select]
val = analogRead(probePin);  // take a reading from the probe
Serial.println(val); // use output to aid in calibrating

... vedi cosa ti da messa li ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

Standardoil

Nel programma, se è ancora valido quello postato all'inizio, lo op prima fa una constrain e poi riscala
Facendo così anche valori bassi danno 1023...
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

blulaserstar

si si sto ancora usando quello postato

gpb01

#14
Dec 10, 2018, 06:43 pm Last Edit: Dec 10, 2018, 06:43 pm by gpb01
si si sto ancora usando quello postato
... e allora vedrai che, subito dopo la analogRead() il valore è giusto, dopo le tue "elaborazioni" il valore viene alterato in modo errato. ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up