sábado, 2 de junio de 2012

# Arduino (osciloscopio con pantalla ulcd-144)

Ley en el blog bricogeek algo sobre un osciloscopio con arduino y una pantalla gráfica. Así que como no encontré mucha información, me pico el gusanillo y decidí investigar un poco.



Tenia una pantalla ulcd-144, la saque del cajón y me puse a trastear. La conecte al arduino y me puse  a trastear. La pantalla en cuestión se comunica de forma rerial y tiene una librería bastante completa.






Arudino cuenta con 6 pines analógicos de entrada salida con una resolucion de 1024 bits. Tiene una licitación de tensión de 5v , si le colectáis mas freiréis el micro. Esto quiere decir que el valor de cada bit es de  0,0048v. Para poder hacer prevas he conectado un potenciometro de la siguiente manera: 5v, salida al pin analógico 0, gnd. Los 5v los sacaremos de la misma placa. Podéis utilizar cualquier potenciometro dado que los único que nos variara es la sensivilidad del recorrido del dial. Hacia un lado a tope tendremos 0v y completamente hacia el otro 5v. conforme lo movamos hacia un lado y otro generaremos variaciones en la tensión (ondas o relieves) que nos servirán para hacer prevas.

Lo siguiente es plantear el código. Básicamente tomaremos el dato que nos devuelve en la lectura el pin digital. Como hemos comentado , la resolucion es de 1024 bits, esto nos dará con ov= 0 y con 5v=1024. Como nuestra pantalla solo tiene 128*128 pixels esta medida se nos saldria del rango, asi que esta medida la dividiremos por 8 que nos dara un valor máximo de 1024/8= 127(perfecto). Lo siguiente sera realizar un barrido lateral en la pantalla( lo realizaremos con un bucle for) y utilizar este dato para mostrar una linea en la pantalla que ira dibujando el cambio en la tensión que lea nuestro arduino.

Un primer código seria:


#include <displayshield4d.h> // librería necesaria para la pantalla ulcd-144              DisplayShield4d  lcd; // create an instance of the LCDvoid 
int Pinanalogico=A0; // definimos el pin de lectura analógico como el A0 int valor=0; // creamos la variable valor y le asignamos un valor de partida 0 int val1=0;// creamos la variable valor2 y le asignamos un valor de partida 0

void setup()
{
 

Serial.begin(9600); // iniciamos la comunicacion serial, esto es necesario.
lcd.Init(); // animalizamos la pantalla
}
void loop()
{
  lcd.setfontmode(OLED_FONT_TRANSPARENT); // le decimos a la pantalla que el fondo no tenga color 
lcd.Clear(); // borra la pantalla
delay(5); // espera 5micr segundos


for(int a=0; a<127 ; a++)  // se crea la variable a que solo sera valida para el contenido del bucle for y le decimos que mientras valga entre o y 127 valla sumando una unidad al valor a, este proceso se repetirá sin salir del bucle hasta que a no tenga un valor superior a 127.
{

   val=analogRead(Pinanalogico);// ,ee el valor del pin analógico y asigna el valor a la variable pinanalogico

  valor=valor2 /8; //le decimos que divida entre 8 el valor leído en el pin analógico 


lcd.line(a,val1,a,val1,lcd.RGB(0,255,0)); // pintamos una linea cuyo eje horizontal sera el valor de la variable a, esto quiere decir que ira cambiando a lo largo de la pantalla y su valor vertical sera el leído por el pin analógico

}

}

fin.



Como podéis apreciar el código inicial es bastante sencillo. Conforme vaya avanzando iré ampliando el post.

Un saludo a todos.




















2 comentarios:

Anónimo dijo...

Mi osciloscopio pesaba diez kilos.

El montaje es muy interesante, los datos de entrada pueden ser a tiempo real?

Orlando Slite.

Onuba el Andévalo dijo...

Esto es ya viejo y supongo que no me contestaras pero es una pregunta obligada sobre algo que no tiene pies ni cabeza mi pregunta es sobre el código que muestras ¿de dónde sale val1 pues no está declarada, por lo que supongo esto dará error no?