Vai al contenuto
PLC Forum


Protezione Ingresso Porta Arduino A0


roberto8303

Messaggi consigliati

Come da titolo devo proteggere la porta analogica di arduino da sovratensioni, devo lavorare con una tensione da 0,6v ed 2,5v che mi da un sensore galleggiante, esso pero è alimentato a 12vdc da una batteria al piombo, ovviamente per stare tranquillo voglio proteggere la porta A0 di arduino, ho pensato ad uno zener da 4,8volt collegato come da schema tra il pin e la massa senza alcuna resistenza vabbene o sbaglio?

bd455f0280eb0bb53032fec2b65fad71.png

Link al commento
Condividi su altri siti


Per limitare a meno di 5 V va bene. L'unico problema potrebbe essere che se l'uscita del sensore, in caso di guasto potesse erogare correnti elevate lo zener potrebbe guastarsi e magari aprirsi, annullando così l'effetto di protezione. Devi mettere un fusibile sull'alimentazione del sensore che ti garantisca l'intervento ad un livello di corrente che eviti il danneggiamento dello zener.

Link al commento
Condividi su altri siti

Il sensore e il classico galleggiante a leva per il carburante con la resistenza variabile pero meglio essere sicuri quindi il fusibile di quanti mA dovrei metterlo?poi un altra domanda devo metterlo all uscita del segnale del sensore in serie al diodo zener e pin arduino? E un applicazione chr mi sta dando rogne, c e una centralina del gruppo elettrogeno che utilizza questo galleggiante solo per mandare il gruppo in avaria con riserva carburante,il cliente chiede di avere un indicatore per vederr quando fanno il rifornimento. Inizialmente installai il classico strumenti vdo con la lancetta ma dava problemi alla centralina provocando l avaria anche se il serbatoio era pieno. Quindi ho pensato ad un sistema digitale di misura con arduino.

Link al commento
Condividi su altri siti

Molto dipende dallo zener, devi verificare la corrente massima ammessa ed agire di conseguenza.

Se, ad esempio, fosse uno zenere da 400 mW avresti una corrente massima <85mA.

Se il fusibile lo metti in serie alla lina di misura avrai comunque una piccola caduta di tensione, probabilmente trascurabile.

Ci vuole un fusibile del tipo super rapido. Se riesci a reperirme da 50 mA super rapidi hai la protezione (quasi) perfetta.

Link al commento
Condividi su altri siti

Restando in tema per arduino, ho bisogno di realizzare quindi la bar Graph sul lcd ho questa libreria, ma come posso fare che la stringa sull lcd aumenti con questa proporzione, ingresso A0= 0,1024 ed visualizzazione della bar graph al contrario cioe tutta piena con 0 volt e vuota con 2,5volt? questo il codice ma non riesco a mappare il segnale A0 perche è dichiarato come byte e non intero

E poi avrei bisogno di scrivere alla prima riga LIVELLO GASOLIO e sotto la bar graph che aumenta e diminusce, ma gia in questo esempio di codice non riesco a spostare la bar graph all seconda riga

#include <LiquidCrystal.h>
#include <LcdBarGraph.h>
 
byte lcdNumCols = 16; // -- number of columns in the LCD
byte sensorPin = 0; // -- value for this example
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // -- creating LCD instance
LcdBarGraph lbg(&lcd, lcdNumCols);  // -- creating
 
void setup(){
  // -- initializing the LCD
  lcd.begin(2, lcdNumCols);
  lcd.clear();
  // -- do some delay: some time I've got broken visualization
  delay(100);
}
 
void loop()
{
  // -- draw bar graph from the analog value readed
  lbg.drawValue( analogRead(sensorPin), 1024);
  // -- do some delay: frequent draw may cause broken visualization
  delay(100);
}
 
Modificato: da roberto8303
Link al commento
Condividi su altri siti

Non puoi passare il valore analogico letto devi rielaborarlo facendo la proporzione

Nel tuo caso devi convertire un valore da 0..1023 a 255..0

255 - (ADletto >> 2)

che per AD = 0 restituisce 255

per AD = 1023 ti restituisce 0

Link al commento
Condividi su altri siti

c'e' la funzione map per fare questo , cioe' una scalatura tramite interpolazione lineare ;)

Modificato: da walterword
Link al commento
Condividi su altri siti

allora sono riuscito ad eleborare l ingresso con la mappatura map, ma come si fa ad spostare la bar graph alla riga di sotto dell lcd? perche sopra devo scrivere livello è il numero in percentuale da 0 a 100%

Link al commento
Condividi su altri siti

comunque la bargraph si puo ' fare anche senza libreria dedicata .....basta mettere i caratteri giusti al posto giusto con la libreria I2C solita

Link al commento
Condividi su altri siti

si lo so ma è esce un codice abbastanza lungo è un po noioso, Livio dici che c è un istruzione? ho provato set cursor ma non va...oggi riprovo

Link al commento
Condividi su altri siti

si quella ho provato ad inserirla nel loop prima di lbg.drawValue( analogRead(sensorPin), 1024);

evidentemente devo provare nel void setup...

Link al commento
Condividi su altri siti

niente non va, prima mi dice errore di dichiarazioni varibile poi la dichiaro come byte prima del setup e non succede nulla la barra parte sempre a da sopra...

Link al commento
Condividi su altri siti

ragazzi ho scoperto il problema leggete qui

I am confused. Here is how to use lcd.begin()


and the library has:

lcd.begin(2, lcdNumCols);

The two arguments are entirely swapped. I don't know if the rest of the library would work at all after seeing this line in the library sample code. The library author definitely loses some credibility by screwing up the most basic thing of lcd. I suggest you use the right thing: lcd.begin(lcdNumCols, 2); and see what happens (I bet nothing different).

If what you mean by having no effect is adding the lcd.setCursor(0,1); has no effect and the bar graph is still on row 0, then the answer is simple: the library is hardwired to display bar graph on row 0 and a nuber on row 1. It's not terribly difficult to read through. Just find the location in the lib and make the change you need.

devo mettere mano nella libreria ma come si fa???

:toobad:

:blink:

Modificato: da roberto8303
Link al commento
Condividi su altri siti

Se metto lcdNumRow = 1 mi disegna la barra nella seconda riga. Il problema nel mio caso è che i caratteri sono sbagliati, forse dipende dal display.

La libreria è la 1.5.

Ciao.

Link al commento
Condividi su altri siti

grazie livio, prima di andarlo ad installare ho un unico dubbio, l alimentazione dalla batteria con il motorino d avviamento o l alternatore se potrebbe dare qualche problema ad arduino... -_-

Link al commento
Condividi su altri siti

l alimentazione dalla batteria con il motorino d avviamento o l alternatore se potrebbe dare qualche problema ad arduino... sleep.png

Non potrebbe, ma è quasi certo che lo darà qualche problema. ;)

Metti un regolatore tipo LM7808 tra batteria ed Arduino, così limiti la tensione a 8V, che fa solo bene al regolatore di Arduino. Poi se ci metti in serie, dalla parte della batteria, un bella induttanza di filtro con 2 elettrolitici e 2 ceramici, realizzando un filtro a "pigreco", dovresti ammazzare i disturbi che genera l'alternatore.

Cura bene gli zeri volt.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...