Laser PanTilt

 LASER PANTILT

Durante este taller vamos a realizar un proyecto completo con nuestra placa Arduino en el que tendremos que desarrollar 3 habilidades para ser un buen maker. Así que debemos darnos prisa y aprender muy rápido los distintos pasos a realizar.

Estos 3 apartados son:

  • El montaje de un sistema láser
  • La electrónica de movimiento, control y activación del láser
  • Y la programación de nuestra placa Arduino

 

Para empezar explicaremos primero de qué trata este sistema láser.

 

Laser PanTilt

¿Qué es un Láser Pantilt?

¿Alguna vez habéis jugado con vuestro perro o gato mareándolo con un láser y se os ha cansado la mano?

Pues tenemos la solución. Vamos a programar un modelo mecánico para que oriente un puntero láser y podamos marear a nuestros animales de compañía en modo automático.

 

El sistema laser PanTilt consta de un sistema de dos miniservos que estan dispuestos de manera que podemos rotar en dos ejes y en cuya punta hemos dejado espacio para un puntero láser y apuntar a distancia.

Este sistema dispone de un giro de rotación en su eje vertical y montado sobre él, tendremos otro miniservo en un eje horizontal para orientar el láser.

 

*Este modelo se puede descargar de Thingiverse; nosotros hemos realizado unas ligeras modificaciones para la realización de este taller y pueden descargarse desde la siguiente página.

http://www.thingiverse.com/thing:2220687

 

Pongámonos manos a la obra

 

Montaje del sistema láser

 

Se requiere del siguiente material para realizar el montaje:

  • 3 Piezas impresas en 3D
    • Una base cuadrada
    • El alojamiento del motor de rotación del conjunto
    • Pieza 3D con láser incorporado
  • 2 Miniservos
  • 2 Potenciómetros
  • 1 Resistencia de 220 Ω (Ohmnios)
  • 1 placa Arduino con cable USB
  • Tornillos
    • 6 tornillos para los servos
    • 1 Tornillo de ajuste M3x20
    • 4 Tornillos de anclaje de la base
  • Una base de madera de soporte
  • Cables, muchos cables
  • Destornillador

 

A partir de este momento tendremos 30 minutos para realizar el montaje. Así que destornillador en mano debemos proceder tan rápido como nos sea posible.

Para ayudaros deberéis proceder poco a poco siguiendo las siguientes instrucciones de montaje:

  1. Anclar la base cuadrada al soporte de madera con los 4 tornillos en sus esquinas. Avisamos de que hace falta fuerza. Se cuenta que alguien hizo tanta fuerza haciendo este taller que subió de nivel.
  2. Introducir un servomotor dentro de la pieza de alojamiento y utilizar un tornillo para dejarlo estanco. Cuidad con el cable, debe pasar por la rendija.
  3. Con la pieza 3D del láser hay que unir el siguiente servomotor con dos tornillos. Ahora sí que hay que apretar bien, así que pedid ayuda a un mayor si no podéis meter los tornillos.
  4. Acoplar ésta pieza con la anterior e introducir el tornillo más largo por la parte que pasa por la tuerca hasta que haga presión sobre el servomotor.
  5. Si unimos todo el conjunto, ya podemos proceder a la siguiente fase.

 

La electrónica

Si habéis conseguido llegar a esta parte en menos de 30 minutos enhorabuena, estáis a dos pasos de ser los makers titulados por la universidad de Arduino.

Una vez que nos hemos destrozado las manos apretando tornillos, ahora toca electrocutarnos. Lo que debemos hacer es utilizar una placa de prototipado y los cables para ir uniendo servomotores, potenciómetros y alguna que otra resistencia para hacer que nuestro proyecto sea funcional.

Los miniservos serán controlados con dos potenciómetros y el laser será activado desde el terminal.

Os dejamos el diagrama que hay que conectar a nuestra placa Arduino.

 

 

Fijaros muy bien dónde hemos conectado todo.

Los servomotores los hemos conectado al PIN 10 y al PIN 11. Para dejarlo claro, el PIN 10 controla el primer motor que será movido por el potenciometro conectado en el Pin analógico A0.

Mientras que el segundo motor ( PIN 11 ), será controlado por el segundo potenciómetro conectado a A1.

 

Para hacer un resumen de lo que hacemos. Aquí tenemos 3 apartados importantes.

Los servomotores tienen 3 cables. Dos de ellos, son los de alimentación (que suelen ser rojo para el voltaje en alto y negro para el voltaje de 0 voltios o tierra). El que sobra es el que se alimenta con una señal de la placa Arduino PWM. Es por ello, que hemos elegido los pines 10 y 11 para estos servos.

 

El láser estará conectado a través del voltaje con una resistencia de 220 Ω (Ohmnios); que nos permite controlar la intensidad que circula por él. Hemos conectado al Pin 9. Aunque solo necesitamos activarlo y desactivarlo, también podemos aprovechar la señal PWM para darle más o menos potencia.

Y no… No podemos hacer agujeros en la pared, ni quemar cosas ni nada por el estilo, por mucho que queramos.

La tercera y última parte de la electrónica, es el control con potenciómetros.

Estos potenciómetros son en realidad una resistencia variable. Suelen tener 3 patillas, y lo que hacemos es alimentarlos; al igual que hacíamos con los servomotores; con un cable rojo y un cable negro.

En el medio, si ponemos un cable, podemos leer un valor intermedio entre 0 y 1023. Y con este valor leido moveremos los motores del láser para realizar nuestro proyecto y controlar dónde apuntamos.

 

La programación

 

Si hemos llegado hasta aquí en menos de una hora, estamos a un paso de convertirnos en ArduMakers profesionales. Pues es aquí dónde realmente programaremos Arduino para que todo funcione como es debido.

Intentaremos explicar todo un poco rápido, pero en esencia, vamos a realizar 3 ejercicios.

  1. Encender y apagar el láser y controlarlos mediante el monitor serie
  2. Mover los servomortores
  3. Controlar los servomotores con los potenciómetros

Encender el láser es tan fácil como definir un pin como salida y utilizar la función «digitalWrite» en estado HIGH para encenderlo y LOW para apagarlo.


int pinLaser = 9;

void setup() {
  //Serial.begin(9600);
  pinMode(pinLaser, OUTPUT);
}

void loop() {
  digitalWrite(pinLaser,HIGH);
  delay(1000);
  digitalWrite(pinLaser,LOW);
  delay(1000);
}

También podemos utilizar el ejemplo anterior para controlar el láser desde el monitor Serial. Para ello cargaremos el siguiente programa y enviaremos una letra de teclado a través del puerto USB para encender el láser. En este caso utilizamos la «o» para encender y la «x» para apgarlo.

 

int pinLaser = 9;

void setup() {
   Serial.begin(9600);
   pinMode(pinLaser, OUTPUT);
}

void loop() {

   if (Serial.available()){
      char data = Serial.read();
      if (data == 'o'){
         digitalWrite(pinLaser,HIGH);
      }
      if (data == 'x'){
         digitalWrite(pinLaser,LOW);
      }
   }
}

Ahora controlaremos el movimiento de los servos utilizando la librería Servo. Esta librería nos permite mandar señales PWM a los servos de posición y definir el ángulo de giro de cada uno. En este caso hemos puesto el giro de rotación (Pan) en el pin 10 y el de inclinación (Tilt) en el 11.

#include <Servo.h>

Servo Pan;
Servo Tilt;

int pos = 0;    

void setup() {
  Pan.attach(10);  
  Tilt.attach(11); 
}

void loop() {
  for (pos = 0; pos < 180; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree Pan.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for (pos = 180; pos &gt;= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    Pan.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }

  for (pos = 0; pos < 180; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree Tilt.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for (pos = 180; pos &gt;= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    Tilt.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

 

Para finalizar controlaremos cada servomotor con un potenciómetro. De manera que giraremos la rotación y la inclinación tanto como se giren los potenciómetros. Para esto utilizaremos la función map, ya que los potenciómetros nos proporcionan un valor entre 0 y 1023 y debemos cambiar a una escala entre 0 y 180º.

 

#include <Servo.h>

Servo Pan;
Servo Tilt;

int pinLaser = 9;
int pinPan = A0;
int pinTilt = A1;

int pos = 0;    

void setup() {
  Pan.attach(10);  
  Tilt.attach(11); 
  pinMode(pinLaser, OUTPUT);
  pinMode(pinPan, INPUT);
  pinMode(pinTilt, INPUT);

  digitalWrite(pinLaser,HIGH);
}

void loop() {

  int posPan = map(analogRead(pinPan), 0, 1023, 0 , 175);

  int posTilt = map(analogRead(pinTilt), 0, 1023, 0 , 175);

  Pan.write(posPan);
  delay(20);

  Tilt.write(posTilt);
  delay(20);
  
}

Para finalizar este taller, solamente habrá que juntar el código de este programa de los movimientos de los motores con el de encendido y apagado del láser. Así que os dejamos un rato para que lo probéis. 😉

 

Desde la sección de Ardublockly todo este modelo de programación lo simplificaremos juntando los siguientes bloques, donde utilizaremos el movimiento de Servos, las lecturas analógicas, los pines digitales y la función map para hacer funcionar correctamente nuestro modelo Laser PanTilt.

 

#include <Servo.h>

Servo myServo5;
Servo myServo6;

void setup() {
  pinMode(A0, INPUT);
  myServo5.attach(5);
  pinMode(A2, INPUT);
  myServo6.attach(6);
  pinMode(3, INPUT_PULLUP);
  pinMode(10, OUTPUT);
}

void loop() {
  myServo5.write((map(analogRead(A0), 0, 1024, 0, 180)));
  myServo6.write((map(analogRead(A2), 0, 1024, 0, 180)));
  delay(20);
  if (digitalRead(3)) {
    digitalWrite(10, HIGH);
  } else {
    digitalWrite(10, LOW);
  }

}

*Si estamos utilizando un joystick, el código funcionará igual que si tenemos dos potenciometros pero a la hor de presionar el joystick la lógica de activación del láser puede estar congigurado con un INPUT_PULLUP. Así que prestad atención a esta pequeña modificación para funcionar corrrectamente.

**Es posible que las entradas de los potenciometros sean muy inestables a 5V y los servomotores se vuelven un poco locos. Para solucionar esta cuestión lo más fácil es reducir la tensión a 3.3V si es posible. También se puede hacer con 5V realizando una revisión por rango, pero hay que realizar una programación más elaborada.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

18 − tres =

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.