Buenas a todos,
estoy leyendo la salida de un sensor analógico mediante un pin analógico del Arduino Mega, el problema es que siempre lee 1024 bits en ese mismo pin.
La alimentación del sensor es con una fuente de alterna externa a Arduino, la cual tengo conectada al + del sensor y a la tierra del mismo, la cual también está conectada con la de Arduino.
Por último, comentar que con un multímetro mido 3.4V aproximadamente a la salida del sensor (lo que serían unos 29ºC más o menos, temperatura coherente con el calor que hace en mi casa) pero 1024 bits no deberían ser 5V?
int Text;
const int entrada=A1;
int T;
void setup() {
Serial.begin(9600);
Serial.println("Medida");
}
void loop() {
delay(2000);
//va a leer el pin A1 y lo va a almacenar en variables globales
T = analogRead(entrada)*2;//voy a obtener 8 bits, es decir, un valor entre 0 y 1024, por tanto, 1024 será 5V y la mitad 512 será 2.5V
Text=T*80/1024;
Serial.println(T);
Serial.println(Text);
Explicar que la multiplicación donde obtengo Text tan sólo es una regla de 3 que en nada afecta a la medida.
Gracias por responde.
Los 3.4V que he comentado son de DC, los cuales se corresponderían con un valor de 696bits, sin embargo, mi Arduino Mega detecta 1000, no se por qué motivo.
El sensor es uno genérico de mercado, no recuerdo el modelo, pero en su datasheet dice que tiene una salida de 0...10Vdc y un rango de temperatura de 80ºC.
Al tener una salida de 10V he hecho un simple divisor de tensión para no quemar el arduino.
Hi,
Surbyte mucho dicen que automaticamente la instruccion de input lo hace. Yo he tenido problemas y lo he resolvido haciendo el pinmode de input. Ademas que cuesta hacerlo. Nada una instruccion. Entonces porque declaras un pin de output. Esto no aplicaria para ambos casos.
No se de que estas hablando, creo que hablamos de cosas diferentes tauro.
El tiene un problema con analogRead(A0); no con ninguna entrada digital. No entiende a que te refieres.
const byte entrada = A1;
unsigned datoADC;
float Tension;
void setup() {
Serial.begin(9600);
Serial.println("Medida del sensor.");
}
void loop() {
//va a leer el pin A1 y lo va a almacenar en variables globales
datoADC = analogRead(entrada);//voy a obtener 8 bits, es decir, un valor entre 0 y 1024, por tanto, 1024 será 5V y la mitad 512 será 2.5V
Serial.print("ADC = "+String(datoADC)); // este valor debe estar entre 0 y 1023
Tension = datoADC*80.0*2.0/1024.0;
Serial.println(" => Tension = "+String(Tension));
delay(2000);
}
Y luego copia y pega lo que leas en el monitor serie.
Ya he probado el código y sigo teniendo el mismo problema, lo que aparece por el monitor serie es :
Medida del sensor.
ADC = 1023 => Tension = 159.84
Y yo con el multímetro en la entrada A1 estoy midiendo 3.3V
Hi,
Sugerencia. Conecta un cable del pin A1 a ground. Debes de leer zero. Luego conectas una bateria de 1.2 a la entrada lee el voltaje. Este debe de leer cerca de 1.2 voltios. Luego conectas una resistencia de 10K del pin A1 a los 5 voltios del arduino y debe de leer cerca de los 5 voltios del arduino. Estas pruebas de van a determinar que no tienes problemas con la entrada de A1 y tambien te va decir si estas haciendo la conversion correctamente. Siempe debes de comparar la lecturas del arduino con un voltimetro para poder determinar donde esta el problema.
A ver.. un esquema poque a esta altura 3.3V no puede darte 1023. Algo no va.
1023 es 5V siempre
Tienes GND unido al GND del sensor supongo?
Repito un esquema.
Ademas ya pongo en duda tu ecuación para obtener la tensión antes del divisor.
Dinos los valores de las resistencias y como esta todo conectado.
Dibuja a mano alzada, le tomas una foto, la subes como adjunto (solo .jpg .png) de menos de 2MB y usando las normas editas para que se visualice. Si no sabes mira al final la parte complementario donde explico como hacerlo y creo que por privado te lo he dicho tambien.
Estoy con Surbyte, ya que hay varias cosas que no entiendo.
La alimentación del sensor es con una fuente de alterna externa a Arduino, la cual tengo conectada al + del sensor y a la tierra del mismo, la cual también está conectada con la de Arduino.
La alimentación del sensor es alterna?
Si es alterna, conectas GND del arduino a neutro de la fuente de alimentación?
Sensor alimentado en alterna y que sale CC?
Como has hecho ese divisor de tensión?
Como mínimo hace falta un esquema con valores para poder analizar lo que esta pasando.
Por cierto Tauro, y para ver si se cierra el tema. pinMode() es para declarar entradas o salidas digitales, no analógicas. Cuando se invoca a analogRead(pin) en pin se conecta a un circuito analogico con un ADC para leer su valor.
Si alguna vez has resuelto algo con un ADC no habra sido por declararlo como una entrada digital sino por otra cosa.
Hi,
Aqui no entiendo esto. Tension = "datoADC80.02.0/1024.0". Para mi yo lo haria en esta forma (4.95/1024)*analogRead(entrada) = Igual al voltaje de entrada de la senal analoga. Esto te va a dar un voltaje de entrada de 3.4 voltios. Una vez que obtiones el voltaje del sensor entonces haces la calculacione de acuerdo al sensor.
En el datasheet del sensor pone que puede ser alimentado en altera a 24V o a 20Vdc, y la salida es siempre entre 0-10Vdc, por tanto, ha de tener un conversor aunque no he encontrado datos de que lo tenga.
La salida del transformador es positivo 24V y el neutro 0V que yo conecto al GND de Arduino para tener la misma referencia en ambos.
El divisor de tensión simplemente son dos resistencias en serie de 100 Ohmios, ya que no me importa que la corriente sea alta me valen esas dos resistencias de valor tan bajo.
Por último, comentar que he conectado el pin de 5V a la entrada A1 y mi placa de Arduino no es capaz de darme 5V, sino 3.3V, y yo leyendo A1 saco 4V, no se por qué esa diferencia ni por qué mi Arduino no es capaz de dar 5V. Lo tengo alimentado con el USB del ordenador, no se si eso será un problema.
Esa ecuación se debe a que yo estaba calculando temperatura en el código que pasé anteriormente, no voltaje. El 80 es el rango de temperatura de mi sensor.
El problema que no diera 3.3V era por alimentar por USB, he alimentado con un transformador y ya saca 4.7V por la salida de 5V (error asumible). El problema se ha solucionado pero ahora al leer 1023 saca 4.00V y deberían ser 5. No encuentro el error de programación, dejo por aquí la conversión que he hecho.