Cyberpi y mBot2
Cyberpi es una placa basada en ESP32 con sensores, salidas, conectividad wifi y Bluetooth. Con esta placa es ya un robot independiente.
mBot2 es un robot que necesita Cyberpi y amplia sus posibilidades a lo mecánico.
- Introducción
- Cyberpi
- Conocer Cyberpi
- Mi primer programa "Hola mundo"
- Sonidos
- LED
- Pantalla con textos
- Pantalla con gráficos
- Movimientos
- Detección
- LAN
- ¿Qué es IoT?
- IoT
- mBot2
- ¿Qué es mBot2?
- Cómo usar mBot2 en mBlock
- Mis primeros pasos
- Jugando con la luz
- Evitar obstáculos I
- Evitar obstáculos II
- Sigue líneas I
- Sigue líneas II
- Control remoto
- Más actividades
- Inteligencia artificial
- Introducción: ¿Qué es?
- Introducción: Tipos
- Introducción: Y en plan que se entienda....
- Introducción: Video Sensing, esto no es IA
- Máquinas educadas Cognitive Services Servicios cognitivos
- Máquinas educadas: Traductor
- Máquinas educadas: Traductor con Cyberpi
- Máquinas educadas: Reconocimiento de voz- órdenes a mBot2
- Software educable Machine Learning for kids y Scratch
- Software educable: Máquina Educable Teachable Machine
- Software educable: CODE.ORG
- Software educable Playground, Teachable Machine Google y Microbit
- Maquinas educables: SmartCamera
- Python
- Python
- Hola Mundo
- Audio
- LED
- Entradas
- Display
- Sensores de movimiento
- El tiempo (servicios en la nube)
- Envío de mensajes con dos mBots2
- Inteligencia Artificial IA
- Movimientos
- Sensor ultrasonidos
- Evita obstáculos
- Sensor de líneas
- Sigue líneas
- Créditos
Introducción
Objetivos y contenidos
CONTENIDOS
- CYBERPI
- Conocer Cyberpi, sonidos, leds, display, sensor movimientos, joystick, Lan e IoT
- mBOT2
- Conocer mBot2, sensor luz, evita obstáculos, sigue líneas, control remoto, etc..
- Programación Dos posibilidades de realizar el curso
- Programación gráfica en bloques mBlock adecuado para 3º ciclo primaria y ESO
- Programación en código Python adecuado para 4ESO y superior
OBJETIVOS
- Conocer las posibilidades didácticas del robot Cyberpi y de mBot2
- Trabajar en diferentes entornos de los actuadores y sensores que tienen estos robots.
- Desarrollar prácticas de comunicaciones en robótica
- Internet de las cosas (IoT)
- Conocer y desarrollar posibilidades avanzadas, como el uso de la Inteligencia Artificial
Pensamiento computacional
¿Dónde se encaja este robot? ¿Se puede comparar este robot con otros robots de otros cursos que hacemos desde CATEDU?
Esta es la hoja de ruta que proponemos, no se tiene que tomar al pie de la letra, pero intenta ayudar al profesorado que tenga una visión global de tanta oferta robótica:
Como se puede ver CYBERPI + MBOT2 tiene la ventaja de ser un robot de suelo con muchas posibilidades y para muchas etapas.
Guía orientativa
Tenemos un grupo Telegram Robótica Educativa en Aragón, si estás interesado en unirte, envía un mensaje por Telegram (obligatorio) a CATEDU 623197587 https://t.me/catedu_es y te añadimos en el grupo
Muro
https://padlet.com/CATEDU/mbot2
mBlock5
mBlock es un programa especializado en el manejo de los robots de Makeblock (ver cursos de mBot en Aularagon), pero permiten muchas arquitecturas de placas pues los mismos robots de Makeblock estan basados en placas de hardware libre Arduino, ESP32...
Hay dos versiones, online y offline, las dos son buenas, no obstante
- Si tienes Windows o Mac preferimos la versión offline para no saturar la red en los centros, rapidez y comodidad.
- Si utilizas Linux o Chromebook tienes que usar la versión online obligatoriamente pues no hay versión instalable.
Tanto una opción como la otra, permite tener los proyectos en la nube de Makeblock, compartir, embeberlos, etc...
Versión online
Para la versión web primero hay que instalar mLink driver nos vamos a https://mblock.cc/pages/downloads y abajo nos encontramos mLink para descargar, descarga el mLink correspondiente a tu sistema operativo :
Licencia CC-BY -SA https://docs.arduino.cc/tutorials/alvik/getting-started-mblock/
Lo instalamos, y entonces pedirá instalar los drivers que son pequeños programas que comunican el PC con el harware del robot
Licencia CC-BY -SA https://docs.arduino.cc/tutorials/alvik/getting-started-mblock/
Si utilizas Chromebook lee la siguiente guía para conectar el robot
Una vez instalado ya podemos entrar en la web https://ide.mblock.cc/ para programar en bloques nuestro robot
Nota: La página https://ide.mblock.cc/ no suele estar bien situada en los buscadores si ponemos mBlock, la página que suele salir es esta https://www.mblock.cc/en/ y nos da dos opciones, trabajar con bloque, o con Python, elegimos bloques
Si has entrado sin querer en la URL https://ide.makeblock.com/ no permite el logueo en Europa
En resumen, la URL correcta es https://ide.mblock.cc/
En este editor tenemos que loguearnos podemos crear un nuevo usuario, utilizando una cuenta de Google/Apple o registrarnos con un correo electrónico
Versión offline Windows o Mac
Vamos a https://mblock.cc/pages/downloads y descargamos la versión correcta a nuestro sistema operativo.
Licencia CC-BY -SA https://docs.arduino.cc/tutorials/alvik/getting-started-mblock/
En windows hacemos doble click en el archivo ejecutable descargado
Licencia CC-BY -SA https://docs.arduino.cc/tutorials/alvik/getting-started-mblock/
Lo instalamos, y entonces pedirá instalar los drivers que son pequeños programas que comunican el PC con el hardware del robot
Licencia CC-BY -SA https://docs.arduino.cc/tutorials/alvik/getting-started-mblock/
Algunas veces la ventana de driver de la figura anterior esta escondida en el fondo, hay que minimizar ventanas para acceder a ella.
En MAC el archivo será un fichero mount con la extensión .dmg, por lo tanto hay que arrastar el icono a la carpeta de aplicaciones
Licencia CC-BY -SA https://docs.arduino.cc/tutorials/alvik/getting-started-mblock/
En VIVO o EN CARGA ¿Eso que es?
DOS FORMAS DE PROGRAMAR EN MBLOCK :
OPCIÓN Programación en vivo
El programa reside en el ordenador, y en la placa hay instalado un Firmware para ir escuchando y ejecutando lo que manda el ordenador.
- VENTAJAS
- Te permite interactuar el robot y el ordenador, por ejemplo podemos hacer que cuando el detector de humedad detecte agua, que salga por pantalla un fondo acuático, o que pulsando una tecla del teclado se encienda un LED en la placa...
- DESVENTAJAS
- hay que cargar dentro del robot el Firmware exclusivo de mBlock para que Arduino haga caso a mBlock
- Hay que tener nuestro ordenador como intermediario, se come los recursos y puede que nuestro programa vaya lento
- Por supuesto necesita tener ordenador conectado al robot, o sea, trabaja como un esclavo del ordenador.
OPCIÓN Programación cargar a la placa
Todos los programas editores de Arduino (tanto los que programan con código como el Arduino IDE) como los editores de programas gráficos en bloque (mBlock, Snap4Arduino, Arduinoblocks, ...) permiten cargar el programa en la placa. Las ventajas y desventajas son las opuestas de trabajar en vivo.
EN VIVO ¿Qué es eso?
Existe una posibilidad de utilizar la placa "en vivo" frente a "cargar" el programa en la placa.
Es decir, interactuando con el ordenador. El programa está en el PC. En la placa hay un firmware que le dice que este a las órdenes del PC. De esta manera podemos por ejemplo:
- Enviar órdenes desde el ordenador a la placa.
Por ejemplo que al pulsar la tecla espacio que se encienda el led D13
- Enviar información desde la placa al ordenador
Por ejemplo que muestre por pantalla nos muestre la cantidad de luz, que registra el sensor LDR, etc...
Que nosotros sepamos, estos programas permiten la programación en vivo :
- mBlock placas: Arduino, Microbit, Raspberry Pi, ... robots de Makeblock: mBot, Cyberpi...
-EchidnaScratch CURSO DE ECHIDNA
VENTAJAS LA PROGRAMACIÓN EN VIVO PERMITE MUCHO JUEGO Y POSIBILIDADES A LA HORA DE ELABORAR PROYECTOS
INCONVENIENTES: Necesitas el ordenador encendido y conectado al robot.
Cyberpi
Conocer Cyberpi
HARDWARE
Cyberpi ya es un robot, tipo placa electrónica, basado en ESP32 por lo tanto con Wifi y Bluetooh integrado y se le incorporan los suiguientes SENSORES Y ACTUADORES
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
HARDWARE - PUERTOS
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
- Puerto para conexión de tarjetas de extensión : La tarjeta Cyberpi esta diseñada para conectarse al chasis del robot mBot2, así como otros shields comerciales para esta placa. por ejemplo el de la figura:
Fuente: Guia Cyberpi Robotix con permiso del autor - Puerto USB tipo C para conectarnos con el PC e instalar los programas que deseemos, Se pueden añadir varios y seleccionar con el Joystick cual ejecuta.
- Puerto para Conexión módulos electrónicos:, con protocolos serie I2C, permite conexión de diferentes módulos, sin necesidad de tener más puertos, simplemente conectando todos en serie.
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
SOFTWARE
Permite una programación en bloques con mBlock5 y con código con Python que también se puede hacer desde el mismo mBlock.
Para actualizar el Firmware instalado en Cyberpi, se tiene que hacer desde el mismo mBlock, Aquí cómo se hace.
Para ejecutar los programas que se graban en Cyberpi, se entra en Cambiar programa y seleccionando los programas cargados.
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Si se quiere ejecutar los programas predefinidos mover el joystick en el menú anterior a la derecha, y encontramos los típicos: Nivel de voz, sigue líneas, ....
Mi primer programa "Hola mundo"
Conectamos Cyberpi con el PC utilizando un cable USB tipo c
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
OJO, hay cables baratos que sólo sirven para "cargar", el cable que necesitamos tiene que permitir la comunicación bidireccional.
Entramos en mBlock5 https://ide.mblock.cc/ y añadimos el dispositivo CyberPi
Una vez cargado el dispositivo CyberPi recomendamos entrar en la conexión directa (3) y pulsamos Conectar (4)
Al dar a Conexión directa nos da dos opciones, Bluetooth y Serie, elegimos serie
Nota: La conexión Bluetooth sólo es si tenemos el pincho asociado (se vende aparte) y permite una conexión en vivo inalámbrica.
Se abren los puertos disponibles, elegimos el que esté conectado nuestro Cyberpi
Ojo: Tiene que estar encendido, si está con mClon, dar al interruptor on
Al dar a Conexión directa desaparece el texto y aparece Conexión con mLink ¿Qué es eso? Es otra opción, que antes se hacía obligatoriamente si usabas mBlock online: Instalar el programa mLink (que se puede descargar en https://www.mblock.cc/en/download/mlink/ ) y antes de entrar a mBlock online, tienes que ejecutar este programa y dejarlo minimizado. Aunque es una opción que puedes utilizar (y te evita la ventana anterior) la conexión directa es también cómoda.
Al conectar, nos aparecen instrucciones específicas de Cyberpi como instrucciones generales
Podemos empezar con nuestro primer programa
Le damos a Cargar , (luego aclaramos el modo En vivo qué es) y se ejecuta el programa
MODO VIVO ¿ESO QUÉ ES?
El modo vivo, permite interactuar con el PC, por ejemplo:
- PC → Cyberpi : Al pulsar la tecla espacio que diga Hola
- PC← Cyberpi El oso panda diga también Hola Mundo!
https://www.youtube.com/shorts/tV1yhUV41lg?feature=share
Si te fijas, Cyberpi está conectado con cable USB al PC pues estamos En vivo dependemos del ordenador. Si se quiere una conexión En vivo e Inalámbrica, es necesario comprar el pincho bluetooth
UN POCO MÁS COMPLICADO
Podemos complicarlo un poco más para darle más colorido y sonido
MUY IMPORTANTE
Para poder continuar con el curso, es necesario tener algunos conocimientos mínimos de programación en bloques, sobre todo el significado de los siguientes bloques
- EVENTOS
- CONTROL
- OPERADORES
- VARIABLES
- MIS BLOQUES
Recomendamos visitar las páginas 30 al 42
Sonidos
Grabadora sencilla
La librería de Audio tenemos opciones interesantes
Podemos poner un programa sencillo
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Este programa empieza con el evento tecla espacio. Por lo tanto necesita el Modo vivo
P: ¿Qué haríamos para no depender del ordenador, es decir, utilizar el modo cargar?
R: Podemos usar otro tipo de eventos que no dependa del PC
Grabadora más sofisticado
Si entramos en los programas de ejemplo, podemos elegir Magical Recorder
Y funciona como una grabadora de bolsillo:
- Apretamos el joystick en la posición central, empieza la grabación
- Botón A termina la grabación
- Botón B reproduce la grabación
Sirena
Si entramos en programas de ejemplo- Buzzer:
Toca una sirena:
Podemos jugar a reproducir notas
Teniendo en cuenta que sigue la notación inglesa. Equivalencia entre las notas anglosajonas, nota MIDI y frecuencias :
Fuente: Acústica musical. ETS Univ Vallalodid
Más sobre audio con Cyberpi en https://education.makeblock.com/help/mblock-block-based-device-cyberpi-audio/
Detección sonidos
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
¿Qué hace este programa?
Va desplazando un led de izquierda a derecha hasta que recibe un sonido fuerte, (en ese momento enciende todas las luces, y emite un sonido) luego después de 3 segundos vuelve a empezar
Sirena
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
LED
En el apartado de LED podemos realizar diferentes animaciones de la tira de Leds RGB que tiene Cyberpi, por ejemplo
Otro ejemplo más animado sería
Lo siento.... no lo podía evitar, si lo entiendes es que tienes la edad perfecta para la robótica 😁 para cambiar los colores, de los leds hacer doble clic en la muestra
Pantalla con textos
La pantalla OLED que incorpora Cyberpi nos permite muchas posibilidades. para ello entramos en
Cómo puedes observar, si el texto no le cabe, automáticamente hace salto de línea. También puedes ver que no le gustan los acentos, ñ etc..
Puedes forzar el salto de línea con la instrucción :
Y también podemos imprimir una etiqueta en la fila 1 a 8 pero ten en cuenta que si coincide, se sobrescribe. Por ejemplo este código:
Los números no se borran, pero si hacemos este programa, se sobrescriben
Si queremos que el texto se desplace como una marquesina, tenemos que usar un contador y fijar la etiqueta en coordenadas X e Y correspondientes:
Las coordenadas X e Y :
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Pantalla con gráficos
La pantalla OLED integrada de Cyberpi esta muy bien conseguida, permite muchas posibilidades inalcanzables en otras placas como Microbit y Arduino R4 (me refiero a sus pantallas integradas). Mira el primer minuto de este vídeo y lo verás
Gráficos de líneas
Ahora realiza este ejercicio, como puedes ver va representando números aleatorios:
Cambia el espaciado de 5 pixeles a 20 píxeles y notarás la diferencia. Aquí en este figura tienes un ejemplo
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Podemos pues hacer que visualice la lectura de los sensores, por ejemplo el de luz. Como podemos ver en el vídeo es bastante preciso.
https://www.youtube.com/shorts/JDbkvJcwSvw
Gráficos de barras
Este ejemplo (que se muestra en vivo, pero también lo puedes poner en forma cargar)
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Produce un gráfico de barras de dos columnas de datos :
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
¿Y qué harías para tener 4 barras de diferentes colores?
Si queremos esto
Tenemos que hacer
Si quieres otro ejemplo más elaborado de gráficos de barras, en la página 15 del manual Pere Manel Verdugo Zamora podrás encontrar un ejemplo de simular un dado 100 veces.
Escribir tablas en la pantalla
La pantalla de Cyberpi permite tablas de 4x3 como máximo
Este ejemplo
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Produce la salida siguiente
Fuente: Guia Cyberpi Robotix con permiso de la empresa.
Y más...
Podemos fijar los colores con estas dos instrucciones:
Podemos rotar la pantalla
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Y también tenemos :
Funciones trigonométricas
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Movimientos
Ahora vamos a ver los programas en
Sensibilidad
Este sencillo programa podemos controlar el sprite según los movimientos definidos en Cyberpi
Ejecuta el anterior programa EN VIVO pues hay que mover el sprite
En teoría estos son los movimientos :
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
O montado con el mBot2 :
Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pero no es fácil :
El siguiente script muestra por la pantalla de Cybperpi si esta en movimiento (Adaptado de Guia Cyberpi Robotix con permiso de la empresa. José Manuel Ruiz Gutiérrez)
Resultado
Adaptado de Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
O este otro
Detección de giros
El criterio de ángulos es ;
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Un programa muy visual para ver la precisión que lo realiza es el siguiente:
Como podemos ver, los ángulos superiores a 360 están permitidos y al revés, en sentido negativo también:
Esto nos permite contar el número de vueltas que gira y su sentido.
Aceleraciones
También puede medir la aceleración en cualquiera de los tres ejes, por ejemplo este programa
Este es el resultado
Un ejercicio interesante: Contador de pasos
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Visualización en forma de tabla de las inclinaciones
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Resultado :
Detección
Detección del Joystick y teclas A y B
Podemos hacer este mensaje en el Cybperpi
aunque parece largo, es corto si se hace duplicar el if principal
En el objeto panda hacemos el programa:
También es corto y fácil de hacer utilizando duplicar. Como te puedes imaginar, el resultado es el siguiente :
.
También puede contar el número de veces que se produce el evento.
El siguiente programa nos puede servir como "contador de personas manual"
¿Por qué existe ese "espera" 0.1 segundos?
Para quitar los rebotes.
Prueba quitarlo y verás
También puede detectar las teclas A y B, como ya vimos en SONIDOS
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Sensor de sonido
Podemos hacer este programa para ver la detección del sonido
Sensor luz
La detección de la luz, que ya lo vimos en gráficos
.
https://www.youtube.com/shorts/JDbkvJcwSvw
Otro sensor que tiene incorporado es el nivel de batería
Temporizador
Con este programa tenemos un cronómetro sencillo
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Otras detecciones
Que sólo tienen sentido si Cyyberpi esta montado en una extensión, por ejemplo el chasis mbot2
Un ejemplo de detección
Puedes experimentar las diferentes fuerzas, velocidades con este script en vivo.
Lo tienes en https://planet.mblock.cc/project/3576507
LAN
Conectarse a la Wifi método por programación
Podemos poner en la programación las órdenes necesarias para que el Cyberpi se conecte a la red Wifi, la instrucción básica la tienes en la pestaña IoT
Pero tiene la desventaja de que no nos informa el estado. Este script es más elaborado
Conectarse a la Wifi método rápido
Otra manera es utilizar el programa mismo mBlock
Nombre del equipo
Para identificar nuestro equipo, necesitamos saber su nombre para diferenciarlos de otros, tenemos en en bloque de detección
El nombre del equipo se puede ajustar aquí :
INSTRUCCIONES DE LAN
Una vez que estamos conectados, los diferentes CYBERPI que están dentro de una LAN pueden enviarse mensajes con estas instrucciones
Ojo, sólo si están dentro de la misma LAN es decir, fuera de la red local los Cyberpi no se ven con estas instrucciones.
También el router puede separar diferentes LANs para saber más
Por defecto esta en el canal 6 pero puedes hacer subgrupos en distintos canales el 1 y el 11 con la instrucción "pon el canal de la LAN a .... y los miembros de un canal no pueden ver a los de otro canal distinto.
PROGRAMA EJEMPLO enviar la bienvenida
Vamos a poner este programa (en los dos el mismo) en dos cyberpis conectados a la misma wifi (si no aparece en el código es por que se ha utilizado el método rápido) :
El resultado es
... Y EN EL CASO DE QUE SÓLO TENGO UN CYBERPI ????
En el cyberpi
Instalamos la extensión BROADCAST
El código es parecido
Y lo subimos y dejamos conectado el cyberpi con el PC
En el Sprite (o sea el panda)
Instalamos la extensión broadcast (que se llama difusión) para las imágenes anidadas
Y creamos el siguiente programa para el sprite
RESULTADO
¿Qué es IoT?
El Internet de las cosas (Internet of Thing IoT) describe objetos físicos —o grupos de estos— con sensores, capacidad de procesamiento, software y otras tecnologías que se conectan e intercambian datos con otros dispositivos y sistemas a través de internet u otras redes de comunicación. El Internet de las cosas se ha considerado un término erróneo porque los dispositivos no necesitan estar conectados a la Internet pública. Sólo necesitan estar conectadas a una red y ser direccionables individualmente
Fuente Wikipedia IoT Internet de las cosas CC-BY-SA
De Drawed by Wilgengebroed on FlickrTranslated by Prades97 CC BY-SA 3.0
Estamos hablando de dispositivos que se conectan a internet de forma desatendida, por vía hardware (o mejor dicho firmware) a diferencia de un ordenador, tablet o móvil, donde tienes que configurar por software el dispositivo y hay un diálogo entre usuario y dispositivo sobre el uso de Internet (el software solicita tal página web, tales datos etc por voluntad del usuario o por diálogo con el usuario) Aquí los dispositivos están ya configurados de los datos que se comunican. Es decir "conectar y olvidar".
Piensa en la diferencia entre un enchufe inteligente y un ordenador, el primero es lo que se considera dentro de IoT
Las formas "desatendidas" son un avance en la sociedad pero también puede generar problemas muy serios a nivel mundial, ver el caso Mirai
Las cosas claras. ¿asíncrono o síncrono?
Hay muchas herramientas IoT
- Blynk: lo que nos gusta de esta herramienta es que es casi "instantánea" o "síncrona". Esto es imprescindible con ciertos robots como el Rover Marciano con Arduino. Necesitamos que "gire" para evitar un obstáculo, no podemos esperar !!!. Veremos con BLYNK un protocolo que entre el dispositivo electrónico (nuestro robot) y nosotros (en ordenador, en una APP en el móvil) la comunicación es instantánea, gracias a un servidor que hará de intermedio, que puede ser local (BLYNK LEGACY) o en Internet (BLYNK IoT).
- Blynk legacy es la que se va a trabajar en
- Blynk IoT es la que se va a trabajar con
- MQTT El emisor envía datos, se almacenan en un servidor, y cuando puede, lo vuelca al cliente. Cliente y emisor pueden ser el dispositivo electrónico y nosotros o viceversa. Veremos que esto es lo que hace el protocolo MQTT y está tremendamente extendido por lo barato y fácil que es. Hace que los servidores no estén tan ocupados, por lo tanto hay varios proveedores que ofrecen este servicio gratuitamente. Hay robots como los que tienen la placa TDR STEAM IMAGINA que envía datos de temperatura, humedad, .. y pueden recibir datos pero no precisan de esta exigencia instantánea como un rover.
- Arduino cloud IoT
- Cyberpi y mBot2
IoT
En esta pestaña tenemos elementos que nos permiten usar Internet para enviar mensajes o recoger información :
Para utilizar muchos elementos de IoT es necesario utilizar los servidores de Makeblock por lo tanto hace falta estar logueados
PROGRAMA EJEMPLO enviar la bienvenida
Vamos a poner este programa, QUE ES SUPER PARECIDO AL QUE HEMOS VISTO EN LAN los dos cyberpis conectados a la wifi (NO HACE FALTA QUE SEA LA MISMA) :
En este vídeo ESTAN CONECTADOS A DISTINTAS WIFIS (uno en una wifi del router, SSID catedu y otro en un móvil con datos SSID catedu2) por lo tanto NO PERTENECEN A LA MISMA LAN, podrían estar en cualquier parte del mundo con tal que estén conectados a Internet, y al loguearte, comparten los datos que hay en tu carpeta del servidor, "tu nube de usuario".
RETO: si te fijas, se repite el mensaje, es decir, en el cyberpi LUCIA vuelve a salir Tú te llamas LUCIA (también aparece en el Cyberpi de ISABEL) ¿Cómo evitarías esto?
PROGRAMA RECOGIDA DE DATOS CLIMÁTICOS
También permite recoger datos climáticos, que nos proporciona los servidores de Makeblock, por ejemplo:
P: ¿Por qué se ha elegido ACTUR ZARAGOZA como localidad de Calidad de Aire? ¿No puedo poner Fuentes Claras?
R : En todos sitios no hay estaciones de calidad de aire con datos públicos, uno está en Actur y es el que se ha elegido.
mBot2
¿Qué es mBot2?
Hay que entender mBot2 como un chasis a CyberPi es decir, el rotot es CyberPi y le añadimos sensores y actuadores que es mBot2
Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
MOTORES CODIFICADORES
Permite el control de la velocidad y de la posición pues están codificados (motores paso a paso o motores con un detector de posición) por lo tanto permite movimientos precisos y colocar mBot2 en lugares exactos.
Comparandolo con mBot1 su control se realizaba por más o menos potencia a los motores, lo que provocaba desviaciones indeseadas.
SENSOR ULTRASONICO
Más preciso que su anterior. y además tiene unos leds que permite más interacción
Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
SENSOR QUAD RGB
Es un sigue líeas más avanzado pues permite detectar cruces de 90ª pues tiene 4 sensores frente a los 2 que tenía mBot1
Además tiene un sensor de color lo que permite conocer en qué posición de la línea estamos.
Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Para que el sensor interprete los colores que pertenecen a la línea mirar el vídeo :
Cómo usar mBot2 en mBlock
Podemos instalar diréctamente mBot2, lo interpreta como un chasis de Cyberpi
- Vamos a extensión luego vamos a buscarlo en extensión
- Buscamos mBot2 descargar
- Añadir
Se instarán estos conjuntos de instrucciones :
Mis primeros pasos
Control remoto con el teclado
Vamos a realizar EN VIVO este programa
Como puedes ver es puedes controlar el robot pero esta "atado" al ordenador, esa es la desventaja de programar EN VIVO
Programa de bienvenida
El contenido a partir de aquí es de esta página es de
Vamos a realizar este programa, primero una pantalla de bienvenida:
Luego interactuamos con el joystick y el movimiento:
Cargamos estos programas EN MODO CARGA
RESULTADO
El contenido de esta página es de
Jugando con la luz
mBot2 se quiere ir de marcha nocturna
Podemos hacer que el mBot2 se vaya de marcha nocturna
Un programa muy muy sencillo es este hay que jugar con los valores de 20 y 50 según las condiciones de tu aula
Es muy espectacular hacerlo con los alumnos, se deja el aula a oscuras, se encienden todas las luces y todo baila !
No te quedes con sólo girar, hazle piruetas, juegos de luces etc...
Robot polilla
Podemos hacer este sencillo programa que avanza si hay luz, o va dando vueltas (lo busca) si no hay
Puedes alterar el programa de tal manera que si no hay luz, que haga giros más largos, retroceda...
Evitar obstáculos I
Mi primer "Evita obstáculos"
Sugerimos un programa sencillo
Como puedes ver, cuando hay un obstáculo a menos de 15cm (puedes modificar este número) retrocede un poco, gira y así evita el obstáculo. Si no hay objeto, pues avanza
El Evita obstáculos de programas de ejemplo
Acuérdate que para manejar el sensor de distancia, hay que instalar la extensión correspondiente. Ver https://libros.catedu.es/books/cyberpi-y-mbot2/page/como-usar-mbot2-en-mblock
El script que proponemos es el que se encuentra en "Programas de ejemplo ":
El contenido a partir de aquí es de
La distancia de 8cm es arbitraria y también la elección de hacerlo al azar o no.
Podemos añadir
RESULTADO
El contenido de esta página es de
Evitar obstáculos II
El contenido de esta página es de
Acuérdate que para manejar el sensor de distancia, hay que instalar la extensión correspondiente. Ver https://libros.catedu.es/books/cyberpi-y-mbot2/page/como-usar-mbot2-en-mblock
Ahora, en vez de elegir al azar como Evitar obstáculos I qué dirección a girar, en este caso vamos a realizar un proyecto en el cual nuestro mBot2 tiene que detectar un objeto cuando esté a menos de 10 cm. En este momento se tiene que para y comprobar la distancia que hay a su derecha y la distancia que hay a su izquierda, siempre tendrá que ir por la dirección donde el obstáculo está más lejos.
RESULTADO
Sigue líneas I
Mi primer siguelíneas
El sigue líneas más sencillo es este, recomendamos empezar por aquí
- Si detecto 00 es decir "he perdido la línea" entonces ves hacia atrás para recuperarla
- Si detecto 11 es que estoy "en la línea" pues "pa'lante"
- Si detecto 01 es que la línea la tengo a mi derecha (0 en la izquierda 1 en la derecha) por lo tanto gira a la derecha para volver al redil
- lo mismo pero a la izquierda
Como se puede ver, hace movimientos hacia atrás sobre todo en las curvas cerradas pero ¡¡no se escapa!!
El sígue líneas de "Programas de ejemplo"
Acuérdate que para manejar el sensor de distancia, hay que instalar la extensión correspondiente. Ver https://libros.catedu.es/books/cyberpi-y-mbot2/page/como-usar-mbot2-en-mblock
El programa lo puedes encontrar en los "Programas de ejemplo":
El contenido a partir de aquí es esta página es de
El primer script es para parar el robot con el botón A
(optativo) Esta función para que nos muestre el color de la línea
RESULTADO
Sigue líneas II
El contenido de esta página es de
Acuérdate que para manejar el sensor de distancia, hay que instalar la extensión correspondiente. Ver https://libros.catedu.es/books/cyberpi-y-mbot2/page/como-usar-mbot2-en-mblock
En este programa sigue líneas avanzado vamos a incorporar que nos vaya diciendo los colores que va detectando
El script que proponemos es el siguiente :
Y el algoritmo principal
- Cuando se presiona el botón B
- Detener otros programas del objeto.
- A la variable base_power le asignamos el valor 55
- A la variable kp le asignamos el valor 0.8
- Para siempre (Bucle infinito)
- A la variable left_power le asignamos el valor -1 * ( base_power + (kp * desviación del sensor cuádruple RGB)
- A la variable right_power le asignamos el valor(base_power – (kp * desviación del sensor cuádruple RGB)
- moto EM1 gira a potencia right_power %, motor EM2 gira potencia left_power %
- sí detector R1 del sensor cuádruple RGB detecta blanco entonces
- muestra 5 leds color blanco
- sí detector R1 del sensor cuádruple RGB detecta rojo entonces
- muestra 5 leds color rojo
- sí detector R1 del sensor cuádruple RGB detecta amarillo entonces
- muestra 5 leds color amarillo
- sí detector R1 del sensor cuádruple RGB detecta verde entonces
- muestra 5 leds color verde
- sí detector R1 del sensor cuádruple RGB detecta cian entonces
- muestra 5 leds color cian
- sí detector R1 del sensor cuádruple RGB detecta azul entonces
- muestra 5 leds color azul
- sí detector R1 del sensor cuádruple RGB detecta morado entonces
- muestra 5 leds color morado
- sí detector R1 del sensor cuádruple RGB detecta negro entonces
- muestra 5 leds color negro
Y además (optativo) igual que el sigue líneas I :
RESULTADO
Control remoto
El contenido de esta página es de
PARA REALIZAR ESTE PROGRAMA SE NECESITAN DOS CYBERPIS QUE VAN A ESTAR CONECTADOS EN LA MISMA LAN
Ahora un Cyberpi con su joystick controlará los movimientos del otro Cyberpi montado en su mBot2
Para este proyecto hemos de cargar dos CyberPy.
CODIGO EN EL CYBERPI MONTADO CON MBOT2
Hay que poner los dos Cyberpis en la misma Wifi (SSID y contraseña)
CODIGO EN EL CYBERPI QUE HARÁ DE CONTROL REMOTO
RESULTADO
El contenido de esta página es de
Más actividades
RETOS : HACER UN PROGRAMA QUE REALICE....
RETO1 APARCAR
SOLUCIÓN pag 18 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
RETO 2 HACER UN CUADRADO
Los cuadrados naranjas son obstáculos.
Solución en pag 53 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
RETO 3 BUSCANDO EL COLOR AZUL ...
Un grupo de mBot2 buscan el color azul pintado en el suelo. Si uno lo encuentra, informará a los demás y ganará el juego.
Solución en pag 90 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
RETO 4 BUSCANDO EL COLOR AZUL... PERO EN SOLITARIO
Hacer el juego anterior pero sólo teniendo un mbot2
Solución en pag 9 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Es parecido a la solución con Broadcast que vimos en LAN con cyberpi
RETO 5 EL NO VA MÁS ... UN CAMARERO
El robot camarero que vas a fabricar debe ser capaz de hacer una serie de cosas: • Desplazarse en línea recta • Detenerse en una zona roja (tu mesa), anotar un pedido y enviarlo a la cocina • Opción adicional: si se dispone de un segundo mBot2 o CyberPi, entonces mostrar los pedidos a la cocina (para que puedan empezar a preparar la comida) • Continuar desplazándose hasta que el mBot2 encuentre una superficie verde (la cocina) y se detenga para recoger la comida de la cocina • Opcional: si se dispone de un segundo mBot2 o CyberPi, entonces notificar se está entregando la comida
Pag 107 Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
¿QUE HACEN ESTOS PROGRAMAS? ....
Pag 25 Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 26 Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 27 Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 28 Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 29 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 33 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 41 deManual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 43 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 60 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 60 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 62 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 63 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 67-68 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Y utilizar esta instrucción en la función principal
Pag 69 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 82 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 89 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Pag 106 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
En el siguiente programa se usa la extensión TEACHABLE MACHINE, en ella se enseña al objeto que reconozca (INTELIGENCIA ARTIFICIAL) un mBot2, un block de notas, mira https://libros.catedu.es/books/cyberpi-y-mbot2/page/software-educable-maquina-educable-teachable-machine para saber cómo se utiliza esta extensión.
Una vez "aprendido" se pueden usar las instrucciones de "recognition result is... "
Tiene la pega que tienen que estar conectado por cable el mBot2 o usar un adaptador Bluetooth
Pag 124 de Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Inteligencia artificial
Introducción: ¿Qué es?
La inteligencia artificial se refiere al conjunto de algoritmos realizan tareas complejas, que son capaces de realizar procedimientos que imitan el funcionamiento de la mente, como son aprender y tomar decisiones.
De https://timoelliott.com/blog/cartoons/artificial-intelligence-cartoons en https://timoelliott.com/
Introducción: Tipos
ML : APRENDIZAJE AUTOMATICO O MACHINE LEARNING
Aquí los algoritmos aprenden a partir de datos, y ellos buscan patrones para identificar. Cuanto más datos, mejores resultados.
El principio es básico. Queremos diferenciar silla mesa: Analiza datos, localiza patrones (cuatro patas, algo común, el tamaño y forma, patrones que diferencian como el respaldo....) con esas características, puede realizar un entrenamiento, y por lo tanto esta preparado para realizar predicciones.
Hay varios tipos de ML:
- ML Aprendizaje automático supervisado Donde los datos se les da ya etiquetados
- ML Aprendizaje automático no supervisado: Aquí es el propio algoritmo que tiene que encontrar relaciones en el proceso de identificación de patrones y por lo tanto etiquetar categorías.
- ML Aprendizaje semisupervisado. El modelo se entrena con datos etiquetados y no etiquetados. Lo normal es primero los etiquetados (pues son los que implican mayor coste y dinero) y si el modelo ya empieza a funcionar bien, ya procesa no etiquetados para su optimización.
RL : APRENDIZAJE REFORZADO O REINFORCEMENT LEARNING
Es un modelo que busca la optimización. Utiliza resultados anteriores e intenta mejorarlos. Para buscar esto, se definen estados con unos parámetros que implican premio o penalización. La máquina busca soluciones y acciones para buscar los premios y huir de las penalizaciones.
DL : APRENDIZAJE PROFUNDO O DEEP LEARNING
Es un subconjunto del ML no supervisado, Se crea una red neuronal organizadas en capas, cada capa especializada, por ejemplo la primera de entrada recoge los datos, las intermedias, ya ocultas, identifican patrones y la última, la salida que recoge la información procesada anteriores, la que toma las decisiones.
PLN : PROCESAMIENTO DE LENGUAJE NATURAL
Utiliza conceptos de DL y ML para comprender el lenguaje humano. Una aplicación son los chatbots. Que pueden ser:
- dirigidos, es decir va tomando decisiones por etapas tipo árbol y da respuestas automáticas
- no dirigido: produce respuestas en función del contexto y las decisiones del usuario.
- hibridas que intenta producir una conversación fluida.
EJEMPLOS
LEARNING ML
https://web.learningml.org/en/home/
https://machinelearningforkids.co.uk/#!/welcome
Ver nuestro tutorial en https://libros.catedu.es/books/robotica-educativa-con-mbot/page/maquina-educable-con-machine-learning-for-kids-y-scratch
DL REDES NEURONALES : QUICKDRAW
https://quickdraw.withgoogle.com/ Es un videojuego donde se ve claramente como se va perfilando las decisiones en forma de árbol y como la etapa final va reconociendo tu dibujo. En esta red, la primera etapa de la red neuronal son trazos que dibujas, y las neuronas intermedias son fruto de una extensa base de datos de dibujos. La última etapa es la decisión basada en las anteriores neuronas.
PRUEBALO ES SUPERDIVERTIDO, INCLUSO EN UN MÓVIL
PLN: CHATGPT COMO FUNCIONA
DL CREA TU PEQUEÑA RED NEURONAL CON PYTHON
DL: GOOGLE DEEPMIND
Google deepmind desarrolló una red neuronal para aprender a jugar videojuegos, y ganó a varios campeones humanos en videojuegos complejos (de los que inicialmente la máquina desconocía las reglas). Puedes ver en https://deepmind.google/ los diferentes proyectos actuales.
Introducción: Y en plan que se entienda....
-
MÁQUINAS “YA EDUCADAS” o "pre-trained ML/AI models"
-
Reconocimiento de imágenes con mBlock
-
Programa de reconocimiento imágenes
-
Programa reconocimiento edad
-
-
Reconocimiento de voz
-
Traductor Con mBlock y Cybperpi
-
Reconocimiento de órdenes Con mBot1 t mBot2
-
-
-
SOFTWARE EDUCABLES o "No pre-trained ML/AI models"
-
Máquina educable Teachable Learning y mBlock
-
Máquina educable con CODE.ORG
-
Máquina educable con Machine Learning for kids y Scratch
-
-
HARDWARE EDUCABLES o sea, que tienen "Smart gadgets"
-
SMARTCAM y mBot1
-
Seguir pelota color
-
Sigue líneas
-
-
Photo by Kenny Eliason on Unsplash
Introducción: Video Sensing, esto no es IA
El siguiente programa no interpreta las imágenes, simplemente estamos utilizando la webcam como sensor de vídeo
https://planet.mblock.cc/project/3730511
Extensión Video Sensing
+ info de esta extensión en https://barclayscodeplayground.co.uk/content/dam/barclayscodeplayground-co-uk/documents/scratch/SC_Using_Video_sensing_teachers_guide.pdf
Máquinas educadas Cognitive Services Servicios cognitivos
Esta extensión pertenece al conjunto de extensiones de inteligencia artificial de mBlock
Instala un montón de instrucciones como
- Reconocimiento de voz (en diferentes idiomas)
- Reconocimiento de texto impreso (en diferentes idiomas)
- Reconocimiento de imagen (marca, famoso, monumento...)
- Reconocimiento de emociones
- Reconoce rasgos como gafas, nivel de sonrisa, cabeceo de la cabeza, color del pelo ...
RECONOCIMIENTO DE EDAD
Para ver un vistazo rápido, vamos a utilizar un programa ya predeterminado, ir a Programas de ejemplo - AI - Age Analyzer (el del pulpo)
OJO, SI NO ESTAS LOGUEADO entonces NO FUNCIONA
La verdad es que acierta bastante bien
Otro ejemplo de uso, reconocimiento de edad y traducción :
Máquinas educadas: Traductor
En este programa, además de usar la extensión Servicios Cognitivos, instalaremos las extensiones :
- Text to Speech - Texto a voz
- Translate - Traductor
El programa es muy sencillo, lo tienes aquí : https://planet.mblock.cc/project/3733312
Máquinas educadas: Traductor con Cyberpi
Esta tarjeta controladora es un ESP32 por lo tanto permite conexión a Internet y lo podemos usar para realizar el mismo script de traducción
El programa lo tienes aquí https://planet.mblock.cc/project/3587357
Lo primero es conectarse a la Wifi :
Y para traducir
OJO: HASTA QUE NO ESTES
1.-LOGUEADO con tu usuario en mBlock
2.-CONECTADO CON CYBERPI
(las dos condiciones y en ese orden) NO SE VISUALIZAN LAS INSTRUCCIONES DE INTELIGENCIA ARTIFICIAL
Máquinas educadas: Reconocimiento de voz- órdenes a mBot2
Aquí no trabajaremos en vivo SINO EN CARGA pues CibyerPi tiene conexión a Internet
La primera parte es el script de conexión de Wifi La siguiente orden es reconocer la voz, y según el resultado, que ejecuta.
Como puedes observar, la orden de reconocimiento de voz, añade un . al final que hay que tener en cuenta
El programa lo tienes aquí https://planet.mblock.cc/project/3733278
Software educable Machine Learning for kids y Scratch
REGISTRO
Entramos en https://machinelearningforkids.co.uk/
Tenemos varias opciones:
- Registrarnos y tenemos dos opciones
- como Un profesor o responsable de un club de programación en este caso tenemos otras dos opcioens
- Clase No administrada tienes que rellenar un formulario típico y creas la clase
- Clase administrada donde tienes opciones de incorporar alumnos a tu clase, este registro es por correo electrónico y tienen que verificar que perteneces a un centro educativo.
- como Estudiante en ese caso es el profesor de una clase administrada el que te tiene que crear la cuenta
- como Un profesor o responsable de un club de programación en este caso tenemos otras dos opcioens
- Iniciar sesión pues nos hemos registrado con alguna de las opciones anteriores
- Probar sin registrarse
Vamos a probar "sin registrarnos" pues estamos aprendiendo. Si luego esta herramienta te convence, Te registras
CREAMOS UN PROYECTO
Empezamos un proyecto
Empezamos un proyecto, como puedes ver hay diferentes formas de reconocer, y permite hacer un almacenamiento local, o en la nube. Como es algo de pruebas puedes hacerlo local. Pero si luego estas registrado es interesante hacerlo en la nube para tener acceso en cualquier sitio.
Ya lo tenemos
ENTRENAR
Primero vamos a entrenar la máquina
Creamos dos etiquetas y vamos escribiendo situaciones (o añadir un fichero txt) donde nos apetece un refresco o no (pueden ser más de dos situaciones)
Volvemos al proyecto..
ENTRENAR
Si ves que has puesto suficientes ejemplos, pide a la máquina que entrene
Empieza el entrenamiento... y para que no te aburras, te pone unas preguntas !!!
Una vez acabado puedes probarlo
fíjate que bochorno no lo hemos puesto en el entrenamiento y ha acertado bastante bien
Volvemos al proyecto
CREAR
Y vamos a CREAR y nos ofrece varias herramientas de programación, elegimos SCRATCH
Le damos a Abrir en Scratch 3
Elegimos un nuevo objeto (quitamos el gato)
y elegimos glass water
Y ponemos el siguiente programa, no es perfecto... pero acierta bastante bien
¿Sabías que ....?
.. hay un curso en Aularagón de INTELIGENCIA ARTIFICIAL CON SCRATCH máquina educable con Maching Learning for KitsVes https://libros.catedu.es/books/inteligencia-artificial-con-scratch con diferentes vídeos del INTEF verás paso a paso esta herramienta desde 2019
Software educable: Máquina Educable Teachable Machine
Esta extensión sí que pertenece al conjunto de inteligencia artificial
En la extensión nos muestra la posibilidad de crear un nuevo modelo de entrenamiento
Al crear un nuevo modelo, Build a new model hay que definir las categorías mínimo son tres
2 - 3 - 4 .- Poner nombres a la categorías
5.- Poner la imagen (en mi caso pantallazos del móvil)
6.- Clicar a qué categoría pertenece, para que aprenda, darle click cuando la barra verde suba
Repetir pasos 5 y 6 tantas veces cuanto se desee, cuanto más, mejor
7.-Usar el modelo de aprendizaje
Una vez creado el modelo, nos pone unas instrucciones que podemos usar en nuestra programación
Otro ejemplo parecido usando playmovil
Software educable: CODE.ORG
Una manera muy didáctica de enseñar los conceptos de Inteligencia Artificial es con CODE.ORG tiene cursos y el funcionamiento es parecido a la Máquina Educable de mBlock
El resultado es
Software educable Playground, Teachable Machine Google y Microbit
Playground es como Scratch pero puedes utilizar las Teachable Machines de Google en tu programación
Entramos en https://playground.raise.mit.edu/httyr/
Y podemos usar una máquina educable de Google en (1) y luego utilizarlo en (2)
Podemos conectar nuestro robot MICROBIT CUTEBOT
Este vídeo por ejemplo nos enseña cómo utilizar una máquina que reconozca que tocamos la cara o no
O reconocer textos
Por ejemplo este programa muestra si tienes puesto un sombrero o no
Ulrich Pedersen Dah & Ture Reimer-Mattesen Center for Underisningsmidler CPU
Maquinas educables: SmartCamera
Estamos ensañando este accesorio, pero en mBot2 no va muy fino, no obstante aquí tienes el enlace a mbot1 perfectamente se puede aplicar a mbot2
https://libros.catedu.es/books/robotica-educativa-con-mbot/chapter/7-ia-hardware-educable
SmartCamera - Qué es
Esta cámara se vende como accesorio de los robots de Makeblock por unos 140€ , ATENCIÓN, ESTE ...
SmartCamera - conexión con mBot
Hardware Para conectarlo con mBot1 hace falta la batería que se suministra en el pack, con su ca...
Smart camera - seguimiento color - sencillo
Configuración reconocimiento de color Método por software (recomendado) Una forma de configurar...
Smart camera seguimiento color avanzado
Kp, velocidad diferencial del motor.... ¿Eso qué es? En la extensión CAMARA INTELIGENTE ESPECÍFI...
Smart camera Piximon
INSTALACIÓN DE PYXMON V2 No es un software obligatorio, pero viene muy bien qué está pasando y q...
Smart Camera Código de barras
En el modo de detección de código de barras, puede detectar 15 códigos de barras ya definidas. ...
SmartCamera - sigue líneas
mBot ya tiene un sigue-lineas https://libros.catedu.es/books/robotica-educativa-con-mbot/page/sig...
Python
Python
Librería cyberpi
Los programas en python de cyberpi que vamos a realizar utilizan esta librería por lo tanto hay que cargarla previamente en nuestros programas.
import cyberpi
Tiene multitud de funciones, te aconsejamos ver un vistazo en esta documentación:
https://www.lbotics.at/images/mbot2/files/mBot2_API_cyberpi.pdf
Esta es una muy breve introducción al Python como recordatorio de algunas instrucciones si ya has utilizado este lenguaje.
Si es la primera vez, te recomendamos que visites nuestro curso PYTHON PARA TODOS Python for everybody por Charles R. Severance licencia CC-BY-NCSA que empieza desde cero.
Lenguajes, intérpretes y compiladores
Python es un lenguaje de alto nivel destinado a ser relativamente sencillo para que los humanos lean y escriban y para que los ordenadores lean y procesen. Otros lenguajes de alto nivel incluyen Java, C ++, PHP, Ruby, Basic, Perl, JavaScript y muchos más. El hardware real dentro de la Unidad Central de Procesamiento (CPU) no comprende ninguno de estos lenguajes de alto nivel.
La CPU entiende un idioma que llamamos lenguaje de máquina. El lenguaje de máquina es muy simple y francamente muy tedioso de escribir porque está representado en ceros y unos:
El lenguaje de máquina parece bastante simple en la superficie, dado que solo hay ceros y unos, pero su sintaxis es aún más compleja y mucho más compleja que Python. Muy pocos programadores escriben lenguaje de máquina. En su lugar, creamos varios traductores para permitir que los programadores escriban en lenguajes de alto nivel como Python o JavaScript y estos traductores convierten los programas al lenguaje de máquina para su ejecución real por parte de la CPU.
Estos traductores de lenguaje de programación se dividen en dos categorías generales: (1) intérpretes y (2) compiladores.
Un intérprete lee el código fuente del programa como está escrito por el programador, analiza el código fuente e interpreta las instrucciones sobre la marcha. Python es un intérprete y cuando ejecutamos Python de forma interactiva, podemos escribir una línea de Python (una oración) y Python la procesa de inmediato y está lista para que escribamos otra línea de Python.
>>> x = 6
>>> print(x)
6
>>> y = x * 7
>>> print(y)
42
>>>
Está en la naturaleza de un intérprete poder tener una conversación interactiva como se muestra arriba. A un compilador debemos entregarle todo el programa en un archivo, y luego ejecuta un proceso para traducir el código fuente de alto nivel al lenguaje de máquina y luego el compilador coloca el lenguaje de máquina resultante en un archivo para su posterior ejecución.
Variables
Las variables son como cajas que puedes meter valores. Y los valores pueden ser de varios tipos :
- int si son enteros
- float si tienen decimales
- binarioDeben comenzar por 0b. Por ejemplo: 0b110, 0b11
- string son frases, son "cadenas" de caracteres entre "
- bool Solamente hay dos literales booleanos True o False
- lista Se pueden declarar variables que son conjuntos por ejemplo Colores = ["verde", "rojo", "naranja" ]
Para crear una variable puedes usar cualquier palabra, x, y, z o Nombre_alumno ... pero algunas palabras no puedes usar, ver
Para visualizar variables puedes usar la instrucción print poniendo entre paréntesis el valor o variable que quieres visualizar.
En la siguiente ventana puedes dar al botón play y ver el resultado
Modifica los valores como quieras, es un intérprete, juega y dale al play para ver el resultado
Como puedes ver se ha introducido un operador el + que realiza la suma del valor de x original (43) y se le incrementa una unidad resultando en la impresión un 44.
Cadenas
Cadenas son secuencias de caracteres, por ejemplo la palabra "banana"
fuente 'Python for Everybody' por Charles R. Severance
Se puede obtener su longitud con la función len, o obtener un carácter ...
Operadores
Este apartado de operadores es adaptado de Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Los operadores aritméticos se utilizan para realizar operaciones matemáticas como sumas, restas, multiplicaciones, etc.
Operador | Descripción | Ejemplo |
---|---|---|
+ | Suma o concatenación en textos | 5+3=8 , "Hola" + "Mundo" = "Hola Mundo |
- | Diferencia | 6-3=3 |
* | Multiplicación | 3*3=9 |
/ | División | 6/2=3 |
// | Parte entera de un cociente | 10//3=3 |
% | Resto de un cociente | 10%3=1 |
** | Potenciación | 5**2=25 |
Los operadores de asignación se utilizan para asignar valores a variables.
Operador | Descripción | Ejemplo |
---|---|---|
= | Asignación | x=4 , a = a + 1 |
+= | Suma y asignación | x+=1 equivale a x = x + 1 |
-= | Diferencia y asignación | x-=1 equivale a x = x - 1 |
*= | Multiplicación y asignación | x*=3 equivale a x = x * 3 |
/= | División y asignación | x/=3 equivale a x = x / 3 |
%= | Asignación de restos | x%=3 equivale a x = x % 3 |
**= | Asignación de exponentes | x**=3 equivale a x = x ** 3 |
Los operadores de comparación comparan dos valores/variables y devuelven un resultado booleano: Verdadero o Falso True
o False
.
Operador | Descripción | Ejemplo |
---|---|---|
== | Igual a | 2==3 retorna False |
!= | Distinto de | 2!=3 retorna True |
< | Menor que | 2<3 retorna True |
> | Mayor que | 2>3 retorna False |
<= | Menor o igual que | 2<=3 retorna True |
>= | Mayor o igual que | 2>=3 retorna False |
Los operadores lógicos se utilizan para comprobar si una expresión es Verdadera o Falsa. Se utilizan en la toma de decisiones.
Operador | Descripción | Ejemplo |
---|---|---|
and | AND lógica | a and b #True si a y b son ciertos |
or | OR lógica | a or b #True si a o b son ciertos |
not | NOT lógica | not a #True si el operador a es falso |
in | pertenencia | Devuelve True si pertenece |
no int | no pertenencia | Devuelve True si no pertenece |
is | identidad | Devuelve True si son iguales |
is not | no identidad | Devuelve True si no son inguales |
Los operadores bit a bit o bitwise actúan sobre los operandos como si fueran cadenas de dígitos binarios. Operan bit a bit:
Operador | Descripción | Ejemplo |
---|---|---|
& | AND bit a bit | 5&6 # 101 & 110 = 110 = 4 |
| | OR bit a bit | 5 \| 6 # 101 \| 110 = 111 = 7 |
~ | NOT bit a bit | ~3 # ~011 = 100 = -4 |
^ | XOR bit a bit | 5^3 # 101^011 = 110 = 6 |
<< | Desplazamiento izquierda | 4<<1 # 100 << 1 = 1000 = 8 |
>> | Desplazamiento derecha | 4 >> 1 # 100 >> 1 = 010 = 2 |
Prueba, juega con este código:
Comentarios en Python
Una sola línea : Escribiendo el símbolo almohadilla (#) delante del comentario.
Multilínea: Escribiendo triple comillas dobles (“””) al principio y al final del comentario.
Entradas de teclado
Ya hemos visto salidas por pantalla con print, pero ahora con input puede leer variables del teclado, esto es mejor experimentarlo que leerlo :
Fíjate que hay que poner las líneas x = float (x) e y = float(y) para convertirlos a números decimales, en caso contrario las interpreta string y no puede multiplicar en Resultado, pero en el siguiente ejemplo no es necesario en la variable cel (celsius) pues se multiplica por números decimales 32.0 5.0 y 9.0
try y except son dos funciones que son un seguro para el programador por si el usuario en vez de teclear un número, mete un string o carácter
La sangría es importante en Python
La sangría se refiere a los espacios al comienzo de una línea de código. Mientras que en otros lenguajes de programación la sangría en el código es solo para facilitar la lectura, la sangría en Python es muy importante ya que se usa para indicar un bloque de código.
Condicionales
Las instrucciones if: else: son las que nos permiten realizar operaciones según las condiciones puestas. Ojo con la sangría
\n es un carácter especial que significa "Salto de página"
Bucles
- while ejecuta lo contenido en la sangría mientras sea verdadero la condición
- for ejecuta lo contenido en la sangría mientras y va recorriendo la variable dentro del rango creado
Para verlo mejor vamos a ver estos ejemplos
- EJEMPLO BUCLE WHILE
- mientras n sea positivo va ejecutando : imprime n y lo decrementa
- al decrementar llega un momento que deja de ser positivo y finaliza el bucle
- EJEMPLO BUCLE WHILE INFINITO
- Es muy típico en robótica, todo el rato hace el bucle (en robótica para que lea los sensores y realice cosas en los actuadores) pero este ejemplo no esta en un robot sino en tu pc y no queremos que se quede "colgado" luego al teclear "fin" acaba gracias a la instrucción break
- Fíjate que hay una instrucción continue para que pase a la siguiente iteración provocando que no imprime lo tecleado
- EJEMPLO BUCLE FOR FRIENDS
- Va recorriendo la variable friend dentro del cojunto lista friends
- como puedes ver la diferencia entre for y while es que for además recorre la variable
- EJEMPLO BUCLE FOR
- mientras n este en el rango de 0 a 5 se ejecuta
Venga pruébalo !!!
Funciones
No vamos a entrar en detalle, pero observa el siguiente código
- FUNCIONES PREDEFINIDAS Si observas, la primera línea llama a importar una librería externa, import math donde math es un fichero que tienen funciones predefinidas, vamos a utilizar una de ellas, la raiz cuadrada sqrt luego para llamar a esa función que esta definida dentro de math se hace con la instrucción math.sqrt
- FUNCIONES DEFINIDAS POR TI em este caso, se utiliza la palabra def para crear una función, que le vamos a pasar tres argumentos a, b y c y para finalizar la función usamos return para devolver el valor que queremos obtener
Para saber más de Python
CURSO PYTHON FOR EVERYBODY en español | ver |
Curso completo de Python 222pag pdf (*) | Descargar |
Curso completo de Python 422pag (*) | Descargar |
Curso completo de Python desde 0 (*) | Ver |
Curso de Python desde 0 (*) | Ver |
Manual de referencia Python (*) | Ver |
Programación en Python (*) | Ver |
Trabajando con ficheros en Python (*) | Ver |
Programación orientada a objeto en Python (*) | Ver |
un manual para aquellos usuarios con previos conocimientos de Python, como la programación modular y orientada a objetos. También algunos conocimientos de las librerías tkinter (Para crear interfaces gráficos y SQlite3 (para gestionar bases de datos). (*) |
Descargar |
(*) Agradecimientos a Pere Manel http://peremanelv.com
Hola Mundo
Nuestro primer programa es muy sencillo: Que por el display del Cyberpi salga la típica frase del primer programa principiante
A la hora de utilizar las funciones de la librería cyberpi, tienes dos opciones:
- Programar sin omitir de donde viene (o sea, indicar el objeto de donde sale esa función, cyberpi. )
- Programar omitiéndolo pero antes tienes que decirle que importas todo import *
Mi primer programa Hola Mundo (método sin omitir)
Entramos en mBlock, y en la pestaña de Python tecleamos este programa:
import cyberpi
cyberpi.console.print("Hola Mundo")
Previamente tienes que tener el programa mBlock instalado y cargado el dispositivo mBot2 (aunque para estos ejemplos con Cyberpi también vale) , recuerda lo visto en https://libros.catedu.es/books/cyberpi-y-mbot2/page/mblock5 y en https://libros.catedu.es/books/cyberpi-y-mbot2/page/como-usar-mbot2-en-mblock
- Entramos en mblock con el dispositivo cargado mBot2 y vamos a la pesaña Python
- Pegamos el programa
- Vamos a conectar mBot2 (debemos de tenerlo conectado con un cable USB tal y como vimos en https://libros.catedu.es/books/cyberpi-y-mbot2/page/mi-primer-programa-hola-mundo
- Damos a la opción Cargar
- Subir código
Y el resultado es
Mi primer programa Hola Mundo (método omitiendo)
Repite los pasos anteriores pero con este código
from cyberpi import *
console.print("Hola Mundo")
¿Ves la diferencia de código?
Audio
Un tono
Un programa sencillo de dar un tono puede ser el siguiente
import cyberpi
cyberpi.audio.set_vol(100)
cyberpi.audio.play_tone(700,1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Instrumentos
También podemos reproducir instrumentos
import cyberpi
cyberpi.audio.set_vol(100)
# str type eg. snare,bass-drum,side-stick,crash-cymbal,open-hi-hat,close-hi-hat,tambourine,hand-clap,claves
# float beat > 0 (second)
cyberpi.audio.play_drum("snare",1)
cyberpi.audio.play_drum("snare",1)
cyberpi.audio.play_drum("side-stick",1)
cyberpi.audio.play_drum("tambourine",1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Efectos sonoros
También este código nos selecciona varios efectos sonoros y los reproduce
import cyberpi
sound_effect = ["hello","hi","bye","yeah","wow","laugh","hum","sad","sigh","annoyed","angry","surprised","yummy","curious","embarrassed","ready","sprint","sleepy","meow","start","switch","beeps","buzzing","explosion","jump","laser","level-up","low-energy","prompt-tone","right","wrong","ring","score","wake","warning","metal-clash","shot","glass-clink","inflator","running water","clockwork","click","current","switch","wood-hit","iron","drop","bubble","wave","magic","spitfire","heartbeat","load"]
cyberpi.display.show_label('UP :GO UP\nDOWN:GO DOWN\nMID :PLAY EFFECT', 16, 0, 0, 0)
cyberpi.display.show_label('SELECT:\nName:', 16, 0, 60, 1)
selected = 0
min_effect = 0
max_effect = len(sound_effect) - 1
while True:
if cyberpi.controller.is_press('up'):
if selected < max_effect:
selected += 1
else:
selected = min_effect
elif cyberpi.controller.is_press('down'):
if selected > min_effect:
selected -= 1
else:
selected = max_effect
elif cyberpi.controller.is_press('middle'):
cyberpi.led.on(255,0,0,id="all")
cyberpi.audio.play_until(sound_effect[selected])
cyberpi.led.on(0,0,0,id="all")
cyberpi.display.show_label('{}'.format(selected), 16, 60, 60, 2)
cyberpi.display.show_label('{}'.format(sound_effect[selected]), 12, 52, 80, 3)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Grabadora
O hacernos una grabadora de bolsillo
import cyberpi
from time import sleep
cyberpi.audio.set_vol(100)
cyberpi.display.show_label("A:Start Recording\nB:Play Recording",12,0,0,0)
while True:
cyberpi.display.show_label("Waiting.",16,0,40,1)
if cyberpi.controller.is_press('a'):
cyberpi.led.on(0,255,0,id="all")
cyberpi.display.show_label("Listening..",16,0,40,1)
cyberpi.audio.record()
sleep(5)
cyberpi.display.show_label("Finished..",16,0,40,1)
cyberpi.audio.stop_record()
elif cyberpi.controller.is_press('b'):
cyberpi.led.on(0,0,255,id="all")
cyberpi.display.show_label("Playing..",16,0,40,1)
cyberpi.audio.play_record_until()
cyberpi.display.show_label("Finished..",16,0,40,1)
cyberpi.display.show_label("Waiting...",16,0,40,1)
cyberpi.led.on(0,0,0,id="all")
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
LED
Colores
Podemos fijar los colores de los leds de Cyberpi con este código
import cyberpi
# R G B Position
cyberpi.led.on(255,0,0,id=1)
cyberpi.led.on(255,255,0,id=2)
cyberpi.led.on(255,255,255,id=3)
cyberpi.led.on(0,255,0,id=4)
cyberpi.led.on(0,255,255,id=5)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Intermitencia
Podemos encender y apagar a voluntad
import cyberpi
from time import sleep
while True:
# R G B Position
cyberpi.led.on(255,0,0,id=1)
cyberpi.led.on(255,255,0,id=2)
cyberpi.led.on(255,255,255,id=3)
cyberpi.led.on(0,255,0,id=4)
cyberpi.led.on(0,255,255,id=5)
sleep(1)
# Position
cyberpi.led.off(id='all')
sleep(1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Arco Iris
import cyberpi
"""
Name List (str)
rainbow , spoondrift , meteor_blue , meteor_green ,
flash_red , flash_orange , firefly
"""
cyberpi.led.play(name = "rainbow")
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Movimiento leds
import cyberpi
from time import sleep
cyberpi.led.on(255,0,0,id=1)
while True:
# shift all the colors 1 step to the right.
# (If it is negative, it will be left shifting.)
cyberpi.led.move(1)
sleep(1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Entradas
Botones A y B
Si aprieto el botón A pues enciendo leds, si aprieto B los apago
import cyberpi
"""
Button Name List (str)
a , b
up, down, left , right , middle
any_direction , any_button , any
"""
while True:
# button name
if cyberpi.controller.is_press('a'):
cyberpi.led.on(255,0,0,id='all')
cyberpi.console.println("LED ON!")
if cyberpi.controller.is_press('b'):
cyberpi.led.on(0,0,0,id='all')
cyberpi.console.println("LED OFF!")
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Intensidad de la luz
import cyberpi
cyberpi.display.show_label("LUZ=",16,0,0,0)
while True:
CantidadLuz = cyberpi.get_brightness()
cyberpi.display.show_label(CantidadLuz,16,0,60,1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Cantidad de sonido
import cyberpi
cyberpi.display.show_label("Loudness:",16,10,10,index=1)
while True:
loudness_value = cyberpi.get_loudness()
cyberpi.display.show_label(loudness_value,16,80,10,index=2)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Nivel de batería
import cyberpi
cyberpi.display.show_label("Battery Level",16,10,0,index=0)
cyberpi.display.show_label("Builtin:",16,10,20,index=1)
cyberpi.display.show_label("Extra:",16,10,40,index=2)
while True:
builtin_batt = cyberpi.get_battery()
extra_batt = cyberpi.get_extra_battery()
cyberpi.display.show_label(builtin_batt,16,80,20,index=3)
cyberpi.display.show_label(extra_batt,16,80,40,index=4)
Display
Contador
import cyberpi
cyberpi.display.show_label("Counter Program",16,0,0,0)
counter = 0
while True:
if counter < 100:
counter = counter + 1
else:
counter = 0
cyberpi.display.set_brush(counter+100, 0, 0)
cyberpi.display.show_label(counter,32,48,64,1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Limpiar y apagar la pantalla
import cyberpi
cyberpi.display.on()
cyberpi.display.show_label("A:Clear the Sceen",12,0,0,0)
cyberpi.display.show_label("B:Close the screen",12,0,24,1)
while True:
if cyberpi.controller.is_press('a'):
cyberpi.display.clear()
elif cyberpi.controller.is_press('b'):
cyberpi.display.off()
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Linechart
El display permite visualizar gráficas como por ejemplo este código
import cyberpi
value = 0
while True:
if value < 100:
value = value + 1
else:
value = 0
cyberpi.linechart.add(value)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Barchart
import cyberpi
value = 0
while True:
if value < 100:
value = value + 0.1
else:
value = 0
cyberpi.barchart.add(value)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Table
import cyberpi
cyberpi.display.set_brush(255,0,0)
cyberpi.table.add(1,1,"1,1")
cyberpi.table.add(2,1,"2,1")
cyberpi.table.add(3,1,"3,1")
cyberpi.table.add(4,1,"4,1")
cyberpi.display.set_brush(0,255,0)
cyberpi.table.add(1,2,"1,2")
cyberpi.table.add(2,2,"2,2")
cyberpi.table.add(3,2,"3,2")
cyberpi.table.add(4,2,"4,2")
cyberpi.display.set_brush(0,0,255)
cyberpi.table.add(1,3,"1,3")
cyberpi.table.add(2,3,"2,3")
cyberpi.table.add(3,3,"3,3")
cyberpi.table.add(4,3,"4,4")
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Drawpixel
import cyberpi
import time
pixel_list = ["music","picture","video","clock","play","pause","next","prev","sound","temperature","light","motion","home","gear","list","right","wrong","shut_down","refresh","trash_can","download","sunny","cloudy","rain","snow","train","rocket","car","truck","droplet","distance","fire","magnetic","gas","vision","color","overcast","foggy","sandstorm"]
my_sprite = cyberpi.sprite()
for p in pixel_list:
my_sprite.draw_pixel(p)
my_sprite.set_size(200)
time.sleep(1)
cyberpi.screen.render()
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
QR
import cyberpi
my_sprite = cyberpi.sprite()
my_sprite.draw_QR("https://catedu.es/")
my_sprite.set_size(400)
cyberpi.screen.render()
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
¡¡ y funciona !!!
Sensores de movimiento
Sensor agitación
import cyberpi
cyberpi.display.show_label("Shake Value\nA:Start",16,0,0,0)
while not cyberpi.controller.is_press('a'):
pass
while True:
shake_value = cyberpi.get_shakeval()
cyberpi.display.show_label("Shake Value",16,20,0,0)
cyberpi.display.show_label("{}%".format(shake_value),24,40,50,1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Inclinación y rotación
El siguiente programa enseña los dos ángulos de inclinación en eje X e Y y rotación en eje Z
import cyberpi
cyberpi.display.show_label("YAW PITCH ROLL\nA:Start",16,0,0,0)
while not cyberpi.controller.is_press('a'):
pass
while True:
pitch = cyberpi.get_pitch()
roll = cyberpi.get_roll()
yaw = cyberpi.get_yaw()
cyberpi.display.show_label("Yaw\n\nPitch\n\nRoll\n\n",16,0,0,0)
cyberpi.display.show_label("{}\n\n{}\n\n{}".format(pitch,roll,yaw),16,50,0,1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
El resultado es muy parecido con la función de gyro
import cyberpi
cyberpi.reset_rotation(axis='all')
cyberpi.display.show_label("Gyroscope\nA:Start",16,0,0,0)
while not cyberpi.controller.is_press('a'):
pass
while True:
x_gyro = cyberpi.get_gyro('x')
y_gyro = cyberpi.get_gyro('y')
z_gyro = cyberpi.get_gyro('z')
cyberpi.display.show_label("X\n\nY\n\nZ\n\n",16,0,0,0)
cyberpi.display.show_label("{}\n\n{}\n\n{}".format(x_gyro,y_gyro,z_gyro),16,50,0,1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Y rotation
import cyberpi
cyberpi.reset_rotation(axis='all')
cyberpi.display.show_label("Rotation\nA:Start",16,0,0,0)
while not cyberpi.controller.is_press('a'):
pass
while True:
x_rotate = cyberpi.get_rotation('x')
y_rotate = cyberpi.get_rotation('y')
z_rotate = cyberpi.get_rotation('z')
cyberpi.display.show_label("X\n\nY\n\nZ\n\n",16,0,0,0)
cyberpi.display.show_label("{}\n\n{}\n\n{}".format(x_rotate,y_rotate,z_rotate),16,50,0,1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
El tiempo (servicios en la nube)
Podemos ver el tiempo que hace en una localidad utilizando el siguiente código:
- PON-EL-NOMBRE-DE-TU-WIFI y CLAVE-DE-TU-WIFI son el nombre y la contraseña de la red wifi pues necesita conectarse a un servidor
- TU-ID-CLOUD lo puedes encontrar en mBlock aquí HAY QUE ESTAR LOGUEADO
- location_id es un número de identificador meteorológico, por ejemplo si ponemos alcorisa en https://meteoblue.com/ nos sale en la URL el código 3130563
import cyberpi
ssid = "PON-EL-NOMBRE-DE-TU-WIFI"
pwd = "CLAVE-DE-TU-WIFI"
auth_key = "TU-ID-CLOUD"
location_id = "3127059" # CALAMOCHA SEGÚN https://www.meteoblue.com/es/tiempo/semana/calamocha_espa%c3%b1a_3127059
cyberpi.led.on(255,0,0,id='all')
cyberpi.display.show_label("WiFi:",12,0,0,0)
if not cyberpi.wifi.is_connect():
cyberpi.display.show_label("WiFi: No Connect",12,0,0,0)
cyberpi.wifi.connect(ssid,pwd)
while not cyberpi.wifi.is_connect():
cyberpi.display.show_label("Connecting..",12,0,20,1)
cyberpi.display.clear()
cyberpi.display.show_label("Status: Connected!",12,0,0,0)
cyberpi.led.on(0,255,0,id='all')
cyberpi.cloud.setkey(auth_key)
max_temp = cyberpi.cloud.weather("max_temp",location_id)
min_temp = cyberpi.cloud.weather("min_temp",location_id)
weather = cyberpi.cloud.weather("weather",location_id)
humidity = cyberpi.cloud.weather("humidity",location_id)
cyberpi.display.show_label("Max Temperature: {} C".format(max_temp),12,0,20,1)
cyberpi.display.show_label("Min Temperature: {} C".format(min_temp),12,0,32,2)
cyberpi.display.show_label("Weather: {}".format(weather),12,0,42,3)
cyberpi.display.show_label("Humidity: {} %".format(humidity),12,0,52,4)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
El resultado es (hemos puesto Calamocha)
No entendemos por qué no nos enseña la temperatura mínima, y además hemos elegido una localidad con estación meteorológica VOR que tiene el récord de temperatura más fría en zona habitada
Bueno ... mentirijilla, el VOR esta en Fuentes Claras, no en Calamocha
Hay más ejemplos en https://github.com/PerfecXX/Python-mBot2/tree/main/example/cyberpi/08-Cloud como la calidad del aire, pero no todas las localidades tienen datos.
Envío de mensajes con dos mBots2
En dos mBot2 le ponemos el siguiente código:
import cyberpi
ssid = "catedu"
pwd = "alcorisa"
topic = "/test_room"
cyberpi.led.on(255,0,0,id='all')
cyberpi.display.show_label("WiFi:",12,0,0,0)
if not cyberpi.wifi.is_connect():
cyberpi.display.show_label("WiFi: No Connect",12,0,0,0)
cyberpi.wifi.connect(ssid,pwd)
while not cyberpi.wifi.is_connect():
cyberpi.display.show_label("Connecting..",12,0,20,1)
cyberpi.display.clear()
cyberpi.display.show_label("WiFi: Connected!\nEnvío de mensaje botón A o B:\n Preparado también para recepción ..",12,0,0,0)
cyberpi.led.on(0,255,0,id='all')
while True:
## envio de mensaje
message = cyberpi.wifi_broadcast.get(topic)
cyberpi.display.show_label("{}".format(message),12,0,60,1)
# envío de mensaje
if cyberpi.controller.is_press('a'):
cyberpi.wifi_broadcast.set(topic,"\nHola soy CATEDU")
elif cyberpi.controller.is_press('b'):
cyberpi.wifi_broadcast.set(topic,"\nBienvenido a los cursos de Aularagón")
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Realmente en https://github.com/PerfecXX/Python-mBot2/tree/main/example/cyberpi/07-LAN/01-Send_Receive se utilizan DOS códigos, uno para el emisor y otro para el receptor, lo que se ha hecho en el código de arriba es unirlos.
Inteligencia Artificial IA
Reconocimiento de texto
El siguiente código se conecta a un servidor para leer un texto en un idioma concreto
import cyberpi
ssid = "MIWIFI"
pwd = "CONTRASENAWIFI"
cyberpi.driver.cloud_translate.TTS_URL = "{TTSURL}"
cyberpi.driver.cloud_translate.set_token("{ACCESSTOKEN}")
cyberpi.driver.cloud_translate.TRANS_URL = "{TRANSURL}"
cyberpi.driver.cloud_translate.set_token("{ACCESSTOKEN}")
cyberpi.speech.set_recognition_address(url = "{NAVIGATEURL}")
cyberpi.speech.set_access_token(token = "{ACCESSTOKEN}")
cyberpi.led.on(255,0,0,id='all')
cyberpi.display.show_label("WiFi:",12,0,0,0)
if not cyberpi.wifi.is_connect():
cyberpi.display.show_label("WiFi: No Connect",12,0,0,0)
cyberpi.wifi.connect(ssid,pwd)
while not cyberpi.wifi.is_connect():
cyberpi.display.show_label("Connecting..",12,0,20,1)
cyberpi.display.clear()
cyberpi.display.show_label("Status: Connected!",12,0,0,0)
cyberpi.led.on(0,255,0,id='all')
cyberpi.display.show_label("Wait...",12,0,20,1)
cyberpi.led.on(0,0,255,id='all')
cyberpi.cloud.tts("es","Bienvenido CATEDU")
cyberpi.cloud.tts("en","I speak English better: Wellcome to CATEDU")
cyberpi.led.on(0,0,0,id='all')
cyberpi.display.show_label("Finished!",12,0,20,1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Reconocimiento de voz
En este caso hemos seleccionado el idioma 4 (el primero chinese es el 0) luego reconoce voz en idioma inglés
import cyberpi
from time import sleep
ssid = "MIWIFI"
pwd = "CONTRASENAWIFI"
langauge_list = ["chinese","chinese_taiwan","cantonese","japanese","english","french","german","spanish","portuguese","russian","korean","italian","Dutch"]
cyberpi.driver.cloud_translate.TTS_URL = "{TTSURL}"
cyberpi.driver.cloud_translate.set_token("{ACCESSTOKEN}")
cyberpi.speech.set_recognition_address(url = "{NAVIGATEURL}")
cyberpi.speech.set_access_token(token = "{ACCESSTOKEN}")
cyberpi.driver.cloud_translate.TRANS_URL = "{TRANSURL}"
cyberpi.driver.cloud_translate.set_token("{ACCESSTOKEN}")
cyberpi.led.on(255,0,0,id='all')
cyberpi.display.show_label("WiFi:",12,0,0,0)
if not cyberpi.wifi.is_connect():
cyberpi.display.show_label("WiFi: No Connect",12,0,0,0)
cyberpi.wifi.connect(ssid,pwd)
while not cyberpi.wifi.is_connect():
cyberpi.display.show_label("Connecting..",12,0,20,1)
cyberpi.display.clear()
cyberpi.display.show_label("WiFi: Connected!",12,0,0,0)
cyberpi.led.on(0,255,0,id='all')
while True:
cyberpi.display.show_label("A:Start Recognize",12,0,20,1)
cyberpi.led.on(0,0,0,id='all')
if cyberpi.controller.is_press('a'):
sleep(0.5)
cyberpi.led.on(0,0,255,id='all')
cyberpi.display.show_label("Recognizing...",12,0,40,2)
cyberpi.cloud.listen(langauge_list[4], 5)
cyberpi.display.show_label("Processing...",12,0,40,2)
cyberpi.led.on(0,0,0,id='all')
recog_result = cyberpi.cloud.listen_result()
cyberpi.display.show_label("Recognition Result\n\n{}".format(recog_result),12,0,40,2)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
El resultado es
Traductor
En este caso le damos un texto que le decimos en qué idioma está (el 7=español) y le pedimos que nos lo traduzca al 4=inglés
import cyberpi
ssid = "MIWIFI"
pwd = "MICLAVEWIFI"
langauge_list = ["chinese","chinese_taiwan","cantonese","japanese","english","french","german","spanish","portuguese","russian","korean","italian","Dutch"]
cyberpi.driver.cloud_translate.TTS_URL = "{TTSURL}"
cyberpi.driver.cloud_translate.set_token("{ACCESSTOKEN}")
cyberpi.speech.set_recognition_address(url = "{NAVIGATEURL}")
cyberpi.speech.set_access_token(token = "{ACCESSTOKEN}")
cyberpi.driver.cloud_translate.TRANS_URL = "{TRANSURL}"
cyberpi.driver.cloud_translate.set_token("{ACCESSTOKEN}")
cyberpi.led.on(255,0,0,id='all')
cyberpi.display.show_label("WiFi:",12,0,0,0)
if not cyberpi.wifi.is_connect():
cyberpi.display.show_label("WiFi: No Connect",12,0,0,0)
cyberpi.wifi.connect(ssid,pwd)
while not cyberpi.wifi.is_connect():
cyberpi.display.show_label("Connecting..",12,0,20,1)
cyberpi.display.clear()
cyberpi.display.show_label("WiFi: Connected!",12,0,0,0)
cyberpi.led.on(0,255,0,id='all')
text = "Bienvenido a los cursos a distancia de CATEDU"
cyberpi.display.show_label("translate: \n{} in {}".format(text,langauge_list[7]),12,0,10,1)
translated_text = cyberpi.cloud.translate(langauge_list[4], text)
cyberpi.display.show_label("Result: \n{}".format(translated_text),12,0,70,2)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Movimientos
Los movimientos de mBot2 se pueden definir por tiempo, distancia, ángulo y potencia, gracias a sus precisos motores de paso
Pequeño baile con tiempo definido
import cyberpi, mbot2
cyberpi.display.show_label("mBot2 Movement",16,0,0,0)
cyberpi.display.show_label("A:Start Moving!",16,0,20,1)
while True:
while not cyberpi.controller.is_press('a'):
pass
cyberpi.display.show_label("Forward 60 RMP 1 Sec",12,0,40,2)
mbot2.forward(60,1)
cyberpi.display.show_label("Backward 60 RMP 1 Sec",12,0,40,2)
mbot2.backward(60,1)
cyberpi.display.show_label("Turn Left 60 RMP 1 Sec",12,0,40,2)
mbot2.turn_left(60,1)
cyberpi.display.show_label("Turn Right 60 RMP 1 Sec",12,0,40,2)
mbot2.turn_right(60,1)
cyberpi.display.show_label("Finished!",12,0,40,2)
Pequeño baile con distancia definida
En este código le decimos que vaya exactamente 100 cm
import cyberpi, mbot2
cyberpi.display.show_label("mBot2 Straight",16,0,0,0)
cyberpi.display.show_label("A:Start Moving!",16,0,20,1)
while True:
while not cyberpi.controller.is_press('a'):
pass
cyberpi.display.show_label("Forward 100 cm",12,0,40,2)
mbot2.straight(100)
cyberpi.display.show_label("Backward 100 cm",12,0,40,2)
mbot2.straight(-100)
cyberpi.display.show_label("Finished!",12,0,40,2)
Pequeño baile con ángulos definidos
En este que gire +90º y luego -90º
import cyberpi, mbot2
cyberpi.display.show_label("mBot2 Rotation",16,0,0,0)
cyberpi.display.show_label("A:Rotate Left\nB:Rotate Right",16,0,20,1)
while True:
if cyberpi.controller.is_press('a'):
cyberpi.display.show_label("Turn Left 90",12,0,60,2)
mbot2.turn(-90)
elif cyberpi.controller.is_press('b'):
cyberpi.display.show_label("Turn Right 90",12,0,60,2)
mbot2.turn(90)
Pequeño baile con potencia definida
import cyberpi, mbot2
from time import sleep
cyberpi.display.show_label("mBot2 EM Power",16,0,0,0)
while not cyberpi.controller.is_press('a'):
pass
mbot2.drive_power(100, -100)
sleep(1)
mbot2.drive_power(0, 0)
Sensor ultrasonidos
Medición de distancia
import cyberpi,mbuild
cyberpi.display.show_label("Range:", 16, 0, 0, index = 0)
while True:
range = mbuild.ultrasonic2.get(index = 1)
cyberpi.display.show_label(range, 16, 50, 0, index = 1)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Podemos experimentar que es bastante preciso, más que en mBot1
Este código haría lo mismo pero alarmando que hay obstáculo o no
import cyberpi,mbuild
cyberpi.display.show_label("Range:", 16, 20, 0, index = 0)
while True:
range = mbuild.ultrasonic2.get(index = 1)
cyberpi.display.show_label(range, 16, 70, 0, index = 1)
if range < 10:
cyberpi.led.on(255,0,0,id="all")
cyberpi.display.show_label("Obstacle!", 16, 0, 20, index = 2)
else:
cyberpi.led.on(0,255,0,id="all")
cyberpi.display.show_label("No Obstacle", 16, 0, 20, index = 2)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Evita obstáculos
Basándonos en el código que hemos visto de https://github.com/PerfecXX/Python-mBot2/blob/main/example/mbuild/01-Ultrasonic%20Sensor2/02-Obstacle%20Detection.py le añadimos las instrucciones de
- Si hay obstáculo que gire
- Si no hay obstáculo que tire p'alante
Previamente una rutina de no empezar si no se aprieta el botón A
import cyberpi,mbuild, mbot2
cyberpi.display.show_label("PULSA A PARA COMENZAR",16,0,20,1)
while not cyberpi.controller.is_press('a'):
pass
while True:
range = mbuild.ultrasonic2.get(index = 1)
cyberpi.display.show_label(range, 16, 70, 0, index = 1)
if range < 40:
cyberpi.led.on(255,0,0,id="all")
cyberpi.display.show_label("Obstacle!", 16, 0, 20, index = 2)
cyberpi.display.show_label("Girando un segundo",12,0,60,2)
mbot2.turn_left(60,1)
else:
cyberpi.led.on(0,255,0,id="all")
cyberpi.display.show_label("No Obstacle", 16, 0, 20, index = 2)
mbot2.drive_power(70, -70)
a lo mejor habría que quitarle un poco la potencia en mbot2.drive_power(70, -70) pero mola :
Sensor de líneas
Probando la detección de líneas.
import cyberpi,mbuild
cyberpi.display.show_label("RGB PROBE STATE\nL2:\nL1:\nR1:\nR2:\n", 16, 0, 0, index = 0)
while True:
l2_line_state = mbuild.quad_rgb_sensor.is_line("L2",1)
l1_line_state = mbuild.quad_rgb_sensor.is_line("L1",1)
r1_line_state = mbuild.quad_rgb_sensor.is_line("R1",1)
r2_line_state = mbuild.quad_rgb_sensor.is_line("R2",1)
cyberpi.display.show_label(l2_line_state, 16, 30, 18, index = 1)
cyberpi.display.show_label(l1_line_state, 16, 30, 36, index = 2)
cyberpi.display.show_label(r1_line_state, 16, 30, 54, index = 3)
cyberpi.display.show_label(r2_line_state, 16, 30, 72, index = 4)
Extraído de https://github.com/PerfecXX/Python-mBot2/blob/main/README.md licencia MIT
Como puedes ver va detectando las líneas en los 4 sensores que tiene :
Más probatinas...
En https://github.com/PerfecXX/Python-mBot2/tree/main/example/mbuild/02-Quad%20RGB%20Sensor puedes descargarte más scripts que visualizan como el sensor puede detectar el color y el brillo. Nosotros aquí sólo te hemos enseñado el último el de detectar la línea.
Sigue líneas
En este caso sólo vamos a utilizar de los 4 sensores quad que tiene los 2 de en medio con la instrucción
mbuild.quad_rgb_sensor.get_line_sta("middle", 1)
El valor que devuelve esta instrucción puede ser :
- 0 o en binario 00 que quiere decir que los dos sensores detectan blanco, por lo tanto habría que volver hacia atrás para recuperar la línea
- 1 o en binario 01 que significa que el sensor de la derecha detecta línea pero el de la izquierda no, por lo tanto hay que girar a la derecha
- 2 o en binario 10 que significa que el sensor de la izquierda detecta línea pero el de la derecha no, por lo tanto hay que girar a la izquierda
- 3 o en binario 11 que quiere decir que los dos sensores detectan línea, por lo tanto todo bien, recto
El código es
import event, time, cyberpi, mbuild, mbot2
cyberpi.display.show_label("PULSA A PARA COMENZAR",16,0,20,1)
while not cyberpi.controller.is_press('a'):
pass
while True:
if mbuild.quad_rgb_sensor.get_line_sta("middle", 1) == 0b00:
mbot2.backward(50)
if mbuild.quad_rgb_sensor.get_line_sta("middle", 1) == 0b11:
mbot2.forward(50)
if mbuild.quad_rgb_sensor.get_line_sta("middle", 1) == 0b01:
mbot2.turn_right(50)
if mbuild.quad_rgb_sensor.get_line_sta("middle", 1) == 0b10:
mbot2.turn_left(50)
Fuente Javier Quintana
El resultado es
Créditos
A lo largo del tutorial se referencian las siguientes obras con las siguientes licencias y autores :
Manual de Cyberpi https://www.robotix.es/ebook/cyberpi-guia.pdf contenidos e imágenes publicados con permiso de la empresa Robotix. Autor José Manuel Ruiz Gutiérrez.
Manual mBot2 https://www.robotix.es/documentos/mbot2-actividades.pdf contenidos e imágenes publicados con permiso de la empresa Robotix.
Ejemplos mBot2 Pere Manel Verdugo Zamora http://peremanelv.com/mblok.html contenidos e imágenes publicados con permiso del autor
Scripts Python Repositorio https://github.com/PerfecXX/Python-mBot2/tree/main
-
- Autor PerfecXX Teeraphat Kullanankanjana Engineer and Instructor, iMake Innovation, Thailand.
- Licencia MIT https://github.com/PerfecXX/Python-mBot2/blob/main/LICENSE
En el caso de que no se referencia ninguna de las anteriores, el autor y licencia es :
Autor Javier Quintana Peiró 2024 CATEDU
LICENCIA : BY-NC-SA