Siempre creciendo, siempre aprendiendo. Cultura Maker.

Ratio: 0 / 5

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

¡Hola, chicos!. ¡Pasad!. ¡Pasad!. ¡Hacía mucho que no veníais a visitarme!. ¡Poneos cómodos!.

Hoy quiero mostraros un pequeño montaje que se me ocurrió viendo un artículo de Leantec en el que hacían un pasador de diapositivas con un detector de ultrasonidos y una Arduino Leonardo. Como no encuentro por ninguna parte el único ejemplar de esta tarjeta que tengo, y los sensores de ultrasonidos son bastante más caros, se me ocurrió utilizar resistencias LDR (variables con la luz) en un montaje que tiene un enfoque distinto: un detector de barrido izquierda-derecha como el del vídeo, conectado a un programa en Processing (luego me enteré que los amigos de @JuegosRobotica habían lanzado este mismo reto en Twitter, pero eso es otra historia).

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

¡Saludos, estudiantes!

El tutorial de hoy será bastante corto, dado que estoy de profesor de guardia (para los legos, una guardia de aula es una hora lectiva en la que un par de profesores están disponibles para realizar sustituciones o responder a cualquier imprevisto que suceda durante esa hora). De momento, no hay mucho movimiento en el instituto... ¡A ver lo que dura!.

El objetivo de este artículo es generar la documentación que me pide mi amigo y compañero Juanjo Ruano , que es uno de los pioneros que ha gastado su tiempo en imprimir en 3D mi humilde brazo robótico artesanal, y que ahora quiere poder controlar mediante dos joysticks.

Cuando me pidió información sobre el asunto, mi lado perezoso le hizo ver que ya tenía documentación para controlar el brazo por potenciómetros, como éste:

(la documentación la tenéis aquí), en la carpeta controlServosPotenciómetro, ¡e incluso mediante una app que controlaba a la Arduino por Bluetooth!, (como podéis ver al principio de este otro vídeo que aparecía en el artículo anterior):

(NOTA AL PIE: En este punto en el que me sigues leyendo, amable lector, había escrito ya hasta la tercera parte de lo que es el artículo final; como lo estoy haciendo a través de la wifi del instituto, que tan amablemente nos "capó" la Administración con un cortafuegos Fortinet pegajoso, caprichoso y mal configurado, me ha cortado la conexión inopinadamente con la siempre agradable y emocionante sensación que te invade cuando has perdido el larguísimo texto que estaba escribiendo; gracias por tanto, Fortinet).

Volvemos al punto en el que estábamos. Decía que al final me picó la curiosidad. Mediante Whatsapp, estuvimos discutiendo qué pretendíamos hacer en realidad. Juanjo hablaba de controlar el brazo mediante UN solo joystick. Yo le hice notar que el brazo tiene TRES grados de LIBERTAD (sin contar con la pinza, cuyo control obviaremos en este artículo porque nuestro objetivo es comprender la lógica de este sistema), y que un joystick sólo puede proporcionarnos información en sus dos ejes X e Y. Así pues, la elección era obvia: necesitamos al menos dos joystick.

(2ª NOTA AL PIE: Me ha ocurrido lo mismo. Como ahora guardo más repetidamente, sólo he perdido cinco minutos).

Investigando un poco sobre los modelos de joystick disponibles para Arduino y placas similares, y salvando los modelos más complejos, la gran mayoría precisa como mínimo de CUATRO patillas:

  • Vcc (alimentación, 5 V normalmente).
  • Gnd (Tierra, polo negativo... ya hemos hablado de esto suficientes veces).
  • Eje X: en esta patilla, el potenciómetro asociado al eje X devolverá un valor analógico entre 0 V y la alimentación (5 V, necesariamente) que el convertidor A/D de nuestra Arduino convertirá a un valor entre 0 y 1023. Este valor luego deberá transformarse a otro rango entre 0 y 180 º para la posición del servomotor mediante la instrucción map (valor, 0,1023,0,180).
  • Eje Y: lo mismo que el eje X.
  • (OPCIONAL)Botón digital: en muchos modelos de joystick se incorpora un pulsador en pull-up que devuelve 5 V cuando se pulsa la palanca hacia abajo. Nosotros no incluiremos esta posibilidad, de momento, por razones de simplicidad.

Por otro lado, nuestro brazo robot dispone de tres servos: uno para el giro en la base, otro para el brazo principal y otro para el brazo auxiliar. Dichos servos se conectarán a las patillas 9, 10 y 11 de nuestra Arduino UNO. 

Cada servo será gobernado por un eje de un joystick. Así, el primer joystick gobernará los servos 9 y 10 (base y brazo principal), y el eje X del segundo joystick gobernará el brazo auxiliar 11(dejamos el eje Y para posteriores ampliaciones, aunque en nuestro esquema ya está conectado).

Veamos el esquema de conexionado:

brazoporPotenciometros bb

 

Las tres entradas de los joystick se conectarán, respectivamente, a las entradas A0, A1 y A2 de la Arduino. Como anécdota, me gustaría recordaros que estas patillas suelen acabar averiándose con el uso. He incorporado en el código una salida por el puerto Serial para que podáis ver si leen correctamente los resultados de las palancas. Si no fuera así en algún caso, cambiar la patilla en el conexionado y en el código.

 

Y a continuación, el código a verter en nuestra querida Arduino. No es excesivamente complicado, dado que ya hemos visto en otros artículos como puede leerse una entrada analógica y como puede transformarse mediante la instrucción map. A grandes rasgos, el algoritmo consiste en :

  • Conectar y declarar los tres servos motor1, motor2, motor3
  • Declarar las variables que recogerán el valor de los potenciómetros valor1, valor2, valor3, y que se leerán con el comando analogRead(Ax)
  • Declarar las variables que decidirán el ángulo correspondiente en los servomotores posicion1, posicion2, posicion3 que transformarán los valores anteriores mediante el comando posicionx=map(valorx,0,1023,0,180)
  • Escribir dichos valores en los servos, y vuelta a empezar.

¡Ya verás! ¡Es muy fácil!. A continuación, el código:

 

#include<Servo.h>
//Declaramos los servos
Servo motor1,motor2,motor3;
//Declaramos los valores leidos por los potenciometros
int valor1, valor2, valor3;
//Declaramos las posiciones que escribiremos en cada servo (0-180)
int posicion1,posicion2,posicion3;
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
pinMode(8,INPUT);
motor1.attach(9);
motor2.attach(10);
motor3.attach(11);
motor1.write(90);
motor2.write(90);
motor3.write(90);
}

void loop() {
//Leemos los valores en los dos joysticks: 
valor1=analogRead(A1);
 valor2=analogRead(A2);
 valor3=analogRead(A3);
 //Pasamos dichos valores por el puerto serie a efectos de monitorizacion
Serial.print(valor1);
Serial.print("\t");
Serial.print(valor2);
Serial.print("\t");
Serial.println(valor3);

posicion1=map(valor1,0,1023,0,180);
posicion2=map(valor2,0,1023,0,180);
 posicion3=map(valor3,0,1023,0,180);
motor1.write(posicion1);
motor2.write(posicion2);
motor3.write(posicion3);
delay(100);
}

Como puedes ver, es sencillo. ¡Ahora es tu turno!. ¡Prueba tú!. Para cualquier duda o consulta, puedes buscarme en mi Twitter o utilizar nuestro sistema de comentarios. ¡Y eso es todo por hoy!. ¡Sed felices!. ¡Siempre creciendo!. ¡Siempre aprendiendo!. ¡Cultura Maker!.

 

 

 

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

¡Buenos días, buenas tardes, buenas noches, mis pequeños aprendices!. ¡Pasad!, ¡pasad!, ¡sed todos muy bienvenidos!.

Hoy quiero hablaros de música. Y es que aunque mis aptitudes musicales estén más bien bajo cero, no podemos negar que uno de los aspectos más maravillosos del ser humano es la posibilidad de despertar emociones mediante el sonido. Sí, lo sé, no es una de las definiciones más acertadas que veréis por esta web, ejem... ejem... Mejor pasemos directamente a la acción.

Como ejercicio introductorio, vamos a hacer este montaje. Necesitarás un altavoz piezoeléctrico, un pulsador y una resistencia de cualquier valor (220 ohmios, por ejemplo):

botonPiezoelectrico

botonPiezoelectricoEsquema

 

Ratio: 0 / 5

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

¡Saludos, estudiantes!.

¡En efecto!. Hoy vamos a acercarnos al control de servomotores mediante Arduino del modo más sencillo, eficiente y rápido que se me ocurre, y que consiste, simplemente, en conectar uno directamente a la tarjeta, volcar el código que os voy a dar, y ver el efecto que éste produce, para a continuación ir introduciendo modificaciones que nos ayuden a entender el algoritmo original.

¿Qué es un servomotor?

En primer lugar, ¿qué es un serServovo?. Un servomotor es un dispositivo alimentado por corriente continua que puede controlar de modo muy exacto o su posición (de 0º a 180º) o su velocidad (en revoluciones por minuto, rpm, en sentido horario o antihorario).

Los servomotores tienen tres pines de conexiones: alimentación (5 V, normalmente), tierra o GND la patilla de señal, a través de la cual el sistema de control emitirá una señal PWM (Pulse Width Modulation, una sucesión de unos y ceros de periodo controlado que intentan emular el resultado de una señal analógica) que indicará al servomotor la posición o la velocidad que le corresponde alcanzar.

Sí, lo sé. Para aquél que entra en este mundillo por primera vez puede resultar algo complicado. Así que, si lo tenéis a bien, entremos directamente en harina con un montaje sencillísimo:

Ratio: 0 / 5

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

Empecemos con algo sencillo:

practicaArduinoGeneral1ProtoboardBuenapracticaArduinoGeneral1Protoboard

Mientras navegas por esta web, posiblemente interactuemos con tu equipo mediante el uso de cookies. La actual legislación de la UE (European Union) me obliga a informarte de ello, caminante. We use cookies to improve our website and your experience when using it. Cookies used for the essential operation of this site have already been set. To find out more about the cookies we use and how to delete them, see our privacy policy.

  I accept cookies from this site.
EU Cookie Directive Module Information