Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Dibuja Gráficos Personalizados en tu Osciloscopio con un DAC R-2R y Arduino

Componentes y materiales

Aplicaciones y servicios online

Sobre el proyecto

El DAC R-2R

Convertidor digital-analógico sencillo que solo requiere resistencias. Dos valores: R y 2R (doble). Cada bit del puerto añade una rama 2R. Con 8 bits (PORTD) y 6 bits (PORTB) en Arduino UNO/Nano se obtienen ejes X (8 bits) e Y (6 bits). Si se usa STM32 (puertos completos de 8 bits), se pueden usar dos DAC de 8 bits.

Ejemplo: R = 1 kΩ → 2R = 2 kΩ (dos de 1 kΩ en serie). Número de bits = ramas 2R.

Manipulación de puertos

Se usa escritura paralela directa a registros PORTD (pines 0-7, 8 bits) y PORTB (pines 8-13, solo 6 bits usables). Configuración en setup():

DDRD = B11111111;  // 8 bits salida
DDRB = B00111111;  // 6 bits salida (bits 6-7 son cristal)

En setup() se remapean los valores Y de 8 bits (0-255) a 6 bits (0-63) con map().

Herramienta de dibujo (Python/tkinter)

  1. Instalar: pip install tk
  2. Ejecutar: python drawlog.py > arduino_list.txt
  3. Ventana 255×255 px; clic-arrastra para dibujar.
  4. Al cerrar, genera arrays x_points[], y_points[] y NUM_POINTS listos para pegar en el sketch.
  5. Reduce puntos automáticamente (borra 1 de cada 2) para refresco rápido.

Modo X-Y del osciloscopio

Conectar salida DAC X (PORTD) → Canal 1, salida DAC Y (PORTB) → Canal 2. Poner osciloscopio en modo X-Y. Ajustar escalas/posición hasta ver la figura.

Optimización de memoria (importante)

Código

Sketch Arduino (UNO/Nano)

const byte FIGURE_DELAY = 1;
const int NUM_POINTS = 87;
byte x_points[NUM_POINTS] = {106,106,105,...};
byte y_points[NUM_POINTS] = {78,80,81,...};
void setup() {
  DDRD = B11111111; DDRB = B00111111;
  for (byte t=0; t<NUM_POINTS; t++)
    y_points[t] = map(y_points[t],0,255,0,63);
}
void loop() {
  for (byte t=0; t<NUM_POINTS; t++) {
    PORTD = x_points[t];
    PORTB = y_points[t];
    delayMicroseconds(FIGURE_DELAY);
  }
}

Herramienta de dibujo (Python)

import tkinter as tk
X=[]; Y=[]; lastx=lasty=0
def xy(e): global lastx,lasty; lastx,lasty=e.x,e.y
def addLine(e): global lastx,lasty; canvas.create_line(lastx,lasty,e.x,e.y); lastx,lasty=e.x,e.y
def on_move_press(e):
  X.append(str(e.x)); Y.append(str(255-e.y))  # invertir Y
root=tk.Tk(); root.geometry("255x255")
canvas=tk.Canvas(root); canvas.grid(sticky="nsew")
canvas.bind("",xy); canvas.bind("",addLine)
root.bind("",on_move_press); root.mainloop()
for i in range(1,len(X)//2): X.pop(i); Y.pop(i)
print(f"const int NUM_POINTS = {len(X)};")
print(f"const unsigned long x_points[NUM_POINTS] = {{{','.join(X)}}};")
print(f"const unsigned long y_points[NUM_POINTS] = {{{','.join(Y)}}};")

Esquemáticos

Cuatro imágenes: escalera R-2R de 8 bits (PORTD), de 6 bits (PORTB), versión con dos valores de resistencia (R y 2R), y versión todo con mismo valor (2R = dos R en serie). Incluyen conexiones a pines Arduino y masa común.

Proceso de manufactura

  1. Construya una Red de Sensores Inalámbrica Económica para su Hogar
  2. Monitoriza la temperatura de tu casa con un panel Raspberry Pi
  3. Los mejores accesorios para aprovechar al máximo tu Raspberry Pi
  4. Construye tu Propio Google Voice HAT para Raspberry Pi
  5. Test de Precisión de Tiempo de Reacción con Arduino UNO
  6. Guía definitiva para elegir la sierra de cinta adecuada
  7. Guía Paso a Paso para Reparar el Tirador de la Puerta de tu Coche
  8. Guía Rápida para Reparar el Óxido en la Carrocería: Protege tu Vehículo
  9. Osciloscopio PC: Construye un Analizador de Formas de Onda de Bajo Costo Usando tu Computadora
  10. Resistencias: Fundamentos, Tipos y Aplicaciones Prácticas
  11. Comprender el frenado dinámico en trenes pesados