home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


Min e max
     
Autore Messaggio opzioni
FrancoGual



[pagine pubblicate]

postato il:
25.12.2019, alle ore 20:09
Min e max 

Buonasera e Buon Natale.
Ho messo insieme qusto codice.
Serve a visualizzare la posizione delle valvole di una cisterna per sfarinato e/o mangimi.

Rilevo un segnale, anzi 4, da dei potenziometri ... chiamiamoli così.
Mi servirebbe però avere la possibilità di avere lo zero settabile.
Ovvero i sensori(potenziometri) potrebbero non raggiungere lo zero e restituire una piccola tensione, ma a me serve che la barra di visualizzazione parta appunto da zero e raggiungere il 100% al'altro valore, che appunto posso regolare con un trimmer.

Come fare?

 #include <LiquidCrystal.h>
#include <LcdBarGraph.h>
 
byte lcdNumCols = 20; // --Numero di colonne LCD
byte lcdNumRow = 4;  // -- Numero di righe
byte sensorPin1 = 0; // -- sensore bargraph1 A0
byte sensorPin2 = 1; // -- sensore bargraph2 A1
byte sensorPin3 = 2; // -- sensore bargraph3 A2
byte sensorPin4 = 3; // -- sensore bargraph4 A3
 
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);     //     -- creating LCD instance
LcdBarGraph lbg1(&lcd, 19, 1, 0);  // -- creando l'istanza del grafico a barre, il formato ÃƒÂ¨ (& lcd, lcdNumCols, avvia X, avvia Y). 
LcdBarGraph lbg2(&lcd, 19, 1, 1);   //  Quindi (& lcd, 20, 0, 1) imposta la lunghezza dell'istogramma su 20 colonne
LcdBarGraph lbg3(&lcd, 19, 21, 0);    //e avvia l'istogramma nella colonna 0 della riga 1.
LcdBarGraph lbg4(&lcd, 19, 21, 1); 
void setup(){
  // -- initializing the LCD
  lcd.begin(4, lcdNumCols);
  lcd.clear();
  delay(300);
  lcd.clear();
  lcd.setCursor(0, 0); 
    lcd.print("OLEOTEXXX XXXXXXX");
    lcd.setCursor(0, 1); 
    lcd.print(" Tel.  349 XXXXXXX  ");
    lcd.setCursor(20,0);
    lcd.print("  By Frank Xxxxxx  ");
    lcd.setCursor(20, 1); 
    lcd.print("   VALVE METER 1.9  ");   
    delay(8500);
    lcd.clear();
                            // -- do some delay some time I've got broken visualization
    delay(100);

    lcd.setCursor(0, 0); 
    lcd.print("1");
    lcd.setCursor(0, 1); 
    lcd.print("2");
    lcd.setCursor(20,0);
    lcd.print("3");
    lcd.setCursor(20, 1); 
    lcd.print("4");
  
}
 
void loop()
{
  // -- draw bar graph from the analog value readed
  lbg1.drawValue( analogRead(sensorPin1), 1024);
  // -- do some delay: frequent draw may cause broken visualization
  delay(90);

  // -- draw bar graph from the analog value readed
  lbg2.drawValue( analogRead(sensorPin2), 1024);
  // -- do some delay: frequent draw may cause broken visualization
  delay(100);

  // -- draw bar graph from the analog value readed
  lbg3.drawValue( analogRead(sensorPin3), 1024);
  // -- do some delay: frequent draw may cause broken visualization
  delay(110);

  // -- draw bar graph from the analog value readed
  lbg4.drawValue( analogRead(sensorPin4), 1024);
  // -- do some delay: frequent draw may cause broken visualization
  delay(120);


Grazie per l'attenzione.
Poi avrei un'altra domanda.
a una cosa alla volta



Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
caccamo2





postato il:
25.12.2019, alle ore 20:39
fai una funzione cosi

void clamp(input,offset)
if (input<offset) output=0;
else output=input;
return output;

e poi nel main la chiami cosi
lbg4.drawValue(clamp(analogRead(sensorPinX),offset), 1024);

Dove offset e' la tensione minima del tuo sensore, se e' uguale per tutti basta una costante, altrimenti dovrai metterne una per ciascuno. Se il valore cambia nel tempo dovrai riprogrammare il dispositivo dopo aver misurato il nuovo valore.

Per evitare di dover riprogrammare il dispositivo devi aggiungere una procedura di settaggio iniziale dove tu metti i sensori al minimo e memorizzi i valori di offset in delle variabili. Per farlo e' necessario aggiungere un pulsante o un timer che dia il trigger alla misura dell'offset.



...
FrancoGual



[pagine pubblicate]

postato il:
25.12.2019, alle ore 20:56
Grazie per la risposta e Buon Natale.
Io sono disposto, avendo ancora il tempo di riprogettarlo, di aggiungere la qualsiasi, compreso 4 trimmer ad altrettanti inpout analogici per settare il 'bias' ad ogni canale.
Se ti sembra una buona idea, altrimenti metto in pratica il pulsante e il resto.



Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
FrancoGual



[pagine pubblicate]

postato il:
25.12.2019, alle ore 21:11
Scusami, ho risposto al volo, avevo gente.
Poi ho letto il codice e la logica.
Mi andrebbe bene un pulsante, che io metto nascosto per eventuali pressioni accidentali, devi sapere che i camionisti moderni smanettano TUTTO.
Anche due tasti da premere insieme.....
Io monto il coso e metto le valvole chiuse, premo i pulsanti e il coso apprende i 4 zeri ovunque si trovino, e mette le barre LCD a zero, poi metto le valvole aperte e controllo se le barre LCD arrivino al 100%.
Ottimo sarebbe fare in modo che il coso legga e memorizzi le due tensioni, min e max e si setti di conseguenza la barra, le barre.
Il coso è basato su un arduino micro ma ho ancora abbondante spazio di memoria ecc ecc.. così dice L'IDE,
Sempre grazie



Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
FrancoGual



[pagine pubblicate]

postato il:
25.12.2019, alle ore 21:32
Poichè sostengo che serve dare più info possibili...
I sensori sono potenziometri lineari, lineari inteso come un pistone con corsa di circa 20 cm, solidale al pistone idraulico che muove la valvola stessa, valore 5 Kohm, linearità 0,25 %, costo.... lasciamo perdere. :-).
Una volta effettuato il settaggio iniziale non serve altro, appunto se la valvola non chiude per colpa di oggetti rimasti incastrati, l'unica cosa che lo può indicare è appunto l'indicatore, poichè non esiste nessun altro modo, le valvole sono poste sotto il silo e non si vedono da nessuna parte se non a cisterna vuota.
Idem per i sensori, che sono accessibili solo a cisterna vuota e dall'interno.
Va da se che il progettino deve essere affidabile, per questo avevo pensato appunto ad una sistema esterno, analogico, dove con una serie di trimmer mi portavo i valori alla bisogna, solo che in caso di riparazione fare l'allineamento porterebbe via tempo, che spesso scarseggia..



Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
rcc.roberto



[pagine pubblicate]

postato il:
25.12.2019, alle ore 22:28
Ciao
In Arduino c'è una funzione per la mappatura dei valori. Una vita che conosci il valore min e Max esegui la funzione ed il range viene rimappato con i tuoi valori.
Cerca rimappatura

Buon Natale
rcc.roberto



[pagine pubblicate]

postato il:
25.12.2019, alle ore 22:29
Se non lo trovi te lo cerco domani
FrancoGual



[pagine pubblicate]

postato il:
25.12.2019, alle ore 23:22
Grazie e auguri anche a te.
Ti riferisci a questo?
https://www.logicaprogrammabile.it/arduino-funzioni-matemati…



Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
caccamo2





postato il:
25.12.2019, alle ore 23:26
Per farlo analogico dovresti aggiungere una tensione negativa al tuo circuito, farlo software non da problemi di affidabilita', semplicemente perdi dinamica d'acquisizione, devi decidere tu in base all'applicazione.
Dalle info che dai mi sembra piu' indicata una misura di sforzo dell'attuatore o un semplice fine corsa, i potenziometri sono poco affidabili e non servono perche' a te interessa avere una informazione 0-1, valvola libera, valvola ostruita, non ti serve sapere di quanto e' ostruita. Ti libereresti dal problema dell'offset, pensaci.




...
gironico




una ogni 100 livelli


postato il:
26.12.2019, alle ore 09:45
sulla basa di quanto detto da Roberto, con la funzione map fai lo zero per modo di dire con la pressione del pulsante....

esmpio al volo

 letturapotenziometro = analogRead(AnalogPotenziometro); //Leggo il valore del potenziomet

 aperturaproporzionale = map(letturapotenziometro, 438, pulsante, 50, 170); 
analogWrite(Pinvalvolapropavanti, aperturaproporzionale); 



la variabile pulsante , di defoult la imposti a zero,
metterei il pulsante su un interrupt

Se premuto pulsante si associa al valore rilevato in quell'istante alla lettura del potenziometro

Cosi facendo sposti lo zero di riferimento nella funzione map.

Come avrai notato, nella mia funzione map setto i valori di un pwm che va da 50 a 170 in base alla lettura del potenziometro



La vita è troppo breve per bere vini mediocri
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale