Cree un osciloscopio con el SainSmart Mega2560 con el protector TFT LCD y la pantalla táctil a color de 3.5 ": 8 pasos (con fotos)

Cree un osciloscopio con el SainSmart Mega2560 con el protector TFT LCD y la pantalla táctil a color de 3.5 ": 8 pasos (con fotos)

Tabla de contenido:

Anonim

Este instructivo te mostrará cómo construir una pantalla táctil portátil.

Osciloscopio por menos de 40 U $!

El osciloscopio es uno de los instrumentos electrónicos más potentes que

Está disponible para aficionados a la electrónica, experimentadores e ingenieros. Es

Se utiliza principalmente para medir señales que varían con el tiempo. En cualquier momento tienes una señal.

que varía con el tiempo (lenta, rápida y / o periódicamente) que puede usar

Un osciloscopio para medirlo, visualizarlo y encontrar cualquier imprevisto.

características en el mismo.

Podemos usar un osciloscopio para observar y estudiar las características de la señal.

que de otra manera no podríamos ver.

Aprenderá sobre el convertidor analógico a digital (ADC) de Arduino.

Utilizaremos la entrada A0 analógica de Arduino para muestrear y capturar el tiempo.

variando señales al escribir un programa que también mostrará esas señales

en una pantalla táctil TFT LCD de 3.8 ", e ingresaremos datos para modificar el

Comportamiento del osciloscopio, utilizando las capacidades táctiles de la pantalla.

Antes de empezar a construir y programar, repasemos algunos conceptos básicos.

Características de un osciloscopio.

Estas son funciones que puede controlar en la mayoría de los osciloscopios:

Velocidad de barrido. La velocidad de barrido se mide generalmente en unidades de tiempo por distancia, como milisegundos / centímetro o milisegundos por división. Esto también podría

Ser referido como la sensibilidad horizontal.

Sensibilidad vertical. Esa es la medida de cuán sensible es el punto de visualización

Es la tensión aplicada a los terminales de entrada. Por lo general se mide en

Voltios / centímetro o voltios por división.

UNA señal de disparo Se puede generar cuando el valor de la señal alcanza alguna

nivel particular - el nivel de disparo. En la mayoría de los casos se puede configurar el gatillo.

nivel a un valor de voltaje de su elección. Se utiliza un disparador para capturar y

estabilizar la forma de onda en la pantalla, o esperar un evento antes

capturando los datos

El osciloscopio, como mi DVM CC de 4 canales, no será tan preciso como

una unidad comercial, pero funciona bastante bien para baja tensión y bajas frecuencias.

Suministros:

Paso 1: ACTUALIZACIÓN: bosquejo para convertir Oscope a DVM de 3 canales con pantalla gráfica + caja Lego

¡Gracias a todos los que votaron por mí! Este Instructable ganó el 3er premio en el concurso Arduino y el primer premio en el concurso Gadget …

Se incluyen imágenes y código para convertir su oscope a un DVM de 3 canales y para mostrar la salida de cada canal individualmente en la pantalla de alcance presionando una tecla suave en la pantalla. (el tercer botón desde la parte superior)

necesitará un conector pin en forma de L si desea tener la flexibilidad de insertar puentes, de lo contrario, simplemente doble los pines en un lado de los puentes para insertarlos en los canales analógicos (A0-A3) para usarlos como sus sondas.

Solo descarga el croquis y súbelo al Arduino.

Puede etiquetar cada canal individualmente, solo cambie la redacción en el boceto.

También he hecho un gabinete lego para el alcance … verifica las fotos.

Paso 2: Lista de piezas

Necesitará:

  • Una placa Sainsmart mega2560 con pantalla táctil de 3.5 "tft lcd y kit de pantalla
  • Una PC con el IDE arduino y un puerto USB libre.
  • Un cable usb
  • Cables de salto
  • Biblioteca UTFT y la biblioteca UTouch de Henning Karlsen. web:

Paso 3: Construye el Hardware.

La construcción del osciloscopio es bastante simple. Solo tienes que juntar las partes del kit Sainsmart. Todo lo que necesitas hacer es agregar dos puentes; uno para tierra, y el otro para usar como sonda de prueba de su osciloscopio.

Deberá doblar los pines en un lado de los cables de puente e insertarlos en el pin A0 y el pin GND del Arduino (vea las imágenes para obtener más detalles), antes de instalar el protector de pantalla, ya que el protector de pantalla cubrirá los puertos una vez está en su lugar

Conecta el escudo en el Arduino, luego conecta la pantalla en el escudo, ¡y listo!

Ahora probemos la pantalla antes de convertirla en un osciloscopio.

Paso 4: El Software: Prueba de la biblioteca UTFT.

Si terminó de armar su kit, conéctelo al cable USB que se conecta a su PC que ejecuta el IDE de Arduino.

Si no lo ha hecho, descargue las bibliotecas UTFT y UTouch y cópielas en la carpeta de bibliotecas donde tiene instalado el IDE arduino.

Si las bibliotecas se instalaron correctamente, verá las opciones UTFT y UTouch cuando haga clic en la opción Archivos y desplácese hacia abajo para ver ejemplos.

Si la opción UTFT está en su lista de menú, selecciónela, luego seleccione arduino, y finalmente, UTFT_Demo_320x240. Esto cargará el programa de demostración fresco.

Con el programa cargado en el IDE, desplácese hacia abajo para ver el siguiente código:

// Descomenta la siguiente línea para Arduino 2009 / Uno

// UTFT myGLCD (ITDB32S, 19,18,17,16); // ¡Recuerde cambiar el parámetro del modelo para adaptarse a su módulo de visualización!

// Descomenta la siguiente línea para Arduino Mega

UTFT myGLCD (ITDB32S, 38,39,40,41); // ¡Recuerde cambiar el parámetro del modelo para adaptarse a su módulo de visualización!

Comente el comando para la UNO, y descomente el comando para la Mega, como lo hice.

Ahora, vaya al menú de herramientas, haga clic en la placa y seleccione Arduino Mega 2560 o Mega ADK, si aún no está seleccionado.

Haga clic en verificar para compilar el programa. Si no hay errores, haga clic en cargar para cargar y ejecutar el programa.

Si todo está bien, verá un programa de demostración genial en ejecución. Las imágenes en este paso muestran capturas de pantalla de la demostración en ejecución.

Paso 5: El software: UTouch Library Test.

Ahora tenemos que probar la biblioteca de Utouch

Ve al menú de archivos y selecciona; Ejemplos> UTouch> Arduino> Utouch_ButtonTest y cargar el programa al IDE.

Verificar y ejecutar el programa.

Debería ver un teclado en la pantalla y, al presionar las teclas numéricas, deberían aparecer en la parte inferior de la pantalla.

Si todo salió bien, estamos listos para cargar el software del osciloscopio.

Paso 6: El Osciloscopio

A continuación, encontrarás el croquis del osciloscopio. Antes de copiar y pegar el programa, revisemos algunas limitaciones y expliquemos el programa.

He tenido que hacer una buena cantidad de investigación para encontrar el código, y muchos fragmentos han sido "tomados en préstamo" de varias fuentes.

Dividí el programa en varias subrutinas para que sea más fácil de entender. El código está bien documentado, pero si tiene problemas para entenderlo, deje un comentario e intentaré explicarlo.

El ancho de banda del osciloscopio está limitado a aproximadamente 1 khz, pero hay margen de mejora.

La entrada está limitada a una forma de onda de pico a pico de 5 voltios, a menos que use un divisor de voltaje en la entrada, y también se limita a formas de onda positivas de 0 a 5 voltios.

Utilicé un código que encontré en: http://www.microsmart.co.za/technical/2014/03/01/advanced-arduino-adc/ para ajustar el tiempo de muestreo de ADC.

Los gráficos y las funciones táctiles se modificaron y tomaron prestados de los ejemplos de Henning Karlsen proporcionados en sus bibliotecas.

Utilicé un regulador de voltaje LM 317 y un temporizador 555 IC como ocilador astable, para crear las señales utilizadas para probar la entrada del osciloscopio.

Espero que hayas disfrutado leyendo y con suerte construyendo este instructable. Si te parece útil, por favor vota en los concursos.

Nota: Incluí las bibliotecas sKetch, UTFT y UTouch en el archivo library.zip para aquellos que tengan problemas.

Copia y pega el boceto en tu IDE de Arduino.

// ---------------------- INICIAR PROGRAMA

/*--------------------------------------------------------------

Programa: OscopetouchLCDmega

Descripción: Osciloscopio digital con datos mostrados.

en color TFT LCD con pantalla táctil

Hardware: placa sainsmart mega2560 con pantalla táctil de 3.5 "tft lcd y kit de pantalla

http: //www.sainsmart.com/home-page-view/sainsmart …

Software: Desarrollado usando el software Arduino 1.0.3

Este programa requiere la librería UTFT y el

Biblioteca UTouch de Henning Karlsen.

web:

Versión 1.00

Fecha: 5 de abril de 2014.

Autor: johnag

--------------------------------------------------------------*/

#incluir

#incluir

// Declara cuales fuentes usaremos

extern uint8_t SmallFont;

// Inicializar pantalla y funciones táctiles

UTFT myGLCD (ITDB32S, 38,39,40,41);

UTouch myTouch (6,5,4,3,2);

// Declarar variables

char buf 12;

int x, y;

int Input = 0;

muestra de bytes 320;

byte OldSample 320;

int StartSample = 0;

int EndSample = 0;

int Max = 100;

int Min = 100;

modo int = 0;

int dTime = 1;

int tmode = 0;

int Trigger = 0;

int SampleSize = 0;

int SampleTime = 0;

int dgvh;

int hpos = 50; // establece 0v en rejilla horizontal

int vsens = 4; // sensibilidad vertical

// Definir varios prescaler ADC

const unsigned char PS_16 = (1 << ADPS2);

const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);

const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);

const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

// ------------ Iniciar Subrutinas ---------------------------------- -

// -------- dibujar botones sub

Botones nulos () {

myGLCD.setColor (0, 0, 255);

myGLCD.fillRoundRect (250, 1, 310, 50);

myGLCD.fillRoundRect (250, 55, 310, 105);

myGLCD.fillRoundRect (250, 110, 310, 160);

myGLCD.fillRoundRect (250, 165, 310, 215);

}

// ------- posición de pantalla táctil sub

toque vacío () {

while (myTouch.dataAvailable ())

{

myTouch.read ();

x = myTouch.getX ();

y = myTouch.getY ();

retraso (500);

if ((y> = 1) && (y <= 50)) // Fila de retardo

{

if ((x> = 250) && (x <= 300)) // Botón de retardo

waitForIt (250, 1, 310, 50);

modo = modo ++;

{

myGLCD.setColor (255, 0, 0);

myGLCD.drawRoundRect (250, 1, 310, 50);

// Seleccionar tiempos de retardo

if (mode == 0) dTime = 0;

if (mode == 1) dTime = 1;

if (mode == 2) dTime = 2;

if (mode == 3) dTime = 5;

if (mode == 4) dTime = 10;

if (modo == 5) dTime = 20;

if (mode == 6) dTime = 30;

if (mode == 7) dTime = 50;

if (modo == 8) dTime = 100;

if (modo == 9) dTime = 200;

if (modo == 10) dTime = 500;

if (modo> 10) modo = 0;

}}

if ((y> = 70) && (y <= 120)) // Fila de activación

{

if ((x> = 250) && (x <= 300)) // Botón de activación

waitForIt (250, 55, 310, 105);

tmode = tmode ++;

{

myGLCD.setColor (255, 0, 0);

// Seleccionar valor de activación de software

myGLCD.drawRoundRect (250, 55, 310, 105);

if (tmode == 1) Trigger = 0;

if (tmode == 2) Trigger = 10;

if (tmode == 3) Trigger = 20;

if (tmode == 4) Trigger = 30;

if (tmode == 5) Trigger = 50;

if (tmode> 5) tmode = 0;

}}

if ((y> = 130) && (y <= 180)) // fila de posición H

{

if ((x> = 250) && (x <= 300)) // Botón de posición H

waitForIt (250, 110, 310, 160);

hpos = hpos ++;

{

myGLCD.setColor (255, 0, 0);

myGLCD.drawRoundRect (250, 110, 310, 160);

myGLCD.clrScr ();

botones();

if (hpos> 60) hpos = 50;

}}}}

// ---------- espere a que se toque la sub

void waitForIt (int x1, int y1, int x2, int y2)

{

while (myTouch.dataAvailable ())

myTouch.read ();

}

// ---------- dibujar rejilla sub

void DrawGrid () {

myGLCD.setColor (0, 200, 0);

para (dgvh = 0; dgvh <5; dgvh ++) {

myGLCD.drawLine (dgvh * 50, 0, dgvh * 50, 240);

myGLCD.drawLine (0, dgvh * 50, 245, dgvh * 50);

}

myGLCD.drawLine (245, 0, 245, 240);

myGLCD.drawLine (0, 239, 245, 239);

myGLCD.setColor (255, 255, 255);

myGLCD.drawRoundRect (250, 1, 310, 50);

myGLCD.drawRoundRect (250, 55, 310, 105);

myGLCD.drawRoundRect (250, 110, 310, 160);

myGLCD.drawRoundRect (250, 165, 310, 215);

}

// ------ Espere a que la entrada sea mayor que el subencadenante

disparador de vacío () {

while (Entrada <Disparador) {Entrada = analógica Leer (A0) * 5/100;

}}

// --------------- End Subrutines ----------------------

configuración del vacío ()

myGLCD.InitLCD ();

myGLCD.clrScr ();

myTouch.InitTouch ();

myTouch.setPrecision (PREC_MEDIUM);

botones();

pinMode (0, ENTRADA);

// configurar el ADC

ADCSRA & = ~ PS_128; // eliminar los bits establecidos por la librería Arduino

// puedes elegir un prescaler desde abajo.

// PS_16, PS_32, PS_64 o PS_128

ADCSRA

bucle de vacío () {

mientras (1) {

DrawGrid ();

toque();

desencadenar();

// Recoge los datos analógicos en una matriz

StartSample = micros ();

para (int xpos = 0;

xpos <240; xpos ++) {Muestra xpos = analogRead (A0) * 5/102;

delayMicroseconds (dTime);

}

EndSample = micros ();

// Mostrar los datos analógicos recopilados de la matriz

para (int xpos = 0; xpos <239;

xpos ++)

{

// Borrar pantalla anterior

myGLCD.setColor (0, 0, 0);

myGLCD.drawLine (xpos + 1, 255-OldSample xpos + 1 * vsens-hpos, xpos + 2, 255-OldSample xpos + 2 * vsens-hpos);

if (xpos == 0) myGLCD.drawLine (xpos + 1, 1, xpos + 1, 239);

// Dibuja los nuevos datos

myGLCD.setColor (255, 255, 255);

myGLCD.drawLine (xpos, 255-Sample xpos * vsens-hpos, xpos + 1, 255-Sample xpos + 1 * vsens-hpos);

}

// Determine el voltaje de la muestra pico a pico

Max = Muestra 100;

Min = Muestra 100;

para (int xpos = 0;

xpos <240; xpos ++)

{

Muestra antigua xpos = Muestra xpos;

if (Muestra xpos> Máx.) Máx = Muestra xpos;

if (Muestra xpos <Mín.) Min = Muestra xpos;

}

// muestra el tiempo de muestreo, el tiempo de retardo y el nivel de activación

myGLCD.setBackColor (0, 0, 255);

myGLCD.setFont (SmallFont);

myGLCD.setBackColor (0, 0, 255);

myGLCD.print ("Delay", 260, 5);

myGLCD.print ("", 270, 20);

myGLCD.print (itoa (dTime, buf, 10), 270, 20);

myGLCD.print ("Trig.", 260, 60);

myGLCD.print ("", 270, 75);

myGLCD.print (itoa (Trigger, buf, 10), 270, 75);

myGLCD.print ("H Pos.", 260, 120);

myGLCD.print (itoa (hpos, buf, 10), 270, 135);

//myGLCD.setBackColor (0, 0, 0);

SampleTime = (EndSample-StartSample) / 1000;

myGLCD.print ("Sec.", 205, 210);

myGLCD.print ("", 280, 30);

myGLCD.print (itoa (SampleTime, buf, 10), 205, 220);

// Rango de 0 a 64 * 78 = 4992 mV

Tamaño de muestra = (Max-Min) * 78;

myGLCD.print ("mVolt", 5, 210);

myGLCD.print (itoa (SampleSize, buf, 10), 5, 220);

myGLCD.print (itoa (analogRead (A0) * 4.15 / 10.23, buf, 10), 110, 220);

}}

// ------------------------- FINALIZAR PROGRAMA

Paso 7: Video del Oscope en Acción

Paso 8: Otro video

Runner Up en el

Concurso Arduino

Segundo premio en el

Concurso de hacking y accesorios de gadgets

4 personas hicieron este proyecto!

  • scottm214 lo hizo!

  • e.ma.niak lo hizo!

  • Whitmore12 lo hizo!

  • Grumpyboots lo hizo!

¿Hiciste este proyecto? ¡Compártelo con nosotros!

Recomendaciones

  • Mash Up Arduino Code Samples

  • Prototipo de ornitóptero de código abierto. Arduino accionado y control remoto.

  • Clase de internet de las cosas

  • Reto de fiesta

  • Concurso Arduino 2019

  • Desafío IoT

84 discusiones

0

DavidPatterson

Hace 4 años en Introducción

Un excelente artículo!

Estaré buscando una tft para mi mega!

¿Qué tipo de frecuencia de actualización crees que tiene tu tft?

¿Has considerado leer el puerto analógico por interrupción-

Tengo un diseño de osciloscopio de 153K utilizando un mega con hardware y software de activación.

http: //www.instructables.com/id/Arduino-High-speed …

Sería interesante reunir los dos conceptos.

7 respuestas 0

johnag DavidPatterson

Responder hace 4 años sobre Introducción

Disculpe la demora en responder. Gracias por tu comentario. No sé la frecuencia de actualización de la pantalla, no he revisado las especificaciones en detalle. Definitivamente, mejoraría el alcance si pudiera aumentar el ancho de banda utilizando su diseño. Si obtiene el kit y prueba sus conceptos, por favor, comparta … Si tengo tiempo, podría intentarlo yo mismo … Una vez más, gracias.

0

DavidPatterson johnag

Responder hace 4 años sobre Introducción

La pantalla de 3.2 pulgadas y el escudo finalmente llegaron. Utilicé mi Mega en lugar del Sainsmart.

El ensamblaje fue fácil: agregué conectores para el puerto analógico, pwm10, cero y 5V. La programación no fue difícil. Henning, el autor de la biblioteca tiene una excelente documentación. No encontré problemas en la implementación de sus protocolos.

Mi alcance se extiende hasta 237-238 Khz.

El lector de tarjetas SD que está en el escudo, funciona y abre la posibilidad de guardar datos. (Sin mencionar la adición de imágenes)

Esto ha producido un osciloscopio independiente muy bonito.

Gracias por tu trabajo.

0

waqasbadarwb DavidPatterson

Responder hace 4 años sobre Introducción

¿Puedes dar el código?

0

hemal1 waqasbadarwb

Responder hace 4 años sobre Introducción

Hola, ¿Qué biblioteca estás usando para esto?

0

Hamzaikky DavidPatterson

Responder hace 4 años sobre Introducción

¿Cómo agregaste imágenes?

0

DavidPatterson Hamzaikky

Responder hace 4 años sobre Introducción

Hola, Para esta aplicación he utilizado

La función loadBitmap de Henning, que se documenta en los ejemplos

Se suministra con su biblioteca. Esto requiere que conviertas un tamaño de pantalla.

(o menos) imagen a formato crudo. Provee un programa con su biblioteca.

descarga para esto. O puede usar su convertidor en línea en:

http: //www.henningkarlsen.com/electronics/t_imagec …

Utilicé un archivo de tamaño de pantalla (320 x 240).

#incluir

#incluir

#incluir

#incluir

// Inicializar pantalla y funciones táctiles

UTFT myGLCD (ITDB32S, 38,39,40,41);

UTFT_tinyFAT myFiles (& myGLCD);

UTouch myTouch (6,5,4,3,2);

logo booleano = verdadero;

palabra res;

const int chipSelect = 53; // pin sd select

configuración vacía () {

pinMode (chipSelect, OUTPUT);

myGLCD.InitLCD ();

myGLCD.clrScr ();

int picsize_x = myGLCD.getDisplayXSize ();

int picsize_y = myGLCD.getDisplayYSize ();

si (logo) {

if (file.initFAT () == 0) {

interruptor (picsize_x);

res = myFiles.loadBitmap (0, 0, picsize_x, picsize_y, "LOGO.RAW");

si (res == 0) {

retraso (5000);

myGLCD.clrScr ();

}

}

}

// más cosas de configuración

}

El uso del archivo en bruto para una visualización única está bien.

sin embargo

Tener que convertir varios archivos me tomó un poco de tiempo.

Así que escribí una adición a la biblioteca de utft de Henning para procesar 24 bits.

Archivos bmp directamente. Esto funciona muy bien y no requiere UTFT_tinyFat

y tinyFat. Se puede acceder a la sdcard utilizando el estándar arduino sd.

biblioteca. Mi parche cargará un mapa de bits de tamaño de pantalla en 1.79S, que es un

Poco más rápido que el sistema de Henning.

También he utilizado el sd para la grabación de datos.

En general, John ha detallado un escudo muy útil y un lcd.

0

DavidPatterson johnag

Responder hace 4 años sobre Introducción

Hola, Ordené el lcd hace un mes, aparentemente está en algún lugar entre China y el Reino Unido.

Mientras tanto, he desarrollado un código que se ejecuta en

237.3 Khz, con activación de software configurable.

http: //forum.arduino.cc/index.php? PHPSESSID = 3e1pvs …

También he escrito un software que funciona a 1.2MHz usando un TLV571, también con activación de software.

0

ValtherN

hace 1 año

¿Alguien por casualidad diseñó una caja de impresión en 3D para esto?

0

hackerh

hace 1 año

Hola

Tengo una consulta para hacer posible la creación de Oscilloscope By Arduino UNO y tengo un análisis analógico rápido que puede leer la señal a alta velocidad para 200KHZ.

Si es posible, me ayuda a lograrlo.

¿Es posible darme un ejemplo de esto? Es un pequeño programa que muestra la acción de ADC rápidamente para tomar la muestra de 200KHZ.

Este correo electrónico es [email protected]

Gracias

0

pipern8536d

hace 1 año

¿Se puede instalar esta unidad utilizando la nueva pantalla flexible oled?

0

AMSR1

hace 1 año

Parece que el código funciona, sin embargo, los botones (Delay, Trig, etc.) no funcionan. alguien esta teniendo el mismo problema?

0

kevinmaker2018

hace 1 año

Proyecto genial Lo hice con mi Mega 2560 y la pantalla TFT de 3,2 pulgadas. Está funcionando bien. Gracias por compartir.

0

Jwzumwalt

hace 1 año

¿Qué significa "funciona bastante bien para baja tensión y bajas frecuencias"? Por favor, incluya algunas especificaciones de reincorporación en los primeros uno o dos párrafos para que podamos ver si el proyecto es aplicable a nuestras necesidades …

2 respuestas 0

PatrickT90 Jwzumwalt

Responder hace 1 año

Explica el problema en su otro instructivo, que está vinculado en la oración cuestionada.

0

Jwzumwalt PatrickT90

Responder hace 1 año

Oh … ¿Entonces este es un cebo de clic y no pretende ser verdaderamente informativo?

0

sistema láser

hace 1 año

Hola, Cómo puedo usar Arduino DUE con TFT LCD Sheild con toque.

Muchas gracias

0

Harry N4HBM

Hace 2 años

Utilicé los tableros SainSmart y funciona a la perfección.

0

No ametruck

Hace 2 años

Finalmente encontré un buen proyecto, se tomó un tiempo para ponerlo aquí, gracias por tomarse el tiempo.

0

peleas01

Hace 2 años

¿Cómo modificaría el código para mostrar una señal entre 0.2 y -0.2 voltios?