confronto di 2 valori analogici

salve,avrei bisogno di un aiuto per risolvere un problema con il confronto di due valori analogici.Questi due valori agiscono in modo da provocare l'eccitazione di un rele quando assumono lo stesso valore. Quello che mi interessa capire é se la comparazione viene fatta confrontando i valori di tensione preseni ai capi dei pin assegnati o confrontando i valori stampati sul display. :astonished: :astonished:
Dalla domanda si capisce subito il livello di conoscenza è quindi probabile che la domanda sia banale e confusa; allego di seguito lo sketch da me compilato (fa un pò caca.... ma per adesso è il massimo che sono riuscito afare)

#define ANA_IN_2 2
float limite_di_corrente = 2.0;
int val =0 ;

void setup() {
lcd.begin(16, 2);

pinMode (LED,OUTPUT);
pinMode (BUTTON, INPUT);
}

void loop() {

misura_di_tensione = analogRead(ANA_IN_0);
lcd.println(misura_di_tensione);
lcd.clear();

lcd.setCursor(1, 0);
lcd.print(misura_di_tensione*30/1023);
lcd.print("V");

misura_di_corrente = analogRead(ANA_IN_1);

lcd.setCursor(1, 1);
lcd.print(misura_di_corrente59.3/1023);
lcd.print("A");

lcd.setCursor(9, 0);
lcd.print(misura_di_tensione30/1023misura_di_corrente59.3/1023);
lcd.print("W");

limite_di_corrente = analogRead (ANA_IN_2 );

lcd.setCursor(10, 1);
lcd.print(limite_di_corrente*5/1023);
lcd.print("L");
{
if (misura_di_corrente >= limite_di_corrente)digitalWrite (LED ,HIGH);
}
{ val = digitalRead (BUTTON);
if (val == HIGH) digitalWrite (LED , LOW);
}

delay(1000);

}

GRAZIE

Ad una prima lettura velocissima penso ci manchi la definizione di LED e BUTTON !!!

Posta il codice per intero e cerca di racchiuderlo tra i tag code

Sarebbe quello indicato con il cancelletto nell'editor (quando scrivi un messaggio).

EDIT: Comunque, anche se non ho capito bene la tua domanda, sappi che le porte analogiche di danno un valore da 0 a 1023 (quindi 1024 differenti valori) che corrispondono a 0 V e 5V rispettivamente---> tensione ai capi del cavo collegato alla porta analogica in questione!

Ciao,
Fabri.

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

#define BUTTON 4
#define LED 13
#define ANA_IN_0 0
float misura_di_tensione = 0.0;
#define ANA_IN_1 1
float misura_di_corrente = 1.0;

#define ANA_IN_2 2
float limite_di_corrente = 2.0;
int val =0 ;

void setup() {
lcd.begin(16, 2); 

pinMode (LED,OUTPUT);
pinMode (BUTTON, INPUT);
}

void loop() {
 



misura_di_tensione = analogRead(ANA_IN_0);
lcd.println(misura_di_tensione);
lcd.clear();

lcd.setCursor(1, 0);
lcd.print(misura_di_tensione*30/1023);
lcd.print("V");


misura_di_corrente = analogRead(ANA_IN_1);



lcd.setCursor(1, 1);
lcd.print(misura_di_corrente*5*9.3/1023);
lcd.print("A");

lcd.setCursor(9, 0);
lcd.print(misura_di_tensione*30/1023*misura_di_corrente*5*9.3/1023);
lcd.print("W");

limite_di_corrente = analogRead (ANA_IN_2 );

lcd.setCursor(10, 1);
lcd.print(limite_di_corrente*5/1023);
lcd.print("L");
{
if (misura_di_corrente >= limite_di_corrente)digitalWrite (LED ,HIGH);
}
{  val = digitalRead (BUTTON); 
if (val == HIGH) digitalWrite (LED , LOW);
}

delay(1000);
[code]
 :) :)



Grazie F.schiano,ecco ho copiato tutto il codice, come ti ripeto non ti impressionare è il mio primo lavoro. ho già realizzato il progetto che fa uso di questo codice e devo dire che che funzionicchia ma come ti dicevo prima, quando imposto il limite di corrente (tramite un potenz.)all'aumentare dell'assormimento il rele si eccita e stacca il carico ma non corrispondono i valori non sono uguali .Esempio: imposto tramite il pot 0.23 A il rele si eccita ,ma  ad un valore diverso di corrente assorbita.quindi se si potessero comparere i (per dirla in parole povere) i numeri che appaiono sul display invece delle tensioni applicae sui pin del M.C. avrei risolto. :sweat_smile: :sweat_smile: :sweat_smile: :sweat_smile: :sweat_smile:

[/code]

vegas:
salve,avrei bisogno di un aiuto per risolvere un problema con il confronto di due valori analogici.Questi due valori agiscono in modo da provocare l'eccitazione di un rele quando assumono lo stesso valore. Quello che mi interessa capire é se la comparazione viene fatta confrontando i valori di tensione preseni ai capi dei pin assegnati o confrontando i valori stampati sul display. :astonished: :astonished:
Dalla domanda si capisce subito il livello di conoscenza è quindi probabile che la domanda sia banale e confusa; allego di seguito lo sketch da me compilato (fa un pò caca.... ma per adesso è il massimo che sono riuscito afare)
....

Devi confrontare i valori letti dal ADC . Se vuoi confrontare le 2 tensioni devi usare un Amplificatore Operazionale.
Sappi che ci sono un po di disturbi percui permetti un po di scarto:
if( an1 >an2-5 && an1 <an2 +5)I questo modo an1 deve essere uguale an2 +/-5
Ciao Uwe

:slight_smile: :)grazie Uwe,come si sarà capito il problema è confrontare due tensioni diverse, cioè quella prelevata dal centrale del potenziometro ("L") 0-5V con quella prelevata ai capi di uno shunt che al massimo arriva a 200 mV quando è attraversa to da una corrente cc di 5A ("A"). Se amplifico questi 200mV e li porto a 5V il problema non Sussiste,ma volendo invece confrontare anzichè i valori efficaci, cioè quelli ai capi delle entrate analogiche, i numeri che appaiono in forma di caratteri alfanumerici sul display, tutto il discorso dell'amplificatore cc non serve più.Per di più ho gia relizzato con Orcad tutto il progetto compreso il PCB e montrato il tutto quindi una modifica software sarebbe un miracolo.
Se per illustrare meglio serve lo skema di funz. mi spiegate come inserirlo :cold_sweat: :cold_sweat: :cold_sweat: è a disposizione compresi i files Orcad.

Usa per primo cone tensone di riferimento i 1,1V interni. ( hai una lettura piú grande per i 200mV dello Shunt.
Poi per i 5V del potenziometro: metti una resistenza che é ca 4 volte la resistenza del potenziometro tra il potenziometro e +5V. cosí avrai una tensione tra 0 e ca 1V.

Avrai valori letti tramite analogRead per la corrente tra 0 e ca 186.

E per il potenziometro circa 0 e ca 1000.
Adesso basta introdurre un fattore da moltiplicare gli ADC della Corrente e puoi confrontarli.

Bella idea XD XD!!E caso strano ho pure capito il concetto, ma ho dato uno sguardo al data sheet del 328 e sinceramente non vedo pin da cui prelevare gli 1,1V.
Cortesemente puoi darmi una dritta? :slight_smile: :slight_smile:

I 1,1V sono un riferimento interno del controller.
Scegli la tensione di riferimento con la funione analogReference()

Ciao Uwe

Grazie a tutti, risolto amplificando con LM 741, l'ipotesi di usare il riferimento dei 1,1V era gagliarda ma più di far uscire la tensione dal pin 21 con AnalogReference e incasinare tutto lo sketch =( =( non sono andato.Comunque grazie davvero .

Non incasini niente.
Basta mettere la funzione analogReference(INTERNAL) nel setup() e le entrate analogiche leggono 1023 ADC a 1,1V.
Ciao Uwe

Buonasera Uwe, è proprio quello che ho fatto, ma poi andando ad avviare lo sketch il dispalay rimaneva con la solita rigadi pixel rettangolari.e sul pin 21 ci sono 1,1V.Allora puo darsi che devo modificare anche i valori delle funzioni se così si puo dire.
Adesso sto al lavoro, sennò bruciavo qualche altro 328 per fare qualche prova, tanto adesso carico il bootloader in 30 sec.
GRAZIE. 1000

Per cosa usi AREF???

È vietatissimo usare il pin 21 AREF.
Se usi un riferimento interno metti un condensatore per togliere disturbi e solo nel caso di una tensione di riferimneto esterno si aplica la tensione a questo pin selezionando come riferiemento un riferimento esterno.
analogReference(EXTERNAL).
Leggiti per favore tutto: analogReference() - Arduino Reference

Ciao Uwe

non ho applicato nulla al pin 21,volevo dire che misurando ho notato che dopo aver inserito analogreference nello sketch si misurano 1.1v sull' AREF.

Quello é giusto perché internamente viene collegato quel pin non a 5V ma al circuito che produce 1,1V.
Non capisco che influenza potrebbe avere Vref sul display e con i problemi del Display che descrivi.
Forse se mandi il Tuo codice capiamo qualcosa
Ciao Uwe

=( =( =( =( Scusate tanto per i ritardi nella risposta ai vostri consigli, ma è veramente un periodaccio con il lavoro. :0 :0 :0 Comunque il codice usato nella realizzazione che poi è in funzione su uno dei miei alimentatori è quella che ho mostrato di sotto.solo che il limitatore è finto! il rele pilotato tramite il codice non si eccita quando i valori di "A" e di "L" sono >= . Ripeto non impressionarsi alla vista di questo codice,ogni imprecazione a me diretta avrà effetto boomerang :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: (si scrive cosi vero?) A parte gli scherzi, non so come ringraziare per l'attenzione dedicatami.Grazie!!!!!