SKETCH
#include "U8glib.h"
U8GLIB_ST7920_128X64_1X u8g(6, 5, 4 ,7); // CONEXION SERIE
float sensor=1025 ;
byte x;
float y[128];
byte punto;
long distancia;
long tiempo;
void draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawFrame(0,0,128,56);
u8g.setFont(u8g_font_04b_03);
u8g.setFontPosTop();
u8g.drawStr(0, 56, "Distanc:");
u8g.setFontPosTop();
// punto
for( punto = 1; punto <= 127; punto++ ) {
u8g.drawPixel(punto,55-54*y[punto]/1024);
}
// barra de nivel
u8g.drawFrame(32,57,75,6);
u8g.drawBox(33,58,74*(sensor/1024),4);
u8g.setColorIndex(0);
u8g.drawBox(33+74*(sensor/1024),58,73-74*(sensor/1024),4);
u8g.setColorIndex(1);
//u8g.drawFrame(32,57,75,6);
//leyenda
String s = String(int( distancia)) ;
u8g.setPrintPos(109, 56);
u8g.print(s);
// u8g.drawStr(109, 56, s);
}
void setup(void) {
// Serial.begin(9600);
pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
}
void loop(void) {
// picture loop
u8g.firstPage();
digitalWrite(9,LOW); /* Estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(9, HIGH); /* envío del pulso */
delayMicroseconds(10);
tiempo=pulseIn(8, HIGH);
distancia= int(0.017*tiempo);
sensor=1024*distancia/338;
//
x= x+1;
if (x>=126) {
x=1;
}
y[x]=(sensor);
for( punto = 1; punto <= 127; punto++ ) {
}
// // rebuild the picture after some delay
do {
draw();
} while( u8g.nextPage() );
// delay(100);
}
CONEXIONES:
IMPORTANTE: Para conectar en serie con el arduino y no quemar nada tube que desoldar dos resistencias como indico aquí. No hay que hacelo con todos los LCD, pero con mi modelo de lcd de no hacerlo se puede quemar.
domingo, 29 de noviembre de 2015
lunes, 16 de noviembre de 2015
Monitoreo de un sensor con QC12864-B y arduino.(Conexión serie.)
En este caso, por simplicidad y dejar libre el mayor número de pines, hemos utilizado comunicación serie entre el arduino y el LCD. En mi modelo, el QC1286-B-1, para poder hacerlo hay que quitar un par de resistencias de 0 Ohmios de la trasera del LCD: R9 y R11, y esto es importante porque de no hacerlo estaremos puenteando los 5V con masa y en el mejor de los casos no va a funcionar, y en el peor nos cargaremos el arduino y/o el LCD.
IMPORTANT! For this LCD to work using this method, you need to de-solder R9 and R11 at the back panel of the LCD.
Por lo que he visto en internet, en la misma pagina donde saqué la información del desoldado , en otros proyectos podremos seguir usando nuestro LCD en modo paralelo uniendo el pin PSD a la salida 5V, tal y como se hacía con otros modelos anteriores de QC12864 . (5V+.conexión paralelo y a masa para serie). Quien tenga uno de los modelos más antiguos no va a tener que hacerles nada porque ya vienen sin el puenteo de estas resistencias.
También puede usarse en modo paralelo, por lo que se gana algo en velocidad, pero tan poca que no merece la pena sacrificar esos 8 pines ni el cableado, como ventaja no hay que desoldar nada, pero las conexiones que yo indico en el esquema para paralelo no sirven y habrá que hacer otras, también utilizará 7 ó 8 pines más del arduino, de ahí la conveniencia de usar la conexión en serie.
Conexiones.
Para simular el sensor he representado un potenciómetro, el de arriba de la imagen. El de la parte inferior será de 10K y sirve para elegir el contraste adecuado.
La foto de los pines es la parte trasera del LCD, lo que queda abajo, entonces una vez apollada en el protoboard la parte de arriba corresponde con la derecha del esquema de conexiones y la de abajo con la izquierda.
El sketch
El programa está basado en la librería u8glib , que puede descargarse aquí y permite dibujar gráficos no sólo en el
QC12864, sino también en otros muchos modelos, tanto en conexión serie como paralelo.
Modificando el Delay del final el escanéo puede ser ralentizado. La lectura que muestra es la que lee la entrada analógica, esto es entre 0 y 1024 que equivalen de 0 a 5V,
https://www.youtube.com/watch?v=pQ-HUbdc4Cg
#include "U8glib.h"
U8GLIB_ST7920_128X64_1X u8g(6, 5, 4 ,7); // For ST7920_128X64 serie - QC12864
// U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); //For ST7920_128X64 paralelo
float sensor=1025 ;
byte x;
float y[128];
float y2;
float ycal;
byte punto;
void draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawFrame(0,0,128,56);
u8g.setFont(u8g_font_04b_03);
u8g.setFontPosTop();
u8g.drawStr(0, 56, "Sensor:");
u8g.setFontPosTop();
// punto
for( punto = 1; punto <= 127; punto++ ) {
ycal=55-54*y[punto]/1024;
u8g.drawLine(punto-1,y2,punto,ycal);
y2=ycal;
}
// barra de nivel
u8g.drawFrame(32,57,75,6);
u8g.drawBox(33,58,74*(sensor/1024),4);
u8g.setColorIndex(0);
u8g.drawBox(33+74*(sensor/1024),58,73-74*(sensor/1024),4);
u8g.setColorIndex(1);
// Lectura en número
String s = String(int( sensor)) ;
u8g.setPrintPos(109, 56);
u8g.print(s);
}
////////////////////
void setup(void) {
// assign default color value
if ( u8g.getMode() == U8G_MODE_R3G3B2 )
u8g.setColorIndex(255); // white
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
u8g.setColorIndex(3); // max intensity
else if ( u8g.getMode() == U8G_MODE_BW )
u8g.setColorIndex(1); // pixel on
}
void loop(void) {
// picture loop
u8g.firstPage();
//u8g.prepare();
sensor=analogRead(A0);
// Posición x
for( x= 0; x <= 126; x++ ) {
y[x]= y[x+1];
}
y[127]=(sensor);
/// Dibujar
do {
draw();
} while( u8g.nextPage() );
// delay(100);
}
Suscribirse a:
Entradas (Atom)