Sari la conținut
ELFORUM - Forumul electronistilor

Numarator impulsuri-varianta niq_ro


daniels

Postări Recomandate

Am incercat cu un generator PVM si functioneaza corect. La 1Hz, ca sa vad ce se intampla, numara un impuls atunci cand se stinge ledul pe arduino, iar butoanele functioneaza.

20251007-085613.jpg

Functioneaza corect si cu un modul cu senzor magnetic reed.

Am observat ca pe acest modul unul din ledurile rosii sta stins si se aprinde cand apropii magnetul. La senzorul hall ledul sta aprins tot timpul, se stinge cand apropii magnetul si atunci cand e stins numara mii de impulsuri. Nu pot stinge acel led din potentiometrul de pe placa. Am alimentat in paralel cei 2 senzori.

20251007-092339.jpg

 

Link spre comentariu

asta insemana ca atunci cand e stins probabil nu e stabil nivelul (sau nivelul nu e cat trebuie)  -masoara cu voltmetrul nivelele iesirii din senzor cand e stins si aprins. 

Alta posibila problema e ca ai Pull UP si in software (in AVR) si extern (in schemma ta) si posibil e si la iesirea comparatorului pe placa de senzor. Exista posibilitatea ca din cauza la prea mult pull-up iesirea comparatorului sa nu poata trage in low semnalul ala. Masoara nivele de high si low cu un voltmetru.

RR

 

Editat de roadrunner
Link spre comentariu

Cred că era mai ușor și sigur să îți faci singur partea de numărare, decât să folosești modulele alea chinezești, care pot avea uneori probleme din construcție.

O fotodiodă, o rezistență sau potențiometru și eventual un tranzistor nu erau greu de asamblat...câteodată mai complicat nu înseamnă și mai bun, ci mai multe posibilități de defect.

La varianta cu Reed e și mai simplu de făcut.

Link spre comentariu
nico_2010

De aici: "https://circuitdigest.com/microcontroller-projects/interfacing-hall-effect-sensor-module-with-arduino"

 

"How to test the Hall effect sensor module?

Testing this module is pretty simple. Connect the input power to VCC and GND. Adjust the trim-pot until the status/DO LED is just turned ON, without any magnetic materials near the sensor. Then simply place a magnet near the sensor and if the LED turns OFF when the magnet is near the sensor, then the module is working fine."

Acum 4 ore, daniels a spus:

La senzorul hall ledul sta aprins tot timpul, se stinge cand apropii magnetul si atunci cand e stins numara mii de impulsuri

Este comportament normal ... pana la numararea a mii de impulsuri. Si asta pentru ca intreruperile pe pinul D2 sunt pe front crescator.

Schimba asta:

attachInterrupt(0, numarare, RISING);

cu asta:

attachInterrupt(0, numarare, FALLING);

Si vezi care este comportamentul intregului montaj.

Link spre comentariu
Acum 20 minute, nico_2010 a spus:

Este comportament normal ... pana la numararea a mii de impulsuri. Si asta pentru ca intreruperile pe pinul D2 sunt pe front crescator.

nu e corect ce spui, indiferent daca intreruperea e FALLING sau RISING  cand semnalul e stabil LOW sau stabil HIGH numaratorul nu trebuie sa numere. Trebuie sa numere numai la schimbare starii din LOW in HIGH (daca e RISING) si din HIGH in LOW daca e falling.

La problema descrisa de OP schimbarea din RISING in FALLING nu o sa sa-l ajute cu nimic si nici nu o sa faca nici o diferenta vizibila in cazul prezentat.

 

RR

Editat de roadrunner
Link spre comentariu
nico_2010
Acum 10 minute, roadrunner a spus:

nu e corect ce spui, indiferent daca FALLING sau RISING  cand semnalul e stabil LOW sau stabil HIGH numaratorul nu trebuie sa numere.

Eu vorbeam de modul de functionare al LED-ului montat pe senzor. Este evident ca in logica normala a modului in care a fost contruit modulul, iesirea este activa pe LOW, deci si intreruperea trebuie sa fie pe front cazator. 

Ce se intampla insa atunci cand iesirea este HIGH, in absenta unui osciloscop pot face doar presupuneri (cel mai probabil semnale parazite de amplitudine mare). De ce? Habar nu am.

Link spre comentariu
Acum 25 minute, nico_2010 a spus:

Eu vorbeam de modul de functionare al LED-ului montat pe senzor.

i-ai sugerat OP-ului sa schimbe tipul intreperii, il pui pe o pista gresita, asta era rostul postarii mele. Indiferent cum e LED-ul pe placa aia (pe care o banuiesc ca nu merge corect, sau nu e conectata corect) - OP a confirmat ca numaratorul functioneaza cu semnal extern (altul decat de la placa aia) deci codul e corect. Modificand codeul nu o sa-l ajute sa repare placuta aia mica (care e il tine pe el in loc de fapt) - eu supectez ca iesirea comparatorului nu poate trege corect in LOW semnalul de iesire. (eu as reduce regla pragul comparatorului la exact jumatatea intre 2.5V si 5V, si as reduce pullup-ul) 

Sau senzorul ala hall e praf si nu poti vedea pe led care pare aprins dar e posibil sa fie impulsuri scurte (noise) care nu le vede pe led dar le prinde intreperea aia fata probleme. Eu as elemina prostia aia de placa din start.

 

RR

Editat de roadrunner
Link spre comentariu

Pentru a vedea dacă nu cumva operationalul din modul este defect, cred ca ar merge testat daca senzorul functioneaza ok.
Adică să conectezi pinul analogic A0 al modulului la o intrare analogica de la Arduino și să afisezi in loop()
Serial.println(analogRead(A0));

Link spre comentariu
nico_2010

Da, este o sugestie corecta, avand in vedere modul in care functioneaza senzorul. Am mai spus, nu pot face decat presupuneri, care pot fi corecte sau gresite, atata timp cat nu am un produs identic/aproape identic pe masa de lucru ca sa verific sau sa clarific aberatiile de functionare, iar presupunerile astea l-ar putea ducela fel de usor pe piste gresite pe OP.

Link spre comentariu
Acum 10 minute, mihaiaurul a spus:

Adică să conectezi pinul analogic A0 al modulului la o intrare analogica de la Arduino și să afisezi in loop()
Serial.println(analogRead(A0));

daca sunt impulsri scurte (noise) si e clar ca sunt ca altfel nu ar numara intrerupere aia, nu le vede cu ADC-ul de pe AVR.

Cred ca decizia e mai degaraba ce vre sa faca, sa repare (debug) placuta aia sau sa faca un numarator fara ea. 

RR

Editat de roadrunner
Link spre comentariu
Acum 12 minute, mihaiaurul a spus:

Sunt curios ce valori analogice trimite senzorul.

mda, cred ca e o componenta "originala" hall senzorul ala.

RR

Editat de roadrunner
Link spre comentariu

Un test dupa codul

const int ledPin = 13;//the led attach to pin13
int sensorPin = A0; // select the input pin for the potentiometer
int digitalPin=2; //D0 attach to pin2
int sensorValue = 0;// variable to store the value coming from A0
boolean digitalValue=0;// variable to store the value coming from pin2
void setup() 
{
  pinMode(digitalPin,INPUT);//set the state of D0 as INPUT
  pinMode(ledPin,OUTPUT);//set the state of pin13 as OUTPUT
  Serial.begin(9600); // initialize serial communications at 9600 bps
}
void loop() 
{ 
  sensorValue = analogRead(sensorPin); //read the value of A0
  digitalValue=digitalRead(digitalPin); //read the value of D0
  Serial.print("Sensor Value "); // print label to serial monitor 
  Serial.println(sensorValue); //print the value of A0
  Serial.print("Digital Value "); // print label to serial monitor 
  Serial.println(digitalValue); //print the value of D0 in the serial
  if( digitalValue==HIGH )//if the value of D0 is HIGH
  {
    digitalWrite(ledPin,LOW);//turn off the led
  }
  if( digitalValue==LOW)//else
  {
    digitalWrite(ledPin,HIGH);//turn on the led
  }
  delay(1000);//delay 200ms
}

Captur-2.png

zona cu linie rosie e cu magnetul in apropiere, led stins

Captur-3.png

 

Editat de daniels
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări