Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
En este tutorial, aprenderás cómo crear un sistema de control para un láser utilizando un joystick, servos y Arduino.
Durante este paso a paso, te guiaré a través de todo el proceso, desde la configuración inicial hasta la programación final, para que puedas controlar un láser usando un joystick y unos servos. Exploraremos cómo conectar los servos en conjunto con Arduino, para que puedas mover el láser en cualquier dirección que desees.
Este tutorial está diseñado para ser accesible y emocionante para todos. Además, descubrirás cómo escribir un código simple pero efectivo en Arduino para sincronizar el movimiento de los servos con las entradas del joystick, permitiéndote apuntar y controlar el láser con facilidad.
Podrás usar tu láser controlado por joystick para crear espectáculos de luces interactivos, juegos de precisión o incluso para fines educativos.
Componentes Electrónicos
Arduino mini pro
El Arduino Pro Mini es una placa de microcontrolador basada en el ATmega328 .
Tiene 14 pines de entrada / salida digital (de los cuales 6 se pueden usar como salidas PWM), 6 entradas analógicas, un resonador integrado, un botón de reinicio y orificios para montar encabezados de pines. Se puede conectar un encabezado de seis pines a un cable FTDI o una placa de conexión Sparkfun para proporcionar alimentación USB y comunicación a la placa.
El Arduino Pro Mini está diseñado para su instalación semipermanente en objetos o exposiciones. La placa viene sin encabezados pre montados, lo que permite el uso de varios tipos de conectores o la soldadura directa de cables. El diseño del pin es compatible con el Arduino Mini.
Hay dos versiones del Pro Mini. Uno corre a 3.3V y 8 MHz, el otro a 5V y 16 MHz.
Microcontrolador | ATmega328 * |
Fuente de alimentación de la placa | 3,35-12 V (modelo de 3,3 V) o 5-12 V (modelo de 5 V) |
Voltaje de funcionamiento del circuito | 3.3V o 5V (dependiendo del modelo) |
Pines de E / S digitales | 14 |
Pines PWM | 6 6 |
UART | 1 |
SPI | 1 |
I2C | 1 |
Pines de entrada analógica | 6 6 |
Interrupciones externas | 2 |
Corriente CC por pin de E / S | 40 mA |
Memoria flash | 32 KB de los cuales 2 KB utilizados por el gestor de arranque * |
SRAM | 2 KB * |
EEPROM | 1 KB * |
Velocidad de reloj | 8 MHz (versiones de 3.3V) o 16 MHz (versiones de 5V) |
Pines hembra
Zócalo para arduino nano
Cables dupont
Módulo Laser ky-008
Este módulo especialmente diseñado para Arduino emitir de forma fácil, rápida y precisa un haz laser producido por este componente
Es un Diodo Emisor de Laser que funciona a 5V y que emite a una longitud de onda de 650nm.
Características Técnicas:
Voltaje de funcionamiento: 5V
Longitud de onda: 650nm
Potencia 5 mW
Color: Rojo
Material: PCB
Dimensiones: 2.3×1.5×0.9cm
Un Servo sg90
Características
- Dimensiones (L x W xH) = 22.0 x 11.5 x 27 mm (0.86 x 0.45 x 1.0 pulgadas)
- Peso: 9 gramos
- Peso con cable y conector: 10.6 gramos
- Torque a 4.8 volts: 16.7 oz/in o 1.2 kg/cm
- Voltaje de operación: 4.0 a 7.2 volts
- Velocidad de giro a 4.8 volts: 0.12 seg / 60 º
- Conector universal para la mayoría de los receptores de radio control
- Compatible con tarjetas como Arduino y microcontroladores que funcionan a 5 volts.
¿Cómo controlar un servomotor?
Puede colocar el eje del servo en varios ángulos de 0 a 180º. Los servos se controlan utilizando una señal de modulación de ancho de pulso (PWM). Esto significa que la señal PWM enviada al motor determinará la posición del eje.
Pines macho
Un módulo Joystick ky-023
El módulo Joystick te permite construir un controlador manual en 2 direcciones: X y Y. Posee ademas la función de pulsador que se activa al presionar el Joystick.
Posee dos potenciometros cada uno con su salidas analógica para la dirección (VRx-VRy) y una salidad digital del pulsador (SW). Para leer la posición es necesario convertir los valores analógicos utilizando un ADC de microcontrolador.
Empleado en proyectos de robótica, control, automatización, videojuegos.
- Voltaje de Operación: 3.3 – 5V DC
- 2 Potenciometros
- 1 Pulsador
Descripción:
Rendimiento del producto:
- Tensión de entrada, rango: DC 3,3 V a 5 V
- Señal de salida: el módulo salida analógica de dos vías y una interfaz de salida digital, el valor de salida correspondiente al desplazamiento biaxial (X, Y) biaxial, el tipo de analógico; claves que el usuario presiona el eje Z, su tipo es interruptor digital.
- Se puede programar el controlador Arduino, el conector de placa de expansión del sensor, completo con obras interactivas creativas.
- Cruz joystick es una resistencia bidireccional de 10 K, con el rocker en diferentes direcciones, la resistencia del grifo con el cambio. Este módulo utiliza fuente de alimentación de 5 V, el estado original de X, Y leer Tensión de 2,5 V o así, cuando se presiona con la flecha dirección, el valor de lectura del voltaje aumenta con el máximo a 5 V; flechas en la dirección opuesta a la prensa, leer la tensión disminuye, el mínimo es 0 V.
PCB
Descargar archivo gerber –> pcb alarma ir
Partes 3D
Descargar archivos STL –>Laser_gun_bracket_501701
Página del autor https://www.thingiverse.com/thing:501701
Código Fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
#include <Servo.h> const int X_PIN_A0 = A0; // Pin analógico para el eje X const int Y_PIN_A1 = A1; // Pin analógico para el eje Y const int BOTON_PIN_12 = 12; // Pin digital para el botón const int LASER_PIN5 = 5; // Pin digital para el control del láser int estado = 0; Servo servoX; Servo servoY; int servoXPosPrev = 90; // Posición anterior del servo X int servoYPosPrev = 90; // Posición anterior del servo Y int servoIncrement = 1; // Incremento de posición para el serv void setup() { pinMode(BOTON_PIN_12, INPUT_PULLUP); // Configurar el pin del botón como entrada con resistencia pull-up interna pinMode(LASER_PIN5, OUTPUT); // Configurar el pin del control del láser servoX.attach(10); // Conectar el servo X al pin 10 servoY.attach(11); // Conectar el servo Y al pin 11 Serial.begin(9600); // Velocidad del puerto serial } void loop() { // Leer los valores de los ejes X e Y int xValue = analogRead(X_PIN_A0); int yValue = analogRead(Y_PIN_A1); // Convertir los valores a la posición del servo (0 a 180 grados) int servoXPos = map(xValue, 0, 1023, 0, 180); // Convertir los valores a la posición del servo (70 a 180 grados) int servoYPos = map(yValue, 0, 1023, 70, 180); // Mover los servos suavemente if (servoXPos != servoXPosPrev) { if (servoXPos > servoXPosPrev) { for (int pos = servoXPosPrev; pos <= servoXPos; pos += servoIncrement) { servoX.write(pos); delay(5); // Ajusta el retraso para controlar la velocidad del movimiento } } else { for (int pos = servoXPosPrev; pos >= servoXPos; pos -= servoIncrement) { servoX.write(pos); delay(5); // Ajusta el retraso para controlar la velocidad del movimiento } } servoXPosPrev = servoXPos; } if (servoYPos != servoYPosPrev) { if (servoYPos > servoYPosPrev) { for (int pos = servoYPosPrev; pos <= servoYPos; pos += servoIncrement) { servoY.write(pos); delay(5); // Ajusta el retraso para controlar la velocidad del movimiento } } else { for (int pos = servoYPosPrev; pos >= servoYPos; pos -= servoIncrement) { servoY.write(pos); delay(5); // Ajusta el retraso para controlar la velocidad del movimiento } } servoYPosPrev = servoYPos; } // Leer el estado del botón bool botonEstado = digitalRead(BOTON_PIN_12); if (botonEstado == LOW) {//Si el botón ha sido precionado se cumple esta condición if(estado ==0){//Si la variable estado es igual a 0 se cumple esta condición digitalWrite(LASER_PIN5, HIGH); estado =1;//Asignamos el valor 1 a la variable "estado" } else{ digitalWrite(LASER_PIN5, LOW); estado =0; } while(botonEstado == LOW){ botonEstado = digitalRead(BOTON_PIN_12);//Leemos el estado del botón nuevamente para ver si sigue precionado } } // Mostrar los valores en el terminal serial Serial.print("Eje X: "); Serial.println(xValue); Serial.print("Eje Y: "); Serial.println(yValue); Serial.print("Botón: "); Serial.println(botonEstado); delay(100); // Leve pausa entre las lecturas } |
PROYECTO RECOMENDADO