Archivo de la categoría: Arduino Day

Construcción y Programación de Robot Minisumo

Este tutorial de construcción y programación de un robot minisumo para competiciones de minisumo está motivado por el Taller de construcción de Robot Minisumo celebrado el 15 de marzo del 2019 en el CEIP Obispo Blanco dentro del Arduino Day 2019 de Logroño https://www.aprendiendoarduino.com/talleres-arduino/arduino-day-logrono-2019/ y el posterior taller de perfecionamiento celebrado el 9 de mayo en el Área UR-Maker de la Universidad de La Rioja

Con el objetivo de acercar la robótica y la programación a los niños, proponemos un taller donde fabricar y programar un robot de sumo autónomo. El hardware y el software para fabricarlo y programarlo es libre y abierto. Los robots de sumo competirán por pares en un dohyo (tablero circular). El robot ganador será el que logre sacar a su contrincante fuera del dohyo.

También aprovechamos este taller para preparar los robots de minisumo para la competición en el 1er encuentro maker en tierra de Estella: https://encuentromaker.dictelweb.org/

Repositorio github de este tutorial: https://github.com/jecrespo/Robot-MiniSumo

Robots Minisumo

Este robot minisumo ha sido diseñado desde cero nos hemos basado en este robot: https://www.instructables.com/id/SimpleSumo-Educational-Fighting-Robots/

Se ha simplificado al no tener brazos ni botones de sensores de pulsación. El diseño 3D se ha rehecho desde el principio. Se trata de un fork del SimpleSumo robot kit https://www.instructables.com/id/SimpleSumo-Educational-Fighting-Robots/

Existen muchos tutoriales de robots minisumo como:

Reglas Competiciones Minisumo

Para un conjunto de reglas serias ver: Unified Sumo Robot Rules

Para un conjunto de reglas divertidas de leer ver: fully illustrated guide to robot sumo rules

Más enlaces con reglas de competiciones de robots sumo en español:

Lista de Materiales

Los materiales deben ser iguales o similares en dimensiones para encajar en el diseño del chasis:

Coste Aproximado Materiales Robot Minisumo: 20€

Construcción Robot

El chasis impreso en 3D consiste en dos piezas, en la pieza inferior se coloca el portapilas y los tres sensores IR TCRT5000 sujetos con tornillos. Luego se colocan los dos servos con las ruedas y el sensor de distancia ultrasónico HC-SR04 en los huecos a tal efecto.

Sobre la pieza superior se coloca la placa de expansión de Arduino nano y el Arduino ya instalado.

Una vez todo colocado, se conectarán los cables usando los jumpers dupont.

La parte principal para las conexiones es la Arduino Nano Expansion Board. Esta placa dispone de una expansión de los puertos del Arduino Nano junto con un pin de VCC y otro de GND para cada pin del Arduino.

Buena explicación de la expansion board: http://dyor.roboticafacil.es/en/arduino-intro/

Datasheet: https://roboticafacil.es/datasheets/nano_io_shield.pdf

Arduino nano data sheet:

Otro modelo de placa:

Conexionado de Placa y Dispositivos

Conexiones:

Dispositivo Pin Arduino
Sensor Suelo IR Izquierdo 2
Sensor Suelo IR Derecho 3
Sensor Suelo IR Trasero 4
Sensor Ultrasónico Distancia 5 (Trigger), 6 (Echo)
Servo Rueda Derecha 9
Servo Rueda Izquierda 10
Buzzer 12

Esquema Fritzing:

Imagen en Github: https://github.com/jecrespo/Robot-MiniSumo/blob/master/Robot%20Minisumo%20Sketch_bb.jpg

Esquema en Github: https://github.com/jecrespo/Robot-MiniSumo

Ejemplo parecido donde obtener algunas partes de Fritzing: http://fritzing.org/projects/bender-dyor

Programación por Bloques

Para programar el robot minisumo usaremos mBlock: http://www.mblock.cc/mblock-software/

Existen varias opciones:

Para la programación se ha usado la versión 3.4.12 de mBlock y no ha sido necesario instalar ninguna extensión.

Para programar es necesario usar el modo Arduino, que se selecciona desde edit – Arduino Mode. Si se usa un Arduino Nano, en boards poner Arduino UNO, si se selecciona Nano (mega328) no funciona.

En caso que no cargue, comprobar si el Arduino Nano tiene el bootloader viejo, en ese caso habrá que actualizar el bootloader o sino usar el IDE de Arduino y usar el bootloader antiguo como se explica en el siguiente punto.

Los códigos en mBlock usados se pueden encontrar en: https://github.com/jecrespo/Robot-MiniSumo/tree/master/Firmware%20mBlock

La primera parte de la programación es hacer las funciones básicas y ponerlas todas en un código de test que compruebe que funcionen los motores y todos los sensores y buzzer.

Funciones básicas a programar:

  • Marcha adelante
  • Marcha Atrás
  • Gira derecha
  • Gira Izquierda
  • Para
  • Pita (se pueden hacer diferentes tonos para identificar qué hace, por ejemplo inicio, detecta linea, detecta oponente, etc…)
  • Detecta distancia
  • Detecta linea (diferencia entre derecha, izquierda y trasero)

Los bloques de funciones básicas quedan así:

En mi caso en lugar de poner 0 y 180 para máxima velocidad de los servos (giro izda. y dcha.) he puesto 15 y 165 que funciona mejor.

El código de prueba es:

Este código comprueba el correcto funcionamiento de los motores y los movimientos, así como el buzzer y los sensores IR de suelo y el sensor de distancia ultrasónico.

Fotos

Frontal:

Lateral

Trasera

Bajo

PlatformIO

Si buscamos un entorno de programación IDE más avanzado una buena opción el PlatformIO.

Web: https://platformio.org/

Para instalarlo necesitamos instalar previamente Visual Studio Code: https://code.visualstudio.com/

Y seguir estas instrucciones: https://platformio.org/install/ide?install=vscode

Quick start: https://docs.platformio.org/en/latest/ide/vscode.html#quick-start

Hacer un nuevo proyecto y elegir:

  • Wemos D1 Mini
  • Entorno Arduino

El código está en src/main.cpp y escribir el sketch de blink.

Luego compliar y mandar a la placa como en el IDE de Arduino:

Más información: https://diyprojects.io/start-platformio-the-alternative-arduino-esp8266-esp32/#.XIxJHRP0nOQ

El contenido del fichero platformio.ini es:

[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino
upload_port = /dev/cu.wchusbserial1450

Wifi Manager

Uno de los problemas que podemos encontrarnos es configurar la red WiFi. Si has seguido el tutorial de NodeMCU para programar con el IDE de Arduino, te habrás dado cuenta que la red y la contraseña se meten de forma manual, como un literal dentro del código.

Esto se compila y no hay manera de alterarlo a no ser que vuelvas a cargar el programa. Así que si cambia la WiFi, lo tienes que modificar y subir de nuevo.

Sin embargo, la librería WiFi Manager nos ofrece un sistema para cambiar la configuración de la red a través de una conexión WiFi. También podemos crear nuestros propios parámetros. Por ejemplo la base de datos de Firebase o lo que se nos ocurra.

Github: https://github.com/tzapu/WiFiManager

Web: https://tzapu.com/esp8266-wifi-connection-manager-library-arduino-ide/

Instalar la librería WiFiManager by Tzapu: https://github.com/tzapu/WiFiManager

Abrir el ejemplo AutoConnect: https://github.com/tzapu/WiFiManager/blob/master/examples/AutoConnect/AutoConnect.ino

Lo primero que hace es inicializar la librería. Si encuentra la última red WiFi a la que se conectó, simplemente volverá a conectarse. Pero si no la encuentra es donde entra la función para configurarse como Acces Point.

Encontraréis una nueva red con el nombre “AutoConnectAP”. Si os conectáis a él os saldrá la opción de iniciar sesión, tenemos que pulsar ahí.

Entramos entonces en un menú en el que podemos escanear las redes WiFi. No tenemos más que seleccionar la que queramos y meter el SSID y la contraseña. Una vez conectados, se reiniciará el módulo y se conectará automáticamente a la red WiFi que le hemos indicado. Siempre que encuentre esa red se conectará a ella a partir de ahora, y si cambiamos de lugar o no la encuentra, volverá a configurarse como Acces Point para que podamos cambiar los parámetros para la conexión.

Para incluirlo en un programa que ya tengamos hecho, lo único que hay que hacer es sustituir las partes en las que se conecta a la red WiFi por estás instrucciones, pudiendo prescindir de las variables en las que le indicábamos el SSID y el Password. O sea, meter estas instrucciones en el setup (e incluir la librería):

WiFiManager wifiManager;
wifiManager.autoConnect(“AutoConnectAP”);

Ejemplo de personalización: https://randomnerdtutorials.com/wifimanager-with-esp8266-autoconnect-custom-parameter-and-manage-your-ssid-and-password/

Más información:

Uso ESP8266 WiFi Shields

Shield para wemos D1 mini relé

Comprar:  https://www.amazon.es/Ils-Piezas-Escudo-Versi%C3%B3-ESP8266/dp/B07F6D4SC9/

Web: https://wiki.wemos.cc/products:d1_mini_shields:relay_shield

Esquematico: https://wiki.wemos.cc/_media/products:d1_mini_shields:sch_relay_v2.0.0.pdf

Se maneja con el Pin D1

Ejemplo: https://github.com/wemos/D1_mini_Examples/blob/master/examples/04.Shields/Relay_Shield/BlinkWithoutDelay/BlinkWithoutDelay.ino

Shield para wemos D1 mini neopixel

Comprar: https://diyprojects.io/deal-shield-point-led-driver-ws2812b-wemos-d1-mini-compatible-adafruit-neopixel/

Web: https://wiki.wemos.cc/products:d1_mini_shields:rgb_led_shield

  • 7 RGB LEDs (WS2812B-mini) each wtih 24-bit RGB color
  • 9 optional control pins (Default: D4/GPIO2)

Ejemplo de uso: https://github.com/wemos/D1_mini_Examples/blob/master/examples/04.Shields/RGB_LED_Shield/simple/simple.ino

shield para wemos D1 mini oled

Comprar: https://www.amazon.es/Ils-Piezas-Shield-V2-0-0-Botones/dp/B07FM8HH4K/

Web: https://wiki.wemos.cc/products:d1_mini_shields:oled_shield

Get started: https://wiki.wemos.cc/tutorials:shields:get_started_with_oled_shield

Librería: https://github.com/mcauser/Adafruit_SSD1306/tree/esp8266-64×48

Ejemplo simple: http://automatedhome.party/2017/04/17/connect-an-inexpensive-oled-display-to-a-esp8266wemos-d1-mini/Reloj Wifi: http://jorgesanz.es/reloj-wemos-esp8266-pantalla-oled/

Access Point con ESP8266

Ya hemos visto cómo usar el ESP8266 como un cliente/estación WiFi (WIFI_STA), vemos ahora como configurarlo para usarlo como un Punto de Acceso (AP) WiFi y que cree una red WiFi propia.

Veamos el ejemplo WiFiAccessPoint que podemos encontrar en Archivos – Ejemplos – ESP8266WiFi – WiFiAccessPoint.

En este ejemplo se configura el ESP8266 como un punto de acceso y ofrece una web embebida, es decir, va a dar una red WiFi a otros dispositivos como nuestro móvil o portátil. Es un Soft Access Point “software enabled access point” https://en.wikipedia.org/wiki/SoftAP  

El máximo de estaciones conectadas al SoftAP es 5.

El modo soft-AP se usa a menudo como un paso intermedio antes de conectar el ESP8266 a un Wi-Fi en modo de estación. Esto es cuando el SSID y la contraseña de dicha red no se conocen por adelantado. ESP8266 primero arranca en modo soft-AP, para que podamos conectarnos a él usando un portátil o un teléfono móvil. Luego, podemos proporcionar credenciales a la red objetivo. Una vez hecho ESP8266, se cambia al modo de estación y se puede conectar al Wi-Fi objetivo.

Para configurar un ESP8266 como Access Point, se usa la instrucción WiFi.softAP(ssid, password); de la clase Access Point.

Más información:

Además este ejemplo muestra una web y para ello usa la clase ESP8266WebServer https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer que facilita las tareas de hacer un servidor web. Más adelante veremos  cómo usar esta librería.

Una vez iniciado el ESP8266, nos conectamos con nuestro móvil a la WiFi “ESPap” con la contraseña “thereisnospoon” y accedemos a la IP “192.168.4.1”, nos estaremos conectando al ESP8266 y veremos los siguiente:

Ejercicio Propuesto: modifica el ejemplo para crear un SoftAP con una SSID oculta en el canal 6 y con la IP 192.168.100.1.

Solución: https://github.com/jecrespo/aprendiendoarduino-curso-esp8266-youtube/blob/master/WiFiAccessPointMejorado/WiFiAccessPointMejorado.ino

Para ocultar el SSID y seleccionar el canal, hay que ver las diferentes opciones de WiFi.softAP() y para usar una IP es necesario llamar a WiFi.softAPConfig() antes de WiFi.softAP(). Toda la información en  http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/soft-access-point-class.html