Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com CONTROL REMOTO DE UNA MINI PLATAFORMA DE TIJERA ACCIONADO POR UN MOTOR DC CONTROLADO POR ARDUINO 1. Resumen El objetivo del proyecto es implementar un control remoto de una mini plataforma de tijera accionada por un motor de corriente continua, cuyo dispositivo de control remoto es un teléfono móvil con Android, con canal de comunicación Bluetooh y con un controlador de motor DC basado en Arduino UNO R3. El proyecto consta de los siguientes desarrollos: 1) Aplicación Android que implementa el control remoto, descrito en el presente documento: Remote Control of DC Motor-Section-I-Android Applications by AppInventor.pdf 2) Controlador de un motor DC basado en Arduino, descrito en el documento: Remote Control of DC Motor-Section-II-Controller DC Motor by Arduino.pdf 2. Diagrama de contexto 3. Funciones de los componentes del sistema de control Cada uno de los componentes del sistema de control cumple funciones claramente definidos y todos contribuyen con el objetivo de control. A continuación de describe brevemente las funcionalidades de cada uno de ellas. 1 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com El dispositivo móvil tiene las siguientes funcionalidades: Conectar y desconectar el canal Bluetooth con Arduino (HC06) Generar los comandos que serán enviados a Arduino: Subir, Bajar o detener la mini plataforma que es accionado por un motor DC. Cambiar la velocidad del motor DC (dentro de un rango predefinido). El canal de comunicación Bluetooth establece el enlace de comunicación inalámbrica entre el dispositivo móvil y el Bluetooth shield de Arduino. El Bluetooth shield (HC-06) tiene la funcionalidad de recibir los comandos enviados desde el dispositivo móvil y transferirlo al controlador Arduino. El controlador Arduino interpreta los comandos (Subir, Bajar, detener, aumentar o disminuir la velocidad del motor) e invoca las funciones del controlador para que se ejecuten las acciones correspondientes. El driver del motor DC (L293D), conocido como puente H, tiene la función de generar la señal de control PWM con el ciclo de trabajo definido para controlar el giro del motor, la misma que se expresa en las acciones de subir, bajar o detener la plataforma de tijera. El motor DC es el actuador y tiene la función de transformar la energía eléctrica en energía mecánica, específicamente expresada en el movimiento de la mini plataforma de tijera. Una plataforma de tijera o mesa elevadora es una herramienta que permite transportar objetos a cualquier altura dentro de su rango <altura mínima, altura máxima>, ejecutando un movimiento vertical. Las partes básicas de una mesa elevadora son: La base Las tijeras La plataforma 2 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com El accionador (en nuestro caso, un motor DC) La unidad de control (en nuestro caso, una placa Arduino). 4. Protocolo de comunicaciones Crear y definir un protocolo de comunicación es un aspecto muy importante en todo proceso de comunicación. En nuestro caso, para el intercambio de mensajes se define la siguiente sintaxis: A continuación se detalla la semántica: Elemento Descripción StartCommand Identifica el inicio del comando Velocity Action EndCommand Separator Establece el valor de la velocidad del motor, dentro de un rango predefinido (obtenido de manera experimental). Permite: Incrementar la velocidad Decrementar la velocidad Expresa las acciones que se pueden ejecutar sobre la plataforma Subir Bajar Parar Identifica el fin del comando Desde 225 hasta 255 Permite separar cada una de los elementos del comando de control. Carácter: | Ejemplo: El motor debe subir a una velocidad de 250. Comando: “*|250|20|#” 3 Valores Carácter: * Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Subir : 20 Bajar : 10 Parar : 00 Carácter: # Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com 5. Desarrollo del Control Remoto con AppInventor Proyecto: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Diseñando los componentes Para nuestra aplicación SLT_CONTROL (Scissor Lift Table Remote Control) tenemos que crear y definir el comportamiento de componentes visibles y no visibles. Componentes no visibles Tipo de Paleta Componente BluetoothClient Connectivity Notifier User Interface Nombre Propósito BluetoothClient1 Notifier1 Conectar al Arduino Mostrar los mensaje de alerta, error o informativo Componentes visibles Se crean los componentes visibles de la interfaz gráfica del usuario. Tipo de Paleta Nombre Propósito Componente VerticalArrangement ListPicker Layout User Interface VerticalArrangement1 connectListPicker Image User Interface Layout connectedImage HorizontalArrangement Button HorizontalArrangement Button Button Button HorizontalArrangement Button 4 Layout User Interface User Interface User Interface Layout HorizontalArrangement2 upButton HorizontalArrangement1 leftVelocityButton stopButton rightVelocityButton HorizontalArrangement3 disconnectButton Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Contenedor visual. Seleccionar el dispositivo “Bluetooth” de Arduino y conectar el dispositivo. Mostrar el estado “Conectado” del Bluetooth. Contenedor visual Elevar la plataforma Contenedor visual Disminuir la velocidad del motor Detener el movimiento del motor Incrementar la velocidad del motor Contenedor visual Desconectar el Bluetooth. Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com Visor del proyecto en AppInventor Añadiendo el comportamiento de los componentes En esta sección se debe programar el comportamiento de cada uno de los componentes, permitiendo que el usuario: se conecte a la aplicación del controlador Arduino, mediante la selección del Bluetooth HC-06 . se desconecte de la aplicación del controlador. ejecute las acciones de subir, bajar o detener la plataforma. Incremente o disminuya la velocidad del motor. Variables Las variables definidas, creadas e inicializadas para el manejo del protocolo de comunicaciones son: velocityMin separator startCommand velocityMax endCommand 5 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com command action velocity Procedimientos Los procedimientos definidos y creados para la generación de la trama del comando y controlar los límites de la velocidad del motor, son: generateCommand velocityLimit 6 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com ListPicker – Muestra los dispositivos Bluetooth Bloque connectListPicker.BeforePicking presenta la lista de dispositivos Bluetooth disponibles y el usuario debe seleccionar el Bluetooth correspondiente al HC-06 de Arduino. ListPicker – Establece la conexión del dispositivos Bluetooth Bloque connectListPicker.AfterPicking permite establecer la conexión al HC-06 de Arduino. En caso de error, se presenta el mensaje de alerta “Unable to make a Bluetooth connection”. 7 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com Bloque para subir la plataforma El bloque upButton.Click permite establecer el valor del elemento Action= '20' que significa “Subir (UP)”, generar la trama del comando con el procedimiento generateCommand y, finalmente, se envía la trama por el Bluetooth. Bloque para bajar la plataforma El bloque downButton.Click permite establecer el valor del elemento Action= '10' que significa “Bajar (DOWN)”, generar la trama del comando con el procedimiento generateCommand y, finalmente, se envía la trama por el Bluetooth. Bloque para detener la plataforma El bloque stopButton.Click permite: establecer el valor del elemento Action= '00' que significa “Detener (STOP)”, generar la trama del comando con el procedimiento generateCommand y, finalmente, se envía la trama por el Bluetooth. 8 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com Bloque para incrementar la velocidad del motor El bloque rightVelocityButton.Click permite: incrementar la velocidad del motor, con paso incremental igual a 2, valida que la velocidad no se encuentre por encima del rango permitido (255), generar la trama del comando con el procedimiento generateCommand y, finalmente, se envía la trama por el Bluetooth. En caso que la velocidad configurada supere la velocidad máxima del motor, se presentara un mensaje de alerta: Y se establece la velocidad del motor al valor máximo permitido (255). Bloque para decrementar la velocidad del motor El bloque leftVelocityButton.Click permite: decrementar la velocidad del motor, con paso decremental igual a 2, valida que la velocidad no se encuentre por debajo del rango permitido (225), generar la trama del comando con el procedimiento generateCommand y, finalmente, se envía la trama por el Bluetooth. En caso que la velocidad configurada sea menor que la velocidad mínima del motor, se presentara un mensaje de alerta: Y se establece la velocidad del motor al valor mínimo permitido (225). 9 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com Bloque para desconectar el Bluetooth El bloque disconnectButton.Click permite realizar la desconexión del Bluetooth HC-06. 6. Ejecución del Control Remoto Pantallas del Control Remoto en el teléfono inteligente Icono en la pantalla del smart-phone. 10 Pantalla principal del control remoto, con los botones para el control del motor. Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com Selección del Bluetooth HC-06 de Arduino. Pantalla, después de conectarse al Bluetooth. Para el control remoto del motor DC se debe accionar los botones de control: Botón/Imagen Acción Seleccionar el Bluetooth de Arduino y conectar el dispositivo. Subir (el motor gira en sentido horario) Bajar (el motor gira en sentido anti horario) Parar (el motor se detiene) Incrementar la velocidad del motor Decrementar la velocidad del motor Desconectar el Bluetooth Arduino 11 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com Componentes del controlador Arduino, Driver del motor DC y el Motor DC (actuador) La plataforma desplegado a diversas alturas. 12 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications Remote Control of DC Motor by Android Applications Francisco Marcos Rodríguez Rivera - fran.rodriver@gmail.com 7. Referencias Proyecto ArduDroid escrito por Hazim Bitar, http://www.techbitar.com/ardudroid-simple-bluetooth-control-for-arduinoand-android.html Control velocidad y sentido de giro de un motor DC http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/ AppInventor.org http://www.appinventor.org/ 13 Proyecto AppInventor: http://ai2.appinventor.mit.edu/#5199644048490496 Nombre del Proyecto: SLT_CONTROL Proyecto Fritzing: Remote Control of DC Motor by Android Applications http://fritzing.org/projects/remote-control-of-dc-motor-by-android-applications