Tabla de contenido:
- Suministros:
- Paso 1: ACTUALIZACIÓN: bosquejo para convertir Oscope a DVM de 3 canales con pantalla gráfica + caja Lego
- Paso 2: Lista de piezas
- Paso 3: Construye el Hardware.
- Paso 4: El Software: Prueba de la biblioteca UTFT.
- Paso 5: El software: UTouch Library Test.
- Paso 6: El Osciloscopio
- Paso 7: Video del Oscope en Acción
- Paso 8: Otro video
- 4 personas hicieron este proyecto!
- scottm214 lo hizo!
- e.ma.niak lo hizo!
- Whitmore12 lo hizo!
- Grumpyboots lo hizo!
- 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
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
- 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!
¿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 DavidPattersonHace 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 DavidPattersonResponder 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 johnagResponder 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 DavidPattersonResponder hace 4 años sobre Introducción
¿Puedes dar el código?
0 hemal1 waqasbadarwbResponder hace 4 años sobre Introducción
Hola, ¿Qué biblioteca estás usando para esto?
0 Hamzaikky DavidPattersonResponder hace 4 años sobre Introducción
¿Cómo agregaste imágenes?
0 DavidPatterson HamzaikkyResponder 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. 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. hace 1 año ¿Alguien por casualidad diseñó una caja de impresión en 3D para esto? 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 hace 1 año ¿Se puede instalar esta unidad utilizando la nueva pantalla flexible oled? 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? 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. 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 … Responder hace 1 año Explica el problema en su otro instructivo, que está vinculado en la oración cuestionada. Responder hace 1 año Oh … ¿Entonces este es un cebo de clic y no pretende ser verdaderamente informativo? hace 1 año Hola, Cómo puedo usar Arduino DUE con TFT LCD Sheild con toque. Muchas gracias Hace 2 años Utilicé los tableros SainSmart y funciona a la perfección. Hace 2 años Finalmente encontré un buen proyecto, se tomó un tiempo para ponerlo aquí, gracias por tomarse el tiempo. Hace 2 años ¿Cómo modificaría el código para mostrar una señal entre 0.2 y -0.2 voltios?