Paso 3: El código
Aquí está el código:
/*
Termómetro basado en máximas DS600u + chip
*/
#include "U8glib.h"
#include < math.h >
U8GLIB_ST7920_128X64_4X u8g (8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); Com de 8 bits: D0... D7: 8,9,10,11,4,5,6,7 at = 18, di = 17, rw = 16
void u8g_prepare(void) {}
u8g.SetFont(u8g_font_6x10);
u8g.setFontRefHeightExtendedText();
u8g.setDefaultForegroundColor();
u8g.setFontPosTop();
}
void setup(void) {}
voltear la pantalla, si es necesario
u8g.setRot180();
asignar valor de color por defecto
Si (u8g.getMode() == U8G_MODE_R3G3B2)
u8g.setColorIndex(255); Blanco
else if (u8g.getMode() == U8G_MODE_GRAY2BIT)
u8g.setColorIndex(3); intensidad máxima
else if (u8g.getMode() == U8G_MODE_BW)
u8g.setColorIndex(1); píxel de
u8g.setContrast(0x30);
pinMode (13, salida);
digitalWrite (13, HIGH);
u8g_prepare();
}
void draw(void) {}
suministro de flotador = 4,91; Aquí debe ser entrado en la tensión de alimentación medida de la placa arduino
Lea el voltaje de salida del sensor
lectura de int = analogRead(0);
Float v_out = (lectura * fuente) /1.024;
Mostrar en la pantalla LCD la temperatura
Float temperatura = (v_out - 509) / 6.45;
temp de Char [5];
dtostrf(temperature,5,1,Temp);
u8g.drawStr(4,24,"Temperature:");
u8g.drawStr(76,24,Temp);
u8g.drawStr (108,24,"\260C");
}
void loop(void) {}
lazo de la foto
u8g.firstPage();
{}
Draw();
} y (u8g.nextPage());
reconstruir la imagen después de cierto tiempo
Delay(1000);
}
Hay algunos puntos difíciles en el código.
He puesto en negrita.
1) porque el ADC interno del Atmega utiliza como referencia la tensión de alimentación para medir potencial de tensión analógica, que no es medida de proporción a la tensión de alimentación, pero fijo por la viruta del sensor, si la tensión de alimentación varía, puede ocurrir un error. Cálculo aproximado dice que 50mV fuente de variación puede causar error de la temperatura de 1 grado. Es la solución para mejorar la precisión para medir el voltaje exacto de la placa de Arduino de la forma que debe usarse - si desea utilizar el termómetro de Arduino por el USB, tienes que medir la tensión de alimentación de la Junta para este caso; y respectivamente, si se va a utilizar el termómetro como dispositivo independiente suministrado por adaptador AC/DC - entonces, la tensión de alimentación del tablero + escudo se medirán en esta condición. En mi caso el dispositivo se suministra por el USB, y he medido 4.91V en los pines de Arduino "5V". Así que puse este valor en el bosquejo.
2) es bueno que en la pantalla LCD se puede ver el símbolo de grados «°». El problema aquí es que las pantallas diferentes tienen diferentes tablas de ASCII, y qué es exactamente el número octal correspondiente al símbolo es difícil de decir. Hay dos soluciones posibles:
A) para leer la hoja de datos del módulo LCD / driver si se dan las tablas de ASCII
B) escribir un boceto para mostrar la tabla ASCII todo escrita en la ROM del LCD, para ver donde aparece el símbolo y calcular/véase el número decimal correspondiente a él. Para convertir este valor al número octal y en el bosquejo.
He utilizado el segundo enfoque... y de la manera más fácil :-) - hay "Ejemplos" en la biblioteca u8glib. El programa "GraphicsTest" imprime ambas tablas ASCII almacenadas en el chip controlador ROM. Allí encontré que el símbolo necesario tiene el número equivalente octal 260.
Los chicos, que desean implementar este proyecto en el Arduino debido, quisiera consejos para insertar en el código también la siguiente línea:
analogReadResolution(12) de ;
en el proceso de configuración y luego en su lugar a dividir en 1.024 dividir en 4.096. Esto mejorará la resolución del ADC y de alguna manera también la precisión del termómetro.