Traté de hacer un sistema de detección usando arduino UNO R3 con sensor LM35 y una unidad de visualización de siete segmentos con dos dígitos.
Hice todas las conexiones de la siguiente manera (sé que es Missy pero creo que el cableado es correcto):
e intenté hacer este programa pero no funcionó:
int analogPin = 3; // potentiometer wiper (middle terminal) connected to analog pin 3
// outside leads to ground and +5V
int val = 0; // variable to store the value read
byte seven_seg_digits[10][7] =
{
{ 1,1,1,1,1,1,0 }, // = 00
{ 0,1,1,0,0,0,0 }, // = 01
{ 1,1,0,1,1,0,1 }, // = 02
{ 1,1,1,1,0,0,1 }, // = 03
{ 0,1,1,0,0,1,1 }, // = 04
{ 1,0,1,1,0,1,1 }, // = 05
{ 1,0,1,1,1,1,1 }, // = 06
{ 1,1,1,0,0,0,0 }, // = 07
{ 1,1,1,1,1,1,1 }, // = 08
{ 1,1,1,0,0,1,1 }, // = 09
};
void setup()
{
Serial.begin(9600); // setup serial
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
val = analogRead(analogPin); // read the input pin
float temp= val*5 ; //calculating the voltage
temp /= 1024 ; //calculating the voltage
temp = (temp) * 100 ;// as 1V/100c
int pin=0 ; //for first seven segment pins 0,1,2,3,4,5,6 is connected with a,b,c,d,e,s,g
int pin1=7;
Serial.println("temperature in C =");Serial.println(temp); // debug value
int tempL; //low number
tempL=int(temp*10);
int tempH;//high number
tempH=int(temp/10);
for(int j=0;j<7;j++)
{
digitalWrite(pin,seven_seg_digits[tempL-1][j]);
pin++;}
for(int i=0;i<7;i++)
{
digitalWrite(pin1,seven_seg_digits[tempL-1][i]);
pin1++;}
delay(2000);
}
Tengo un problema de remolque: 1- pin 0 y pin 1 siempre altos. 2- cuando calculo la temperatura al convertir el número devuelto a voltios y luego a temperatura, tuve una respuesta incorrecta como veo en el monitor y el número de la pantalla también es incorrecto, el número que aparece no es real ni siquiera para
cuando veo la salida de LM35 usando un medidor de voltaje, veo 0.3 [v], lo cual es sensato porque es verano y la temperatura es de alrededor de 30 aquí en Medio Oriente.
este video lo grabe en vivo (disculpen mi mal ingles) para explicar mas : http://youtu.be/iQobAe4ie_8
y espero que alguien pueda explicar sobre la "compensación" de la que habla este enlace .
Adivinar cuál es el problema al que te enfrentas porque no das suficientes detalles.
int val = 0;
val = analogRead(analogPin); // read the input pin
int temp= val*5 ; //calculating the voltage
temp /= 1024 ; //calculating the voltage
temp = (temp) * 100 ;// as 1V/100c
Está utilizando matemáticas enteras, para Arduino esto significa que tanto val como temp son números enteros que van desde -32768 a +32767.
Leyó un valor de ADC, este valor oscila entre 0 y 1023 y no configuró el voltaje de referencia. Esto significa que leer 0 es igual a GND / 0V y leer 1023 es igual a +Vdd = 5V (aprox. varía con su fuente de alimentación, posiblemente sea USB).
Digamos que su voltaje de suministro es de 5V y el voltaje en el pin de entrada es de 0.7V. El analogRead(analogPin);
devolverá 1024 × 0.7 / 5 = 143.
A continuación, multiplica ese número: 143 × 5 = 715, hasta ahora todo bien.
Luego divide este número por 1024, aquí es donde su programa falla: 715 / 1024 = 0.689 pero estamos haciendo cálculos de números enteros , y los números enteros solo contienen números enteros y todos los números después del punto decimal serán cortados. También lo temp
es 0 en este punto. No importa cuánto multipliques el resultado a partir de este punto, siempre será 0
.
Cambie int temp
a float temp
, eso debería resolver su problema. Le indica al compilador que no use números enteros, sino que use un número flotante en su lugar.
Aquí también hay un error:
int tempL; //low number
tempL=int(temp*10);
int tempH;//high number
tempH=int(temp/10);
cambiarlo a:
int tempH;//high number
tempH=int(temp/10);
int tempL; //low number
tempL=int(temp-tempH*10);
yippie
Yahya Tawil
yippie
Yahya Tawil
Yahya Tawil
yippie
Yahya Tawil