Leggere un segnale analogico e eseguire la gestione digitale

Devo trasmettere con Arduino Mega 2560 un segnale via seriale al Pc che io poi visualizzo con processing, (Qui non o nessun problema) Il problema nasce quando io devo anche attivare un uscita se: Ho un valore analogico che varia da 10 a 20 (Il valore trasmesso nella seriale va da 0 a 1023) e se ho un ingresso Digitale alto, in queste due condizzioni devo attivare un Uscita

if ( (valore >=10) && (valore <= 20) && (digitalRead(cheneso)== HIGH) ) {
   // istruzioni
}

stai attento: letture 10 e 20 sono molto vicine e di tensioni piccole. Puó essere che hai parecchi disturbi sopra. Ciao Uwe

Mi potreste scrivere il resto del codice completo in quanto sono alle prime esperienze, Il mio ingresso digitale è il 22 nel caso lo usi, mentre l' uscita è la 8. Dovrei leggere i valori piccoli in quanto dovrei prelevarli da un amplificatore di Strain Gauge il quale mi fornisce un segnale in Volt da 0 a 5 oppure da 4 a 20mA ma non saprei come convertire quest'ultimo (4 a 20mA Con meno disturbi).

/* AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor

This example code is in the public domain. */

void setup() { Serial.begin(9600); }

void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue, DEC); }

No. Ti aiuteremo sulla via che porta al risultato, ma non ha nessun senso scriverti la soluzione che non saprai usare perché devi cambiae una piccolezza e non ci riusirai perché non Ti sei imparato Arduino. Come pensavi di leggere l'interfaccia 4/20mA? Sei sicuro che é un segnale analogico? Prendi un libro su Arduino e impara le basi. Ciao Uwe

uwefed: 4/20mA? Sei sicuro che é un segnale analogico?

La 4/20 mA può essere sia digitale che analogica, anzi mi è pure capitato che invece di 4/20 mA andava da 0 a 20 mA, evviva il rispetto degli standard :)

Corretto nel dire che devo prendermi il manuale, Scorretto nel dire che il segnale 4-20 mA sia un ingresso analogico forse la mia descrizione non era corretta.Comunque sono certo che ho due possibilita di segnale dall' amplificatore sono: 1 è in tensione 0-5V o 0-10 V in Analogica. 2 Sono sicuro che in corrente l'amplificatore mi da un uscita che varia da 4-20mA da convertire probabilmente per arduino con un altro hardware o un elettronica predisposta per questo segnale.

Grazie, comunque spendero piu tempo nel leggermi il manuale oppure il Web, se potete datemi cortesemente un link dove posso trarre qualche informazione in più. Grazie

Allora spiegaci da dove viene quel segnale analogico. Hai altri segnali analogici da leggere? Come mai il Tuo segnale che leggi é ca 50mV o 100mV?

Scorretto nel dire che il segnale 4-20 mA sia un ingresso analogico forse la mia descrizione non era corretta.

Non capisco questa frase. Spieghi meglio?

Ciao Uwe

Mi spiego meglio,

Stando hai discorsi fatti in precedenza diciamo quando segue: Io ho un estensimetro il quale mi dovrebbe dare una certa flessione di una struttura meccanica. Il mio problema è che io devo leggere il segnale della flessione sempre ma devo, tramite un segnale digitale dirgli quando abilitare l'Uscita Digitale del valore minimo in quanto devo essere sicuro che la struttura sia al termine della sua flessione. Si intendono segnali analogici attivi quei segnali che sono alimentati dallo strumento che li trasmette (Questo è l'amplificatore) che a sia un segnale analogico 0-5 oppure 4-20mA alimentato a 24Vdc esternamente. Sulla misura dell'estensimetro è consigliato in corrente perchè da 0 a 4mA potrebbero esserci errori di lettura.

Ciao

Buona sera a tutti, devo dire che se inizi leggendo i manuali impari qualcosa(Spero), Questo codice scritto cosi è corretto oppure ho dimenticato qualcosa, non sono certo di due cose(La serial print la devo convertire in DEC,e la serial.printIn(0) devo metterla a 0 ???)

void setup() {
Serial.begin(9600); // Inizializza porta seriale.
pinMode(A0,INPUT); // Pin di lettura della Tensione
PinMode(22,INPUT); //Pin Ingresso per abilitare Uscita
pinMode(8,OUTPUT); // Pin Uscita da accendere
}

void loop() {

int analogica = analogRead(A0); // Legge valore Analogica.
Serial.print(analogica, DEC); // Stampa sempre il valore.
if (analogica >=10) && (analogica <= 20) && (digitalRead(22)== HIGH) { // Se il valore è compreso tra 10 e 20 e se 22 acceso
digitalWrite(8,HIGH); // Accende il LED.
} else {
Serial.println(0); // Se il valore è diverso, va semplicemente a capo.
digitalWrite(8,LOW); // Spegne il LED.
}
}

Grazie

Non Ti capisco; mi arrendo Ciao Uwe

Ciao Uwe,

Se il valore è diverso da 10 a 20 è corretto scrivere serial.printIn(0), cioè diverso da questi valori?

Ciao

Quello é chiaro, ma non mi é chiaro l' applicazione che stai facendo. Cercavo di capirlo per poterti darTi un consiglio utile. comunque se scrivi:

else {
    Serial.println(0); // Se il valore è diverso, va semplicemente a capo.
    digitalWrite(8,LOW);  // Spegne il LED.
  }

Ti scrive tantissime righe vuote. al posto di "Serial.println(0);" scrivi "Serial.println(" ");"; Ti stampa uno spazio e va a capo. Ciao Uwe

Uwe devo leggere un rilassamento che avviene durante una fase di piegatura di una lamiera, Mi spiego meglio (Per piegare una lamiera su una comune pressa piega la lamiera ha un rilassamento elastico che di norma da un errore durante la piega, quello che vorrei provare è stoppare il movimento in salita andando a misurare il rilassamento della stessa),L'estensimetro sarebbe posto dove cè l'utensile di piega. Quando io piego l'estensimetro si allunga e io rilevo una tensione, quando io risalgo l'estensimetro si riaccorcia in questo determinato momento vorrei valutare il rilassamento per poi correggerlo.

Il dubbio mio è che come hai detto tu i valori piccoli faccio fatica a leggerli

Ciao Grazie

non è printin, è PRINTLN (=PRINTLINE), solo che la L minuscola ha la stessa forma della i maiuscola, nel font del forum...

servicebaroni: Uwe devo leggere un rilassamento che avviene durante una fase di piegatura di una lamiera, Mi spiego meglio (Per piegare una lamiera su una comune pressa piega la lamiera ha un rilassamento elastico che di norma da un errore durante la piega, quello che vorrei provare è stoppare il movimento in salita andando a misurare il rilassamento della stessa),L'estensimetro sarebbe posto dove cè l'utensile di piega. Quando io piego l'estensimetro si allunga e io rilevo una tensione, quando io risalgo l'estensimetro si riaccorcia in questo determinato momento vorrei valutare il rilassamento per poi correggerlo.

Il dubbio mio è che come hai detto tu i valori piccoli faccio fatica a leggerli

Ciao Grazie

Ok per esempio per piegare una lamiera a 90 gradi devi piegarla di piú, diciamo 95 gradi perché c'é un ritorno elastico. Adesso Tu vorresti misurare di quanto é questo ritorno per piegare l' angolo necessario da avere dopo il ritorno 90 gradi?

Non ho capito dove e cosa vuoi misurare. Un estensimetro misura l' estensione di una parte metallica costruita in modo che c'é un estensione elastica. Per avere una grandezza di misura maggiore si montano 2 o 4 estensimentri sia sulla parte che si estende che sulla aprte che si accorcia e si collegano in un semiponte o ponte H.

Non ho capito dove e cosa vuoi misurare. Mi é chiaro che misuri un allungamento o accorciare del esposimetro ma non so a quale parte meccanica corrisponde.

Vedo impossibile tarare il sistema in modo che hai una lettura di 0 alla estensone massima per poi leggere il valore di ritorno. Secondo me devi registrare tutta l' estensione durante il processo e poi trovare i valori significativi.

Ciao Uwe