Programación Inteligente de un brazo de robot, controlado ...
Robot Arduino controlado mediante sensores y con...
Click here to load reader
-
Upload
nguyenkiet -
Category
Documents
-
view
266 -
download
2
Transcript of Robot Arduino controlado mediante sensores y con...
Robot Arduino controlado mediante sensores y con respuestas sobre actuadores Asier Pérez de Lazarraga Mangado Grado en Tecnologías de Telecomunicación Arduino José López Vicario Pere Touset Peiró Junio de 2017
Esta obra está sujeta a una licencia de Reconocimiento-NoComercial-CompartirIgual 3.0 España de Creative Commons
i
FICHA DEL TRABAJO FINAL
Título del trabajo: Robot Arduino controlado mediante sensores y con respuestas sobre actuadores
Nombre del autor: Asier Pérez de Lazarraga Mangado
Nombre del consultor/a: José López Vicario
Nombre del PRA: Pere Touset Peiró
Fecha de entrega (mm/aaaa): 06/2017
Titulación: Grado de Tecnologías de Telecomunicación
Área del Trabajo Final: Arduino
Idioma del trabajo: Castellano
Palabras clave Arduino. Robótica. Sensórica.
Resumen del Trabajo (máximo 250 palabras):
Las tecnologías IT hoy en día están amplia y totalmente asentadas en ámbitos domésticos y empresariales. En este contexto, están surgiendo nuevos conceptos como el Big Data o el Internet of Thinks en los que la sensórica ha adquirido un papel fundamental. Y es que los sensores son los encargados de definir el entorno tomando todo tipo de datos de él.
Estos datos como tal no serían de mayor utilidad sin su análisis y/o procesamiento. Microcontroladores o microprocesadores son usados para transformarlos a información útil con la que se pueda tomar alguna decisión con el fin de realizar alguna acción. De esta forma, con una interconexión y comunicación entre dispositivos adecuada, se automatizan simples o complejas tareas, en función de las variables de entrada.
Con todo ello, en este trabajo se implementa un robot gobernado por un microcontrolador Arduino que actúa en función de las señales que reciba como entradas. Además, pretende realizar un estudio de las posibilidades que actualmente hay en el mercado para la ampliación de este robot o el desarrollo de sistemas más complejos, visto que las oportunidades de crecimiento en ésta u otra solución son enormemente amplias.
Y es que, por todo lo expuesto, se concluye que la automatización de procesos o trabajos tiene un recorrido enorme en las que las tecnologías de información y telecomunicación son parte fundamental. Existen además muchas necesidades que pueden ser cubiertas por soluciones que pueden ser desarrolladas con herramientas que están al alcance de todo el mundo.
ii
Abstract (in English, 250 words or less):
Nowadays IT technologies are very present at home and in most enterprises. In this context, new concepts such as Big Data or Internet of Thinks are emerging, in which sensory has acquired a fundamental role. This is because the sensors are the ones in charge of defining the environment taking all type of data from it. That data would be useless without its analysis and / or processing. Microcontrollers or microprocessors are used to transform the data into useful information with which a decision can be made in order to perform some action. In this way, with an appropriate interconnection and communication between devices, simple or complex tasks, are automated depending on the input variables. With this in mind, a robot controlled by an Arduino microcontroller is implemented in this work. This robot acts in function of the signals received as inputs. Additionally, it is intended to perform a study of the possibilities that currently exist in the market for the expansion of this robot, or the development of more complex systems. Growth opportunities in this or another solution are very big. And because of all the above, it is concluded that processes or task automation in which information and telecommunication technologies are fundamental has an extremely promising future. And there are also a lot of needs that can be covered by solutions that can be developed with tools that are accessible to everyone.
iii
Índice
1. Introducción .................................................................................................... 1 1.1 Contexto y justificación del Trabajo ........................................................... 1 1.2 Objetivos del Trabajo ................................................................................. 1 1.3 Enfoque y método seguido ........................................................................ 2 1.4 Planificación del Trabajo ........................................................................... 3
1.5 Breve sumario de productos obtenidos ..................................................... 4 1.6 Breve descripción de los otros capítulos de la memoria............................ 4
2. Microcontrolador vs microprocesador ............................................................ 5 3. Robot .............................................................................................................. 7
3.1 Módulo Bluetooth ...................................................................................... 8
3.1.1 Diferentes estándares de Bluetooth .................................................. 9 3.1.2 Otras alternativas inalámbricas ....................................................... 10
3.2 Sensórica ................................................................................................ 10 3.2.1 Sensores integrados en la placa ..................................................... 10 3.2.2 Sensores equipados al robot conectados por RJ25 ........................ 12 3.2.3 Otros tipos de sensores en el mercado .......................................... 15
3.3 Actuadores .............................................................................................. 20 3.3.1 Actuadores integrados en la placa .................................................. 20 3.3.2 Actuadores equipados al robot ....................................................... 20 3.3.3 Otros tipos de actuadores en el mercado ....................................... 21
3.4 Puertos de expansión .............................................................................. 21
3.5 Puerto serie ............................................................................................. 22 4. Entorno de programación ............................................................................. 25
4.1 mBlock ..................................................................................................... 25 4.2 Makeblock ............................................................................................... 26
4.3 Arduino .................................................................................................... 28 4.3.1 Código Arduino ............................................................................... 29
5. Obtención y procesamiento de datos ........................................................... 33 6. Valoración económica del trabajo ................................................................ 34
7. Conclusiones ................................................................................................ 35 8. Glosario ........................................................................................................ 36 9. Bibliografía ................................................................................................... 37 10. Anexos ....................................................................................................... 38
iv
Lista de figuras
Figura 1: Raspberry Pi 3 Model B ...................................................................... 6
Figura 2: Robot gobernado por placa MeAuriga ................................................. 7 Figura 3: Placa ME Auriga [5]............................................................................. 8 Figura 4: MPU-6050. Orientación de ejes ........................................................ 12 Figura 5: Sensor de ultrasonidos ...................................................................... 13 Figura 6: Limitaciones en el sensor de ultrasonidos ......................................... 14
Figura 7: Sensor seguimiento de línea (LED+fotodiodo) .................................. 14 Figura 8: Sensor fotoeléctrico como detector de paso ..................................... 15 Figura 9: Sensor PIR. Principio de funcionamiento. ......................................... 17 Figura 10: Sensor inductivo. Principio de funcionamiento. ............................... 18
Figura 11: Sensor capacitivo. Principio de funcionamiento. ............................. 18 Figura 12: Final de carrera de palanca con rodillo ........................................... 19 Figura 13: Final de carrera de varilla ................................................................ 19
Figura 14: LED’s RGB ...................................................................................... 20 Figura 15: Arduino Mega (izq.) & ME Auriga (der.) pinout [5] ........................... 21 Figura 16: Puertos serie Bluetooth ................................................................... 23 Figura 17: Conexión Bluetooth con el robot ..................................................... 24
Figura 18: Monitor serie IDE Arduino ............................................................... 24 Figura 19: Programación Scratch en entorno mBlock ...................................... 25
Figura 20: Proyecto en Makeblock para Android .............................................. 26 Figura 21: Selección visual de puerto en Makeblock Android .......................... 27 Figura 22: Código scratch asociado a un objeto .............................................. 27
Figura 23: IDE Arduino ..................................................................................... 29 Figura 24: Programa de captura de tráfico serie RealTerm ............................. 33
Figura 25: Software de trazado y visualización de datos Kst ........................... 34
v
Lista de ecuaciones
Ecuación 1: Velocidad del sonido en cm/s ....................................................... 13
Ecuación 2: Distancia sensor de ultrasonidos .................................................. 13
Lista de tablas
Tabla 1: Microprocesador vs microcontrolador ................................................... 5 Tabla 2: Bluetooth clásico vs BLE ...................................................................... 9
Tabla 3: Puertos de expansión RJ25 ............................................................... 22 Tabla 4: Presupuesto del Proyecto .................................................................. 34
1
1. Introducción 1.1 Contexto y justificación del Trabajo
En la actualidad hay infinidad de sensores que pueden medir casi la totalidad de las magnitudes físicas o químicas que definen el entorno en el que se encuentran. Este hecho hace que estas mediciones puedan alimentar con gran cantidad de información sistemas ad-hoc o de propósito general. En base a este conocimiento del medio, el sistema puede definirlo con gran exactitud en cada instante con variables que le resulten de interés, y a partir de ello reaccionar de una forma o de otra. Y tanto es así que la sensórica es un pilar fundamental en conceptos como el internet de las cosas (Internet of Things en inglés y a menudo conocido por sus siglas IoT), Industria 4.0 o Smart Cities que tanto futuro tienen en el mundo de las IT (Tecnologías de la Información por las siglas en inglés de Information Technology). La robótica y la automatización son a su vez, ramas de la ingeniería que pueden aprovecharse de forma más natural de estas funciones. Por sus características, pueden ejercer fácilmente sobre actuadores que modifiquen de forma mecánica (y también eléctrica) manipulando objetos físicos a su alcance. Y es que estos dos campos han evolucionado de los movimientos repetitivos de los que principalmente se basaban en el pasado a interactuar según las variables de entrada en cada momento. Por otra parte, se ha extendido el movimiento “hágalo usted mismo” (DIY por sus siglas Do It Yourself) en el ámbito científico. Su expansión ha posibilitado que surja y se desarrolle Hardware libre con una comunidad muy amplia que da apoyo y soporte a diversas iniciativas de esta índole. Este hecho ha propiciado mejoras constantes y que exista cantidad de información y de repositorios para este tipo de material electrónico. Un claro exponente de estas ideas, y uno de los sistemas que más aceptación ha tenido, es Arduino. Por tanto, uniendo todos estos conceptos, se pretende construir un robot que se desplace controlado por Arduino capaz de interactuar con el medio. Este prototipo podrá ser desarrollado para tareas más complejas en el futuro incluyendo más inputs y outputs progresivamente según las necesidades que se vayan detectando.
1.2 Objetivos del Trabajo
Los objetivos principales del proyecto de este Trabajo de Fin de Grado son:
Construir un dispositivo robot controlado por Arduino que tenga capacidad de desplazamiento.
2
Implementar una aplicación capaz de controlar sus movimientos de forma pasiva/preventiva o activa.
Además, se definen los siguientes objetivos secundarios:
El equipo deberá estar dotado de varios sensores de diferente tipo y estar interconectado y ser accesible mediante tecnología inalámbrica, por medio de Bluetooth.
Para conseguir la interactividad, se desarrollará una aplicación a cargar en el Arduino que defina las salidas en función de las entradas.
Debe ser ampliable. Es decir, que el sistema sea capaz de adaptarse fácilmente a nuevas necesidades que surjan a posteriori. Por tanto debe ser un sistema abierto que deberá estar bien documentado para su mantenimiento, versiones posteriores e incluso posibles modificaciones.
1.3 Enfoque y método seguido
Se ha optado por adquirir el conjunto de la placa y robot en un paquete cerrado comercializado por una empresa especializada en ello. La construcción de principio a fin de un robot que se moviese hubiera conllevado complicaciones sobre todo en el diseño de la parte mecánica. El proyecto, por consiguiente, ha consistido en montar y adaptar un producto existente y en desarrollar a partir de él varias alternativas y programas con el fin de conseguir los objetivos marcados. La cantidad de información relativa a Arduino que se encuentra en internet ha ayudado a avanzar hacia dicho propósito. Se ha aprovechado también para explorar en sectores que tienden a sacar partido de campos que se estudian en el sector de las telecomunicaciones. Así, este trabajo ha servido al autor (y puede servir a las personas que estén interesadas en ello) para la investigación, y puede servir como elemento de apoyo para la consulta y como punto de partida para el desarrollo de sistemas y proyectos de mayor alcance.
3
1.4 Planificación del Trabajo
A continuación se presenta la planificación mediante diagrama de Gantt del Trabajo Fin de Grado:
4
1.5 Breve sumario de productos obtenidos
Al finalizar el Proyecto se habrá desarrollado un robot controlado por un microcontrolador Arduino que será capaz de desplazarse e interactuar con el medio de una forma u otra en función de los parámetros de entrada que irá recogiendo mediante sensores conectados. Así mismo, deberá también responder con salidas luminosas o acústicas según se den las entradas.
1.6 Breve descripción de los otros capítulos de la memoria
En los siguientes capítulos de este documento se detallarán los elementos que han intervenido en la consecución de este trabajo: En el primer apartado de introducción se hace un repaso del contexto, estado del arte, objetivos y planificación seguida. En el segundo apartado se estudian las diferentes alternativas que existen a la hora de seleccionar el elemento central del robot: microcontroladores o microprocesadores. El tercer apartado se centra en el propio robot. Se detalla el hardware instalado para su interconexión inalámbrica con otros dispositivos, los sensores y actuadores que se instalan o pudieran ser instalados y las capacidades de expansión. Además se estudia el puerto serie que es fundamental para la comunicación del Arduino con otros dispositivos. En el cuarto capítulo se muestran diferentes entornos en los que podemos programar el equipo. Se repasan los propietarios del fabricante donde existe también una aplicación para dispositivos móviles, y el propio sistema de Arduino, con las diferencias que existen en cada uno de ellos. En el quinto apartado se verá, sin entrar en detalle, la posibilidad existente de capturar y procesar los datos con software ajeno al propio Arduino desde el ordenador. En el sexto apartado se muestra el presupuesto que se ha empleado para este proyecto. En el séptimo apartado, se reflejarán las conclusiones que se han sacado en la puesta en marcha de este proyecto. En los capítulos octavo, noveno y décimo están para consultar como referencia el glosario, la bibliografía y los anexos, respectivamente. En éste último, se recogen entre otras, partes de especificaciones de componentes.
5
2. Microcontrolador vs microprocesador
Con la expansión del fenómeno maker se han ampliado enormemente las posibilidades de elección de todo tipo de componentes electrónicos. Una de las primeras decisiones que se deben tomar en la mayoría de proyectos de esta naturaleza es la de gobernar el dispositivo con un microprocesador o con un microcontrolador. En la siguiente tabla se hace un resumen de las principales características enfrentadas entre dos de los equipos de hardware (HW) libre más difundidos en la actualidad: el microprocesador Raspberry PI 3 y el microcontrolador Arduino Mega 2560:
Microprocesador (Raspberry Pi 3)
Microcontrolador (Arduino MEGA 2560)
CPU 4× ARM Cortex-A53, 1.2GHz ATmega2560. 16MHz
Memoria RAM 1GB LPDDR2 (900 MHz) en un circuito integrado aparte
8KB en el propio circuito integrado
Arquitectura 64 bits 8 bits
Velocidad de Operación
Rápida Lenta en comparación
Propósito Propósito general Propósito más específico
Entradas/Salidas digitales
40 GPIO pins E/S digitales: 54, de las cuales 15 PWM
Salidas analógicas
0 16
Video Broadcom VideoCore IV HDMI
N/A
Sistema Operativo
Raspberry: Raspbian, Windows CE…
N/A
Consumo eléctrico
Mayor Menor
Coste Mayor Menor
Interferencias
Más susceptibles a la interferencia electromagnética debido a su tamaño y a su menor nivel de integración
El alto nivel de integración reduce la interferencia electromagnética
Tabla 1: Microprocesador vs microcontrolador
Como puede comprobarse en la tabla 1, los microprocesadores son más potentes y más flexibles, y tienen mucha mayor capacidad de computación que los microcontroladores. Los microcontroladores, a su vez, están más enfocados a la electrónica y están más orientados al manejo de entradas y salidas. Así, en sistemas IoT, los equipos conectados a los sensores suelen estar gobernados por microcontroladores (recogida de datos), mientras que los equipos
6
encargados a procesar la cantidad de información de entrada suelen ser microprocesadores. Por todo lo expuesto, para el propósito del presente Proyecto, se determina que un dispositivo Arduino es más óptimo que un microprocesador debido a que no se necesita un alto grado de computación ni de operaciones aritméticas con la información que se va a recoger, y sí una gran robustez a la hora de tomar los datos de las diferentes entradas y de producir los efectos requeridos en las diferentes salidas. El hecho de que no tenga un sistema operativo, hace que Arduino sea más sólido. En cualquier caso, en otro tipo de proyectos ambos conceptos son compatibles y pueden convivir perfectamente realizando cada uno de ellos tareas diferentes. Y tanto es así que existen módulos de expansión para interconectar de manera más sencilla placas Arduino y Raspberry.
Figura 1: Raspberry Pi 3 Model B
7
3. Robot
Según la Real Academia Española (RAE), un robot es una “máquina o ingenio electrónico programable, capaz de manipular objetos y realizar operaciones antes reservadas solo a las personas”. En la figura 2 se muestra el robot construido en una de sus posibles formas.
Figura 2: Robot gobernado por placa MeAuriga
Éste está gobernado por una placa base Me Auriga basada en el microcontrolador Arduino Mega 2560, con 10 puertos de expansión RJ25 y varios sensores y módulos integrados. El detalle de la misma se refleja en la siguiente figura 3:
8
Figura 3: Placa ME Auriga [5]
3.1 Módulo Bluetooth La placa ME Auriga cuenta con un módulo para conexión inalámbrica Bluetooth (es reemplazable) que soporta los protocolos Bluetooth 2.1, 3.0 y 4.0 y comunicación output a través del puerto serie. Su frecuencia de funcionamiento es de 2,4GHz, y hasta 115200 baudios y una distancia de operatividad de 10-15m en campo abierto. Las características del módulo son válidas para las necesidades del proyecto. Además Bluetooth es un estándar ampliamente extendido y compatible con los otros dispositivos que se utilizan (portátil y smartphone) con lo que facilita la compatibilidad. Alternativas como Zigbee son descartadas por este motivo. El módulo cuenta con un LED de color azul que se mantiene parpadeando cuando está a la escucha. Para conectarse vía Bluetooth lo primero que se tiene que hacer desde el PC o dispositivo móvil es activar el Bluetooth para buscar dispositivos cercanos. Si encuentra el BT del robot, el siguiente paso es enlazar los dispositivos. Al emparejarlos se solicitará una clave que se debe aceptar. Posteriormente, si se realiza la conexión, el LED del módulo pasará a azul fijo.
9
3.1.1 Diferentes estándares de Bluetooth
El módulo BT equipado, como se ha comentado anteriormente, soporta diferentes estándares entre los que se encuentra el BT 4.0 en cuya especificación se encuentra el BLE (Bluetooth Low Energy). Esta variedad difiere de las clásicas en la finalidad para la que ha sido concebida. Mientras que en las antiguas versiones principalmente se buscaba la mayor velocidad de datos, en ésta, se pretende rebajar el consumo. Esta filosofía de bajo consumo aun a costa de reducción de velocidad está pensada para redes de sensores o IoT debido a que generalmente los datos a transmitir no deben ser de grandes volúmenes pero sí cada cierto tiempo y en equipos con baterías limitadas. De esta forma, el BLE se puede ajustar mejor a este tipo de entornos donde importa más el bajo consumo para que el dispositivo tenga más autonomía que la velocidad de transmisión. A continuación se recogen en una tabla las características enfrentadas entre un Bluetooth clásico tipo y BLE
Especificación BT clásico BLE
Frecuencia de uso 2.4GHz 2.4GHz
Rango de distancia 100m >100m
Tasa 1 – 3Mbps 125kbps – 1Mbps
Througput de aplicación
0.7 – 2.1Mbps 300kbps
Nodos esclavos activos 7 ilimitado
Latencia (desde la no conexión a envío de
datos) 100+ ms <6ms
Tiempo mínimo total para enviar datos
100ms 3ms
Voz permitida Sí No
Consumo de potencia 1W
(normalizado)
0.01 – 0.5W (dependiendo
aplicación)
Pico de consumo <30mA <15mA
Tabla 2: Bluetooth clásico vs BLE [8]
Por tanto, revisando las especificaciones, se podrías determinar que ambas opciones son buenas. BLE encaja mejor porque no existe necesidad de transmitir grandes volúmenes de información y haría que la autonomía del robot fuera mayor. Sin embargo, los equipos con los que se ha trabajado, no son compatibles con el BT4.0 por lo que se han conectado los equipos usando el estándar del Bluetooth clásico anterior a la versión 4.0.
10
3.1.2 Otras alternativas inalámbricas
Wifi: existen módulos Wifi para Arduino. Con ellos, se consiguen velocidades mucho mayores y se pueden construir redes de dispositivos. Para el propósito de este TFG no son necesarias ninguna de las características que nos puede ofrecer. Además el consumo de Wifi es mucho mayor al del BT, con lo que se descartaría esta opción por ser menos adecuada.
NFC: esta tecnología queda descartada por la distancia de operación (<20cm) que no es compatible con las necesidades del proyecto.
ZigBee: se trata de una tecnología de bajo consumo y no alta velocidad de transferencia de datos muy similar a BLE y con distancias indoor de hasta 20m. Además tiene la ventaja de que puede ser configurado punto a multipunto [14]. El inconveniente reside en que la mayoría de dispositivos smartphones y ordenadores no están equipados para soportar esta tecnología, por lo que queda descartado en este proyecto, pero sí se considera buena alternativa para otro tipo de trabajos.
Tras analizar las alternativas más conocidas del mercado se determina que Bluetooth es la mejor solución de interconexión inalámbrica para este proyecto. Además, el robot ya viene equipado con un módulo por lo que no es necesario adquirir material extra que aumentase el presupuesto.
3.2 Sensórica
Según la RAE, un sensor es un “dispositivo que detecta una determinada acción externa, temperatura, presión, etc., y la transmite adecuadamente”. Se explican en este apartado los elementos de este tipo que se integran en el robot y algunos de los otros más extendidos que se pudieran integrar en mejoras o ampliaciones del robot.
3.2.1 Sensores integrados en la placa
Sensor de sonido: se trata de un sensor que se fundamenta en un micrófono de condensador electret cuyo principal componente es un amplificador de baja potencia LM386 de Texas Instruments. Con él se puede encender o apagar el robot con, por ejemplo, la voz, de la misma forma que si fuera un interruptor.
2 sensores de luminosidad: se basan en transistores fotoeléctricos cuya resistencia disminuye a medida que aumenta la intensidad luminosa. Por tanto, propician que las variaciones de luz puedan ser convertidas en variaciones de señal eléctrica analógica.
11
Este tipo de componentes puede ser de gran utilidad en un amplio número de campos en donde se requiera saber el nivel de luz existente para, por ejemplo, encender o no luminaria. Así, dentro del concepto de “Smart Cities” este tipo de elementos ayudan a controlar el apagado o encendido del alumbrado público en función de la luz ambiente (y otros factores como la presencia de gente), ayudando a ahorrar energía (lo que supone también ahorro económico) y mejorando el descanso y bienestar de los vecinos.
Sensor de temperatura: pequeño termómetro que se fundamenta en un termistor. Un termistor (Thermally Sensitive Resistor) es un semiconductor que varía se resistencia con la temperatura. Algunas de las funciones que se pueden implementar según su entrada pueden ser: Activar o desactivar la climatización o aire acondicionado en un
recinto en función de la temperatura que se esté midiendo. Esto implica un aumento de confort en la gente y control a tiempo real en la energía que gastan esos aparatos.
El control de la temperatura es fundamental en determinados procesos industriales para asegurar el correcto funcionamiento de los equipos, evitando por ejemplo sobrecalentamientos que puedan conllevar mal funcionamiento o acortar vida útil del equipamiento.
El elemento que incluye la placa es un sensor de temperatura ambiente (que mide desde 0º a 50º con una precisión de 2º), pero también los puede haber con contacto o sumergibles, que se comentarán más adelante.
Acelerómetro de 3 ejes y sensor de giro: se fundamenta en un circuito integrado MPU-6050 [9] que combina un giroscopio de 3 ejes, un acelerómetro de 3 ejes y un procesador digital de movimientos patentado por el fabricante (InvenSense). Sus sensores internos miden las aceleraciones lineales y angulares, y su procesador es capaz de realizar cálculos en tiempo real proporcionando los ángulos de inclinación con respecto a los 3 ejes principales, que son de mayor utilidad.
12
Figura 4: MPU-6050. Orientación de ejes
Un acelerómetro es un dispositivo que mide la aceleración de un elemento. Generalmente, el acelerómetro mide la aceleración mediante la medida de cuánto presiona la masa sobre algo cuando una fuerza actúa sobre ella. Un giroscopio es un dispositivo de medida de la orientación, basado en los principios de conservación del momento angular (Coriolis). Aplicaciones que se pueden dar según la entrada de este elemento pueden ser: Activar un airbag si se detecta un cambio muy brusco en la
aceleración negativa de un vehículo. Girar una pantalla en función de en qué orientación esté
posicionada. Suelen usarse como sistemas de posicionamiento inerciales (INS).
Un INS es una ayuda a la navegación que usa un procesador y sensores de movimiento para seguir continuamente la posición, la orientación y la velocidad de un elemento sin necesidad de referencias externas. Se basa en el principio de que, si se conoce la posición inicial y se registran todos los movimientos, la posición en cada momento es conocida. Cabe comentar que en la actualidad la gran mayoría de smartphones incorporan estos sistemas. Como de por sí mismos no son muy precisos, suelen usarse como complemento a sistemas inalámbricos donde existen zonas de sombra en sistemas de posicionamiento interiores [10]
No entra dentro de los objetivos ni en el alcance de este proyecto el analizar sistemas de unidad de medición inercial (IMU) ni se usará este sensor de forma específica en el robot que se construye en el presente Proyecto.
3.2.2 Sensores equipados al robot conectados por RJ25
Sensor de ultrasonidos: mide la distancia que hay hasta un objeto que está enfrente, con un rango de 3cm a 4m, en un ángulo de 30º y una precisión de 1cm. Se compone de un emisor y receptor de sonidos de
13
alta frecuencia no audibles por el oído humano. Su fundamenta en el tiempo que transcurre desde que se emite hasta que se recibe la señal, al ser conocida la velocidad del sonido en la atmósfera:
Ecuación 1: Velocidad del sonido en cm/s
Por tanto, sabiendo que se tardan 29,2μs en recorrer cada centímetro, y teniendo en cuenta que la onda recorre dos veces la distancia al obstáculo (ida y vuelta):
Ecuación 2: Distancia sensor de ultrasonidos
Figura 5: Sensor de ultrasonidos
Uno de los mayores inconvenientes de este tipo de dispositivos, como se muestra en la parte derecha de la Figura 6, es que no recibirán la onda reflejada si el objeto enfrentado forma un ángulo de incidencia con una desviación superior a la marcada en las especificaciones. Se podrían plantar dos soluciones para evitar este inconveniente: Montar dos sensores ultrasónicos, en lugar de uno, desplazados
cierto ángulo sobre la dirección de la marcha del robot, para así cubrir más área.
Montar un único sensor de ultrasonidos pero que mediante un servomotor fuera girando en abanico recorriendo el ángulo en el que pudiera haber objetos con los que pudiera chocar.
14
Figura 6: Limitaciones en el sensor de ultrasonidos
No es el objetivo de este proyecto que el robot evite todos los objetos, con lo que se asume que el robot pueda chocar en determinadas condiciones con determinados obstáculos.
A pesar también de que no son tan precisos en la medición de distancias, ni tienen la velocidad de respuesta de los sensores ópticos (estos por el contrario tienen un rango de medición más limitado y son más inmunes al polvo por ejemplo), su rango de exactitud de 1cm y su frecuencia de 42kHz es más que suficiente para el propósito del robot del presente proyecto.
Sensor infrarrojo IR: en el robot construido funciona como un sensor de seguimiento de línea. Su funcionamiento es muy similar al del sensor ultrasónico, pero tiene un rango de detección menor, de 1-2cm. El dispositivo TCRT5000 [5] se compone por un diodo LED emisor de IR y un fototransistor sensible a los rayos IR a esa longitud de onda (λ=960nm). Si la superficie a la que está enfrentada es clara reflejará mayor cantidad de rayos IR que si es oscura, tal y como se muestra en la figura 7.
Figura 7: Sensor seguimiento de línea (LED+fotodiodo)
Colocando dos pares de estos sensores separados una determinada distancia, se puede verificar si el robot deja de seguir la línea marcada y, en consecuencia, programar para corregir ese desvío. Esta utilidad también puede servir por ejemplo para cortar una chapa, con un láser o una cuchilla, previamente marcada. Además de las de seguimiento de línea, entre las distintas funciones que puede tener este tipo de sensores (o sensores ópticos, también pueden ser equipados con láseres) se pueden citar las de detectar
15
objetos enfrente de él como en los típicos detectores de los ascensores, o usarse como sensor de posición en encoders rotatorios [11].
Figura 8: Sensor fotoeléctrico como detector de paso
Las barreras fotoeléctricas, muy extendidas como medidas de seguridad que pueden emplearse para parar la máquina cuando un operario entra en el área de operación de alguna máquina, están formadas por estos elementos.
3.2.3 Otros tipos de sensores en el mercado
En el mercado se pueden encontrar gran cantidad de sensores capaces de medir la gran mayoría de magnitudes físicas del entorno en el cual se instalan. Son muy frecuentes en sectores industriales, donde además de su precisión, los rangos de funcionamiento en los que pueden operar cobran vital importancia. Y es que en este tipo de escenarios se necesitan dispositivos de gran robustez frente a temperaturas extremas, productos químicos, polvos... Así pues debido a la importancia que están adquiriendo se citan algunos de los más utilizados tanto en la industria como en otros ámbitos:
Sensor de temperatura sumergible: termómetros sumergibles en líquidos muy útiles para medir la temperatura de un líquido. Un dispositivo típico para Arduino o Raspberry es el basado en el termómetro digital DS18B20. Tiene una resolución ajustable de 9 a 12 bytes y solo requiere de 1 pin digital para la comunicación. Su rango de medición de temperaturas es de entre -55º y 125º con una precisión de 0,5º de -10º a 85º. Hay que prestar especial cuidado a que aunque se pueda medir ese rango, el cable que lo conecta con la placa también lo soporte.
Sensor de humedad: detectan la humedad en el ambiente o en el entorno.
16
Una de las posibles aplicaciones que se le puede dar es la de la gestión de parques y jardines públicos, haciendo que el regado sea cuando realmente la tierra lo necesite y durante el tiempo justo. Cuando el sensor detecte la humedad adecuada de la tierra, los aspersores dejarán de regar el espacio. Estos sensores pueden ajustar el riego y así ahorrar un bien tan preciado como el agua.
Sensor de llama: en determinados escenarios industriales es factible que determinadas máquinas puedan generar llamas, y por tanto, son elementos ampliamente usados en la industria como dispositivos de seguridad haciendo posible detener cualquier proceso en caso de detectar algún indico de combustión. La elección del dispositivo en la industria debe determinarse en función de la seguridad que se requiera, la sensibilidad y fiabilidad necesaria. Por ello, en entornos industriales se necesitarán sensores más profesionales que eviten falsas alarmas que puedan parar procesos (con el coste que eso conlleva) o no detecten rápidamente el fuego (con el coste y peligro que ello conlleva). Algunas de las especificaciones a tener en cuenta son (entre paréntesis valores típicos de en sensores Arduino):
o Banda espectral que detecta (840-1200nm). Se debe asegurar que se cubren todos los tipos de fuegos que se pueden causar en el proceso.
o Ángulo de detección (60º). o Tiempo de respuesta (15μs). Este tiempo de respuesta es
vital en seguridad. Cuanto menor es el tiempo más rápido se detecta y mejor puede ser la respuesta.
o Temperatura de operación (-25º a 80º y se recomienda no estar muy cerca de la llama para evitar deterioros). Este rango de operaciones puede no ser suficiente en industrias con elevadas temperaturas, como pueden ser fundiciones.
Sensor de gas: de la misma forma que una llama, la detección de determinados gases puede ser vital para la seguridad en entornos industriales y domésticos. Existen diferentes sensores de este tipo que generalmente dan como salida una señal analógica. Su sensibilidad puede ser modificada en función de las necesidades. Cada dispositivo puede detectar ciertos tipos de gases. Dentro de la familia de sensores de gas MQ existen diferentes tipos dependiendo del gas al que sean sensibles: MQ-2 (metano, butano, LPG, humo), MQ-3 (alcohol, etanol, humo), MQ-4 (metano, gas CNG), MQ-5 (gas natural, LPG), MQ-6 (LPG, gas butano), MQ-7 (monóxido de carbono), MQ-8 (gas hidrogeno), MQ-9 (monóxido de carbono, gases inflamables), MQ131 (ozono), MQ135 (benceno, alcohol, humo), MQ136 (gas de sulfuro de hidrógeno), MQ137 (amoniaco), MQ138 (benceno, tolueno, alcohol, acetona, propano, gas formaldehído, gas hidrógeno), MQ214 (metano, gas natural), MQ216 (gas natural, gas de carbón), MQ303A (alcohol, etanol, humo), MQ306A (GLP, gas butano), MQ307A (monóxido de carbono), MQ309A (monóxido de carbono, gases inflamables.), MG811 (dióxido de carbono CO2),
17
AQ-104 (calidad del aire), AQ-2 (gases inflamables, humo), AQ-3 (alcohol, benzina), AQ-7 (monóxido de carbono).
Sensor de movimiento PIR: se trata de un sensor de movimiento que mide la luz infrarroja radiada por los objetos situados en su campo de visión. Todos los seres vivos y la mayoría de máquinas eléctricas o mecánicas que se mueven desprenden calor, y ese calor se emite a la atmósfera en forma de radiación infrarroja. La variación en el tiempo y/o espacio de esa radiación puede ser detectada por los sensores PIR dando una salida. Características de estos elementos que se deben tener en cuenta a la hora de diseñar un sistema dependiendo del uso que se le quiera dar y el entorno en donde se instalan, y que se podrán consultar en las especificaciones, son (con valores típicos entre paréntesis para sensores PIR Arduino):
o Tensión nominal (5V). o Temperatura de trabajo (-20º a 70º) o Niveles de tensión de salida (5V – 0V) o Tiempo de respuesta (2s). Puede que en sistemas más
críticos se deba rebajar este tiempo. o Ángulo de detección (120º). Si fuera insuficiente se podrían
instalar más sensores para que de esta forma abarquen un mayor ángulo: instalando dos con un determinado ángulo haría que se doblase ese ángulo de detección.
o Distancia de detección máxima (6m).
Figura 9: Sensor PIR. Principio de funcionamiento.
18
Aplicaciones típicas se dan en domótica, haciendo encender luces al paso de personas.
Sensores inductivos: su funcionamiento se basa en la detección de elementos metálicos gracias al campo magnético que producen. Debido a este principio, son útiles para aplicaciones de posicionamiento como de detección de elementos formados mayoritariamente por hierro, tanto por contacto como sin contacto (aunque a distancias cortas).
Figura 10: Sensor inductivo. Principio de funcionamiento.
Sensores capacitivos: su principio de funcionamiento es muy
similar al de los inductivos, pero usan un campo eléctrico para detectar objetos enfrentados a él. Debido a esta diferencia, estos dispositivos detectan tanto objetos metálicos como no metálicos.
Figura 11: Sensor capacitivo. Principio de funcionamiento.
19
Finales de carrera: en el mundo de la sensórica industrial tradicional, los finales de carrera son de los elementos más utilizados históricamente. Son interruptores que operan mediante accionamiento mecánico. Dan una señal dependiendo de si se producía contacto físico o no dependiendo la configuración en la que se diseñasen:
o Normalmente abierto: cuando no se actúa sobre él (posición de reposo) el circuito está abierto.
o Normalmente cerrado: cuando no se actúa sobre él (posición de reposo) el circuito está cerrado. Un caso típico de esta configuración son los paros de emergencia o setas de seguridad: abren el circuito si son pulsados para que se detenga todo el proceso con un reset.
Dependiendo de la forma en que sean atacados por el objeto (puertas, compuertas...), pueden ser de diverso tipo y determinar presencia, ausencia, posicionamiento del elemento...
Figura 12: Final de carrera de palanca con rodillo
Un interruptor de contacto de palanca se podría implementar en las paredes del robot para detectar y hacer un conteo de cuántas veces se choca contra paredes u otro tipo de obstáculos. Uno de varilla podría utilizarse para detectar y contar, por ejemplo, postes (instalados como balizas físicas) que estuvieran en los costados del camino que recorre el robot.
Figura 13: Final de carrera de varilla
20
Quizá no sean elementos con mucha utilidad en un robot Arduino, pero se veía la necesidad de citar estos elementos tan presentes en sistemas de automatización.
3.3 Actuadores
3.3.1 Actuadores integrados en la placa
Zumbador: es un buzzer pasivo que emite un sonido diferente en función de la frecuencia con la que se le haga vibrar. Que sea pasivo significa que no contiene un oscilador, con lo que la frecuencia se determina en función de la señal de salida que marque el controlador. Con este dispositivo se podrán generar diferentes tipos de señales acústicas.
LED’s RGB: la placa cuenta con un módulo de 12 LED’s RGB. La particularidad de estos diodos LED es que se pueden regular cada uno de los tres colores primarios directamente y de forma independiente, dando mucha intensidad de luz y también un alto espectro de colores combinándolos.
Figura 14: LED’s RGB
De esta forma, sobre el mismo diodo se puede producir un código de colores que de forma visual pueda ser interpretado por un observador externo.
3.3.2 Actuadores equipados al robot
Motores: el robot puede ser equipado con diversos tipos de motores como pueden ser motores paso a paso, motores DC, motores de encóder ópticos… El pack Ranger incluía motores de encóder ópticos de 3.7W que es con los que se ha equipado el robot.
21
3.3.3 Otros tipos de actuadores en el mercado
Existen gran número de actuadores y periféricos de salida que se pueden conectar al Arduino: diversos tipos de motores, pantallas LCD, displays numéricos, pantallas táctiles, pulsadores, interruptores, relés… Al conectarse elementos, se debe tener en cuenta que la máxima corriente para cada pin de entrada/salida (I/O) es de 40mA y de 20mA de forma continua en las placas Arduino Mega 2560. Además de a actuadores, los datos pueden enviarse a otros dispositivos para que sean procesados como pueden ser PC’s, smartphones... o almacenados en ficheros, alimentar bases de datos...
3.4 Puertos de expansión
La placa ME Auriga cuenta con 10 puertos RJ25 y dos conectores 2.54mm “dupont” para la conexión de los motores. La finalidad de los puertos RJ25 es facilitar la modularidad haciendo más cómodo el remplazo de los elementos que se conectan a la placa evitando los pines de las placas Arduino. Así, no es necesario conectar los cables hacia los pines de la placa, basta con conectar directamente el RJ25 de la misma forma que un teléfono fijo. En la figura 15 se muestra la relación entre los pinouts de las placas Arduino Mega y ME Auriga.
Figura 15: Arduino Mega (izq.) & ME Auriga (der.) pinout [5]
22
Además, a simple vista se puede conocer el uso que se puede dar a cada puerto según su color, sabiendo así de forma rápida qué dispositivo se debe conectar en qué puerto. La correspondencia se recoge en la tabla 3:
Puertos Color Función Tipos de módulos compatibles
1-4 Rojo Tensión de salida continua de 6-12V
Todo tipo de motores
5 Gris Puerto serie Bluetooth (BT) Módulo 2.4G
Raspberry Pi. GPIO.
6-10
Amarillo Interfaz digital single
Diversos sensores y actuadores analógicos y digitales
Azul Interfaz digital dual
Negro Interfaz analógica
single/dual
Blanco Puerto I2C
Tabla 3: Puertos de expansión RJ25
Los puertos del 1 al 4 pueden suministrar continuamente una
corriente de salida de 3,5A (y picos de hasta 5A). Soportan protección a cortocircuitos y sobrecorrientes prolongadas de hasta 3,5A.
Los puertos del 5 al 10 pueden suministrar continuamente una tensión de 5V y corriente de salida de 2,4A (y picos de hasta 3A). Soportan protección a cortocircuitos y sobrecorrientes prolongadas de hasta 3A.
3.5 Puerto serie Existe un apartado de referencia sobre el puerto serie en Arduino que se encuentra en la web [3] para su consulta. Un puerto es el nombre genérico con que se denomina a los interfaces físicos o virtuales que permiten la comunicación entre dos dispositivos. La comunicación serie es la que se usa generalmente para comunicar el Arduino con el ordenador u otro dispositivo mediante por ejemplo Bluetooth. La comunicación serie en los pines TX/RX usa los niveles lógicos de referencia de TTL (transistor-transistor logic) que varían dependiendo de la placa desde los 3.3V a los 5V. Estos valores no son compatibles con los +/- 12V a los que opera el puerto serie RS232 con lo que no se deben conectar directamente a él para no dañar la placa. Todos las placas Arduino tienen por lo menos un puerto serie (también conocido como UART o USART): Serial, que se comunica mediante los pines digitales 0 (RX) y 1 (TX) y a través del ordenador vía USB. Por tanto, hay que tener en cuenta que si se utilizan estas
23
funciones no se pueden usar también los pines 0 y 1 para conexiones de entradas y salidas digitales. La placa Arduino Mega, que es en la que se basa la Me Auriga de este proyecto, cuenta con tres puertos serie adicionales: Serial1 en los pines 19 (RX) y 18 (TX), Serial2 en los pines 17 (RX) y 16 (TX) y Serial3 en los pines 15 (RX) y 14 (TX). Estos puertos adicionales no están conectados al USB del Arduino. Al emparejar el robot vía Bluetooth al ordenador, se puede observar en las opciones de Bluetooth que el sistema operativo asigna un par de puertos serie al robot para comunicarse con él:
Figura 16: Puertos serie Bluetooth
En la siguiente imagen se puede observar en el IDE mBlock, que se analizará más adelante, al ordenador conectado al robot mediante el puerto COM4 que es el que nos había dado previamente el sistema operativo para esta conexión inalámbrica con el robot llamado Makeblock. Con el miniprograma se consigue conectar con el robot de forma inalámbrica y hacerlo mover para adelante presionando la tecla de flecha arriba del teclado. Además, como puede apreciarse, también se recogen de forma inalámbrica los datos que se envían desde un sensor inalámbrico de ultrasonidos configurado en el robot.
24
Figura 17: Conexión Bluetooth con el robot
El entono IDE de Arduino también cuenta con un monitor serie en donde se muestran los datos que se recogen desde el robot, y también se habilita una línea para enviar datos al robot. En la siguiente captura se recogen los valores del sensor de ultrasonidos en un código desarrollado durante la realización de este proyecto:
Figura 18: Monitor serie IDE Arduino
Además este IDE de Arduino también incorpora en sus últimas versiones un Serial Plotter donde se muestran los datos numéricos recogidos en formato de gráfica. Esto puede ser útil en determinadas ocasiones para determinar tendencias o ver evolución de las medidas registradas.
25
4. Entorno de programación El fabricante dispone de un entorno de programación (IDE) propietario llamado mBlock basado en Scratch 2.0 y muy similar al propio Scratch donde se puede programar con este lenguaje. Además también se da la posibilidad de seleccionar un modo Arduino.
4.1 mBlock Desde el entorno propietario se da la posibilidad de programar en Scratch, que es un lenguaje de programación visual abierto desarrollado por el MIT (Massachusetts Institute of Technology) Media Lab. Su codificación en bloques hace que sea muy intuitivo. Tanto es así que está principalmente orientado a la educación y enseñanza.
Figura 19: Programación Scratch en entorno mBlock
En la figura 19 se muestra un código en lenguaje Scratch que, en función de la intensidad luminosa recogida por el sensor de la placa, enciende todos los diodos de la matriz con máxima intensidad en color blanco (los 3 colores activos al máximo) si no hay mucha luz, enciende los LEDs en color azul con una intensidad luminosa ambiental, o los enciende con baja intensidad en rojo si se recibe mucha luz. Como comentario, se han tenido que apagar todos los diodos antes de que se realizasen las sucesivas mediciones para que su propia emisión de luz no desvirtuase la medición de la intensidad lumínica en ese momento. De no haberse realizado de esta manera, la medición del sensor siempre hubiera detectado una intensidad lumínica elevada debido a la propia luz que se emitía desde los diodos.
26
En el código de la figura 19 también se puede comprobar que las mediciones se han guardado en una lista donde se puede comprobar, de ser necesario, el registro de mediciones. La programación en este entorno con Scratch únicamente ofrece la posibilidad de ejecutar el programa que se ha creado online, es decir, no se queda cargado en la placa Arduino. Las órdenes que se envían al robot y las entradas que se reciben de él se ejecutan directamente desde el programa. Pero también existe la opción de cargar el código en el hardware, seleccionando el “Modo Arduino”. Una vez seleccionado este modo si existe código Scratch generado en IDE, el propio IDE hace una traducción de código a Arduino (lenguaje C) para poder ser subido a la placa. Para poder usarse de nuevo la opción online, si hubiera algo cargado en el microcontrolador, se debe actualizar el firmware del robot para que pueda entenderse con mBlock permitiendo la comunicación entre la placa Me Auriga y el ordenador dentro del software.
4.2 Makeblock El fabricante también ha desarrollado una aplicación para dispositivos móviles smartphones compatible con Android 4.3 o superior, o el iOS 9.0 o superior de Apple, que pueden ser descargadas desde Google Play o iTunes respectivamente, ambas de forma gratuita. Desde ella se pueden desarrollar proyectos para controlar el robot y recoger datos del mismo. En la siguiente figura se puede apreciar un proyecto implementado en el trascurso de este TFG en el que se han incluido botones para activar procesos, y elementos de visualización para printar entradas tomadas del bluetooth. Con ello se consigue desplazar al robot, hacer que se iluminasen LED’s y que el altavoz emitiese una nota, y visualizar los datos recogidos por los sensores en forma numérica y de forma gráfica:
Figura 20: Proyecto en Makeblock para Android
27
Los diferentes tipos de bloques (visualizadores, paletas de printado, interruptores, pulsadores…) se pueden eliminar o incluir en el programa de forma muy intuitiva desde una paleta que está habilitada para ello. Para cada objeto asociado a un puerto, se puede seleccionar de forma muy visual en cuál se está conectado (en esta imagen el puerto 10):
Figura 21: Selección visual de puerto en Makeblock Android
Además, seleccionando la opción de “Código” en cada objeto editable, éste se puede programar en un lenguaje basado en Scratch. Para ello, se habilita una barra de herramientas a la izquierda de la pantalla principal de donde se pueden arrastrar los módulos con los que construir el código.
Figura 22: Código scratch asociado a un objeto
28
Se describen las opciones que hay en cada elemento de la barra:
Begin: Se indica cuándo se ejecuta el código: Al empezar, cuando se presione una tecla, cuando se deslice la barra…
Move: Acciones asociadas al movimiento del robot propio de la placa: avanzar, girar, parar… Con la velocidad a la que se indique. También es posible actuar sobre motores en otros puertos.
Display: Ejecuta acciones sobre actuadores visuales o acústicos de los que se tendrá que definir el puerto en el que están y el valor que se les quiere dar.
Event: Eventos que pueden generar acciones: se agita el Smartphone, el Smartphone se inclina hacia algún lado, se detecta un evento del tipo indicado en el puerto indicado, se activa interruptor o botón indicado en el proyecto en curso…
Detect: Captura el valor de algún sensor del tipo que se le indique en el puerto que se le indique o el valor indicado en algún objeto que se haya incluido en el proyecto.
Math: Operaciones matemáticas: o Sumas, restas, multiplicaciones… o Igual a, diferente, mayor, mayor igual… o AND, OR. o Negar o Números aleatorios o Redondear o Manipulación de elementos: añadir, establecer… o Operaciones trigonométricas o …
Controls: Controles de flujo: o Condicionales: if, if else… o Bucles infinitos, bucles de repetición de X veces, repetir
hasta, for… o Delays
De la misma forma que sucedía en mBlock, el código se ejecuta online sin ser cargado en la placa. Si se vuelve a encender el Arduino, este programa no estará grabado en él.
4.3 Arduino
Al ser un sistema basado en Arduino, también se puede programar la placa en este entorno de programación. Para preparar el entorno se deben seguir los siguientes pasos:
1. Descargar las librerías Arduino para los módulos Makeblock desde: https://github.com/Makeblock-official/Makeblock-Libraries Github es una plataforma de desarrollo colaborativo de software donde desarrolladores alojan software con el fin de su difusión y soporte a usuarios.
29
Además Github es un repositorio para el control de versiones con lo que periódicamente se cuelgan nuevas revisiones con mejoras o correcciones de bugs.
2. Copiar la carpeta “makeblock” a la ruta de librerías de Arduino. De esta forma la carpeta de librerías de Arduino debe tener la siguiente forma en Windows: [directorio de instalación de Arduino]\libraries\makeblock\src
3. Abrir el IDE Arduino. 4. Incluir la librería correspondiente a la placa que se vaya a utilizar
en la parte superior del código. En nuestro proyecto se deberá incluir #include <MeAuriga.h>
Figura 23: IDE Arduino
Arduino se programa en un lenguaje de programación derivado del lenguaje C. A continuación se pega el código cargado al robot para que trate de no chocarse con objetos, avise acústicamente cuando va marcha atrás, y encienda los LED’s de uno u otro color en función de la luz ambiente que detecte.
4.3.1 Código Arduino
#include <Arduino.h> #include <Wire.h> #include <SoftwareSerial.h> #include <MeAuriga.h> //Auriga libraries //Encoder Motor MeEncoderOnBoard Encoder_1(SLOT1); MeEncoderOnBoard Encoder_2(SLOT2);
30
void isr_process_encoder1(void) { if(digitalRead(Encoder_1.getPortB()) == 0){ Encoder_1.pulsePosMinus(); }else{ Encoder_1.pulsePosPlus(); } } void isr_process_encoder2(void) { if(digitalRead(Encoder_2.getPortB()) == 0){ Encoder_2.pulsePosMinus(); }else{ Encoder_2.pulsePosPlus(); } } void move(int direction, int speed) { int leftSpeed = 0; int rightSpeed = 0; if(direction == 1){ leftSpeed = -speed; rightSpeed = speed; }else if(direction == 2){ leftSpeed = speed; rightSpeed = -speed; }else if(direction == 3){ leftSpeed = -speed; rightSpeed = -speed; }else if(direction == 4){ leftSpeed = speed; rightSpeed = speed; } Encoder_1.setTarPWM(leftSpeed); Encoder_2.setTarPWM(rightSpeed); } void moveDegrees(int direction,long degrees, int speed_temp) { speed_temp = abs(speed_temp); if(direction == 1) { Encoder_1.move(-degrees,(float)speed_temp); Encoder_2.move(degrees,(float)speed_temp); } else if(direction == 2) { Encoder_1.move(degrees,(float)speed_temp); Encoder_2.move(-degrees,(float)speed_temp); } else if(direction == 3)
31
{ Encoder_1.move(-degrees,(float)speed_temp); Encoder_2.move(-degrees,(float)speed_temp); } else if(direction == 4) { Encoder_1.move(degrees,(float)speed_temp); Encoder_2.move(degrees,(float)speed_temp); } } double angle_rad = PI/180.0; double angle_deg = 180.0/PI; void sensor_ultrasonidos(); MeUltrasonicSensor ultrasonic_10(10); MeBuzzer buzzer; void sensur_luz(); MeRGBLed rgbled_0(0, 12); MeLightSensor lightsensor_12(12); void sensor_ultrasonidos() { if((ultrasonic_10.distanceCm()) > (50)){ move(1,100); }else{ if((ultrasonic_10.distanceCm()) < (20)){ if(((random(1,(2)+1))==(1))){ move(4,50); }else{ move(3,50); } }else{ move(2,50); buzzer.tone(262, 500); delay(20); } } } void sensur_luz() { rgbled_0.setColor(0,0,0,0); rgbled_0.show(); _delay(0.1); if((lightsensor_12.read()) < (300)){ rgbled_0.setColor(0,255,255,255); rgbled_0.show(); _delay(1); }else{ if((lightsensor_12.read()) < (500)){ rgbled_0.setColor(0,0,255,0); rgbled_0.show(); _delay(1); }else{
32
rgbled_0.setColor(0,20,0,0); rgbled_0.show(); _delay(1); } } } void setup(){ attachInterrupt(Encoder_1.getIntNum(), isr_process_encoder1, RISING); attachInterrupt(Encoder_2.getIntNum(), isr_process_encoder2, RISING); buzzer.setpin(45); rgbled_0.setpin(44); //Set Pwm 8KHz TCCR1A = _BV(WGM10); TCCR1B = _BV(CS11) | _BV(WGM12); TCCR2A = _BV(WGM21) | _BV(WGM20); TCCR2B = _BV(CS21); BT.begin(9600); Serial.begin(9600); } void loop(){ sensur_luz(); sensor_ultrasonidos(); Serial.print("Distance : "); Serial.print(ultrasonic_10.distanceCm() ); Serial.println(" cm"); delay(100); /* the minimal measure interval is 100 milliseconds */ _loop(); } void _delay(float seconds){ long endTime = millis() + seconds * 1000; while(millis() < endTime)_loop(); } void _loop(){ Encoder_1.loop(); Encoder_2.loop(); }
A diferencia de lo que sucedía en los entornos mBlock y Makeblock, este código se carga en el microcontrolador. De esta forma, estará disponible cada vez que el Arduino sea encendido, cosa que no pasaba en los dos primeros, que ejecutaban el código online.
33
5. Obtención y procesamiento de datos Los datos que se envían desde el Arduino pueden ser recogidos a través de un software de escaneo y captura de datos como RealTerm. Este programa permite leer los datos del puerto serie y capturarlos almacenándolos en un archivo.
Figura 24: Programa de captura de tráfico serie RealTerm
Los datos previamente almacenados en un fichero (txt en este proyecto) son recogidos por un software de trazado y visualización de datos a tiempo real. De esta forma se consigue una monitorización instantánea de los parámetros que van reportando los sensores o el propio Arduino en sus actuadores.
34
Figura 25: Software de trazado y visualización de datos Kst
Las funciones de captura y monitorización están también integradas en el IDE Arduino (o en el del propio mBlock), pero se testean otro tipo de soluciones para constatar la no dependencia del puerto serie con el IDE Arduino, y para comprobar también las posibilidades de procesamiento de los datos recogidos que proporciona esta recogida de datos.
6. Valoración económica del trabajo La finalidad del trabajo no era económica, sino más bien de investigación y como punto de partida para el desarrollo de proyectos y sistemas de mayor alcance. En cualquier caso, se reflejan el presupuesto que se ha empleado para este TFG:
Producto PVP
Robot Makeblock Ranger 169 €
Pilas AA (pack de 6) 4,95 €
IDE mBlock 0 €
IDE Arduino 0 €
PVP TOTAL 173.95€
Tabla 4: Presupuesto del Proyecto
Cabe destacar que se podrían haber conseguido los objetivos con menos inversión, pero hubiera supuesto mayor tiempo que no se hubiera dedicado al proyecto en sí.
35
7. Conclusiones
Con este trabajo se ha constatado las infinitas posibilidades que se presentan en el futuro dentro de los campos de la sensórica, la automatización y la robótica. Puede decirse que son los pilares fundamentales de las nuevas tecnologías con más presente y futuro de hoy en día. Existen multitud de tareas y procesos que se pueden automatizar con las herramientas que se disponen en la actualidad. Por tanto, es un mundo con mucho recorrido en los que los profesionales de las IT tienen mucho que aportar. Por otra parte, con este proyecto se han conseguido de una manera o de otra los objetivos inicialmente marcados. En lugar de haberse implementado un código que englobase todas las funciones y depurarlo hasta dar con un programa a la medida, se ha optado por explorar más a fondo cada una de las alternativas que se disponían. En internet hay infinidad de código que se puede aprovechar para la aplicación concreta con la que se vaya a trabajar, por ello se ha decidido por conocer mejor las herramientas que se disponen para poder aprovechar la plataforma. De haberse planeado de otra forma, se hubieran integrado en el robot nuevos módulos para completar las tareas y realizar otro tipo de pruebas y test. Hay diversas empresas que comercializan con bloques para Arduino y los pedidos llegan en pocos días. De haberse tenido más tiempo, se podrían haber presentado de mejor forma los datos recogidos del robot, desarrollando el apartado 5 más en profundidad. Se ha recogido en el documento la posibilidad de que existía, y del potencial que esto puede implicar, pero no se ha trabajado más en ello. Como líneas de trabajo futuro se pueden mencionar:
La presentación de los datos en algún sistema de bases de datos, procesándolos en Excel con algún tipo de macro…
Controlar el robot mediante alguna plataforma de desarrollo de diseño de sistemas como puede ser LabView.
Desarrollar un código más potente y depurado a cargar en el robot mediante el IDE Arduino.
Las líneas que se abren son muchas y en muchas de las ocasiones solo falta la idea de qué es lo que se pretende obtener, ya que las herramientas y el conocimiento en el mundo maker están al alcance de toda la comunidad.
36
8. Glosario
BLE: Bluetooth Low Energy
BT: Bluetooth
DIY: Do it yourself.
GPIO: General Purpose Input-Output
HW: hardware.
I/O: Input / Output
IDE: entorno de desarrollo integrado.
IMU: unidad de medición inercial, Inertial Measurement Unit en inglés.
INS: Inertial Navigation Systems
IoT: Internet de las Cosas, Internet of Things en inglés.
IR: infrarrojo, infrared en inglés.
IT: tecnologías de la información.
LED: Light-Emitting Diode en inglés.
MIT: Massachusetts Institute of Technology
NFC: Near field communication
PIR: Passive InfraRed
RAE: Real Academia Española
RFID: Radio Frequency IDentification
RX: Recepción
TTL: Transistor-Transistor logic
TX: Transmisión.
UART: Universal Asynchronous Receiver-Transmitter
USB: Universal Serial Bus
37
9. Bibliografía
[1] https://www.arduino.cc/ [Marzo 2017]
[2] https://create.arduino.cc/ [Marzo 2017]
[3] https://www.arduino.cc/en/Reference/Serial [Marzo 2017]
[4] http://learn.makeblock.com/en/ [Marzo 2017]
[5] http://learn.makeblock.com/en/me-auriga/ [Marzo 2017]
[6] Datasheet. Reflective Optical Sensor with Transistor Output TCRT5000: http://www.vishay.com/docs/83760/tcrt5000.pdf
[7] Nieminen, J. y otros autores. IPv6 over BLUETOOTH(R) Low Energy. Internet Engineering Task Force (IETF). Universitat Politecnica de Catalunya/i2CAT; Octibre 2015. Disponible en: https://tools.ietf.org/pdf/rfc7668.pdf
[8] https://es.wikipedia.org/wiki/Bluetooth [Mayo 2017]
[9] https://en.wikipedia.org/wiki/Bluetooth_Low_Energy [Mayo 2017]
[10] Datasheet. MPU-6050 Six-Axis (Gyro + Accelerometer) MEMS MotionTracking™ Devices. Disponible en: https://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/
[11] Rovira Jofre, J. Geotelemática. Posicionamiento y navegación. Barcelona: Universitat Oberta de Catalunya; 2012.
[12] Castaño Sánchez, M. Design of a Position Encoder Using Infrared Sensors. Universitat Politècnica de Catalunya, Master Thesis; Mayo 2015.
[13] Benzi, M. Getting Started with Arduino. 3ª ed. Editorial O’Reilly. Sebastopol, CA (USA); Septiembre 2012.
[14] Evans, B. Arduino Programming Notebook. 1ª ed. San Francisco, CA (USA); Agosto 2007.
[15] https://blogs.deusto.es/aplicaciones-tic/zigbee-vs-bluetooth-low-energy/ [Abril 2017]
[16] https://www.raspberrypi.org/ [Abril 2017]
38
10. Anexos
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
D D
C C
B B
A A
PG5/OC0B1
PE0/RX0/PCINT82
PE1/TX03
PE2/XCK0/AIN04
PE3/OC3A/AIN15
PE4/OC3B/INT46
PE5/OC3C/INT57
PE6/T3/INT68
PE7/CLKO/ICP3/INT79
VCC10
GND11
PH0/RX212
PH1/TX213
PH2/XCK214
PH3/OC4A15
PH4/OC4B16
PH5/OC4C17
PH6/OC2B18
PB0/SS/PCINT019
PB1/SCK/PCINT120
PB2/MOSI/PCINT221
PB3/MISO/PCINT322
PB4/OC2A/PCINT423
PB5/OC1A/PCINT524
PB6/OC1B/PCINT625
PB7/
PCIN
T7/O
C1C/
OC
0A26
PH7/
T427
PG3/
TOSC
228
PG4/
TOSC
129
RESE
T30
VC
C31
GN
D32
XTA
L233
XTA
L134
PL0/
ICP4
35
PL1/
ICP5
36
PL2/
T537
PL3/
OC
5A38
PL4/
OC
5B39
PL5/
OC
5C40
PL6
41
PL7
42
PD0/
SCL/
INT0
43
PD1/
SDA
/INT1
44
PD2/
RX1/
INT2
45
PD3/
TX1/
INT3
46
PD4/
ICP1
47
PD5/
XCK
148
PD6/
T149
PD7/
T050
PG0/WR 51PG1/RD 52PC0/A8 53PC1/A9 54PC2/A10 55PC3/A11 56PC4/A12 57PC5/A13 58PC6/A14 59PC7/A15 60VCC 61GND 62PJ0/RX3/PCINT9 63PJ1/TX3/PCINT10 64PJ2/XCK3/PCINT11 65PJ3/PCINT12 66PJ4/PCINT13 67PJ5/PCINT14 68PJ6/PCINT15 69PG2/ALE 70PA7/AD7 71PA6/AD6 72PA5/AD5 73PA4/AD4 74PA3/AD3 75
PA2/
AD
276
PA1/
AD
177
PA0/
AD
078
PJ7
79V
CC80
GN
D81
PK7/
AD
C15/
PCIN
T23
82PK
6/A
DC1
4/PC
INT2
283
PK5/
AD
C13/
PCIN
T21
84PK
4/A
DC1
2/PC
INT2
085
PK3/
AD
C11/
PCIN
T19
86PK
2/A
DC1
0/PC
INT1
887
PK1/
AD
C9/P
CIN
T17
88PK
0/A
DC8
/PCI
NT1
689
PF7/
AD
C7/
TD1
90PF
6/A
DC
6/TD
091
PF5/
AD
C5/
TMS
92PF
4/A
DC4
/TCK
93PF
3/A
DC3
94PF
2/A
DC2
95PF
1/A
DC1
96PF
0/A
DC0
97A
REF
98G
ND
99A
VCC
100
D4/PWMD0/RX0D1/TX0
D5/PWMD2/PWMD3/PWM
D17/RX2D16/TX2
D6/PWMD7/PWMD8/PWMD9/PWMD53/SSD52/SCKD51/MOSID50/MISOD10/PWMD11/PWMD12/PWM
D13
/PW
M
RES
ET
XTA
L1X
TAL2
D49
D48
D47
D46
/PW
MD
45/P
WM
D44
/PW
MD
43D
42D
21/S
CLD
20/S
DA
D19
/RX
1D
18/T
X1
D38
D30D31D32D33D34D35D36D37D40D41
D25D26D27D28D29D39
D14/TX3D15/RX3
ARE
FA
0A
1A
2A
3A
4A
5A
6A
7A
8A
9A
10A
11A
12A
13A
14A
15
D22
D23
D24
MCU1
MEGA2560
AO11
AO12
PGND13
PGND14
AO25
AO26
BO27
BO28
PGND29
PGND210
BO111
BO112 VM2 13VM3 14PWMB 15BIN2 16BIN1 17GND 18STBY 19VCC 20AIN1 21AIN2 22PWMA 23VM1 24U4
TB6612
PGND
M1+
M1-C30
100nF
C34
100nF
PGND
GND
5V
C26
100nF
GND
V34
UD+5
UD-6
GND1
TXD2
RXD3 RTS# 14
DTR# 13
RI# 11
DSR# 10
CTS# 9XO8 XI7
VCC 16
R232 15
DCD# 12
U3 CH340G
DTR_CH340
C22
100n
F
GND
C16
100nF
DPDN
VBUS
5V
GND
C17 100nF
R22
10k
+ 1D - 2D+ 3- 4USB1USB-B
VBUS
R30
RL06
03E0
05M
R31
RL06
03E0
05M
C1510uF
D0/RX0D1/TX0
C25
470uF/16V
PGND V-M
V-M
C29
10uF
PGND
USB供电
123456
M2
MHDR1X6
F3 1A
F4 1A123456
M1
MHDR1X6
M2-
M2+
5V
5V
C27
100nF
C32100nF
GND
R36 51RR37 51R
R41 51RR42 51R
GND
3
1
2
Q1S9013
5V
LS1BUZZER
R13
1kD45/BEEP
R1051R
D21N4148
R510k
GND
C1100nF 8
1
4
3
2
1
U1ALM2904DR
84
75
6
2
U1B
LM2904DR
GND
MK1
MIC
R2 10k
R1510K
R910k
GND
R851k
C310uF
R710k
GND
A1/SOUNDR4
51R
蜂鸣器
声音
温度
t?
NCP18XH103F03RB 0603 1%
RT1
NCP
18X
H10
3F03
RB 0
603
1%
R1210K
13
2
Y2
16M
GND
C5
100nF
GND
5V
A0/TEMP
1 23 45 6
ICSP1
Header 3X2
D50/MISOD52/SCKRESET
D51/MOSI
GND
5V
RESE
T
D51/MOSID50/MISO
D52/SCKD
21/S
CL
D20
/SD
A
D16/TX2/RJD17/RX2/RJ
A8/
RJ
A9/
RJ
ARE
F
XTAL1XTAL2
D53/SS
D0/RX0
D1/TX0
RESET
DTR_BLE C7100nF R18 1k
R2010k
RST_BLE
RX1
TX2
GND3
VCC4
DTR 5
GND 6
RST 7
U2
BLE
程序更新&无线遥控
D12
LED
_RED
R34
20k D13
LED
_BLU
E
D15
LED_BLUE
R43 20k
D16
LED_RED
GND
GND
ENCODER_编码电机驱动
GND
SCL 1
SDA 2
V-M 3
S1 5
S2 6
GND 4
J2
RJ25/RED
SCL 1
SDA 2
V-M 3
S1 5
S2 6
GND 4
J1
RJ25/RED
SCL 1
SDA 2
5V 4
S1 5
S2 6
GND 3
J8
RJ25
SCL 1
SDA 2
5V 4
S1 5
S2 6
GND 3
J10
RJ25
SCL 1
SDA 2
5V 4
S1 5
S2 6
GND 3
J9
RJ25
SCL 1
SDA 2
5V 4
S1 5
S2 6
GND 3
J5
RJ25
GNDGND5V
GND
GNDGNDGND GND
D21/SCLD20/SDA
D21/SCLD20/SDA
D21/SCLD20/SDA
D21/SCLD20/SDA
D21/SCLD20/SDA
D21/SCLD20/SDA
D21/SCLD20/SDA
D45
/BEE
P
D9/RJ
D3/RJ
D44
/RG
B
D13
D2/RJ
D8/RJ
A7/
RJ
A6/
RJ
D16/TX2/RJD17/RX2/RJ
ENA
_B
ENA
_A
ENB_
B
ENB_
AEN_PWMA
EN_D
IRA
1EN
_DIR
A2
EN_D
IRB2
EN_D
IRB1
EN_PWMB
D4/RJ
兼容RJ25平台
D5/RJ
ENA_BENA_A
ENB_BENB_A
EN_PWMA
EN_DIRA1EN_DIRA2
EN_DIRB1EN_DIRB2EN_PWMB
D6/RJD7/RJ
1234
P1
Header 4
5V
D14/TX3D15/RX3
C12100nF
C10100nF
GNDC910uF
C2410uFC2310uF
C20100nF
C1910uF
C8
100nF
5V
GND
5V
5V
GND
GND
5V
GND
5V
GND
板载传感器和蜂鸣器
R3910K
D14
LED
_BLU
E
R28 5.1kR29 5.1k
C18
100nFC2110uF
D4/RJD5/RJ
D2/RJD3/RJ
D6/RJD7/RJ D9/RJ
D8/RJ
SCL 1
SDA 2
V-M 3
S1 5
S2 6
GND 4
J4
RJ25/RED
SCL 1
SDA 2
V-M 3
S1 5
S2 6
GND 4
J3
RJ25/RED
GND
C6
10uF
SCL 1
SDA 2
5V 4
S1 5
S2 6
GND 3
J7
RJ25
GND
D21/SCLD20/SDA SCL 1
SDA 2
5V 4
S1 5
S2 6
GND 3
J6
RJ25
GND
D21/SCLD20/SDA
D0/RX0
D1/TX0
1 3
2
Y1
12M
D9LED_RED
D6LED_BLUE
R16
1k5V
D0/RX0
D1/TX0
A1/
SOU
ND
5V5V
5V
5V
A5/
RJ
C06
100nF
D5V1
GND2
RGB3
LIGHT14
LIGHT25
KEY6
D12V7 GND 8GND 9
GND 10GND 11RGB1
RGB_SCREENGND
5V
GND
A3/
LIG
HT1
A3/LIGHT1
KEY
V-BAT
RESET
R01 1K
R033 51RR032 51R
R011 51R
5V
R01
451R
R01
551R
R029 51RR028 51R
V-M
23
45
67
89
123456789
10
P_PWM
EXTENSION1
123456789
10
P_ANALOG
EXTENSION2
4523
6789
A2/LIGHT2
A2/
LIG
HT2
GND
S1
复位按键
1 23 45 67 89 10
P_DIGITAL
EXTENSION3
D41 D40
D30D31D32D33D34D35D36D37
D30D31D32D33D34D35D36D37D40D41
V-M V-M V-MV-M
5V 5V 5V 5V
D44/RGB
RGB灯效板
A4/
VO
L_B
AT
接口引出
GND
R2120k
CLK
IN1
NC
2
NC
3
NC
4
NC
5
AU
X_D
A6
AUX_CL 7VLOGIC 8AD0 9REGOUT 10FSYNC 11INT 12
VD
D13
NC
14N
C15
NC
16N
C17
GN
D18
RESV19
CPOUT20
RESV21
RESV22
SCL23
SDA24
UM9MPU6050
CM2
100nF
D3.3V
CM1 2.2nF
GND
CM4 100nF
RM1 1KRM2 1K
5V
CM3 10nF
GND
RM3
10KMPU_AD0
CM510uF
GND
MPU_INT
D3.3V
VSS1
VO
UT
2V
IN3
UM1
XC6
206P
332M
R
GND
5V
D3.3V
A1 K 2D0101N4148
一上电就为高,发 DTR才拉低
3
1
2
Q3S8550
5V
GND
R017
1k
D0121N4148
R012 51R
D00
1SM
AJ1
2A
MTR2+
MTR1-
MTR1- MTR2+
Vin
Vout=Vp+(Vp-Vin)R1/R2
V+
D00
2SM
AJ1
2A
D00
3SM
AJ1
2A
D00
4SM
AJ1
2A
D+D-
A0/
TEM
P
A8/RJ A9/RJA7/RJA6/RJA12/RJ
A10/RJ
A11/RJ A14/RJA13/RJ A15/RJ
A11
/RJ
A14
/RJ
A13
/RJ
A15
/RJ
上拉,区分外置
D3.3V
A12
/RJ
L001 BEAD,2A
L002BEAD,2A
L003BEAD,2A
L004
BEAD,2AMTR2-
MTR
1+
MTR1+ MTR2-
C101
100nF
C102
100nF
C103
100nF
C104
100nF
C105
10uF
C106
10uF
C107
10uF
C108
10uF
GND
1234
P_SERVO V-M
GND
C28
470u
F/16
V
1
32
JP1
D17
SMA
J13A
C31
100nF
GND
VBUSF2 0.5A 3
1
2Q6 CJ3401
R5020K
R49
5.1k
C37
100n
F
C38
10uF
5V
F11.5A
C39
1uF
R4820k
D19
LED_RED
4
1
3Q2
AOD4185
R1910K
GND
C35
10uF
R471.1M
D81N4148
3
1
2
Q4S90133
1
2
Q5S9013
R465.1M
R4430K
D5
1N4148 R401K
KEY
V-BAT
S2
R58
100k
R59
51kGNDA
4/V
OL_
BA
T
C48
1uF
V-M
加电容
加电容
加二极管防反向D05SS34
C78
10uF
C79
10uF
GND
C75
1uF
C7610uF
C8010uF GND
R03010K
D06SS54
F023.5A
Rup10k
5V
RG
0KGNDPGND
C11470uF/16V
C13100nF
GND
5V
BOOT1
VIN2
EN3
SS4 VSENSE 5COMP 6GND 7PH 8U5+
TPS54331C2
10nF
C4+100nF
D10SS34
C28+
120pF
C29+
68pF
R2529.4k
L3 6.8uH
R35
10k
R17
1.91k
GNDGND
5V
D7
SMAJ5.0A
R02 1KR03 1KR04 1K
R05 1KR06 1K
R07 1KR08 1K
RSCL
10K
SCL
10K
5V
A10
/RJ
GND
GND
PGND
L2Cpi100nF
GND
A12/RJ
A15/RJ
A11/RJ
A14/RJA8/RJ
A9/RJ
A7/RJ
A6/RJ
A10/RJ
A13/RJ
D17/RX2/RJD16/TX2/RJ
D17/RX2/RJD16/TX2/RJ
12
PG1
Female_Header
12
PG2
Female_Header
1234567
PRGB
Female_Header 7
1234
PRT
Female_Header 4
123
PPower
Female_Header 3
此部分为下面 RGB_SCREEN的位号说明
此部分为U2 BLE模块所需物料的
位号说明,在导出 BOM中有体现
在导出BOM中有体现
此模块不参与 BOM,BOM被PG1、PG2PRGB 取代
U2部分不参与BOM,被PRT和PPower取代
GNDR0
20k
D0
LED_RED
PIC101 PIC102 COC1
PIC201
PIC202
COC2
PIC301
PIC302 COC3
PIC4001 PIC4002
COC40
PIC501 PIC502 COC5
PIC0601
PIC0602
COC06 PIC601
PIC602
COC6
PIC701 PIC702 COC7 PIC801
PIC802 COC8
PIC901
PIC902 COC9
PIC1001
PIC1002 COC10
PIC1101
PIC1102
COC11
PIC1201
PIC1202 COC12
PIC1301
PIC1302 COC13
PIC1501
PIC1502 COC15
PIC1601
PIC1602 COC16
PIC1701 PIC1702 COC17
PIC1801 PIC1802 COC18
PIC1901
PIC1902 COC19
PIC2001
PIC2002 COC20
PIC2101 PIC2102
COC21
PIC2201 PIC2202
COC22
PIC2301
PIC2302 COC23
PIC2401
PIC2402 COC24
PIC2501 PIC2502
COC25
PIC2601
PIC2602 COC26 PIC2701
PIC2702 COC27
PIC2801 PIC2802 COC28
PIC28001
PIC28002
COC280
PIC2901
PIC2902 COC29
PIC29001
PIC29002
COC290
PIC3001
PIC3002 COC30
PIC3101
PIC3102 COC31
PIC3201 PIC3202
COC32 PIC3401 PIC3402
COC34
PIC3501
PIC3502
COC35 PIC3701
PIC3702 COC37
PIC3801
PIC3802 COC38
PIC3901
PIC3902 COC39
PIC4801 PIC4802
COC48
PIC7501 PIC7502
COC75
PIC7601 PIC7602 COC76
PIC7801
PIC7802
COC78 PIC7901
PIC7902
COC79
PIC8001 PIC8002 COC80
PIC10101
PIC10102 COC101 PIC10201
PIC10202 COC102 PIC10301
PIC10302 COC103 PIC10401
PIC10402 COC104
PIC10501
PIC10502 COC105 PIC10601
PIC10602 COC106 PIC10701
PIC10702 COC107 PIC10801
PIC10802 COC108
PICM101 PICM102 COCM1
PICM201
PICM202
COCM2
PICM301 PICM302 COCM3
PICM401 PICM402 COCM4
PICM501 PICM502 COCM5
PICpi01
PICpi02 COCpi
PID001 PID002
COD0
PID00101 PID00102
COD001 PID00201 PID00202
COD002
PID201 PID202
COD2
PID00301 PID00302
COD003 PID00401 PID00402
COD004
PID0501 PID0502
COD05
PID501 PID502
COD5
PID0601 PID0602
COD06
PID601 PID602 COD6
PID701 PID702
COD7
PID801 PID802
COD8
PID901 PID902 COD9
PID01001 PID01002 COD010
PID1001 PID1002
COD10
PID01201 PID01202 COD012
PID1201 PID1202 COD12 PID1301
PID1302 COD13
PID1401 PID1402 COD14
PID1501 PID1502 COD15 PID1601
PID1602 COD16
PID1701 PID1702
COD17
PID1901 PID1902
COD19
PIF101 PIF102
COF1
PIF0201 PIF0202
COF02
PIF201 PIF202
COF2
PIF301 PIF302 COF3
PIF401 PIF402
COF4
PIICSP101 PIICSP102 PIICSP103 PIICSP104
PIICSP105 PIICSP106
COICSP1
PIJ101 PIJ102
PIJ103
PIJ104 PIJ105
PIJ106
COJ1
PIJ201 PIJ202
PIJ203
PIJ204 PIJ205
PIJ206
COJ2
PIJ301 PIJ302
PIJ303
PIJ304 PIJ305
PIJ306
COJ3
PIJ401 PIJ402
PIJ403
PIJ404 PIJ405
PIJ406
COJ4
PIJ501 PIJ502
PIJ503
PIJ504 PIJ505
PIJ506
COJ5
PIJ601
PIJ602
PIJ603
PIJ604
PIJ605 PIJ606
COJ6
PIJ701
PIJ702
PIJ703
PIJ704
PIJ705 PIJ706
COJ7
PIJ801 PIJ802
PIJ803
PIJ804
PIJ805 PIJ806
COJ8
PIJ901 PIJ902
PIJ903
PIJ904
PIJ905 PIJ906
COJ9
PIJ1001 PIJ1002
PIJ1003
PIJ1004
PIJ1005 PIJ1006
COJ10
PIJP101
PIJP102
PIJP103
COJP1
PIL00101 PIL00102 COL001
PIL00201
PIL00202 COL002
PIL201 PIL202 COL2
PIL00301 PIL00302
COL003
PIL301 PIL302
COL3
PIL00401 PIL00402 COL004
PILS101
PILS102
COLS1
PIM101 PIM102
PIM103
PIM104
PIM105
PIM106
COM1
PIM201
PIM202 PIM203
PIM204
PIM205
PIM206
COM2
PIMCU101 PIMCU102
PIMCU103
PIMCU104 PIMCU105
PIMCU106
PIMCU107
PIMCU108 PIMCU109
PIMCU1010
PIMCU1011
PIMCU1012
PIMCU1013
PIMCU1014
PIMCU1015 PIMCU1016
PIMCU1017
PIMCU1018 PIMCU1019
PIMCU1020
PIMCU1021
PIMCU1022 PIMCU1023
PIMCU1024
PIMCU1025
PIMCU1026 PIMCU1027 PIMCU1028 PIMCU1029 PIMCU1030 PIMCU1031 PIMCU1032 PIMCU1033 PIMCU1034 PIMCU1035 PIMCU1036 PIMCU1037 PIMCU1038 PIMCU1039 PIMCU1040 PIMCU1041 PIMCU1042 PIMCU1043 PIMCU1044 PIMCU1045 PIMCU1046 PIMCU1047 PIMCU1048 PIMCU1049 PIMCU1050
PIMCU1051
PIMCU1052
PIMCU1053
PIMCU1054 PIMCU1055
PIMCU1056
PIMCU1057
PIMCU1058 PIMCU1059
PIMCU1060
PIMCU1061 PIMCU1062
PIMCU1063
PIMCU1064
PIMCU1065
PIMCU1066
PIMCU1067
PIMCU1068 PIMCU1069
PIMCU1070
PIMCU1071
PIMCU1072 PIMCU1073
PIMCU1074
PIMCU1075
PIMCU1076 PIMCU1077 PIMCU1078 PIMCU1079 PIMCU1080 PIMCU1081 PIMCU1082 PIMCU1083 PIMCU1084 PIMCU1085 PIMCU1086 PIMCU1087 PIMCU1088 PIMCU1089 PIMCU1090 PIMCU1091 PIMCU1092 PIMCU1093 PIMCU1094 PIMCU1095 PIMCU1096 PIMCU1097 PIMCU1098 PIMCU1099 PIMCU10100 COMCU1
PIMK101 PIMK102
COMK1
PIP101
PIP102
PIP103
PIP104
COP1
PIP0ANALOG01
PIP0ANALOG02 PIP0ANALOG03
PIP0ANALOG04
PIP0ANALOG05 PIP0ANALOG06
PIP0ANALOG07
PIP0ANALOG08 PIP0ANALOG09
PIP0ANALOG010
COP0ANALOG
PIP0DIGITAL01 PIP0DIGITAL02
PIP0DIGITAL03 PIP0DIGITAL04 PIP0DIGITAL05 PIP0DIGITAL06
PIP0DIGITAL07 PIP0DIGITAL08
PIP0DIGITAL09 PIP0DIGITAL010
COP0DIGITAL
PIP0PWM01
PIP0PWM02 PIP0PWM03
PIP0PWM04
PIP0PWM05 PIP0PWM06
PIP0PWM07
PIP0PWM08 PIP0PWM09
PIP0PWM010
COP0PWM
PIP0SERVO01
PIP0SERVO02
PIP0SERVO03
PIP0SERVO04
COP0SERVO
PIPG101 PIPG102
COPG1
PIPG201 PIPG202
COPG2
PIPPower01 PIPPower02
PIPPower03
COPPower
PIPRGB01
PIPRGB02 PIPRGB03
PIPRGB04
PIPRGB05
PIPRGB06 PIPRGB07
COPRGB
PIPRT01
PIPRT02 PIPRT03
PIPRT04
COPRT
PIQ101
PIQ102
PIQ103 COQ1
PIQ201
PIQ203 PIQ204
COQ2
PIQ301
PIQ302
PIQ303 COQ3
PIQ401
PIQ402
PIQ403 COQ4
PIQ501
PIQ502
PIQ503 COQ5
PIQ601 PIQ602 PIQ603
COQ6
PIR001 PIR002
COR0
PIR0101 PIR0102 COR01
PIR101 PIR102
COR1
PIR0201 PIR0202 COR02
PIR201 PIR202 COR2
PIR0301 PIR0302 COR03
PIR0401 PIR0402 COR04
PIR401 PIR402 COR4
PIR0501 PIR0502 COR05
PIR501
PIR502 COR5
PIR0601 PIR0602 COR06
PIR0701 PIR0702 COR07
PIR701
PIR702 COR7
PIR0801 PIR0802 COR08
PIR801
PIR802
COR8 PIR901
PIR902
COR9
PIR1001
PIR1002 COR10
PIR01101 PIR01102 COR011
PIR01201 PIR01202 COR012
PIR1201
PIR1202 COR12
PIR1301 PIR1302 COR13
PIR01401
PIR01402 COR014
PIR01501
PIR01502 COR015
PIR1601 PIR1602 COR16
PIR01701 PIR01702 COR017
PIR1701 PIR1702 COR17
PIR1801 PIR1802 COR18
PIR1901
PIR1902 COR19
PIR2001
PIR2002 COR20
PIR2101
PIR2102 COR21
PIR2201 PIR2202 COR22
PIR2501
PIR2502
COR25
PIR02801 PIR02802 COR028
PIR2801 PIR2802 COR28
PIR02901 PIR02902 COR029
PIR2901 PIR2902 COR29
PIR03001
PIR03002 COR030
PIR3001
PIR3002
COR30 PIR3101
PIR3102
COR31
PIR03201 PIR03202 COR032
PIR03301 PIR03302 COR033
PIR3401 PIR3402 COR34
PIR3501 PIR3502 COR35
PIR3601 PIR3602 COR36
PIR3701 PIR3702 COR37
PIR3901
PIR3902
COR39
PIR4001
PIR4002 COR40
PIR4101 PIR4102 COR41 PIR4201 PIR4202
COR42
PIR4301 PIR4302
COR43
PIR4401
PIR4402 COR44
PIR4601
PIR4602 COR46
PIR4701
PIR4702 COR47
PIR4801
PIR4802 COR48
PIR4901 PIR4902 COR49
PIR5001
PIR5002
COR50
PIR5801 PIR5802
COR58 PIR5901 PIR5902
COR59
PIRG01 PIRG02 CORG
PIRGB101
PIRGB102
PIRGB103 PIRGB104
PIRGB105
PIRGB106 PIRGB107 PIRGB108
PIRGB109
PIRGB1010
PIRGB1011
CORGB1
PIRM101 PIRM102 CORM1
PIRM201 PIRM202 CORM2
PIRM301 PIRM302
CORM3
PIRSCL01
PIRSCL02 CORSCL
PIRT101
PIRT102
CORT1
PIRup01
PIRup02 CORup PIS101 PIS102
COS1
PIS201 PIS202 COS2
PISCL01
PISCL02 COSCL
PIU101
PIU102
PIU103
PIU104
PIU108
COU1A PIU104 PIU105
PIU106
PIU107
PIU108
COU1B
PIU201
PIU202
PIU203
PIU204
PIU205
PIU206
PIU207
COU2
PIU301
PIU302
PIU303
PIU304 PIU305
PIU306
PIU307 PIU308 PIU309
PIU3010 PIU3011
PIU3012
PIU3013 PIU3014
PIU3015
PIU3016
COU3
PIU401
PIU402
PIU403
PIU404
PIU405
PIU406 PIU407
PIU408
PIU409
PIU4010 PIU4011
PIU4012 PIU4013
PIU4014
PIU4015 PIU4016
PIU4017
PIU4018
PIU4019 PIU4020
PIU4021
PIU4022
PIU4023
PIU4024
COU4
PIU5001 PIU5002
PIU5003
PIU5004 PIU5005 PIU5006
PIU5007
PIU5008
COU50
PIUM101
PIUM102
PIUM103 COUM1
PIUM901 PIUM902 PIUM903 PIUM904 PIUM905 PIUM906
PIUM907 PIUM908
PIUM909
PIUM9010 PIUM9011
PIUM9012
PIUM9013 PIUM9014 PIUM9015 PIUM9016 PIUM9017 PIUM9018
PIUM9019
PIUM9020
PIUM9021 PIUM9022
PIUM9023
PIUM9024
COUM9
PIUSB101 PIUSB102
PIUSB103
PIUSB104
PIUSB105
PIUSB106 COUSB1
PIY101
PIY102
PIY103
COY1
PIY201
PIY202
PIY203
COY2
PIJ206
PIP0PWM08
PIR0401
NL2
PIJ205
PIP0PWM07
PIR0301
NL3
PIJ106
PIP0PWM010
PIR0201
NL4
PIJ105
PIP0PWM09
PIR0101
NL5
PIC0602 PIC602
PIC901 PIC1001
PIC1101 PIC1301
PIC1802
PIC1902 PIC2002
PIC2102
PIC2301 PIC2401
PIC2902 PIC3002
PIC3702 PIC3802
PICpi01
PID202
PID702
PIICSP102
PIJ504
PIJ604 PIJ704 PIJ804 PIJ904 PIJ1004
PIL201
PIL302
PILS101
PIM103
PIM203
PIMCU1010
PIMCU1031
PIMCU1061
PIMCU1080
PIP101
PIQ602
PIR501
PIR802
PIR1202
PIR1601
PIR01701
PIR2002
PIR2201
PIR2801 PIR2901
PIR3501
PIR4802
PIRGB101
PIRSCL02
PIRup02
PISCL02
PIU108
PIU204
PIU4019 PIU4020
PIUM103
NL5V
PIJ306
PIP0PWM04
PIR0601
NL6
PIJ305
PIP0PWM03
PIR0501
NL7
PIJ406
PIP0PWM02
PIR0801
NL8
PIJ405
PIP0PWM01
PIR0701
NL9
PIC501
PIMCU1097
PIR1201 PIRT101
NLA00TEMP PIMCU1096
PIU106
PIU107 NLA10SOUND
PIMCU1095
PIRGB105
NLA20LIGHT2 PIMCU1094
PIRGB104
NLA30LIGHT1
PIC4801
PIMCU1093
PIR5802 PIR5901
NLA40VOL0BAT
PIMCU1092 NLA50RJ
PIJ1005
PIMCU1091
PIP0ANALOG02 NLA60RJ
PIJ905
PIMCU1090
PIP0ANALOG04 NLA70RJ
PIJ805
PIMCU1089
PIP0ANALOG06 NLA80RJ
PIJ705
PIMCU1088
PIP0ANALOG08 NLA90RJ
PIJ605
PIMCU1087
PIP0ANALOG010 NLA100RJ
PIJ1006
PIMCU1086
PIP0ANALOG01 NLA110RJ
PIJ906
PIMCU1085
PIP0ANALOG03 NLA120RJ
PIJ806
PIMCU1084
PIP0ANALOG05 NLA130RJ
PIJ706
PIMCU1083
PIP0ANALOG07 NLA140RJ
PIJ606
PIMCU1082
PIP0ANALOG09 NLA150RJ
PIC802
PIMCU1098 NLAREF
PID602
PID01001
PIMCU102
PIR01201
PIRup01
NLD00RX0
PID902
PIMCU103
PIR01101
PIU303
NLD10TX0
PIMCU106
PIR0402 NLD20RJ
PICM301
PICM401
PICM501
PIRM302
PIUM102
PIUM908
PIUM9013
PIMCU107
PIR0302 NLD30RJ
PIMCU101
PIR0202
NLD40RJ
PIMCU105
PIR0102
NLD50RJ
PIMCU1015
PIR0602 NLD60RJ
PIMCU1016
PIR0502 NLD70RJ
PIMCU1017
PIR0802 NLD80RJ
PIMCU1018
PIR0702 NLD90RJ
PIMCU1026 PIR3902 NLD13
PIP103
PIR02902
PIR2902 NLD140TX3
PIP104
PIR02802
PIR2802 NLD150RX3
PIJ505
PIP0PWM05
PIP0SERVO02
PIR03201
NLD160TX20RJ
PIJ506
PIP0PWM06
PIP0SERVO01
PIR03301
NLD170RX20RJ
PIJ102 PIJ202 PIJ302 PIJ402
PIJ602 PIJ702 PIJ802 PIJ902 PIJ1002
PIR01501
PIRM201
PISCL01
NLD200SDA
PIJ101 PIJ201 PIJ301 PIJ401
PIJ601 PIJ701 PIJ801 PIJ901 PIJ1001
PIR01401
PIRM101
PIRSCL01
NLD210SCL
PIMCU1060
PIP0DIGITAL02 NLD30
PIMCU1059
PIP0DIGITAL01 NLD31
PIMCU1058
PIP0DIGITAL04 NLD32
PIMCU1057
PIP0DIGITAL03 NLD33
PIMCU1056
PIP0DIGITAL06 NLD34
PIMCU1055
PIP0DIGITAL05 NLD35
PIMCU1054
PIP0DIGITAL08 NLD36
PIMCU1053
PIP0DIGITAL07 NLD37
PIMCU1052
PIP0DIGITAL010 NLD40
PIMCU1051 PIP0DIGITAL09 NLD41
PIMCU1040
PIRGB103
NLD440RGB
PIMCU1039
PIR1301
NLD450BEEP
PIICSP101 PIMCU1022 NLD500MISO PIICSP104 PIMCU1021
NLD510MOSI PIICSP103
PIMCU1020 NLD520SCK
PIMCU1019 NLD530SS
PIR3102
PIU305 PIUSB103 NLD0 NLDP
PIR3002 PIU306 PIUSB102
NLD0 NLDN
PIC701 PIU205 NLDTR0BLE
PIC1701
PID01202
PIU3013 NLDTR0CH340
PIMCU1036 PIU4021
NLEN0DIRA1 PIMCU1035
PIU4022
NLEN0DIRA2 PIMCU1037
PIU4017
NLEN0DIRB1 PIMCU1038 PIU4016
NLEN0DIRB2
PIMCU1024
PIU4023
NLEN0PWMA PIMCU1023
PIU4015
NLEN0PWMB
PIMCU1045 PIR3602
NLENA0A
PIMCU1042 PIR3702
NLENA0B
PIMCU1046 PIR4102 NLENB0A
PIMCU1041
PIR4202
NLENB0B
PIC202
PIC301
PIC502
PIC0601 PIC601
PIC801
PIC902 PIC1002
PIC1102
PIC1202
PIC1302
PIC1502 PIC1602
PIC1801
PIC1901 PIC2001
PIC2101
PIC2201
PIC2302 PIC2402
PIC2802 PIC29002
PIC2901 PIC3001
PIC3101
PIC3502 PIC3701 PIC3801
PIC3901
PIC4802
PIC7602
PIC7801 PIC7901
PIC8002
PICM102
PICM202
PICM302
PICM402
PICM502
PICpi02
PID002
PID701 PID1001
PID1402
PID1701
PID1902
PIICSP106
PIJ104 PIJ204 PIJ304 PIJ404 PIJ503
PIJ603 PIJ703 PIJ803 PIJ903 PIJ1003
PIJP102
PIJP103
PIM104
PIM204
PIMCU1011
PIMCU1032
PIMCU1062
PIMCU1081 PIMCU1099
PIMK102
PIP102
PIP0SERVO03
PIQ102
PIQ303
PIQ402 PIQ502
PIR701 PIR902
PIR1702
PIR2101
PIR2502
PIR03001
PIR3001 PIR3101
PIR4701
PIR5002
PIR5902
PIRG02
PIRGB102
PIRGB108
PIRGB109
PIRGB1010
PIRGB1011
PIRT102
PIS101
PIU104
PIU203
PIU301
PIU4018
PIU5007
PIUM101
PIUM901
PIUM9011
PIUM9018
PIUSB104
PIUSB105
PIUSB106
PIY102
PIY202
NLGND
PID501
PIR4602
PIRGB106
PIS202 NLKEY
PIL00102
PIU401
PIU402 NLM10
PIF302 PIU405
PIU406 NLM10
PIF402
PIU407
PIU408 NLM20
PIL00401
PIU4011
PIU4012
NLM20
PIRM301 PIUM909 NLMPU0AD0
PIUM9012 NLMPU0INT
PIC2701
PIC10101 PID00102
PIL00101
PIM106
PIR3401
NLMTR10
PIC2702
PIC10201 PID00202
PID1201 PID1302 PIL00202 PIM105
NLMTR10
PIC3201
PIC10301 PID00302
PIL00302
PIM206
PIR4301
NLMTR20
PIC3202
PIC10401 PID00402
PID1501 PID1602 PIL00402 PIM205
NLMTR20
PIC101 PIR201 PIC102 PIMK101 PIR502
PIC201 PIU5004
PIC302 PIR401 PIR702 PIU105
PIC4001
PIU5001
PIC4002
PID1002 PIL301 PIU5008
PIC702 PIR1801
PIC1201 PIL202
PIMCU10100
PIC2202
PIU304
PIC28001 PIC29001 PIU5006
PIC28002 PIR2501
PIC2801
PIC3102
PIF101 PIU5002
PIC3501
PIQ501
PIR4601
PIR4702
PIC3902
PIQ601 PIR4901 PIR5001
PIC7502 PIQ201 PIR1901 PIR4002
PIC7601
PIQ401
PIQ503 PIR03002
PIR4401
PIC8001
PID0501
PID0601
PID801 PIQ204
PIR002
PIR4902
PIR5801
PICM101 PIUM9020 PICM201 PIUM9010
PID001 PIR001
PID201 PILS102 PIR1002
PID0502 PIF102
PID502
PID802
PIR4402
PID601 PIR1602
PID0602 PIF0202
PID901 PIR01702
PID01002
PIU302
PID1202 PID1301 PIR3402
PID1401 PIR3901
PID1502 PID1601 PIR4302
PID1901
PIR4801
PIF201 PIQ603
PIF301 PIL00201
PIF401 PIL00301
PIJ501 PIJ502
PIM101 PIR3701 PIM102 PIR3601
PIM201 PIR4201
PIM202 PIR4101
PIMCU104
PIMCU108 PIMCU109
PIMCU1012 PIR03302
PIMCU1013 PIR03202
PIMCU1014
PIMCU1025
PIMCU1027 PIMCU1028 PIMCU1029 PIMCU1043 PIR01402
PIMCU1044 PIR01502
PIMCU1047 PIMCU1048 PIMCU1049 PIMCU1050
PIMCU1063 PIR02801
PIMCU1064 PIR02901
PIMCU1065
PIMCU1066
PIMCU1067
PIMCU1068 PIMCU1069
PIMCU1070
PIMCU1071
PIMCU1072 PIMCU1073
PIMCU1074
PIMCU1075
PIMCU1076 PIMCU1077 PIMCU1078 PIMCU1079
PIPG101 PIPG102
PIPG201 PIPG202
PIPPower01 PIPPower02
PIPPower03
PIPRGB01
PIPRGB02 PIPRGB03
PIPRGB04
PIPRGB05
PIPRGB06 PIPRGB07
PIPRT01
PIPRT02 PIPRT03
PIPRT04
PIQ101 PIR1302
PIQ103 PIR1001
PIQ301 PIR1802 PIR2001 PIR2102
PIQ403 PIR4001
PIR101
PIR202 PIU102
PIR102
PIR402 PIU101
PIR801 PIR901 PIU103
PIR01102 PIU201
PIR01202 PIU202
PIR1701 PIR3502
PIU5005
PIRM102 PIUM9023
PIRM202 PIUM9024
PIU206
PIU307 PIY101 PIU308 PIY103 PIU309
PIU3010 PIU3011
PIU3012
PIU3014
PIU3015
PIU5003
PIUM902 PIUM903 PIUM904 PIUM905 PIUM906
PIUM907
PIUM9014 PIUM9015 PIUM9016 PIUM9017
PIUM9019
PIUM9021 PIUM9022
PIC2502 PIC2601
PIC3401
PIC10102 PIC10202 PIC10302 PIC10402
PIC10502 PIC10602 PIC10702 PIC10802 PID00101 PID00201 PID00301 PID00401
PIRG01
PIU403
PIU404
PIU409
PIU4010
NLPGND
PIC1702
PIICSP105
PIMCU1030
PIQ302
PIR2202
PIS102
NLRESET
PID01201 PIU207 NLRST0BLE
PIC7501 PIC7802 PIC7902
PID1702
PIJP101 PIQ203 PIR1902
PIRGB107
PIS201
PIC2501 PIC2602
PIC3402 PIC10501 PIC10601 PIC10701 PIC10801
PIF0201
PIJ103 PIJ203 PIJ303 PIJ403
PIP0SERVO04
PIU4013
PIU4014
PIU4024
NLV0M
PIC1501 PIC1601
PIF202
PIU3016
PIUSB101
PIMCU1034 PIY203
NLXTAL1
PIMCU1033 PIY201
NLXTAL2
3x2M
+5V
GND
+5V
GND
8x1F-H8.5
GND
+5V
GND
47u 47u
GND GND
GN
D
GND
GREEN
GN
D
+5V
M7
GND
NCP1117ST50T3G
100n
GND100n
100n
8x1F-H8.5
8x1F-H8.5
+3V3
+5V
+5V
ATMEGA2560-16AU
100n100n
8x1F-H8.5
22p
+5V
GND
100n
GND
1u
YELLOW
YELLOW
USB-B_TH
MF-MSMF050-2 500mA
+5V
100n
GND
YELLOW
GN
D
100n
FDN340P
GND
100n
GND
+5V
100n
+5V
GND
1u
+5V
ATMEGA16U2-MU
3x2M
+5V
GND
GND
GND
BLM21
CG
0603
MLC
-05E
CG
0603
MLC
-05E
CSTCE16M0V53-R0 16MHZ
GN
D
1M
1k
1k
1k
1k
10K
10K
10K
10K
10K
10K
10K
10K
1k
1k
1k
1k
22R
22R
22R
22R
TS42031-160R-TR-7260
1M
GND
16M
Hz
22p
22p
GN
D
2x2M
- N
M
LMV358IDGKR
LMV358IDGKR
CD
1206
-S01
575
18x2F-H8.5
+5V
GN
D
10x1F-H8.5
8x1F-H8.5
CD
1206
-S01
575
ICSP1 23 45 6
12345678
PWML
PC1 PC2
OND1
11
22
3 3
1
IN3 OUT 42
IC1
C3
C6
C2
12345678
ADCL
12345678
COMMUNICATION
GNDGNDGND
VCCVCC
VCC
(A8)PC0 53(A9)PC1 54(A10)PC2 55(A11)PC3 56(A12)PC4 57(A13)PC5 58(A14)PC6 59(A15)PC7 60
(AD0)PA0 78(AD1)PA1 77(AD2)PA2 76(AD3)PA3 75(AD4)PA4 74(AD5)PA5 73(AD6)PA6 72(AD7)PA7 71
(ADC0)PF0 97(ADC1)PF1 96(ADC2)PF2 95(ADC3)PF3 94(ADC4/TCK)PF4 93(ADC5/TMS)PF5 92(ADC6/TDO)PF6 91(ADC7/TDI)PF7 90
(ALE)PG2 70
(CLKO/ICP3/INT7)PE7 9
(ICP1)PD4 47
(MISO/PCINT3)PB3 22
(MOSI/PCINT2)PB2 21
(OC0A/OC1C/PCINT7)PB7 26
(OC0B)PG5 1
(OC1A/PCINT5)PB5 24(OC1B/PCINT6)PB6 25
(OC2A/PCINT4)PB4 23
(OC3A/AIN1)PE3 5(OC3B/INT4)PE4 6(OC3C/INT5)PE5 7
(RD)PG1 52
(RXD0/PCIN8)PE0 2
(RXD1/INT2)PD2 45
(SCK/PCINT1)PB1 20
(SCL/INT0)PD0 43(SDA/INT1)PD1 44
(SS/PCINT0)PB0 19
(T0)PD7 50
(T1)PD6 49
(T3/INT6)PE6 8
(TOSC1)PG4 29
(TOSC2)PG3 28
(TXD0)PE1 3
(TXD1/INT3)PD3 46
(WR)PG0 51
(XCK0/AIN0)PE2 4
(XCK1)PD5 48
AGND99
AREF98
AVCC100
GND11326281
PH0(RXD2)12 PH1(TXD2)13 PH2(XCK2)14 PH3(OC4A)15 PH4(OC4B)16 PH5(OC4C)17 PH6(OC2B)18 PH7(T4)27
PJ0(RXD3/PCINT9)63 PJ1(TXD3/PCINT10)64 PJ2(XCK3/PCINT11)65 PJ3(PCINT12)66 PJ4(PCINT13)67 PJ5(PCINT14)68 PJ6(PCINT15)69 PJ779
PK0(ADC8/PCINT16)89 PK1(ADC9/PCINT17)88 PK2(ADC10/PCINT18)87 PK3(ADC11/PCINT19)86 PK4(ADC12/PCINT20)85 PK5(ADC13/PCINT21)84 PK6(ADC14/PCINT22)83 PK7(ADC15/PCINT23)82
PL0(ICP4)35 PL1(ICP5)36 PL2(T5)37 PL3(OC5A)38 PL4(OC5B)39 PL5(OC5C)40 PL641 PL742
RESET30
VCC10316180
XTAL134
XTAL233
IC3
C5C4
12345678
ADCH
C1
C8
C13
RX
TX
X21234P
$1P
$1P
$2P
$2
F1
C9
L
C7
T1
C12C11
21
RESET-EN
C10
IC4
(AIN0/INT1)PD1 7
(AIN2/PCINT11)PC2 5
(CTS/HWB/AIN6/TO/INT7)PD7 13
(INT4/ICP1/CLK0)PC7 22
(INT5/AIN3)PD4 10
(OC0B/INT0)PD0 6
(OC1A/PCINT8)PC6 23
(PCINT5)PB5 19(PCINT6)PB6 20(PCINT7/OC0A/OC1C)PB7 21
(PCINT9/OC1B)PC5 25
(PCINT10)PC4 26
(PD0/MISO/PCINT3)PB3 17
(PDI/MOSI/PCINT2)PB2 16
(RTS/AIN5/INT6)PD6 12
(RXD1/AIN1/INT2)PD2 8
(SCLK/PCINT1)PB1 15
(SS/PCINT0)PB0 14
(T1/PCINT4)PB4 18
(TXD1/INT3)PD3 9
(XCK/AIN4/PCINT12)PD5 11
AVCC32
D+29 D-30
GND3
PAD33
RESET(PC1/DW)24
UCAP27
UGND28
UVCC31
VCC4
XTAL11
XTAL2(PC0)2
ICSP11 23 45 6
L1
Z1 Z2
21
GROUND
Y1
R1
RN4A1 8
RN4B2 7
RN4C3 6
RN4D4 5
RN
5A1
8
RN
5B 27
RN
5C3
6R
N5D
45
RN1A1 8
RN
1B2
7
RN
1C3
6
RN1D4 5
RN3A1 8
RN3B27
36
RN3C
45
RN
3D
RN2A18
RN2B2 7
RN2C3 6
RN2D45
RESET
12
34
5
R2
IN1
ON/OFF3
NC/FB 4
OUT 5
GND2
Y2
21
C14
C15
JP51
23
4
IC7A
2
31
IC7B
6
57
84
D3
XIO
123456789101112131415161718192021222324252627282930313233343536
JP6123456789
10
12345678
POWER
D2
+5V
+5V
GNDAREF
AREF
AREF
RESET
RESET
RESET
RESET
RESET
VIN
VIN
VIN
M8RXD
M8RXD
M8TXD
M8TXD
PWRIN
ADC0
ADC2ADC1
ADC3ADC4ADC5ADC6ADC7
+3V3
+3V3
+3V3
SDA
SDA
SDA
SCL
SCL
SCL
ADC9ADC8
ADC10ADC11ADC12ADC13ADC14ADC15
PB3
PB3
PB3
PB2
PB2
PB2
PB1
PB1
PB1
PB5PB4
PE5
PE5PE4
PE4PE3
PE3
PE1 PE1
PE1
PE0 PE0
PE0
DTR
USBVCC
USBVCC
USBVCC
GATE_CMD
CMP
PB6
PH3
PH3
PH4
PH4
PH5
PH5
PH6
PH6
PG5
PG5
RXD1TXD1RXD2
RXD2
RXD3
RXD3
TXD2
TXD2
TXD3
TXD3
PC0
PC0
PC1
PC1
PC2
PC2
PC3
PC3
PC4
PC4
PC5
PC5
PC6
PC6
PC7
PC7
PB0
PB0
PG0
PG0
PG1
PG1
PG2
PG2
PD7PD7
PA0
PA0
PA1
PA1
PA2
PA2
PA3
PA3
PA4
PA4
PA5
PA5
PA6
PA6
PA7
PA7 PL0
PL0
PL1
PL1
PL2
PL2
PL3
PL3
PL4
PL4
PL5
PL5
PL6PL6 PL7PL7
PB7
VUCAP
RD-
RD-
RD+
RD+
RESET2
RESET2
MISO2
MISO2
MOSI2
MOSI2
SCK2
SCK2
XVCC
RXLTXL
D-D+
UG
ND
UGND
USH
IELD
XTAL2
XTAL1
XTAL1
XT2
XT1
8PB7
8PB6
8PB5
8PB4
L13
+ +
X1POWERSUPPLY_DC21MMX
US
B
01234567
8910111213
Arduino MEGA 2560
15161718192021
14
(SCK)(MISO)
(MOSI)
pwmpwmpwmpwm
pwmpwmpwm
pwmpwmpwmpwmpwm
pwmpwmpwm
(TX0)(RX0)
515253
pwmpwm
pwm
pwmpwm
(MISO)
(SCK)(MOSI)
(SS)(MOSI)
(SCK)(MISO)
222324252627282930323436
31333537
494745434139
50484644424038
pwmpwmpwm
USB
boo
t En
TM
Reference Designs ARE PROVIDED "AS IS" AND "WITH ALL FAULTS. Arduino DISCLAIMS ALL OTHER WARRANTIES, EXPRESS OR IMPLIED,
Arduino may make changes to specifications and product descriptions at any time, without notice. The Customer must notREGARDING PRODUCTS, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Arduino reservesthese for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them.The product information on the Web Site or Materials is subject to change without notice. Do not finalize a design with this information.
ARDUINO is a registered trademark.