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 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 , https://t.me/roboticaeducativaaragon Lenguajes de programación mBot, mBot2 se puede programar  Por bloques principalmente con mBlok Por código principalmente Python  Guía de los lenguajes de programación para robots Tenemos un grupo Telegram Robótica Educativa en Aragón , https://t.me/roboticaeducativaaragon 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  Como vemos, mBlock permite dos formas de programar : 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                 - Microblocks  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 l as 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. Nota: Cambia 30 por 300 para que te de tiempo a jugar con la luz https://planet.mblock.cc/project/7548309 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" Y el resultado es : ¿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 Desventajas : El acceso a Internet de dispositivos caseros puede generar problemas a nivel mundial: - el caso Mirai - aspiradores que nos espían IoT en los cursos de Aularagón 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 Rover Marciano con Arduino Arduinoblocks en el aula ESP32 en el aula Blynk IoT es la que se va a trabajar con En ESP32 en el aula En Smart Home ESP32 ThinkSpeak y SmartioSpace Smart Agriculture Kit para Micro:bit 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. ESP32 EN EL AULA En Smart Home ESP32 TELEGRAM ESP32 EN EL AULA En Smart Home ESP32 Arduino cloud IoT Arduino Alvik Cyberpi y mBot2 Iot con Cyberpi 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  https://planet.mblock.cc/project/7548708 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 Ejemplos mBot2 Pere Manel Verdugo Zamora  http://peremanelv.com/mblok.html  contenidos e imágenes publicados con permiso del autor 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 Ejemplos mBot2 Pere Manel Verdugo Zamora  http://peremanelv.com/mblok.html  contenidos e imágenes publicados con permiso del autor Para este proyecto hemos de cargar dos CyberPy. CODIGO EN EL CYBERPI RECEPTOR MONTADO CON MBOT2 https://planet.mblock.cc/project/projectshare/7552114 Hay que poner los dos Cyberpis en la misma Wifi (SSID y contraseña) Ejemplos mBot2 Pere Manel Verdugo Zamora  http://peremanelv.com/mblok.html  contenidos e imágenes publicados con permiso del autor Ejemplos mBot2 Pere Manel Verdugo Zamora  http://peremanelv.com/mblok.html  contenidos e imágenes publicados con permiso del autor CODIGO EN EL CYBERPI QUE HARÁ DE CONTROL REMOTO https://planet.mblock.cc/project/7552213 Ejemplos mBot2 Pere Manel Verdugo Zamora  http://peremanelv.com/mblok.html  contenidos e imágenes publicados con permiso del autor 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 de Manual 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. En el fondo la IA son tomas de decisiones: Un sumatorio de muchos función signoide asociadas a variable de entrada que cuanto más datos, más empinada y por lo tanto más certera es su decisión (salida). Por ejemplo, le pedimos a un robot con IA  que tomando de muestra la temperatura corporal, nos diga si estamos enfermos o no. Salida eje Y  0=no estamos enfermos 1= estamos enfermos. Entrada: eje X La temperatura Los puntos son las muestras que le pasamos para que aprenda Los puntos son dada una temperatura, % de gente que esta enferma a esa temperatura Estadísticamente cuanto más temperatura hay más probabilidad de que estés enfermo Cuanto más datos, más empinada es la función y con más acierto puede predecir. Nosotros sabemos ya la respuesta que el valor crítico es 37ºC pero... ¿y si tiene 36.9ºC?¿Cuánta probabilidad tiene? las máquinas nos ayudan a cuantificar. 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/   ML: MACHINE LEARNING FOR KIDS  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 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. Ojo al cerrar el navegador se borra todo el modelo con la opción In your web browser 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 binario Deben 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 La función show_label la veremos después, tiene el formato cyberpi . display . show_label( texto , tamaño , color, x, y ) 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