Brazo Robot controlan por frambuesa Pi y Wiimote (5 / 6 paso)

Paso 5: El código

he seguido algunos de los sitios web mencionados para tener una idea de cómo funciona el código, pero todo el código de mi programa es mi propio trabajo. Espero que no asustar a nadie con él. 75% de ella es sobre todo comentarios y la pequeña porción restante es código real. Mi esperanza es que la gente será capaz de entenderlo y hacerlo propio. Estoy seguro de que también algunos sobre matar en él hizo y que se podría simplificar un poco, pero hay muchas formas de pelar un gato.

Puede controlar el brazo con o sin el nunchuk. Nunca pude encontrar un programa que utiliza todas las cosas en el nunchuk (el joystick, los botones y el acelerómetro) así que quería hacer seguro de que había un programa que tenía todo en él y era bastante fácil de entender por lo que la gente podía hacer lo que querían con el wiimote y nunchuk. Para lograr esto me aseguré que cada botón o el sensor o el accesorio fue utilizado para que la gente puede personalizarlo para sus propios fines. Por esta razón, algunos del código pueden parecer redundantes, pero hay una razón detrás de él. Lo único que no usé fueron el altavoz (no se puede conseguir que funcione todavía) y el sensor de infrarrojos.

No dude en tomar este código y utilizarlo en cualquier forma que desee!

#   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#   | T| A| Y| L| O| R| | B| O| A| R| D| M| A| N| | | | R| P| I| | A| R| M|
#   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

''' Primero tenemos que importar algunos archivos (estos archivos contienen todos los comandos necesarios para nuestro programa)
Tenemos usb.core y usb.util - estos se utilizan para controlar el puerto usb de nuestro brazo
A continuación tenemos cwiid que se comunica con el wiimote
Y tenemos la biblioteca de tiempo que permite retardar o detener las cosas '''
importación de usb.core, usb.util, cwiid, tiempo

#Give nuestro robot brazo un nombre fácil de modo que sólo necesitamos especificar toda la basura necesaria para la conexión de usb una vez
imprimir 'Asegúrese de que el brazo está listo para ir.'
imprimir ''
Armc = 1750
Brazo = ninguno
mientras que (brazo == None):
#This se conecta al usb
Brazo = usb.core.find (idVendor = 0x1267, idProduct = 0 x 0000)
#This a esperar a un segundo, y luego si el programa no se pudo conectar, nos dice e intenta otra vez
Armc = Armc + 1
Si (Armc == 2000):
imprimir «No se pudo conectar al brazo, comprobar sus conexiones.»
imprimir 'Programa continuará cuando se establece conexión...'
Imprimir "'
Armc = Armc/2000
continuar

#Set nuestro brazo transferencia protocolo a través del usb y definir un valor que podemos cambiar para controlar el brazo
Duración = 1
ArmLight = 0

#Create variable de retraso que podemos utilizar (segundos)
Retardo =.1
Contador = 9999
DEF ArmMove (duración, ArmCmd):

#Start movimiento
ARM.ctrl_transfer(0x40,6,0x100,0,ArmCmd,1000)
Time.Sleep(Duration)

#Stop movimiento
ArmCmd = [0,0, ArmLight]
ARM.ctrl_transfer(0x40,6,0x100,0,ArmCmd,1000)

#Establish una conexión con el wiimote
imprimir 'Conectado al brazo con éxito.'
Imprimir "'
imprimir 'Presione 1 y 2 en el wiimote al mismo tiempo.
#Connect para mote y si no conecta entonces lo nos dice e intenta otra vez
Time.Sleep(3)
imprimir ''
Imprimir "estableciendo conexión... 5'
Time.Sleep(1)
Imprimir "estableciendo conexión... 4'
Time.Sleep(1)
Imprimir "estableciendo conexión... 3'
Wii = ninguno
mientras que (Wii == None):

tratar de:
Wii = cwiid. Wiimote()
excepción RuntimeError:
imprimir 'Error al conectarse el wiimote, pulse 1 y 2.'
Imprimir "estableciendo conexión... 2'
Time.Sleep(1)
Imprimir "estableciendo conexión... 1'
Time.Sleep(1)
imprimir ''

#Once una conexión se ha establecido con los dos dispositivos que el resto del programa seguirá; de lo contrario, se mantenga tratando de conectar los dos dispositivos

#Rumble para indicar la conexión y enciende el LED
Wii.Rumble = 1 #1 = encendido, 0 = off
imprimir 'Conexión establecida'.
imprimir 'Pulse cualquier tecla para continuar...'
imprimir ''

''' Cada número gira en diodos LED en el wiimote
ex) if Wii.led = 1, entonces 1 LED
2 = LED 3 2 = LED 3 4 = LED 4
5 = LED 1, 3 6 = LED 2, 3 7 = LED 1,2,3
8 = LED 4 9 = LED 1, 4 10 = LED 2,4
11 = LED 12 1,2,4 = LED 13 3,4 = LED 1,3,4
14 = LED 15 2,3,4 = LED 1,2,3,4
Cuenta en binario a 15'' '
Time.Sleep(1)
Wii.Rumble = 0
Wii.LED = 15

# Fijar por lo que podemos decir cuándo y qué botones se empujan y hacen que se puede leer la entrada de acelerómetro
Wii.rpt_mode = cwiid. RPT_BTN | cwiid. RPT_ACC | cwiid. RPT_EXT
Wii.State

Aunque la verdad:

#This se ocupa con el acelerometro
''' crea una variable que contiene el valor del acelerómetro x
(cambia si mote es convertido o chasquear a izquierda o derecha)
plana o invertida = 120, si: 90 grados cc = 95, 90 grados c = 145'' '
Accx = (Wii.state['acc'][cwiid. X])

''' crea una variable que contiene el valor del acelerómetro y
(cambios cuando mote es señalado o chasquear hacia arriba o hacia abajo)
plano = 120, IR hacia arriba = 95, IR hacia abajo = 145'' '
Accy de la presión = (Wii.state['acc'][cwiid. Y])

''' crea una variable que contiene el valor del acelerómetro z
(Cambios con la rotación de motas de polvo, o cuando se tiró de espalda o encendió para arriba/abajo)
plano = 145, 90 grados cc o c o 90 grados arriba y abajo = 120, boca abajo = 95'' '
Accz = (Wii.state['acc'][cwiid. Z])

#This trata de los botones, le decimos a cada botón lo que queremos
botones = 'Wii.state['buttons]
#Get batería (como un porcentaje de 100):
#Just eliminar el frente de inn de signo de número
#print Wii.state['battery']*100/cwiid. BATTERY_MAX

# Si se pulsa el botón Inicio luego rumble y dejar de fumar, además de cerrar programa
Si (botones y cwiid. BTN_HOME):
imprimir ''
imprimir 'Cerrar conexión...'
ArmLight = 0
ArmMove(.1,[0,0,0])
Wii.Rumble = 1
Time.Sleep(.5)
Wii.Rumble = 0
Wii.LED = 0
Exit(Wii)

''' Brazo comandos definidos por ArmMove son
[0.1.0] Base gira hacia la derecha
[0,2,0] Gire Base izquierdas
[64,0,0] hombro para arriba
[128,0,0] hombro hacia abajo
[16,0,0] codo arriba
[32,0,0] codo abajo
[4,0,0] muñeca hasta
[8,0,0] muñeca hacia abajo
[2,0,0] agarre abierto
[1,0,0] agarre cerca
Luz [0,0,1]
Luz [0,0,0]

ex) ArmMove (duración en seconds,[0,0,0])
En este ejemplo sería detener todo movimiento y apagar el LED'' '

#Check para ver si se presiona otro botón
Si (botones y cwiid. BTN_A):
imprimir un prensado
Time.Sleep(Delay)
ArmMove(.1,[1,0,ArmLight])
Si (botones y cwiid. BTN_B):
imprimir 'Presiona B'
Time.Sleep(Delay)
ArmMove(.1,[2,0,ArmLight])
Si (botones y cwiid. BTN_1):
imprimir '1 presiona'
ArmMove(.1,[16,0,ArmLight])
Si (botones y cwiid. BTN_2):
imprimir 'Pulse 2'
ArmMove(.1,[32,0,ArmLight])
Si (botones y cwiid. BTN_MINUS):
Imprimir "menos presionado"
ArmMove(.1,[8,0,ArmLight])
Si (botones y cwiid. BTN_PLUS):
Imprimir "más presionado'
ArmMove(.1,[4,0,ArmLight])
Si (botones y cwiid. BTN_UP):
imprimir 'Up prensada'
ArmMove(.1,[64,0,ArmLight])
Si (botones y cwiid. BTN_DOWN):
imprimir 'abajo 'presionado
ArmMove(.1,[128,0,ArmLight])
Si (botones y cwiid. BTN_LEFT):
imprimir 'Izquierda presionado'
ArmMove(.1,[0,2,ArmLight])
Si (botones y cwiid. BTN_RIGHT):
imprimir 'Derecha presiona'
ArmMove(.1,[0,1,ArmLight])

#Here manejamos el nunchuk, junto con el joystick y los botones
while(1):
Si Wii.state.has_key('nunchuk'):
tratar de:
#Here son los datos para el stick del nunchuk:
#X axis:LeftMax = 25, media = 125, RightMax = 225
NunchukStickX = (Wii.state['nunchuk']['stick'][cwiid. X])
#Y eje: DownMax = 30, media = 125, UpMax = 225
NunchukStickY = (Wii.state['nunchuk']['stick'][cwiid. Y])
#The 'NunchukStickX' y las variables 'NunchukStickY' ahora almacenan los valores de palo

#Here que nos encargamos de todos nuestros datos para el acelerómetro

#The nunchuk tiene un acelerómetro que registra de manera similar para el wiimote, pero el rango de los números es diferente
#The X es: if 70 inclinado 90 grados hacia la izquierda y 175 if inclinado 90 grados hacia la derecha
NAccx = Wii.state['nunchuk']['acc'][cwiid. X]
#The Y rango es: if 70 inclinado 90 grados hacia abajo (los botones hacia abajo), y 175 if inclinado 90 grados (botones hacia arriba)
NAccy = Wii.state['nunchuk']['acc'][cwiid. Y]
#I todavía no entienden el eje z totalmente (en el wiimote y el nunchuk), pero lo puedo decir es el principal cambio proviene directamente tirando hacia arriba la Mota sin inclinarla
NAccz = Wii.state['nunchuk']['acc'][cwiid. Z]

#Make lo que podemos controlar el brazo con el joystick
Si (NunchukStickX < 60):
ArmMove(.1,[0,2,ArmLight])
Impresión izquierda' mover'
Si (NunchukStickX > 190):
ArmMove(.1,[0,1,ArmLight])
Derecho de mudanza de impresión
Si (NunchukStickY < 60):
ArmMove(.1,[128,0,ArmLight])
imprimir 'Mover hacia abajo'
Si (NunchukStickY > 190):
ArmMove(.1,[64,0,ArmLight])
imprimir 'Movimiento Up'

#Make lo que podemos controlar el brazo con funciones de inclinación
#Left a derecha
Si (Accx < 100 y NAccx < 90):
ArmMove(.1,[0,2,ArmLight])
Impresión izquierda' mover'
Si (Accx > 135 y NAccx > 150):
ArmMove(.1,[0,1,ArmLight])
Derecho de mudanza de impresión

#Up y abajo
Si (Accy de la presión < 100 y NAccy < 90):
ArmMove(.1,[64,0,0])
imprimir 'Movimiento Up'
Si (Accy de la presión > 135 y NAccy > 150):
ArmMove(.1,[128,0,0])
imprimir 'Mover hacia abajo'

#Here creamos una variable para almacenar el nunchuck el botón datos
#0 no = ningún botón pulsado
#1 = Z se presiona
#2 = C se presiona
#3 = ambos C y Z se presionan

ChukBtn = 'Wii.state['nunchuk']['buttons]
Si (ChukBtn == 1):
imprimir 'Z presionado'
ArmLight = 0
ArmMove(.1,[0,0,ArmLight])
Si (ChukBtn == 2):
imprimir 'Presiona C'
ArmLight = 1
ArmMove(.1,[0,0,ArmLight])
#If son presionado el led parpadea
Si (ChukBtn == 3):
imprimir 'presionan C y Z'
ArmMove(.1,[0,0,0])
Time.Sleep(.25)
ArmMove(.1,[0,0,1])
Time.Sleep(.25)
ArmMove(.1,[0,0,0])
Time.Sleep(.25)
ArmMove(.1,[0,0,1])
Time.Sleep(.25)
ArmMove(.1,[0,0,0])
Time.Sleep(.25)
ArmMove(.1,[0,0,1])
Time.Sleep(.25)
ArmMove(.1,[0,0,0])

#Any otras acciones que requieren el uso del Nunchuk de ninguna manera se deben poner aquí para que el manejo de errores funcionar correctamente
rotura

#This abajo abajo es la parte que nos dice si el wiimote no se conecta nunchuk
salvo error:
no imprimir 'nunchuk detectado'.
otra cosa:
Si (ArmLight == 0):
Si (Accz > 179 o Accz < 50):
ArmLight = 1
ArmMove(.1,[0,0,ArmLight])
Time.Sleep(.5)
Elif (ArmLight == 1):
Si (Accz > 179 o Accz < 50):
ArmLight = 0
ArmMove(.1,[0,0,ArmLight])
Time.Sleep(.5)

Si (contador == 10000):

no imprimir 'nunchuk detectado'.
Contador = contador/10000
rotura
Contador = contador + 1
rotura

Copie el código en un editor de python y luego guardarlo hacia fuera. Si el editor está todavía abierto a continuación, puede ejecutar el programa con F5. También puede ejecutar abriendo una terminal, navegar a la ubicación del programa y escribe: sudo python filename.py
Simplemente reemplace el nombre del archivo con el nombre real del archivo (todavía tienes que copiar el código en el editor y luego grabarla).
La foto de muestra: sudo Nunchuk_W_Arm.py, pero se olvidó de añadir el python allí. Que se supone que es: sudo python Nunchuk_W_Arm.py
Ahora estoy trabajando en una versión del programa que cuenta con una interfaz real con botones para controlar el brazo y esas cosas que muestran las golosinas del wiimote. Todavía puede utilizar el wiimote para controlar el brazo; sólo un programa más visual.

Artículos Relacionados

Brazo robot controlado por Arduino voz

Brazo robot controlado por Arduino voz

¿Te has sentido fustrated haciendo cosas que tenía un lado más?Bien, esto le ayudará.Se trata de un robot que puede hacer lo que quieres solo habla que por ejemplo se puede decir "arriba" y el robot hará un poco de movimiento hacia el lado que d
Modificaciones al brazo Robot de Opto acoplador retroalimentación, OWI 535, borde etc.

Modificaciones al brazo Robot de Opto acoplador retroalimentación, OWI 535, borde etc.

para aquellos de ustedes en la robótica y robóticos especialmente brazos, muchos de ustedes han visto el barato pero impresionante brazo robótico que se encuentra actualmente en el mercado para menos entonces $30 (£30 en el Reino Unido) estas armas t
Mobile Robot brazo DoArm S7 por wifi Arduino uno r3

Mobile Robot brazo DoArm S7 por wifi Arduino uno r3

Este manual es sólo para uso de la DoArm basado en laESPduino (que es compatible con Arduino uno r3) kit de desarrollo de empresa de hacerlo. Los usuarios pueden desarrollar otra vez o mejorar la función sobre la base de fuente código proporcionan po
Brazo robot de 20 € controlada por arduino

Brazo robot de 20 € controlada por arduino

En este intrsuctable voy a mostrarte cómo hacer un brazo robot simple. Los créditos para el brazo del robot va a este chico: allí se puede ver cómo montar el brazo robot, desgraciadamente él utiliza un 25 €, - polulu driver para controlar su robot br
Joystick control brazo Robot utilizando un Arduino

Joystick control brazo Robot utilizando un Arduino

Propósito y descripción de esta guíaEste instructable es una mano para un proyecto escolar que hemos hecho. El propósito de este proyecto era crear un control de brazo robot utilizando thumbsticks. Tuvimos que utilizar un Arduino Uno para el control
Brazo Robot de 4 ejes DIY

Brazo Robot de 4 ejes DIY

Hice este proyecto principalmente a aprender utilizar servos con arduino. Por supuesto puedo comprar kit de brazo robot como el MeArm y empezar a programar, pero lo que desde el principio te enseñan más. Quería diseñar el brazo simple como sea posibl
Programar el brazo Robot

Programar el brazo Robot

El propósito de este instructivo es desarrollar paso a paso un proyecto para el control y programación de un brazo robot, simulando las funciones básicas de un robot industrial.Paso 1: EspecificacionesEl robot debe tener dos funciones básicas:Program
Brazo robot

Brazo robot

Diseño y tecnologíaNivel 2Andrew MurtonPaso 1: El briefDeclaración conceptualMáquinas se necesitan para mover las cosas bajo control humano o computadora. Generalmente son necesarios para permitir que los seres humanos para mover objetos pesados/difí
Construir un Laser de corte y soldadura con brazo Robot Dobot

Construir un Laser de corte y soldadura con brazo Robot Dobot

En este proyecto instructable, construimos un laser de corte y soldadura con brazo Dobot. La alta precisión Dobot brazo de robot se compone de marco 6061 y fabricada con CNC. Su precisión de maquinaria es de 0,02 mm y precisión de la repetición es 0,
Brazo robot con Servo motores

Brazo robot con Servo motores

parte de mi investigación de doctorado en Universidad de Nueva York-Poly consiste en predecir el consumo de energía en sistemas robóticos, así que necesitaba un sistema robótico para trabajar con una plataforma de investigación para validar los resul
Tamaño de bolsillo MeArm de brazo Robot V0.4

Tamaño de bolsillo MeArm de brazo Robot V0.4

El MeArm es un brazo de Robot de tamaño de bolsillo. Es un proyecto iniciado en febrero de 2014, que ha tenido un viaje muy rápido a su estado presente gracias a su desarrollo abierto como un proyecto de Hardware abierto. Versión 0.3 apareció en Inst
3D impreso brazo Robot

3D impreso brazo Robot

Este brazo robot está conformada casi en su totalidad a 3D piezas impresas que juntos. Tiene tres articulaciones servo-controlado, además de una base giratoria y pinza. El brazo es controlado por una serie de botones que se conectan a un Arduino Uno
PRÁCTICAMENTE controlan la frambuesa PI

PRÁCTICAMENTE controlan la frambuesa PI

PRÁCTICAMENTE CONTROLAN LA FRAMBUESA PIIntroducción:Para hacer cualquier cosa con el Raspberry Pi, usted tendrá que enviar que lo ordena. Si tienes un repuesto monitor, el teclado y el ratón poner alrededor, muy bien! Usted puede tapar todo lo que en
Construir los niños - mi primer brazo Robot

Construir los niños - mi primer brazo Robot

Mi papá me sigue diciendo que soy ingeniero pero no lo creo y eso me hace tímidos y blush. Me gustan los robots para que él me compró un kit de brazo robot de internet llamado el MeArm. Es un gran juego y se puede comprar uno de http://www.phenoptix.