Saludos,
A principio del mes de agosto estuve enfrascado en un
proyecto con el Arduino
yun, para realizar un robot semejante a los que ya he construido pero con
la diferencia que en este caso podría tratarse de un robot autónomo.
Me explico, a grandes rasgos el Arduino yun funciona como un
Arduino normal, con la salvedad que tiene conexión wifi y un sistema operativo
propio el linino.
AVR Arduino microcontroller
|
Linux Microprocessor
|
Microcontroller ATmega32U4
Operating Voltage 5V
Input Voltage 5
Digital I/O Pins 20
PWM Channels 7
Analog Input Pins 12
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50
mA
Flash Memory 32 KB (of which 4
KB used by bootloader)
SRAM 2.5 KB
EEPROM 1 KB
Clock Speed 16 MHz
|
Processor Atheros
AR9331
Architecture MIPS @400MHz
Operating Voltage 3.3V
Ethernet IEEE 802.3
10/100Mbit/s
WiFi IEEE 802.11b/g/n
USB Type-A 2.0 Host
Card Reader Micro-SD only
RAM 64 MB DDR2
Flash Memory 16 MB
SRAM 2.5 KB
EEPROM 1 KB
Clock Speed 16 MHz
PoE compatible 802.3af card support See
Power
|
El proyecto era montar un robot, con gripper, cámara con pant
tilt, seguidor de línea, sensor de distancia,
servomotores y un led. Como ya os he dicho sería muy semejante a robots
anteriores pero la diferencia de que la comunicación se emplearía wifi y la
gracia que en linino se podrían hacer funcionar algunos módulos en python. Su
destino era ir a USA para realizar un workshop, la verdad es que mucho más no
sé, pero tenía que hacer dos unidades, ya como la Nasa (jajaja), por si uno
fallaba.
|
Para hacer el setup del yun podéis seguir los pasos de Getting started, en Yun
puede crear un punto de conexión, pero recomiendo configurarlo a una red la
manera de configurarlo es conectarte al Arduino mediante wifi y abrir una
página con la dirección 192.168.240.1 ahí os pedirá un password de acceso que
por defecto es “arduino” sin las comillas. En el caso del Arduino mini yun es
“doghunter” que encontrareis una mini guía aqui.
Una vez configurado el arduino a la red ya no es necesario
que esté conectado al ordenador para cargarle el programa. Para que os aparezca
en el Arduino ide, tenéis que cerrarlo u os pasara como a mí que no había forma
que me apareciese, pues la nueva ip del Arduino no la sabes. Con el Arduino
mini yun, hay otro tema este producto es de “la
otra compañía de Arduino” , así que
tendréis que bajaros su ide propia.
Lo primero que descubres del yun es que las librerías wifi
de Arduino no funcionan, resumiendo un poco el Arduino no tiene wifi lo tiene
el Linux, así que se ha de emplear la librería Bridge.h para poder comunicar el
Arduino con el linino y es el Linux el que podrá recibir y enviar mediante
wifi.
Para la comunicación íbamos a emplear el protocolo UDP para ello
haríamos un programa en python que corriera en el linino que nos abriera un puerto en
192.168.0.102:2390 desde el cual recibiría instrucciones para testear el robot.
Del mismo modo en el ordenador ejecutaríamos otra aplicación en python que
recibiría los comandos del teclado y los enviaría por el puerto.
Módulo python en linino enlace
Para instalar el módulo de python en el linino, hay que
conectarse mediante ssh a la ip 192.168.0.102 que es la ip que tiene asignada el
yun en nuestro router. Desde Windows yo empleo el programa putty
desde Linux aquí tenéis una guía de instalación.
Una vez conectados no pedirá el password que le hemos puesto al Yun para poder
acceder en modo root. Ahí editamos un documento nuevo.py y ponemos el código.
Luego hacemos chmod
+x lininomybot.py para cambiar los permisos y lo ejecutamos mediante:
./ lininomybot.py
o
python lininomybot.py
Módulo python Ordenador enlace
El modulo del ordenador abre una ventana del terminal donde podéis escribir en mayúsculas:
W -->
Forward
S --> Backward
A --> Left
D --> Right
X --> Stop
Z --> Led
C --> Gripper
Q -->
Cámara
E --> Sensores
Este módulo
genera el puerto comunicación mediante la instrucción:
sock =
socket.socket(socket.AF_INET, #Internet
socket.SOCK_DGRAM)
#UDP
Y envía las
instrucciones mediante:
sock.sendto(msg, (UDP_IP,UDP_PORT))
Por otro
lado el mensaje es recibido por el modulo del linino, mediante la instrucción:
sock.bind((UDP_IP,UDP_PORT)) y msg
= sock.recv(1024).
Una vez recibido el mensaje empleamos el bridge.put(“orden”,”msg”), importante
es emplear el mismo nombre de variable en este caso “orden” en el módulo de
python y en programa del Arduino.
Código
Arduino enlace
En el código
de Arduino está hecho con trozos de otros programas y básicamente sirve para
testear que todo funciona correctamente. Como el control pant tilt de la pixy,
que funciona buscando el color o los colores que le hemos entrenado. Ahora no
lo hace pero cuando encuentre el objeto del color nos puede dar las coordenadas
(x,y) y emplearlo para una aproximación.
El led y el
gripper funcionan en modo “conmutador” , cada vez que le enviamos la
instrucción cambia de estado, abierto/cerrado, encendido/apagado.
La dirección
está controlada por dos servomotores de 360º, no obtienen mucha velocidad pero sí
bastante control.
La parte de
los sensores no está terminada, en el ejemplo empleamos Console.print(“ ”); que envía
la información al linino, no es necesario emplear la librería console.h, pero
no envía la información a ordenador, parte de la idea de esta publicación es
refrescarme un poco el tema y continuar.
Algún enlace
de ayuda con ejemplos
No hay comentarios:
Publicar un comentario