Smart Home para Micro:bit
- ¿Qué es Smart Home para micro:bit?
- Introducción
- Objetivos y Contenidos
- Pensamiento computacional
- Hardware ¿Qué es Microbit?
- Hardware: Descripción de la placa micro:bit
- Sensores
- Actuadores
- Software para la micro:bit
- Software para la Smart home
- Jugando sólo con la micro:bit
- Software : El entorno de trabajo de MakeCode
- Nuestro primer programa
- Retos básicos
- Retos avanzados
- Música y sonido con micro:bit
- Inteligencia artificial Create AI
- Montando la maqueta Smart Home
- Alimentación de la maqueta
- Jugando con la maqueta y Makecode
- LED AMARILLO
- NEOPIXEL
- PIR SENSOR MOVIMIENTO
- LCD DISPLAY
- PUERTA
- VENTANA
- LLUVIA CIERRO LA VENTANA
- DHT11
- MOTOR
- GAS
- Exensiones
- Jugando con Bluetooth
- Un poco de teoría Bluetooth
- La extensión en Makecode
- Programa en Makecode
- APP Serial Bluetooth Terminal
- Resultado con la APP Serial Bluetooth Terminal
- APP INVENTOR extensiones bluetooth LE y microbit
- APP INVENTOR tu programa
- Jugando fuerte con Python
- Ventajas y desventajas Python
- Editores
- Introducción al Python
- Micropython de microbit
- Solo placa: Hola Mundo
- Solo placa: Imágenes
- Solo placa: Imágenes estáticas y animadas
- Solo placa: Eventos para los botones
- Solo placa: Botones
- Solo sensores de la placa
- Solo placa: Música
- Maqueta: Intermitente led amarillo
- Maqueta: LED amarillo intermitente gradual
- Maqueta: Neopixel RGB
- Maqueta : Sensor PIR
- Servos
- Maqueta puerta
- Maqueta: Ventana
- Maqueta: Motor
- Maqueta: LCD
- Maqueta Sensor lluvia
- Maqueta: Sensor Gas
- Maqueta DHT11
- Para saber más ....
- Créditos
¿Qué es Smart Home para micro:bit?
Se trata de una maqueta con montón de sensores y actuadores muy bien diseñada para sacarle al máximo jugo a la domótica, programación y mundo maker. Además de la posibilidad de trabajar con la placa Micro:bit
Fuente Innovadidactic con permiso del comercial
- Placa micro:bit
- Placa de expansión para micro:bit
- Pantalla LCD 1602 con interfaz I²C
- Sensor de temperatura y humedad DHT11
- Sensor de gas MQ-2
- Sensor PIR de movimiento
- Módulo RGB WS2812
- 2 Servos 9 g
- Motor DC 130
- Sensor de lluvia / humedad
- Módulo de alimentación con batería recargable
- Panel solar
- LED simple
- Interruptor
- Estructura tipo casa (madera + acrílico)
- Set de cables Dupont, tornillos y separadores
Introducción
Objetivos y Contenidos
Objetivos
- Capacidad de desarrollar retos STEAM con un amplio nivel educativo: primaria hasta secundaria
- Retos STEAM de nivel principiante con manejo de sensores y actuadores con lenguaje de bloques.
- Retos STEAM de nivel medio medio en las comunicaciones Bluetooth.
- Retos STEAM de nivel avanzado con código Python
- La capacidades se adaptan al perfil del docente
- Para primaria lenguaje por bloques
- Para secundaria lenguaje por bloques para comunicaciones Bluetooth y lenguaje código Python
Contenidos
-
¿Qué es Smart Home para micro:bit?
-
Introducción sobre lenguajes, actuadores y sensores
-
Jugando sólo con la placa micro:bit con lenguaje por bloques Makecode
-
La maqueta Smart Home: Montaje
-
Jugando con la maqueta y lenguaje por bloques Makecode
-
Optativo: Jugando con Bluetooth
-
Optativo Jugando fuerte con Python
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 SMARTHOME CON MICROBIT tiene la ventaja de TENER LA MICROBIT con el centro de la programación y ampliarlo dentro de un proyecto maker con un amplio rango de prácticas con sensores y actuadores reales
Guía orientativa
Tenemos un grupo Telegram Robótica Educativa en Aragón, https://t.me/roboticaeducativaaragon
Hardware ¿Qué es Microbit?
La placa micro:bit
Micro:bit es un pequeño ordenador del tamaño de media tarjeta de crédito creado inicialmente por la BBC (British Broadcasting Corporation) en 2015 con el fin de promover el desarrollo de la robótica y el pensamiento computacional entre la población escolar de entre 11 y 15 años del Reino Unido.
Actualmente su uso está extendido entre 39 millones de escolares de más de 60 países (Micro:bit Educational Foundation, 2023) con más de 5 millones de tarjetas distribuidas por todo el mundo (Microes.org, 2023).
Placa BBC micro:bit. Micro:bit Educational Foundation CC BY-SA 4.0
El hardware es 100% libre, y está gestionado por una fundación sin ánimo de lucro fundada en 2016, la micro:bit Educational Foundation.
Micro:bit no es el primer proyecto de alfabetización informática de la BBC. Ya en 1981 produjo el BBC Micro, un ordenador de 8 bit programable mediante varios lenguajes de programación, entre ellos un lenguaje BASIC muy avanzado para la época. De este ordenador llegaron a venderse 1,5 millones de unidades, principalmente en el Reino Unido. Fue el ordenador con el que las escuelas británicas comenzaron la enseñanza de la informática.
Volviendo a micro:bit, el desarrollo del proyecto ha sido llevado a cabo por 29 socios tecnológicos de primera línea. Por ejemplo, la implementación del Bluetooth corrió a cargo de la fundación propietaria de la marca, Bluetooth SIG, asociación privada sin ánimo de lucro.
Micro:bit es económico; tanto las placas como los accesorios producidos por terceras empresas tienen un precio muy contenido.
El sistema destaca por su alta integración de software y hardware: basta un clic de ratón para cargar las librerías necesarias para que funcione cualquier complemento robótico, como sensores, pantallas, tarjetas de Internet de las Cosas, robots, casas domóticas, etc.
Programación de micro:bit
La programación de la placa se realiza desde un ordenador a través de un navegador cualquiera, estando disponibles 12 lenguajes de programación. Dado su carácter abierto, existen múltiples soluciones de programación, aunque las más común es MakeCode.
El sitio MakeCode permite programar con bloques y también en Python y en Java, traduciendo de un lenguaje a otro instantáneamente. No se necesita ningún registro en la plataforma para poder programar. Nuestros programas se guardan en el servidor de MakeCode siempre que no utilicemos nuestro navegador de Internet en modo incógnito o que no tengamos activado el borrado automático de cookies.
Sitio web de Make Code. Captura de pantalla
Los programas también pueden guardarse descargados en el ordenador compilados en código de máquina. Al subir de nuevo el programa en el editor, se realiza una decompilación automática al lenguaje de bloques, Python o Java. Los programas guardados en código de máquina se pueden cargar directamente en micro:bit, que en el escritorio de un ordenador aparece como una simple unidad USB.
MakeCode contiene además múltiples recursos como tutoriales, vídeos, fichas de programación, cursos para el profesorado, ejemplos y propuestas de proyectos y experimentos en varios idiomas.
Otra solución muy usada para programar micro:bit es MicroPython, creada por Python Software Foundation, otra organización sin ánimo de lucro.
MicroCode permite que los más pequeños, a partir de los 6 años de edad, programen micro:bit mediante un sistema de fichas dispuestas en líneas de acción. Están disponibles un tutorial introductorio en 20 idiomas, una guía del usuario y muchos ejemplos. El proyecto es de código abierto.
Ejemplo de programa con MicroCode. Captura de pantalla
Micro:bit también es programable en Scratch con sólo añadir una extensión al editor.
Todos los entornos de desarrollo descritos disponen de un simulador de micro:bit, por lo que ni siquiera resulta necesario disponer de una tarjeta física para aprender a programar.
Características de micro:bit
Características de micro:bit V2:
• Procesador de 64 MHz.
• 512 KB de RAM Flash y 128 KB de RAM.
• Matriz de 5 x 5 LED rojos.
• Dos pulsadores mecánicos y un tercer pulsador de apagado y reset.
• Pulsador táctil en el logotipo.
• Micrófono y altavoz.
• Acelerómetro y compás.
• Sensores de luz y de temperatura.
• Bluetooth de bajo consumo.
• Alimentación a 3 V o por USB.
• 25 pines de entradas y salidas.
• GPIO, PWM, I2C y SPI.
• 200 mA disponibles en las salidas para alimentar accesorios.
La placa micro:bit que se encontraba disponible en el mercado antes de la introducción de la V2 era la denominada V1.5. Se distingue de la V2 en que carece de micrófono, de altavoz y de pulsador táctil en el logo. Internamente tiene un procesador menos potente y menos memoria RAM. Tampoco tiene piloto de encendido ni puede apagarse desde el pulsador de reset.
Microbit 3d by GmedranoTIC on Sketchfab
Hardware: Descripción de la placa micro:bit
Presentación de micro:bit
Micro:bit es una pequeña placa de circuito impreso de 52 mm x 42 mm, dimensiones que corresponden aproximadamente al tamaño de media tarjeta de crédito. El circuito dispone sus componentes electrónicos al aire, sin ninguna carcasa, y se encuentran soldados por las dos caras de la placa.
La placa micro:bit es segura para su uso con el alumnado de 8 a 14 años (Micro:bit Educational Foundation, 2023b). Ha sido ampliamente probada y cumple con todos los requisitos de seguridad y compatibilidad medioambiental exigibles. En el siguiente enlace se muestran todas las normas y estándares que cumple la tarjeta: https://microbit.org/compliance/
El siguiente vídeo, pensado para personas sin conocimientos de robótica, proporciona una primera idea acerca de las posibilidades y del manejo de la placa micro:bit.
Kits
Micro:bit se encuentra disponible comercialmente como placa simple (micro:bit single) o como parte de un kit. El coste medio en el año 2023 de una placa es de unos 22 €. Por un precio un poco más elevado se puede adquirir un kit más completo, cuyo contenido está pensado como un equipo de iniciación.
Contenido de un kit de inicio. Elaboración propia
El kit presentado en la imagen contiene:
- Una placa micro:bit versión 2. El color de la decoración de la placa puede ser magenta, azul, verde o amarillo.
- Una pequeña guía icónica de inicio rápido.
- Una hoja con recomendaciones de seguridad en varios idiomas.
- Un cable corto micro USB para conectar la placa al ordenador.
- Una cajita portapilas con conector JST.
- Dos pilas alcalinas IEC LR03 (AAA).
Componentes electrónicos integrados en la placa
El anverso de la placa en su versión 2 tiene el aspecto mostrado de la figura.
Anverso de la placa BBC micro:bit. Elaboración propia
La parte marcada con el número 1 es una fila de contactos o pines que permiten conectar la placa a múltiples accesorios, como altavoces, robots, sensores o actuadores. Dispone de 25 pines, 5 de ellos de anillo. Estos últimos están pensados para conectar cables por medio de pinzas o bananas.
El número 2 corresponde al pulsador A. En el lado derecho de la placa existe otro pulsador B. Ambos pulsadores son programables y permiten al usuario comunicarse con micro:bit.
El número 3 apunta al pulsador táctil. Se trata de una novedad de la versión 2 de micro:bit. El pulsador puede distinguir entre pulsaciones rápidas y pulsaciones prolongadas.
El sensor marcado con el número 4 es un micŕofono. Es otra novedad de la versión 2 de la placa. Aunque puede grabar sonido, las grabaciones resultan de una calidad muy pobre. Es por ello que el micrófono se usa sobre todo para medir el ruido ambiental. Un diodo LED de color rojo indica que el micrófono está en funcionamiento.
La matriz de 25 LED rojos está marcada con el número 5. Se usa para representar mensajes de texto e iconos. Su intensidad es ajustable. Sirve también como sensor del nivel de luz ambiental.
El reverso de la placa es un poco más complejo. Aquí se encuentran soldados los dispositivos que permiten el funcionamiento de micro:bit. Se trata del procesador, de los sensores y de los circuitos integrados que proporcionan funcionalidades como la comunicación USB o Bluetooth.
Reverso de la placa BBC micro:bit. Elaboración propia
El circuito número 6 es un acelerómetro y un compás. Este dispositivo permite medir aceleraciones y giros, así como campos magnéticos.
El componente 7 es un pequeño zumbador que puede reproducir tonos y sonidos. Su potencia es muy baja, pero micro:bit puede también conectarse a un altavoz externo.
El procesador es el circuito marcado con el número 8. Además contiene un sensor de temperatura.
La antena Bluetooth se indica con el número 9. Gracias al Bluetooth incorporado, micro:bit puede enviar y recibir datos por radio a cortas distancias.
Cuando el LED de color rojo 10 está encendido indica que la placa está conectada a una fuente de alimentación. Micro:bit puede ser alimentado por un ordenador o por una batería externa través de un cable USB o bien por un par de pilas.
La placa puede comunicarse con un ordenador mediante el conector micro USB 11. Mediante esta conexión micro:bit puede ser programado y también puede enviar al ordenador los datos que recoja con sus sensores.
El LED ámbar 12 parpadea cuando la placa está conectada a un ordenador y se encuentra emitiendo o recibiendo datos.
El pulsador 13 se usa para reiniciar el programa contenido en la placa. Una pulsación prolongada apaga micro:bit, pero sólo si la placa es de la versión 2.
El conector JST 14 permite conectar el portapilas para alimentar la placa con dos pilas alcalinas de 1,5 V. También se pueden usar pilas recargables; las clásicas pilas recargables de NiMH o níquel-hidruro metálico que se venden en algunos supermercados hacen que tanto micro:bit como sus accesorios funcionen sin problemas.
En la versión 2 existe un botón para apagar
Sensores
Esta sección es una visión rápida de las posibles entradas de los robots.
NO LEAS TODOS SINO LOS QUE TIENE TU ROBOT
Un poco de teoría...
Cualquier sistema de control podríamos decir que funciona de una manera similar a un ser humano, salvando las distancias. Nosotros recibimos la información del mundo exterior gracias a nuestros sentidos (oído, olfato, gusto, vista y tacto), nuestro cerebro procesa esa información y a través de nuestros músculos o de nuestra voz realizamos diferentes acciones. Pues lo mismo sucede con los sistemas de control, reciben información del exterior gracias a los diferentes SENSORES, procesan esa información en sus PLACAS CONTROLADORAS (sus cerebros) tales como Arduino y dan una respuesta utilizando sus diferentes ACTUADORES.
Un sensor es un objeto capaz de detectar magnitudes físicas o químicas y transformarlas en variables eléctricas. Los sensores o periféricos de entrada nos permiten obtener información del mundo real para utilizarla desde el programa de Arduino.
En la actualidad la cantidad de sensores disponibles es tan extensa como las variables que queramos medir, desde sensores de temperatura, humedad, luminosidad,... hasta acelerómetros, giroscopios, GPS,... pasando por detectores de gases, de pulsos cardiacos, sensores de efecto HALL,...
Tipos de sensores
- DIGITAL: un sensor digital sólo tiene dos estados: activado/desactivado, ON/OFF, 1/0, Alto/Bajo, ... En este caso conectaremos el sensor a una de las entradas digitales de Arduino para leer el estado.
Ejemplo: un pulsador es un tipo de sensor sencillo que sólo nos da dos estados, “pulsado o no pulsado”. Conectado a la placa Arduino debe generar 0v en reposo y 5v al pulsarlo. De esta forma desde el programa de Arduino podremos leer el estado del botón.
- ANALÓGICO: el sensor nos puede dar un rango de valores, normalmente se traduce en un valor de tensión o de corriente variable en función de la señal captada al sensor. En este caso conectaremos el sensor a una de las entradas analógicas de Arduino (A0,..., A5). El rango de entrada será una tensión entre 0v (GND) y 5v.
Ejemplo: Una fotorresistencia es un componente electrónico cuya resistencia disminuye con el aumento de intensidad de luz incidente. Su valor varía entre 0 y 5 v. la cantidad de valores que pueden leer las entradas analógicas de Ardunio son de 10 bits es decir 1024 valores. De tal modo que 0 = 0 v. y 1023 = 5V.
- DATOS: el sensor ofrece su información a través de una interfaz de comunicación. La forma de comunicación puede ser por sistemas estándar como I2C o SPI o algunos sensores usan su propio protocolo para codificar la información y debemos realizar desde el software la decodificación correcta para interpretar los datos del sensor (normalmente los desarrolladores de este tipo de sensores ofrecen una librería software para Arduino que hace todo el trabajo).
Ejemplo: el sensor DHT11. Por un solo pin envía los datos de temperatura y humedad.
Sensores modulares.
En la actualidad existen infinidad de sensores que los fabricantes presentan en forma modular. Esto hace que su conexión y utilización sea mucho más sencilla que la tradicional, olvidándonos de resistencias, polaridades, cableados,… para su correcto funcionamiento.
Sensor pulsador
Es un sensor digital, que presenta dos estados; cuando se presiona el botón, emite una señal de bajo (0V), cuando suelta el botón, emite una señal de bajo alto (5V). Datasheet
Un ejemplo de uso
Otra manera más "barata" de sustituir este módulo pulsador es poner un pulsador normal y una resistencia (±10k), al pulsar se produce una entrada en el Arduino, hay dos configuraciones, que al pulsar se emita un 0 lógico (configuración Pull up) o que al pulsar emita un 1 lógico (configuración Pull down) ¿Por qué hay que poner una resistencia?
Lo "normal" es que al pulsar se emita un '1' configuración Pull down, pero hay pulsadores que funcionan Pull up y los llaman lógica invertida, por eso en la programación por bloques podemos encontrar esto:
Sensor Táctil Capacitivo.
Este pequeño sensor puede "sentir" a las personas y el tacto y la retroalimentación de metales a un nivel de voltaje alto / bajo. Incluso aislado por alguna tela y papel, todavía puede sentir el tacto. Su sensibilidad disminuye a medida que la
capa de aislamiento se hace más gruesa. En nuestra opinión lo preferimos frente al Sensor pulsador pues es muy económico, duradero y fiable.
Un ejemplo de uso en
Potenciómetro y joystick
Un potenciómetro es una resistencia variable, es decir, cambia de valor mecánicamente, lo tenemos en multitud de dispositivos. El joystick es internamente dos potenciómetros con un pulsador integrado en un solo mando.
Este sensor es analógico, su salida puede ser cualquier valor entre Vcc y GND (si está en divisor de tensión como en la placa Edubásica no llega a esos valores extremos), por lo tanto hay que conectarlo a una entrada analógica de Arduino y como cualquier entrada analógica, proporcionará valores entre 0 y 1023.
Ejemplos de uso:
- Arduino con código: Mapeo del potenciómetro
- Arduino con código: Regular la luz con potenciómetro
- Arduinoblocks en el aula
- En Arduino con Echidna, con joystick
- Domótica con Arduino con joystick
Sensor Fotocélula LDR.
El uso de fotocélulas es muy común en nuestras vidas, las encontramos en el encendido automático de farolas, apertura de puertas,… La fotocélula es un semiconductor. Es ampliamente utilizado en campos de interruptores de control automático como cámaras, luces solares de jardín, lámparas de césped, detectores de dinero, relojes de cuarzo, tazas de música, cajas de regalo, mini luces nocturnas, interruptores de control de luz y sonido, etc.
Es un sensor analógico dando valores entre 0 y 5V y como entrada analógica de un Arduino se traduce en un rango de 0 a 1023 valores.
Un ejemplos de uso :
- el interruptor crepuscular del curso Arduino con ArduinoBlocks
- Medir la luz en Rover con Arduino
- Medir la oscuridad en Arduino con mBlock
- Hinchar un balón en Arduino con mBlock
Una manera más económica de montar este sensor es utilizar una resistencia y un LDR:
- El LDR cuando más oscuridad, más resistencia
- En una configuración PULL DOWN, cuanto más luz, la resistencia del LDR baja, por lo tanto más tensión en A6
Los módulos LDR que se venden suelen esta configuración Pull down, es decir, cuanto más luz, más tensión:
La instrucción con Arduinoblocks ya cuenta con esta configuración Pull downUp de que cuando más luz, más valor tiene la entrada analógica.
Hay módulos LDR ya montados, que tienen componentes activos es decir, llevan circuitos electrónicos, transistores que amplifican etc... y dan la salida digital con un potenciómetro para definir el rango de luz que cambia de estado lógico. Puedes ver en la figura que tiene una salida digital D0.
O hay algunos que tienen 4 pines como en la figura que ofrecen las dos cosas: salida analógica A0 y digital D0.
Nosotros aconsejamos el divisor de tensión por tres razones: más barato, no implica gran circuitería y es visible su funcionamiento frente a estos encapsulados.
Sensor de Ultrasonidos.
Es un sensor digital de distancias por ultrasonidos capaz de detectar objetos y calcular la distancia a la que se encuentra en un rango de 2 a 350 cm. Su uso es tan sencillo como enviar el pulso de arranque y medir la anchura del pulso de retorno.
No es un sensor preciso, con una ligera inclinación de la superficie ya da lecturas erróneas pero es muy barato
El más común es el HC-SR04 que tiene 4 pines de conexión: VCC Trig (Disparo del ultrasonido) Echo (Recepción del ultrasonido) y GND aunque en algunos modelos como el de Elecfreaks tiene 3 pines. Integra Trig y Echo en uno sólo.
La distancia se calcula con esta fórmula:
Distancia en cm = {(Tiempo en segundos entre Trig y el Echo) * (V.Sonido 34000 en cm/s)} / 2
Si programas en código, tienes que utilizar la fórmula anterior, previamente tienes que programar el cálculo del tiempo entre una emisión de un pulso en Trg y la respuesta en Echo.
Si utilizas la programación en bloques, no es necesario, seguro que hay un bloque que lo hace todo por ti 😍
Ejemplos de uso:
- Alarma en Domótica con Arduino
- Piano invisible en Arduino con ArduinoBlocks,
- Sensor parking en Arduino con ArduinoBlocks
- Piano invisible en Arduino con mBlock
- Sensor parking en Arduino con mBlock
- Sensor de distancia de ultrasonidos con Picobricks
Sensor DHT11 (Temperatura y Humedad).
Este sensor de temperatura y humedad DHT11 nos permite determinar las zonas de confort para un rango de temperaturas entre 0ºC y 50ºC con un error de ± 2ºC y un rango de humedad entre 20 y 90 % ± 5% . Una salida digital para dos variables cómo lo hace? Tiene dentro un pequeño microprocesador que lanza por el bit de datos 40 bits en serie, los 16 primeros son la humedad (en BCD) y los 16 restantes es la temperatura (en BCD) los 8 restantes son de comprobación Checksum (en binario) como la letra del DNI. Por ejemplo 0100 0111 0000 0011 0001 1001 0000 0000 0001 1000 es 0100 0111 0000 0011 = 47.03% de humedad y 0001 1001 0000 0000 = 19.00ºC y la comprobación es la suma de 4+7+0+3+1+9+0+0=24=11000
Ejemplos de uso:
- Medir H y T con Blink en Rover con Arduino
- Estación meteorológica Arduino con Arduinoblocks
- Arduinoblocks en el aula
- SMART HOME con Micro:bit
No es un sensor con gran sensibilidad, pero para propósitos educativos cumple sus funciones. Por dentro tiene una resistencia NTC que decrementa su resistencia si aumenta la temperatura. Hay otros que van al revés, los PTC. Tanto los NTC como los PTC se llaman thermistores. Para la humedad, mide la capacidad de un condensador que es sensible a la humedad, o sea, un sensor capacitivo.
Tenemos dos opciones comerciales: Encapsulado que lo tienes preparado para conectar la alimentación y leer por el pin de datos, o sin encapsular, que hay que colocar una resistencia de aproximadamente 10k entre Vcc y Data
Ejemplo de uso de un DHT11 sin encapsular:
Fuente Luis LLamas CC-BY-NC-SA https://www.luisllamas.es/arduino-dht11-dht22/
Si queremos mejorar la sensibilidad, podemos utilizar el DHT22 que es igual pero de color blanco y más caro. Si lo que queremos es sólo la temperatura es mejor utilizar el LM35D que tiene un rango de temperaturas desde 0ºC a 100ºC con una sensibilidad de 2mV/ºC
Es un sensor bastante mediocre, si necesitas una precisión el doble, te recomendamos el DHT22 que funciona exáctamente igual pero es de color blanco y más caro ⁓3€. Ver https://www.luisllamas.es/arduino-dht11-dht22/
Sensor IR
Es un sensor para distancias cortas hasta 2cm y no da la distancia, simplemente si hay o no hay obstáculo, pero son muy baratos, unos 0.30€. Aquí tienes un ejemplo de evita obstáculos en un rover marciano con Raspberry Para saber más te recomendamos esta página de Luis Llamas
IR Sensor Module for Arduino Projects | 3D Model by Veer AI on Sketchfab
Sensor llama
Este sensor de llama se puede utilizar para detectar fuego u otras luces cuya longitud de onda se encuentra entre 760 nm ~ 1100nm.
Un ejemplo de su uso:
Sensor de Gas (MQ2).
Detecta gases inflamables : GLP, I-butano, propano, metano, alcohol, hidrógeno, humo... con más sensibilidad en algunos que en otros. Siempre detecta el conjunto. Son usados en electrónica de consumo y mercados industriales.
- Sensibilidad Tiene alta sensibilidad y se puede ajustar girando el potenciómetro.
- Tiempo de respuesta: Internamente posee un calentador para aumentar su temperatura y que estos gases reaccionen con la resistencia interna que tiene, por lo tanto tardan algo en responder la primera vez que se conectan, incluso horas en algunos modelos. Una vez calentados son rápidos en la respuesta.
- Tipo de salida: Analógico pero si tiene 4 pines como el de la figura, incorpora un pin digital.
- Ejemplos de uso:
Sensor de humedad de suelo.
Un higrómetro de suelo FC-28 es un sensor que mide la humedad del suelo. Son ampliamente empleados en sistemas automáticos de riego para detectar cuando es necesario activar el sistema de bombeo. El FC-28 es un sensor sencillo que mide la humedad del suelo por la variación de su conductividad. No tiene la precisión suficiente para realizar una medición absoluta de la humedad del suelo, pero tampoco es necesario para controlar un sistema de riego. Los valores obtenidos van desde 0 sumergido en agua, a 1023 en el aire (o en un suelo muy seco). Un suelo ligeramente húmero daría valores típicos de 600-700. Un suelo seco tendrá valores de 800-1023.
Luis Llamas CC-NC-BY-SA https://www.luisllamas.es/arduino-humedad-suelo-fc-28/
Se puede utilizar este sensor para hacer un dispositivo de riego automático, puede detectar si las plantas “tienen sed” y evitar que se marchiten.
La corriente de trabajo del sensor es menor de 20mA. El voltaje de salida es de 0V (en el aire) a 2,3V (totalmente sumergido en agua).
Sensor de humedad.
Este sensor analógico está diseñado para identificar y detectar la presencia de agua y su cantidad. Puede servir para detectar el nivel de agua, para disparar una alarma en caso de una fuga de agua, también para hacer un limpiapalabrisas automático.... puedes ver un ejemplo de uso en :
Mide el volumen de agua caída a través de una serie de rastros de cables paralelos expuestos.
Sensor de efecto Hall.
Este es un sensor de inducción magnética. Detecta los materiales magnéticos dentro de un rango de detección de hasta 3 cm. El rango de detección y la fuerza del campo magnético son proporcionales. La salida es digital.
Sensor Hall. Edwin Helber Hall De Desconocido - Popular Science Monthly Volume 64, Dominio público
Edwin Helbert Hall descubrió en 1879 que en presencia de un campo magnético, un conductor que conduzca una corriente se le producía un campo eléctrico porque las cargas eléctricas se desviaban de su trayectoria principal, nuestro sensor simplemente mide ese campo eléctrico:
De Luis Llamas CC-BY-NC
El sensor tiene un led de color rojo que indica que hay una lectura de campo magnético. Un ejemplo de uso lo puedes ver aquí: medir rocas magnéticas con el Rover con Arduino
Sensor inclinación
Este sensor funciona al hacerle vibrar, emitiendo una señal digital de todo o nada. El módulo del sensor viene provisto de un potenciómetro para poder regularlo.
Sensor de golpe
Es un sensor digital que al ser golpeado este sensor envía una señal momentánea.
Sensor de pulso cardíaco.
Este módulo utiliza un LED infrarrojo (IR) ultrabrillante y un fototransistor para detectar el pulso en el dedo. Principio de funcionamiento: Se debe colocar el dedo entre el LED infrarrojo ultrabrillante (parte superior) mientras que el fototransistor, que queda en el otro lado, recoge la cantidad de luz transmitida. La resistencia del fototransistor variará levemente a medida que la sangre pase a través de su dedo.
Sensor de Alcohol.
Este sensor de gas analógico MQ-3 es adecuado para detectar alcohol. Se puede usar en un analizador de aliento. También tiene una alta sensibilidad al alcohol y baja sensibilidad a la bencina (éter de petróleo). La sensibilidad se puede ajustar con el potenciómetro.
Sensor de CO2
Hay sensores que utilizan el protocolo I2C, este protocolo permite conexiones serie y pueden compartir el mismo cable pues cada elemento tiene una dirección diferente. Esto lo veremos en el Display LCD. Se identifican por los pinen SDA y SCL
Resistencia Flex
Es una resistencia que cuanto más se dobla más resistencia ofrece, desde 25k hasta 125k
Para utilizar esta resistencia haremos un DIVISOR DE TENSIÓN que consistirá en poner dos resistencias en serie y repartirá la tensión total entre 0V y 5V en las dos resistencias, el punto medio será un punto que tendrá una tensión variable en función de las dos resistencias, como la es variable, esa tensión es variable y ya tenemos la entrada analógica:
Es decir:
- La resistencia entre masa GND del ARDUINO (cable negro) y un punto en la placa protoboard
- ese punto medio conectarlo a una entrada analógica, por ejemplo A0 (cable amarillo)
- Una resistencia de valor parecida a la Flex de decenas de K entre ese punto y +5V (cable rojo en la foto)
Este sensor tiene posibilidades para usarlo en "ropa inteligente".
Sensor de movimiento
Los sensores infrarrojos pasivos (PIR) son dispositivos para la detección de movimiento. Son baratos, pequeños, de baja potencia, y fáciles de usar. Por esta razón son frecuentemente usados en juguetes, aplicaciones domóticas o sistemas de seguridad.
Los sensores PIR se basan en la medición de la radiación infrarroja. Todos los cuerpos (vivos o no) emiten una cierta cantidad de energía infrarroja, mayor cuanto mayor es su temperatura. Los dispositivos PIR disponen de un sensor piro eléctrico capaz de captar esta radiación y convertirla en una señal eléctrica.
En realidad cada sensor está dividido en dos campos y se dispone de un circuito eléctrico que compensa ambas mediciones. Si ambos campos reciben la misma cantidad de infrarrojos la señal eléctrica resultante es nula. Por el contrario, si los dos campos realizan una medición diferente, se genera una señal eléctrica.
De esta forma, si un objeto atraviesa uno de los campos se genera una señal eléctrica diferencial, que es captada por el sensor, y se emite una señal digital.
El otro elemento restante para que todo funcione es la óptica del sensor. Básicamente es una cúpula de plástico formada por lentes de fresnel, que divide el espacio en zonas, y enfoca la radiación infrarroja a cada uno de los campos del PIR.
De esta manera, cada uno de los sensores capta un promedio de la radiación infrarroja del entorno. Cuando un objeto entra en el rango del sensor, alguna de las zonas marcadas por la óptica recibirá una cantidad distinta de radiación, que será captado por uno de los campos del sensor PIR, disparando la alarma.
Luis Llamas CC-BY-NC-SA https://www.luisllamas.es/detector-de-movimiento-con-arduino-y-sensor-pir/
Puedes ver ejemplos de uso en robótica en :
Más sensibles son los sensores de microondas. Son un radar que por efecto Doppler pueden captar cualquier objeto en movimiento dentro de un alcance de 5-7 metros en cualquier dirección e independiente de su temperatura. Es un buen sensor para alarmas, activación de luz por presencia..... Para saber más ver la página de Luis Llamas
Su conexión es muy sencilla, es un detector digital que hay que alimentarlo como el resto de sensores.
Curiosamente, la gran ventaja técnica de los de microondas es un gran inconveniente para usarlo en el aula, con cualquier movimiento se dispara, luego para clase es mejor el sensor PIR
Esta página esta adaptada de este enlace. José Andrés Echevarría @cantabRobots CC-BY-NC-SA.
Actuadores
Esta página es un repaso rápido de las posibles salidas de los robots
NO LEAS TODOS SÓLO LOS QUE TIENE TU ROBOT
¿Qué es un actuador?
Un actuador es el nombre genérico que empleamos para cualquier dispositivo capaz de realizar acciones en el mundo físico y que podremos controlar desde un autómata o procesador como Arduino. En particular, usamos el nombre actuador para los dispositivos que son capaces de generar movimiento. Luis LLamas CC-BY-NC-SA
ACTUADORES
Motores baja potencia
Con el Arduino podemos usar motores de corriente continua de juguete como en la figura, aptos para poner un ventilador. Ejemplo de uso Smart Home para microbit
Motores con algo de potencia
Si quieres usar un motor para mover unas ruedas, ya pide más corriente, no se puede conectar directamente al la placa (Arduino, esp32 etc..). El de la figura es típico en robótica y lleva reductores dentro para bajar la velocidad :
Necesita una alimentación extra, como el LM298N y las pilas., o el B6612FNG o una shield específica.
CC-BY-NC Luis Llamas
Ejemplos de uso lo puedes ver en
- Curso mClon con nanoArduino con el B6612FNG
- Curso Rover con Arduino con la shield L293D ESP-12E para el NODE MCU que internamente tiene el LM298N
- Curso Arduino con código con LM298N y también con un transistor
Los motores pueden (y deben) de estar conectados a salidas PWM de tal manera que se pueda regular la potencia y por lo tanto la velocidad.
Servos
Un servo convencional es un motor donde fijamos el ángulo desde 0º a 180º, pero si queremos una rotación, existen servos rotatorios que simplemente tienen su velocidad de rotación controlada
Ejemplos de uso de servos:
- Curso Arduino con código
- Curso brazo robótico del mClon con nanoArduino
- Apertura de barrera por ultrasonidos en curso Arduino con ArduinoBlocks
- Tractor entrando en el corral Arduino con EchidnaShield
- Apertura de puerta Domótica con Arduino
- Servo con PicoBrick
- Apertura ventana y puerta en Smarth Home para microbit
- Smart Agriculture Kit para micro:bit
Relés
Un relé es un interruptor activado por un electroimán, lo que permite independizar los circuitos. En el dibujo se ve que el circuito rojo de 220V esta separado del verde, de sólo 1.5V. Pero es el circuito verde que al funcionar, hace que el electroimán mueva el interruptor del relé y encienda la bombilla. El objetivo es que he podido encender una bombilla de 220V sin tocar los 220V peligrosos. En el circuito verde, el interruptor puede ser un Arduino. Experiméntalo en este simulador.
- Un ejemplo con Arduino en Luis LLamas
- Un ejemplo de uso en Picobricks
Electroimán
El electroimán no se puede conectar directamente, utilizaremos una etapa de potencia, por ejemplo el transistor el IRF520N que amplifique la señal del Arduino, pues las salidas de Arduino no tienen potencia para mover el electroimán. Para dar esa potencia utilizaremos otra fuente externa, unas pilas:
Las conexiones son :
- SIG del IRF520N a una salida digital por ejemplo D13
- VCC del IRF5020N al 5V del ARDUINO
- Los dos GND del IRF520N a GND del ARDUINO
- V+ y V- del IRF5020N al solenoide, da igual qué cable pues no tiene polaridad.
- VIN del IRF520N al VIN del ARDUINO (son los voltios de la pilas)
Motor paso a paso
Igual que el electroimán, necesitamos un controlador que nos de la potencia necesaria para mover el motor, el ULN2003
Imagen BY-NC-SA de Luis Llamas
También igual que el electroimán, necesitamos una potencia extra con las pilas:
Conexión :
- Cuatro pines digitales del ARDUINO al IN1,IN2,IN3,IN4 del ULN2003 por ejemplo D10,D11,D12,D13
- El conector blanco del ULN2003 al motor paso a paso
- El (+) del ULN2003 al Vin del ARDUINO
- El (-) del ULN2003 al GND del ARDUINO
La configuración más sencilla es la rotación simple en sentido horario (llamada fase1) :
Imagen BY-NC-SA de Luis Llamas
Es decir:
| Paso | IN1=D10 | IN2=D11 | IN3=D12 | IN4=D13 |
|---|---|---|---|---|
| Paso 1 | ON | OFF | OFF | OFF |
| Paso 2 | OFF | ON | OFF | OFF |
| Paso 3 | OFF | OFF | ON | OFF |
| Paso 4 | OFF | OFF | OFF | ON |
Si has entendido este ejemplo serás capaz de realizar las configuraciones que desees.
OTRAS SALIDAS
No son actuadores pues no representan movimiento pero son también salidas del Arduino como los actuadores, luego lo vemos en esta página
Buzzer activo
Reproduce un tono de una frecuencia determinada por el fabricante cuando recibe un '1' digital. Su conexión es muy simple:
- GND a GND y VCC a 5V (ojo que están a los dos extremos, marcados en rojo y en negro)
- OUT o también señalado como I/O a un pin digital, por ejemplo D13
Ejemplos de uso:
- Domótica con Arduino: Apertura puerta con mBlock
- Domótica con Arduino Apertura puerta con código
Buzzer pasivo
La diferencia de un buzzer activo con el pasivo es que el pasivo hay que mandar la onda que se tiene que reproducir, como Arduino no puede reproducir onda puras (senoidales analógicas), se le envía ondas cuadradas con la frecuencia que se pretende reproducir. Como se puede ver en la figura, no tiene elementos auxiliares para reproducir un tono, es simplemente un altavoz.
Ejemplos de uso
LEDS Y OTROS ELEMENTOS VISUALIZADORES
Led normal
Un diodo es la unión de dos semiconductores P-N que sólo permite la corriente en un sentido. Un diodo LED es un diodo, que al pasar esta corriente emite una luz. Hay de 3mm y de 5mm de grosor, transparentes, traslúcidos y de colores (realmente son traslúcidos tintados)
Tenemos pues que respetar su polaridad para que funcione:
Fuente Luis LLamas CC-BY-NC Encender LED con Arduino
Si alimentamos el LED con una tensión inferior a su tensión de polarización directa Vd ±1,4V-3,8V el led no luce. si alimentamos con una tensión superior, la corriente que circula se dispara por lo que se rompe. Conclusión: Hay que poner una resistencia limitante. Para calcularla te recomiendo la página de Luis Llamas Encender LED con Arduino
Aquí puedes ver un ejemplo de semáforo en el curso Arduino con código
Se puede conectar directamente pues las salidas de Arduino tienen una limitación interna de 20mA como en este ejemplo https://www.youtube.com/watch?v=EFFSLvIF9rY
Los LEDS igual que los motores pueden se encendidos o todo o nada con salidas digitales 0 y 1 o salidas PWM de esta manera conseguimos luminosidades medias, en esta práctica con el potenciómetro se regula la intensidad de la luz de un LED
Led RGB
Se trata de un encapsulado que integra 3 leds de los tres colores básicos. Cada color básico se puede regular desde 0 a 255 de intensidad, luego tenemos 16 millones de tonalidades diferentes.
Un ejemplo de su uso lo puedes ver en
Existen LEDS RGB que se comunican unos a otros, (ver este ejemplo en el curso mClon) como las tiras de leds RGB que cambian de color todos simultáneamente.
Neopixel
La cinta LED RGB se basa en el chip controlador WS2812B de Neopixel con el cual podemos tener el control de cada pixel y de cada color, ya sea rojo, verde y azul a través de un solo cable de datos.
Los WS2811, WS2812 y WS2812B son LED que disponen de lógica integrada, por lo que es posible variar el color de cada LED de forma individual (a diferencia de las tiras RGB convencionales en las que todos los LED cambian de color de forma simultánea). Están basados en el LED 5050, llamado así porque tiene un tamaño de 5.0 x 5.0 mm.
Es un LED de bajo consumo y alto brillo, que incorpora en un único encapsulado los 3 colores RGB. La genial novedad del WS2812B (y resto de familia) es añadir un integrado dentro de cada LED, que permite acceder a cada pixel de forma individual. Por este motivo este tipo de LED se denominan “individual addressable”. Esto abre la puerta a un sinfín de aplicaciones y combinaciones, que van desde dotar de iluminaciones distintas zonas con una única tira, animaciones complejas, o incluso generar pantallas enteras de alta luminosidad....
A los LED WS2812B también se les denomina NeoPixel
Luis Llamas CC-BY-NS-SA https://www.luisllamas.es/arduino-led-rgb-ws2812b/
- Smart Home para Microbit con 4 leds RGB Neopixel
- Smart Home para ESP32
- Smart Agriculture Kit micro:bit
Láser
El diodo láser es un elemento motivador, barato y fácil de usar con el Arduino pues se activa digitalmente, si enviamos un 1 emite un rayo láser. Un ejemplo de uso lo puedes ver en la Alarma por láser en Domótica con Arduino
Si quieres saber más de este componente, te recomendamos esta página de Luis Llamas.
Si tienes que comprar uno, es importante que no sea superior a 5mW, pues puede dañar permanentemente la retina del ojo [+info].
El modelo que proponemos es de 1mW, no obstante, EVITA SIEMPRE QUE EL LÁSER APUNTE A LOS OJOS especialmente con niños.
Display LCD
Si queremos visualizar datos de forma independiente del ordenador, existen matrices de led que puedes ver en los cursos de mBot o mClon pero lo mejor es una pantalla Liquid Crystal Display y la mejor forma de conectar esta interfaz es en serie utilizando el protocolo I2C.
Ejemplo de uso :
CC-BY-SA Luis Llamas
No confundas Display LCD con matriz de LEDs , o una OLED
Aclarando conceptos: Protocolo I2C
Es un protocolo de emitir los datos con sólo dos cables SDA (los datos) y SCL (reloj) y además pueden compartir varios dispositivos SLAVE) para ello la placa Arduino ESP32, microbit... (MASTER) tiene que saber qué dirección tiene cada dispositivo IMPORTANTE:
Fuente Luis Llamas ArduinoI2C CC-BY-SA
Aclarando conceptos: Lógica invertida
Igual que vimos en sensores, con las configuraciones Pull up y Pull down, las salidas de cualquier actuador PUEDEN SER LÓGICA INVERTIDA, mira en este NodeMCU (básicamente es un Arduino con wifi, aquí está conectado con el servidor Blynk) como funciona al revés, cuando apretamos, por lo tanto enviamos un uno a la salida, se apaga la salida !!
Software para la micro:bit
Micro:bit se puede programar :
| Tipo de lenguaje | Lenguaje | Ventajas | Inconvenientes | En AULARAGON |
| BLOQUES |
MAKECODE
|
-Muy extendido -Existen en Internet muchos recursos y ejemplos -Con CretateAI podemos usar IA |
-micro:bit -micro:bit+car -Smart Home -Smart Agriculture |
|
| BLOQUES |
SCRATCH+LearningML |
-Se puede usar IA -En vivo |
Es el que proponemos en el curso de micro:bit en LearningML | |
| BLOQUES |
Classroom Microbit |
- Se puede crear una clase, enviar proyectos a los alumnos, corregir.... | ||
| BLOQUES |
Microblocks |
-Código abierto | ||
| BLOQUES |
mBlock |
-Permite usar multitud de extensiones | Recomendamos usar la versión descargada no la online | |
| CÓDIGO | - Se usa todo el potencial del código | - Curva de aprendizaje alta, no recomendado en primaria. | Micro:bit y 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
Software para la Smart home
¿Qué opciones tenemos para para programar SMART HOME PARA MICRO:BIT?
- LENGUAJE POR BLOQUES O GRAFICO
- MAKECODE (tutorial específico para SmartHome para Micro:bit in English) es el elegido en este curso por estar muy extendido.
- MICROBLOCKS (tutorial específico para SmartHome para Micro:bit en catalán)
- LENGUAJE CON CÓDIGO
Por ahora con la maqueta NO se puede programar con scratch+learningML, pues no tiene opción de manejar los pines. Sólo se podría utilizar scratch+learningML sólo con la placa micro:bit como se explica aquí https://libros.catedu.es/books/microbit/chapter/learning-ml
Jugando sólo con la micro:bit
Software : El entorno de trabajo de MakeCode
El punto de partida para el estudio de un lenguaje de programación pasa inevitablemente por los lenguajes gráficos o de bloques que facilitan su estudio al mostrar de forma visual las instrucciones del algoritmo programado. (Morales, 2023)
Vamos a utilizar MakeCode ofrece un entorno integrado, simple e intuitivo de codificación por bloques. Hay que decir que en el entorno de MakeCode también están disponibles los lenguajes Java y Python, con la ventaja de que un programa desarrollado mediante bloques puede ser traducido instantáneamente a cualquiera de los otros dos lenguajes.
Aquí tienes un esquema de dónde se sitúa Makecode, encaja dentro de los programas de bloque se se carga en la placa
Pulsando sobre el botón de continuar aparecerá la ventana principal de MakeCode. Para iniciar el entorno de programación habremos de pulsar sobre el botón de nuevo proyecto:
MakeCode nos pedirá seguidamente dar un nombre cualquiera al proyecto y pulsar el botón de crear, tras lo cual se abrirá la ventana del editor.
Entorno Microsoft MakeCode. Captura de pantalla
Para trabajar con MakeCode no se requiere registro. No obstante, pulsando sobre el icono de la esquina superior derecha, situado en la barra de herramientas, es posible acceder a MakeCode desde una cuenta de Google o de Microsoft. Esta característica permite guardar en la nube los diseños realizados y acceder a ellos desde cualquier ordenador.
Podemos ajustar el idioma de la interfaz pulsando sobre la rueda dentada de la esquina superior derecha. Están disponibles 33 idiomas, incluyendo el español.
El panel de la izquierda representa el anverso de una placa micro:bit. Se trata de un simulador, que mostrará en tiempo real el efecto del programa en desarrollo. Nótese que no es necesario disponer de una placa real para realizar los primeros pasos en programación con micro:bit.
Con el puntero del ratón se puede interactuar con la placa y pulsar sus botones, agitarla o cambiar las condiciones simuladas de luz o de ruido. Por otro lado, los controles situados bajo la placa nos permiten:
- Apagar o encender el simulador.
- Reiniciar el simulador, es decir, el programa en ejecución.
- Entrar en modo de depuración para localizar y solucionar errores.
- Activar o desactivar el altavoz del ordenador.
- Tomar una fotografía de la placa.
- Mostrar el simulador en pantalla completa.
El panel central es una caja de herramientas en forma de menú desplegable con todos los bloques de programación disponibles. Los bloques pueden ser arrastrados directamente con el ratón desde el menú. Cada color del menú se identifica con un tipo de acción o de estructura de control. Por ejemplo, el color verde se reserva para los bloques que permiten ejecutar acciones repetitivas o bucles.
La caja de búsqueda colocada sobre el menú desplegable es muy útil para encontrar rápidamente el bloque más adecuado para realizar la acción deseada en cada momento.
El panel de la derecha es el área de programación. Aquí se escriben los programas arrastrando y encajando los bloques de código. Cuando se abre el navegador aparecen por defecto dos bloques azules de eventos del menú básico:
- Al iniciar, es la estructura que contendrá el algoritmo que será ejecutado por la placa sólo una vez, tras ser encendida o reiniciada.
- Para siempre, es el bucle que contendrá el algoritmo que se ejecutará indefinidamente, una y otra vez, cuando acabe la ejecución del algoritmo de inicio.
Pulsando con el botón derecho del ratón sobre un bloque se desplegará un menú contextual que dará varias opciones, como duplicar, borrar u obtener ayuda sobre el uso del bloque.C
Al colocar el puntero del ratón sobre un bloque, el editor mostrará una etiqueta de ayuda con una breve explicación sobre la función del bloque.
https://makecode.microbit.org/reference contiene explicaciones detalladas de los bloques de MakeCode.
En la parte inferior de la ventana de MakeCode se dispone la barra de herramientas, con botones para realizar acciones como descargar el programa en un placa micro:bit conectada al ordenador, guardar el programa en nuestro ordenador o en un repositorio en línea, hacer y deshacer y ampliar o reducir la imagen.
Nuestro primer programa
El primer programa que se realiza cuando se comienza a aprender un nuevo lenguaje consiste casi siempre en presentar un saludo por pantalla. Micro:bit es más original, puesto que propone como primer programa un corazón palpitante.
Vamos a combinar el saludo inicial con el corazón. De esta forma ilustraremos el funcionamiento de los bloques de eventos al inicio y para siempre.
Se trata de seguir los pasos explicados en la página anterior y crear un programa llamado Hola. Tras la apertura del editor pulsaremos sobre el menú Básico y arrastraremos y encajaremos los bloques para configurar el siguiente programa:
Para escribir el texto ¡Hola! basta con hacer clic sobre la caja blanca del bloque mostrar cadena. De igual forma, los iconos de los bloques mostrar icono y los números de los bloques pausa (ms) pueden seleccionarse pulsando sobre las flechas, acción que despliega menús de selección.
Como en el caso de la caja de texto, también puede teclearse directamente el número de milisegundos del bloque pausa (ms).
¿Qué hace el programa? Cuando se enciende la placa, el algoritmo de inicio mostrará una vez mediante la matriz de LED la cadena de texto "¡Hola!". Como la pantalla es muy pequeña, micro:bit deslizará el texto horizontalmente, de derecha a izquierda.
Seguidamente, el algoritmo principal mostrará en pantalla el icono de un corazón grande y entrará en pausa 500 milisegundos, es decir, medio segundo. Pasado este tiempo, micro:bit mostrará un corazón pequeño y esperará otro medio segundo. Este algoritmo se ejecutará indefinidamente hasta que se apague la placa, se pulse el botón de reinicio o se acaben las pilas. El efecto visual será el de un corazón palpitante.
Nada más terminar de colocar el último bloque, el simulador de MakeCode mostrará en pantalla el resultado del programa en ejecución. Para reiniciar el programa hay que pulsar sobre el icono de reinicio, situado justo bajo el dibujo de la placa micro:bit.
Cargar el programa en micro:bit
Hay que conectar primero la placa al ordenador por medio del cable USB. Después de unos instantes, el sistema operativo, (Linux, Windows o MacOS) reconocerá a la tarjeta micro:bit conectada como si se tratase de una unidad USB con el nombre MICROBIT.
La unidad Micro:bit en el escritorio de Linux Mint
Si la tarjeta es nueva, llevará cargado de fábrica un programa de demostración que empezará a ejecutarse nada más ser conectada al puerto USB. El programa mostrará mensajes, iconos en movimiento y sonidos y pedirá al usuario que calibre el compás magnético.
METODO RÁPIDO: EMPAREJAMIENTO (recomendable)
La primera vez que le damos a descargar, nos pide que conectemos la MICRO:BIT
La primera vez nos muestra la opción de EMPAREJAR
Nos pregunta por la tarjeta que tiene que estar conectada al USB
Una vez emparejado, ya sale la opción de descargar
Empieza a cargarse
Y YA ESTA
🥳🥳🥳 La siguiente vez que utilices esa micro:bit automáticamente pasa a descargar de forma muy rápida.
METODO QUE NO FALLA : DESCARGAR COMO ARCHIVO Y COPIAR Y PEGAR EN LA NUEVA UNIDAD USB CREADA
Seguidamente hay que pulsar sobre el botón Descargar, acción que abrirá el diálogo de guardado de archivos del sistema operativo. Bastará con seleccionar la unidad MICROBIT y confirmar la descarga.
Si tienes Vitalinux, te recomendamos visitar https://libros.catedu.es/books/vitalinux-y-robotica/page/r8-microbit
Mientras dure la transferencia de datos, el LED ámbar situado junto al conector USB de micro:bit parpadeará rápidamente, quedando fijo cuando el programa haya sido transferido.
La transferencia de archivos a micro:bit lleva algo de tiempo, especialmente si el programa es largo. Tras la transferencia, el programa empezará a ejecutarse inmediatamente sobre la tarjeta micro:bit.
La desventaja es que es un método LENTO y no se reduce la velocidad en los siguientes intentos, no como en el método anterior
¿Y ahora qué?
Pues simplemente la placa ejecutará el programa cargado cuando se le alimente.
Sólo es posible cargar un programa a la vez en micro:bit, por lo que cada nuevo programa se reescribe sobre el anterior.
Si se desea que micro:bit funcione desconectado del ordenador, simplemente hay que alimentarlo por medio de la caja de pilas o mediante una batería externa o un cargador USB. El programa se ejecutará de igual forma, pues se encuentra guardado en la memoria de la placa.
Retos básicos
INDICE DE RETOS EN
https://libros.catedu.es/books/microbit-car/chapter/retos-con-microbit
Panel LED
Jugando con los LED: bloques básicos de código
Sensor temperatura
Sensor luminosidad y sonido
Pulsadores
Acelerómetro
Brújula
Radio
Pines entrada y salida
Retos avanzados
Los tienes en https://libros.catedu.es/books/microbit-car/chapter/retos-avanzados-con-microbit
Mejorando el termómetro
Aprender con un led la diferencia entre analógico y digital
Bloques de entradas: sonómetro, magnetómetro y acelerómetro con una sola línea de código
Nivel de burbuja usando el giroscopio
Lectura puerto USB por MakeCode o Coolterm
BLUETOOTH programa en Makecode
Extensión Bluetooth en Makecode En Makecode instalaremos la siguiente extensión Entramos en Ext...
BLUETOOTH programa Serial Bluetooth Terminal
Entramos con el móvil a Google Play e instalamos esta aplicación https://play.google.com/store/ap...
BLUETOOTH con App Inventor. Extensiones
Descargas e instalación Necesitamos estas extensiones para poder crear una APP que pueda enviar ...
BLUETOOTH App Inventor programa
En DESIGNER incorporamos: HorizontalArrangment para que los botones queden alineados horizon...
Música y sonido con micro:bit
Lo tienes en https://libros.catedu.es/books/microbit-car/chapter/musica-y-sonido-con-microbit
Una pequeña melodía
Grabadora de sonidos
Fray Santiago
Controles de volumen, tempo y tono
Inteligencia artificial Create AI
Lo tienes en https://libros.catedu.es/books/microbit-car/chapter/create-ai
Qué es CreateAI
Es una aplicación web en a https://createai.microbit.org/ ideada para realizar estos pasos: R...
Vestibles
Para proyectos con CreateAI es recomendable fijar la micro:bit a una pulsera. Fuente Ro-botic...
Paso 1 Collect data por Bluetooth y 1 micro:bit
Si trabajamos con un PC sin bluetooth no puedes usar esta página, mira esta página Conectamos nu...
Paso 2 Test model
Grabando una acción Vamos a darle una acción, elegimos un icono, uno nombre y una acción, en es...
Paso 3 Code
Una vez testeado nuestro modelo pulsamos a Edit in MakeCode AHORA ES NUESTRO MOMENTO DE PROGRA...
Sin Bluetooth y 2 micro:bit
La idea es utilizar una micro:bit que haga de "puente inalámbrico" utilizando la conexión vía rad...
Entendiendo a mi peluche
Vamos a a reconocer diferentes gestos de un muñeco peluche. Extraído de https://microbit.org/proj...
Más proyectos CreateAI
Con el mismo principio de detectar con la AI movimientos con el acelerómetro, se pueden hacer div...
Montando la maqueta Smart Home
Preliminar
La casa nos lo venden a piezas, y es más difícil de montar que un mueble de Ikea
NO RECOMENDAMOS REALIZAR EL MONTAJE CON LOS ALUMNOS. La probabilidad de una rotura podría hacer la maqueta totalmente inservible.
Ojo, que quede bien claro que nosotros estamos para ayudarte en tu formación, no somos comerciales de este robot. O sea, esto mejor que no:
Pero te queremos animar:
Luego al final el resultado es muy satisfactorio :
Las paredes
Montamos la pared del display LCD, ojo que los pines del display LCD tienen que quedar a la izquierda, a la esquina
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Ponemos el sensor DHT11 azul, el sensor PIR y el LED
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Recomendamos poner ya los cables del LCD antes de colocar la pared pues después no hay espacio para ponerlo o doblarlos y ponerlos perpendicular a la pared
Son los cables que son 4, uno de ellos azul. La regla es sencilla: el negro a masa (queda pues el cable negro en la parte superior)
Para la pared de la ventana utilizaremos un servo, que irá hacia el exterior y hay que utilizar dos tornillos largos muy finos
Es mejor poner la cabeza dentro de la maqueta y la tuerca fuera tal y como la figura. En caso contrario se corre el peligro que al apretar sobresalga la punta del tornillo y roce con la rueda dentada
Ante un atasco, suelen estropearse los servos. Son muy baratos, lo que cuesta es montarlos.
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Para la rueda dentada, utilizar los tornillos con punta para que se fijen en la cruz de plástico
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Colocamos la ventana abierta y el servo girado al máximo en posición ventana abierta y los tornillos llevan tuercas bloqueantes que no tienen que apretar la ventana tiene que moverse libremente
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
La pared posterior no tiene dificultades especiales. El tornillo del porta pilas tiene que tener la cabeza plana pues de lo contrario la pila no entra
captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Un lateral del tejado tiene la tira de leds
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
El suelo de la planta 2 tiene otro servo y una rueda dentada de madera y los separadores de latón:
Es mejor en los tornillos que sujetan el servo poner la cabeza dentro de la maqueta y la tuerca fuera tal y como hicimos con la ventana. En caso contrario se corre el peligro que al apretar sobresalga la punta del tornillo y roce con la rueda dentada
Ante un atasco, suelen estropearse los servos. Son muy baratos, lo que cuesta es montarlos.
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Y la puerta giratoria no tiene complicación, pero intenta minimizar la altura pues si es alta, rozará entre el suelo base y el suelo de la 2 planta.
Rebajar las ranuras centrales con un cutter, lija... para que entre al fondo
En algunos casos ha sido necesario lijar también las bases (menos el saliente) para que no roce por el suelo.
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Juntamos las paredes con el techo y el suelo de la planta 2
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Y finalmente el suelo de la planta baja con la puerta y la otra rueda dentada
Es recomendable poner una gota de cola blanca en la rueda dentada con la puerta levantada para 1.- que la rueda dentada no se desprenda 2.- Que la puerta "flote" y no roce con el suelo
A veces por defecto de fabricación "no empareja bien" el agujero del suelo con el saliente de la puerta. En estos casos una solución sencilla es coger un taladro y aumentar el agujero por el lado que roza
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
¿Un pilar?
Repetidamente se quita y se pone la micro:bit. Además en la próxima sección, en conexiones, se presiona la placa. El resultado es que al final el suelo de la planta 1 se curva hacia abajo y esto provoca que la puerta giratoria no tenga libertad de movimiento
Para prevenir esto recomendamos poner un pilar en el recuadro
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Para ello sacamos un trozo de madera de los restos del recortable, por ejemplo el marcado
Se corta muy fácil con unas tijeras algo decentes:
Utilizando un lápiz, ponemos un extremo en la base y marcamos la altura del suelo de la planta 2 :
Y lo colocamos como pilar consiguiendo que el suelo de la planta 2 no se curve hacia abajo
El techo
No montes aún el techo a la maqueta, tenlo preparado pero no lo ensambles.
Aprovecharemos que no tenemos tejado para ir colocando la placa electrónica y las conexiones
El tejado tiene el motor y el sensor de humedad
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
La otra vertiente tien el panel solar que no tiene tornillos, tiene unas tiras adhesivas. Los cables los pasamos por el agujero
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
No montes aún el techo a la maqueta, tenlo preparado pero no lo ensambles.
Aprovecharemos que no tenemos tejado para ir colocando la placa electrónica y las conexiones
La placa electrónica
Montamos la placa de extensión de la micro:bit con la placa transparente
Captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Colocamos la rueda dentada que va con la puerta giratoria y luego montamos la placa base de micro:bit en los separadores de latón. Es aconsejable poner una gota de cola en la rueda dentada y el eje de la puerta pues se suelta con facilidad.
Derivado de captura Youtube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube
Conexiones
¿Cómo se conectan los cables Dupont?
Es muy fácil, el cable negro siempre es la masa que a veces se nombra como G ground:
Utiliza los largos para los sensores que están a la izquierda de la puerta (DHT11🌡️ azul y el sensor de movimiento PIR 🏃♂️➡️)
CONECTAMOS LOS DIFERENTES ELEMENTOS
Los conectamos según indican las figuras
para el sensor de humedad OJO va en el conector que esta cerca de la micro:bit. La razón es que va a 3.3V para poder leer su valor que es analógico, no digital.
| Componente | Nomenclatura | PIN |
| LED amarillo | 16 | |
| Módulo RGB | 6812 2x2 full color RGB Module | 14 |
| Sensor PIR | 15 | |
| Sensor de humedad | Steam Sensor | 0 pero de los conectores 3.3V |
| Sensor de gas | MQ-2 | 1 |
| Sensor H-T | DHT11 | 2 |
| Servo ventana | 9 | |
| Servo puerta | 8 |
DISPLAY LCD
Si has sido previsor, ya tenías conectado el cable en el LCD cuando montamos las paredes:
En la placa de expansión micro:bit se colocan en el conector especial SCL, SDA, 5V GND y se respeta el orden
El motor
El IN va al 12 y en OUT va al 13 (realmente da igual, si se conecta al revés el motor gira hacia el otro lado) PERO
EL ORDEN DE LA ALIMENTACIÓN Y LA MASA CAMBIA. SI TE FIJAS EL G EN EL MOTOR ESTÁ EN EL EXTREMO IZQUIERDO Y LA ALIMENTACIÓN V (Voltios) EL SIGUIENTE
MIENTRAS QUE EN LA PLACA DE EXPANSION MICRO:BIT EN EL EXTREMO ESTAN LOS 5V Y EL SIGUIENTE MASA
HAY QUE INTERCAMBIAR LOS CABLES como en la figura
Los colores de los cables pueden variar según tu kit
Detalle en el motor
Detalle en la placa
O sea:
- esta el G con el Ground
- el V con el 5V
- IN+ con 13
- IN- con 12
La alimentación
La placa solar, la batería y el puerto USB se conectan a través de la interface Solar USB Charging Module (ver foto anterior)
- Conector para alimentar a través de un USB externo
- Conector a la placa solar
- Conector a la batería.
- Conector a la placa de expansión de micro:bit
Detalle de cómo pasar el cable 4 a la placa expansión micro:bit
Alimentación de la maqueta
El módulo de carga solar
Solar USB Charging Module
Es un módulo que no hemos encontrado mucha documentación, sólo aquí. y aquí Su funcionamiento es el siguiente:
El Switch (el que está debajo del conector número 2)
- Si es ON entonces
- (4) tiene tensión proveniente o de (3) o de USB
- (3) recibe carga o de (2) o de USB
- Si es OFF es la negación de lo anterior
Si el interruptor esta en OFF la alimentación por 4 se pierde por lo tanto la maqueta se queda sin alimentación
LA MAQUETA HAY ALIMENTARLA POR USB Y EL SWITCH DE ESTE MÓDULO EN ON
Panel Solar
También poco podemos encontrar. Solo esto
Pero las características de salida depende de la luz solar (evidente) de la temperatura y de la impedancia de carga. Una simple luz de flexo ya proporciona una tensión:
Con el led azul que proporcionan en el kit, conectando la pata larga al rojo (+) y la corta al negro (-) podemos hacer ya un sencillo experimento
Cables USB (mejor dos que uno)
Conectamos una fuente de alimentación con cable USB micro B (igual que el que se utiliza para la micro:bit) a la interface Solar USB Charging Module, ponemos el interruptor en ON y ya esta la maqueta preparada para usarse
Pero se necesita otro cable USB micro B conectado a la placa micro:bit para programar la placa
P: ¿Tiene que estar la micro:bit con su cable y la interface Solar USB Charging Module también A LA VEZ?
R NO. El cable de la micro:bít SOLO ES NECESARIO PARA CARGAR EL PROGRAMA luego se puede quitar (o mantener)
P: ¿Tiene que estar alimentado el cable USB de la interface Solar USB Charging Module con el ordenador?
R: NO, es sólo alimentación, recomendamos conectarlo a un cargador de 3A
No hay datos por ese cable y tiene que proporcionar suficiente corriente para alimentar la maqueta.
Debido a que la hembra de la interface Solar USB Charging Module es algo débil, recomendamos no quitar y poner continuamente, lo mejor es conectar la alimentación e intentar no moverlo
Luego la situación ideal es:
- Una alimentación a la interface Solar USB con conexión micro USB B y con suficiente corriente 3A y no moverlo de ahí
- Un cable micro USB B entre la micro:bit y el ordenador
La fuente de alimentación
Lo alimentaremos con un cable USB-microB y un cargador micro USB de 3A se pueden conseguir en muchas tiendas de electrónica físicas y online pues son alimentaciones que se usan en la raspberry 3, powerbanks, tablets ...
¿Y si es de menos de 3 A ?
Pues lo que pasa es sobre todo el LCD, como puedes ver en la foto, casi no se ve:
Si es tu caso, hay que poner el potenciómetro al máximo de corriente, el azul cuadrado que hay detrás, en el sentido de apretando (o sea el sentido de las agujas del reloj) :
CC-BY-SA Luis Llamas
Jugando con la maqueta y Makecode
LED AMARILLO
Vamos a hacer este sencillo proyecto, es tan sencillo que no hace falta las extensiones anteriores.
https://makecode.microbit.org/S51000-47523-37650-37264
RETOS
RETO1: Haz que brille de forma gradual y luego baje y así sucesivamente, si no lo sabes mira:
https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/makecode.html#project-2-breathing-led
RETO2: Haz que cuando sea de noche, se encienda la luz
Es decir el llamado Interruptor Crepuscular
Pista:
- El sensor de luz lo tienes en la propia placa de microbit por aquí tienes una pista: https://libros.catedu.es/books/microbit/page/sensor-luminosidad-y-sonido
NEOPIXEL
Hay que tener instalada la extensión correspondiente
Vamos a jugar ahora con esta extensión. Al iniciar, configuramos los 4 leds en pin 14 y le asignamos un color aleatorio. En el bucle, van rotando:
Si pulsas al siguiente enlace, no hace falta instalar las extensiones, ya lo pone
https://makecode.microbit.org/S80703-67256-64383-19034
RETO: Que realice una secuencia de colores
Ver https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/makecode.html#project-3-6812-2x2-full-color-rgb
El NEOPIXEL SE QUEDA ENCENDIDO 😡😠😤
¿Molesta? pues es normal, se queda el sensor activado
La única manera de apagarlo es ejecutar
PIR SENSOR MOVIMIENTO
Un bucle para determinar si hay movimiento o no
La instrucción PIN lo encontramos en avanzados:
https://makecode.microbit.org/S50667-88978-39987-85757
RETOS
RETO1: que muestre lo que detecta por el puerto USB
ver https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/makecode.html#project-4-pir-motion-sensor
RETO2 que si detecta movimiento se encienda el led amarillo
ver https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/makecode.html#project-5-induction-lamp
RETO3 que si detecte que suene una alarma Pista: aquí tienes cómo hacer sonidos https://libros.catedu.es/books/microbit/page/una-pequena-melodia
LCD DISPLAY
Extensión
Para manejar el display, se necesita la extensión I2CLCD1602 (si has instalado las extensiones, https://libros.catedu.es/books/smart-home-para-microbit/page/instalando-la-extension-smart-home-para-microbit ya la tienes)
Vamos a hacer el programa anterior, pero que lo visualice el display
Si pulsas al siguiente enlace, no hace falta instalar las extensiones, ya lo pone
En la extensión de la placa micro:bit el LCD está en la dirección 039 por lo tanto tenemos que indicarlo al iniciar. En caso contrario no funciona, pues no sabría a qué dirección enviarlo.
Regular el contraste
Cuenda ejecutes el programa, gradúa el potenciómetro de atrás para ver los caracteres con el contraste adecuado
Programa
Vamos a realizar un programa que si detecta una persona salude, en caso contrario que visualice que está en reposo
Solución
https://makecode.microbit.org/S74903-63787-58066-67229
RETOS
RETO1: Visualizar por el LCD un contador de medio segundo
Solución https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/makecode.html#project-9-1602-lcd
RETO2: ¿Y si las maquetas se comunicaran entre sí y lo muestran por la pantalla del Display? Hacer un programa que si detecta presencia, envíe un mensaje tipo radio a los vecinos diciendo que han entrado
Pista: Para la comunicación por radio aquí tienes cómo hacerlo : https://libros.catedu.es/books/microbit/page/radio
PUERTA
Vamos a realizar un programa que simplemente vaya girando de 10 en 10 grados la puerta desde su valor mínimo 0º hasta el máximo 180º
https://makecode.microbit.org/S31244-36562-66788-32342
¿va mal? ¿no tiene libertad de movimientos?
Porque no le has puesto un pilar. Mira https://libros.catedu.es/books/smart-home-para-microbit/page/un-pilar
Ante un atasco, suelen estropearse los servos. Son muy baratos, lo que cuesta es montarlos.
RETO Realizar el mismo programa pero que sea 0 - 45 - 90 - 135 - 180
Solución https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/makecode.html#project-6-adjust-angles-of-servo
VENTANA
Hacemos igual pero con la ventana
Con una diferencia, no vamos a llegar al tope de apertura 180º pues tropieza con la pared, con 150º es suficiente y la ventana a esos grados esta totalmente abierta
https://makecode.microbit.org/S97837-07871-42459-70030
Ante un atasco, suelen estropearse los servos. Son muy baratos, lo que cuesta es montarlos.
LLUVIA CIERRO LA VENTANA
Vamos ahora a hacer un programa que si el sensor detecta lluvia, que cierre la ventana
Aquí la cuestión es ¿Cuál es nuestro umbral para determinar lo que es lluvia y lo que no es? pues el sensor es analógico no como los anteriores
En este programa definimos un umbral de 500, más de ese valor vamos a pedir que cierre la ventana
El display LCD visualiza los datos de lluvia para poder ver qué ocurre
https://makecode.microbit.org/S48168-34893-12799-18989
RETO Que emita un sonido de alarma y que se visualice por el led amarillo
Si no sabes mira https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/makecode.html#project-11-rains-alarm
DHT11
Vamos a ver en esta página:
- La instalación en Makecode de la Extensión DHT11
- Programa lectura de valores temperatura y humedad DHT11 al display LCD con Makecode
- Programa lectura de valores temperatura y humedad DHT11 al puerto serie con Makecode
- Programa lectura de valores temperatura y humedad DHT11 al display LCD con Microblocks
Extensión DHT11
Para manipular DHT11 con makecode tenemos que tener la extensión correcta: Busca DHT11 en extensiones...
Instala una extensión con estas instrucciones:
Tal y como dice su página sirve tanto para DHT11 como DHT22, el DHT22 es blanco, es un poco más caro pero más preciso (tacaños !!!)
Programa lectura de valores temperatura y humedad DHT11 al display LCD con Makecode
Si pulsas al siguiente enlace, no hace falta instalar las extensiones, ya lo pone
Realizamos este programa https://makecode.microbit.org/S12731-23834-73453-08192
Como puedes ver da muchas veces el error Checksum -999
RETO: 🧠🧠🧠Cambia el programa para que cuando detecte esos valores de Checsum, simplemente el display no lo muestre, que siga mostrando el valor correcto anterior.
La solución la tienes aquí
¿Qué no sabes qué es Checksum? eso es porque no te has leído bien la página de sensores
Programa lectura de valores temperatura y humedad DHT11 al puerto serie con Makecode
A pesar de que en la página oficial propone un programa que también da error checksum, vamos a realizar esta modificación que no da ese error:
AGRADECIMIENTOS a CARMEN GARROTE mentora digital del CP Angel Sanz Briz Teruel autora de esta modificación:
Debajo del dibujo de la Micfrobit tienes el botón para ver el puerto serie:
Programa lectura de valores temperatura y humedad DHT11 al display LCD con Microblocks
CROBLOCKS que es un programa local que se descarga en https://microblocks.fun/
Se instala los drivers que por cierto son del mismo fabricante keyestudio :
Se ha añadido la librería Temperatura y Humedad DHT11.
Realizamos el siguiente programa y lo grabamos en la microbit:
¡¡ FUNCIONA PERFECTAMENTE !!! en ningún momento salta -999
Enlace al programa
MOTOR
El motor tiene un sencillo funcionamiento:
| PIN12 | PIN13 | MOTOR |
| 0 | 0 | PARADO |
| 0 | 1 | ROTACIÓN SENTIDO RELOJ |
| 1 | 0 | ROTACIÓN SENTIDO ANTIRELOJ |
| 1 | 1 | PARADO |
https://makecode.microbit.org/S96383-79923-07943-79319
RETO Lo mismo que anteriormente pero sin bucle
SOLUCIÓN https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/makecode.html#project-7-130-motor
GAS
El sensor MQ-2 es sensible a gas de combustible, incluso alcohol. Vamos a realizar un circuito que si detecta alguno de estos gases, funcione el ventilador.
Es un sensor que internamente lleva una resistencia que al calor, hace que los sensores detecten gases inflamables. Si te tocas el sensor, verás que esta caliente.
Este sensor, como todos los de este tipo, van al revés pull down, es decir cuando detectan se lee un 0 y cuando no detecta, se lee un 1
https://makecode.microbit.org/S89674-59327-62723-53770
acercamos una botella de alcohol y funciona !!!
Aunque también es sensible al butano, como podemos ver en el tutorial de Aularagon SMART HOME ESP32 https://libros.catedu.es/books/smart-home-esp32/page/project-82-dangerous-gas-alarm
RETO: Que cuando detecte el gas, que suene una alarma y el led amarillo parpadee
SOLUCIÓN https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/makecode.html#project-12-analog-gas-mq-2-sensor
Exensiones
OPCIÓN A PONER LA EXTENSIÓN QUE NECESITEMOS EN CADA MOMENTO
Si vas a utilizar alguno de estos elementos, necesitas instalar la extensión correspondiente
- DHT11
- I2C_LCD1602
- Neopixel
Para instalarlas. En Makecode https://makecode.microbit.org/#editor vamos a Extensions
Para DHT11
Para el LCD display
Para Neopixel
OPCIÓN B : PONER LAS EXTENSIONES TODAS DE GOLPE
En Makecode https://makecode.microbit.org/#editor vamos a Extensions
Y pegamos la siguiente URL https://github.com/keyestudio2019/ks_IoT
Al pulsar Intro o dar a la lupa, aparece una extensión que instalaremos
al instalarlo se instalan tres extensiones
- DHT11
- I2C_LCD1602
- Neopixel
Jugando con Bluetooth
Un poco de teoría Bluetooth
ONDAS
Una onda es una señal que se propaga por un medio. Por ejemplo el sonido, que es una onda mecánica que viaja usando el aire o cualquier otro material. Pero en el caso de las señales eléctricas pueden ser enviadas por el cable o a través del vacío (no necesitan un medio para transmitirse).
Dependen de 3 parámetros principalmente:
- Amplitud: altura máxima de la onda. Hablando de sonido representaría el volumen. Si nos referimos a una onda eléctrica estaríamos representando normalmente el voltaje.
- Longitud de onda λ: distancia entre el primer y último punto de un ciclo de la onda (que normalmente se repite en el tiempo).
- Frecuencia f : Número de veces que la onda repite su ciclo en 1 segundo (se mide en hertzios).
- Periodo T es simplemente es la inversa de la frecuencia. T=1/f
La relación entre ellas es muy fácil pues las ondas electromagnéticas viajan a la velocidad de la luz c y si velocidad es espacio/tiempo luego c = λ/T luego c= λ*f
Dentro del espectro electromagnético encontramos diferentes tipos de señales dependiendo de las características de su onda.
TRANSMISIÓN INALÁMBRICA: BLUETOOTH. 
- Hoy en día, este grupo está formado por miles de empresas y se utiliza no sólo para teléfonos sino para cientos de dispositivos.
- Bluetooth es una red inalámbrica de corto alcance pensada para conectar pares de dispositivos y crear una pequeña red punto a punto, (sólo 2 dispositivos).
- Utiliza una parte del espectro electromagnético llamado “Banda ISM”, reservado para fines no comerciales de la industria, área científica y medicina. Dentro de esta banda también se encuentran todas las redes WIFI que usamos a diario. En concreto funcionan a 2,4GHz. (Un G son 109) luego entre FM y Microondas.
¿Sabias que?
Su curioso nombre viene de un antiguo rey Noruego y Danés, y su símbolo, de las antiguas ruinas que representan ese mismo nombre.
Hay 3 clases de bluetooth que nos indican la máxima potencia a la que emiten y por tanto la distancia máxima que podrán alcanzar:
También es muy importante la velocidad a la que pueden enviarse los datos con este protocolo:
Mbps : Mega Bits por segundo. MBps: Mega Bytes por segundo.
kb = 1.024 b M = 1.024 k G = 1.024 M
¿Te atreves a calcularlo …. ?
¿Cuántos ciclos por segundo tendrán las ondas que están en la Banda ISM? ¿Cuál es el periodo de esas ondas?
Solución
a) f = 2.4G
b) λ=c/f= 12.5cm o sea, las antenas tendrían que ser de esta longitud. Hay muchos trucos para reducirla, una de ellas es la forma de serpiente que puedes ver en el HC-06
¿Te atreves a calcularlo...?
¿A qué distancia y cuanto tiempo tardarían en enviarse los siguientes archivos por Bluetooth?
- Un vídeo de 7Mb usando versión 2 clase 2
- Una imagen de 2.5Mb usando versión 3 clase 1
- Un archivo de texto de 240KB usando versión 1.2 clase 1
Solución
1) 7Mb / 3Mbs = 2.3 seg.
2) 2.5Mb / 24Mbs = 0.1 seg.
3) 240 kB 8b/B = 1.920 kb 1.920 kb / 1.024 = 1.875 Mb 1.875Mb / 1Mbs = 1.875 seg.
¿Bluetooth clásico o Bluetooth Low Energy = BLE?
Es un protocolo similar al clásico Bluetooth pero diseñado a consumir menos potencia manteniendo funcionalidad. Su popularidad ha crecido en multitud de dispositivos
En robótica, el clásico device que utiliza BLE es la Micro:bit. Aunque la Micro:bit no tiene Wifi integrada, posee una radiofrecuencia que podemos configurar para Bluetooth (hay que elegir, o utilizar sus comandos de Radio o utilizar comandos de Bluetooth)
Por eso a la hora de elegir la APP tienes que tener en cuenta:
- Si acepta Bluetooth clásico o BLE
- Que la APP acepte leer datos desde el robot como enviar
Nosotros hemos elegido uno sencillo que cumple las dos condiciones (hay muchas APPs) Serial Bluetooth Terminal
La extensión en Makecode
En Makecode instalaremos la siguiente extensión
Entramos en Extensiones
Buscamos Bluetooth y elegimos la esta :
Nos dirá que es incompatible con la radio, y hay que eliminar la radio y poner Bluetotth, aceptamos :
Por si acaso...
En Makecode, si vamos a la rueda dentada - Project settings
Hay que tener que cualquiera se puede conectar via Bluetooth
Programa en Makecode
Parecido al que vimos con la micro:bit sola en https://libros.catedu.es/books/microbit-car/page/bluetooth-programa-en-makecode pero con la diferencia que ahora podemos añadir elementos de entrada y salida de la maqueta:
Realizamos un programa que :
- Extensiones.
- Instalamos la extensión LCD display
- En inicio :
- que muestre el nombre del equipo (ver recuadro)
- Inicializamos el LDC Display para que nos muestre qué ocurre
- se active el servicio UART para el envío y recepción de mensajes,
- apagamos el motor por si esta encendido
- definimos el umbral de lluvia con 500
- Al conectar Bluetooth
- que muestre un check
- Al desconectar Bluetooth
- que muestre X
- Al recibir datos, hasta # (puede ser otro carácter)
- que muestre la frase recibida
- si la frase es un "ON" que encienda el motor
- si la frase es un "OFF" que apague el motor
- Cada segundo
- Que envíe la temperatura por bluetooth
- si hay lluvia que envíe "ESTA LLOVIENDO"
¿Para qué mostrar el nombre de la micro:bit? Para saber a qué micro:bit conectarte. En una clase con muchas micro:bit es importante este dato. El nombre del equipo está en
https://makecode.microbit.org/S49239-73240-65616-30917
APP Serial Bluetooth Terminal
DESCARGA LA APP
Esta APP es muy sencilla y la puedes descargar aquí. Tiene las siguientes ventajas :
- Enviar / Recibir mensajes
- Permitir conexiones tanto
- BLUETOOTH CLÁSICO por ejemplo HC06 de Arduino, Echidna, ESP32 ...
- BLUETOOTH LE (Low emision) por ejemplo para la MICRO:BIT
EMPAREJAR DISPOSITIVOS
Si no esta emparejado con el móvil NO TE PUEDES CONECTAR, para ello entramos en Devices :
- Microbit: Entramos en Devices y en Bluetooth LE y nos conectamos a la Micro:bit
- HC06 para Arduino Echidna ESP32.... igual pero en Bluetooth clásico
Aquí puedes ver dos capturas de dispositivos en Bluetooth clásico y Bluetooth BLE
LOS QUE ESTAN EN VERDE SON LOS QUE TIENES EMPAREJADOS Y PUEDES CONECTARTE
¿Y si no aparece o no esta emparejado? Entras en el diálogo de Android de Bluetooth y lo emparejas
CONECTARTE
Una vez seleccionado el dispositivo emparejado ya puedes conectarte :
- Menú
- Entras en Terminal
- Enchufe
- Sale conectado, ya estas preparado para enviar y recibir
Resultado con la APP Serial Bluetooth Terminal
En Makecode
En la micro:bit hemos puesto este programa en Makecode :
En la APP
Podemos hacer:
- Enviar un mensaje, que como hemos definido anteriormente en Makecode tiene que ir entre #
- En nuestro caso enviaremos #ON# o #OFF# para encender / apagar el motor
- Recibir un mensaje, se visualizará lo que nos envíe la micro:bit que en Makecode hemos definido que será
- la temperatura
- si llueve, muestra la advertencia
Resultado
Agradecimientos al tutorial de https://lopegonzalez.es/eso-y-bachillerato/proyectos-con-microbit/control-remoto-por-bluetooth/
APP INVENTOR extensiones bluetooth LE y microbit
Descargas e instalación
Necesitamos estas extensiones para poder crear una APP que pueda enviar y recibir con nuestra micro:bit
Página de descargas https://iot.appinventor.mit.edu/#/
Una vez descargadas, vamos al APP INVENTOR https://ai2.appinventor.mit.edu y las instalamos en extensiones :
Una vez instaladas, se visualizan como extensiones abajo del menú. Las dos últimas son las que utilizaremos:
La extensión Bluetooth tiene diversas funciones que tienes su descripción aquí (English). Para poder instalarla, vamos al APP INVENTOR https://ai2.appinventor.mit.edu
APP INVENTOR tu programa
Parecido al programa que realizamos con la Micro:bit sola en https://libros.catedu.es/books/microbit-car/page/bluetooth-app-inventor-programa
En DESIGNER
incorporamos:
- HorizontalArrangment para que los botones queden alineados horizontalmente
- Botones
- Scan
- Stop
- Conectar
- Desconectar
- Label que dirá el estado de la conexión. Lo llamaremos LabelEstado
- ListView que lo llamaremos ListBLE donde mostrará los diferentes dispositivos Bluetooth LE que detecta
- Botones para encender o apagar el motor de la maqueta
- Un Label que lo llamaremos LabelTextoRecibido que mostrará el mensaje desde micro:bit
- Añadimos los elementos de las extensiones que hemos instalado anteriormente
- Microbit_UART_Simple
- BluetoothLE
En Blocks
Cuando escaneemos, que el elemento empiece el escaneado y la lista se vuelva visible, además de que LabelEstado diga que esta escaneando
Si ha encontrado un dispositivo, que lo vaya añadiendo a la lista ListBLE
Cuando le digamos que pare, simplemente se lo mandamos al dispositivo y LabelEstado lo informa
Cuando le demos a conectar, pues conecta con el seleccionado en ListBLE y LabelEstado informa
Si conecta, pues LabelEstado informa y ListBLE no es necesaria por lo tanto se oculta, pues entorpece la visión
Si queremos desconectar, pues le decimos al elemento BluetoothLE que desconecte
Si se ha desconectado (voluntariamente al dar al botón anterior, o involuntariamente pues el dispositivo se ha desconectado, o esta muy lejos... etc) que informe
Si apretamos el botón ON o OFF, le enviamos el texto ON o OFF entre "#" pues así lo hemos definido en el programa Makecode: (si quieres saber más sobre estas instrucciones UART aquí)
Si se ha recibido un mensaje, pues que lo visualice, pero primero comprueba que el mensaje no este vacío
NOTA el mensaje "message" lo arrastras desde la instrucción "when.." tal y como señala la línea roja
La APP a tu móvil
Tienes dos opciones
-
- EN VIVO CONNECT - AI COMPANION esta opción es la más rápida, y realmente lo simula a través de la APP INVENTOR.
- Tienes que tener instalada la APP MIT AI2 COMPANION
- Se le pasa el código de tu APP a la APP
- OTRAS OPCIONES
- EN VIVO CONNECT - AI COMPANION esta opción es la más rápida, y realmente lo simula a través de la APP INVENTOR.
OPCIÓN EN VIVO AI COMPANION
Instalas la APP MIT AI2 COMPANION
En APP INVENTOR
Y sale un código y un QR asociado al código
Abrimos la APP MIT AI2 COMPANION y metemos el código anterior (o lo escaneamos con el QR)
En APP INVENTOR verás que sale una barra de progreso enviando tu APP a tu móvil. Cuando termina automáticamente lo ejecuta.
A jugar...
Jugando fuerte con Python
Ventajas y desventajas Python
Ventajas
Python es un lenguaje de desarrollo y curva de aprendizaje rápido. Tiene una comunidad amplia con muchas librerías, ejemplos, tutoriales... que para casi todos los problemas, seguro que encuentras una solución escrita en Python
Es un lenguaje de alto nivel, es decir, que se programa igual que los programadores, pero interpretable para los humanos !. Comparándolo con otros lenguajes (Java, C++, etc..) es el más "humanizado".
También gestiona la memoria, por ejemplo, si programas en C++, tú eres el responsable de limpiar la memoria de datos que ya no usas, o corres el peligro de quedarte sin memoria. En Python ya lo hace por ti.
Desventajas
La gestión de memoria que antes se mencionaba tiene un precio; bajada de velocidad y paradójicamente coste de memoria.
En otros programas, el compilador esta en tu PC, pero en Python está en el dispositivo (por eso se llama lenguaje Interpretado), esto hace que ocupa memoria, y en microbit por ejemplo esto hace que no puedes usar Python y código Bluetooh pues no hay suficiente memoria RAM.
Fuente vídeo Exploring the Arduino Nano ESP32 | MicroPython & IoT
También hay que tener en cuenta que si Python es un lenguaje interpretado, siempre será más lento que un lenguaje compilado por ejemplo el C++, pues para ejecutarlo el dispositivo, lo ejecuta, pues lo tiene en binario y en paz, pero en Python cada instrucción necesita ser interpretado, decodificado, en binario antes de ejecutarse.
Editores
Tienes dos opciones, online o local :
Programar online con https://python.microbit.org (recomendado)
Entramos en https://python.microbit.org/ y el editor online nos permite trabajar ;
- Una biblioteca de códigos que nos permitirá seleccionar y usar para programar de forma guiada
- Un simulador para ver cómo se ejecutaría nuestro código
- Un botón para enviar a la microbit real
- Botones para guardar nuestro código de forma local y abrir los existentes.
En este curso utilizaremos el editor online microbit.org
Programar en local con MU
Es un editor muy sencillo, se descarga en https://codewith.mu/ y permite su instalación en Windows, Linux y Apple.
Fuente https://codewith.mu/ CC-BY-NC-SA
La primera vez que lo ejecutamos (tarda algo la primera vez) nos pide el modo que se puede cambiar en cualquier momento:1 Escribimos el código
2 Lo comprobamos
3 Flasheamos, es decir enviamos el código al Microbit (conectarlo previamente)
4 Cuando sale el mensaje Código copiado al microbit procedemos a resetearlo para que la placa ejecute el programa.
ATENCIÓN ES IMPORTANTE RESETEAR LA MICRO:BIT tienes un botón de reset al lado del conector de USB para no estar desconectando y conectando. Una vez reseteado tu programa funcionará.
from microbit import *
while True:
display.scroll("Hola Mundo")
OTROS EDITORES DE PYTHON QUE NO SON COMPATIBLES CON PYTHON MICROBIT
Vamos a ver este programa escribo en https://python.microbit.org/
# Imports go at the top
from microbit import *
while True:
if pin0.is_touched():
display.show(Image.HEART)
else:
display.show(Image.NO)
Lo que hace es :
EL MISMO CÓDIGO EN MAKECODE-PYTHON
Makecode a pesar de que esta orientado a programar con bloques, tiene su sección de Python
Al darle en Python (arriba a la derecha), muestra este código
def on_forever():
if pins.digital_read_pin(DigitalPin.P0) == 1:
basic.show_icon(IconNames.HEART)
else:
basic.show_icon(IconNames.NO)
basic.forever(on_forever)
Como se puede ver makecode python no es compatible con https://python.microbit.org/ ya lo dice en su tutorial https://microbit-micropython.readthedocs.io/en/v2-docs/
EL MISMO CÓDIGO CON PYTHON DE TINKERCAD
Tinkercad https://www.tinkercad.com/ es una herramienta estupenda de simulación pues es muy realístico, igual que Maquecode, este muy orientado a la programación en bloques pero también tiene su sección de código python
Si le das la opción de bloque+código intenta muestra los bloques traducidos a código, pero si le das la opción sólo código pierdes la programación en bloques, Esto ya lo vimos en https://libros.catedu.es/books/programa-arduino-mediante-codigo/page/software en los párrafos escritos en naranja.
El código generado vemos que no es compatible con Python microbit
# Python code
#
def on_pulsed_p0_high():
basic.show_icon(IconNames.Heart)
pins.on_pulsed(DigitalPin.P0, PulseValue.HIGH, on_pulsed_p0_high)
def on_pulsed_p0_low():
basic.show_icon(IconNames.No)
pins.on_pulsed(DigitalPin.P0, PulseValue.LOW, on_pulsed_p0_low)
Introducción al Python
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
Micropython de microbit
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA
API: El módulo microbit
Todo lo necesario para interactuar con el hardware de la micro:bit está en el módulo microbit y se recomienda su uso escribiendo al principio del programa:
from microbit import *
Las funciones disponibles directamente son:
sleep(ms) #1
running_time() #2
temperature() #3
scale(valor_a_convertir, from_=(min, max), to=(min, max)) #4
panic(error_code) #5
reset() #6
set_volume(valor) #7 (V2)
'''
1 Esperar el número de milisegundos indicado
2 Devuelve el tiempo en ms desde la última vez que se encendió la micro:bit
3 Devuelve la temperatura en Celcius
4 Convierte un número de una escala de valores a otra
5 La micro:bit entra en modo pánico por falta de memoria y se dibuja una
cara triste en la pantalla. El valor de error_code puede ser cualquier entero.
6 Resetea la micro:bit
7 Estable el volumen de salida con un *valor* entre 0 y 255
'''
Estructuras de datos en Python
Las listas (list)
Se trata de un tipo de dato que permite almacenar series de datos de cualquier tipo bajo su estructura. Se suelen asociar a las matrices o arrays de otros lenguajes de programación.
En Python las listas son muy versatiles permitiendo almacenar un conjunto arbitrario de datos. Es decir, podemos guardar en ellas lo que sea.
Una lista se crea con [] y sus elementos se separan por comas. Una gran ventaja es que pueden tener datos de diferentes tipos.
lista = [1, "Hola", 3.141592, [1 , 2, 3], Image.HAPPY]
Las de principales propiedades de las listas:
- Son ordenadas, mantienen el orden en el que han sido definidas
- Pueden ser formadas por tipos arbitrarios de datos
- Pueden ser indexadas con [i]
- Se pueden anidar, es decir, meter una lista dentro de otra
- Son mutables, ya que sus elementos pueden ser modificados
- Son dinámicas, ya que se pueden añadir o eliminar elementos
Hay dos métodos aplicables:
append. Permite agregar elementos a la lista.remove. Elimina elementos de la lista.insert(pos,elem). Inserta el elementoelemen la posiciónposindicada.
En el ejemplo vemos el funcionamiento.
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Con estos conocimientos tendremos suficiente para hacer lo que pretendemos, que no es otra cosa que animar imágenes.
Las tuplas (tuple)
Son muy similares a las listas con una diferencia principal con las mismas y es que las tuplas no pueden ser modificadas directamente, lo que implica que no dispone de los métodos vistos para listas. Una tupla permite tener agrupados un número inmutable de elementos.
Una tupla se crea con () y sus elementos se separan por comas.
tupla = (1, 2, 3)
Principales propiedades:
- Se pueden declarar sin usar los paréntesis, pero no se recomienda. No usarlos puede llevarnos a ambigüedades del tipo print(1, 2, 3) y print((1, 2, 3)).
- Si la tupla tiene un solo elemento esta debe finalizar con coma.
- Se pueden anidar tuplas, por ejemplo
tupla2 = tupla1, 4, 5, 6, 7. - Se pueden declarar tuplas vacias, por ejemplo
tupla3 = (). - Las tuplas son iterables por lo que sus elementos pueden ser accesados mediante la notación de índice del elemento entre corchetes. Si se quiere acceder a un rango de indices se separan por ":" ambos índices.
- Es posible convertir listas en tuplas simplemente poniendo la lista dentro de los paréntesis de la tupla, por ejemplo,
tupla_lista = ([1, "Hola", 3.141592, [1 , 2, 3], Image.HAPPY])
A continuación vemos un ejemplo.
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Diccionarios (dict)
Estas estructuras contienen la colección de elementos con la forma clave:valor separados por comas y encerrados entre {}. Las claves son objetos inmutables y los valores pueden ser de cualquier tipo. Sus principales características son:
- En lugar de por índice como en listas y tuplas, en diccionarios se acceder al valor por su clave.
- Permiten eliminar cualquier entrada.
- Al igual que las listas, el diccionario permite modificar los valores.
- El método
dicc.get()accede a un valor por la clave del mismo. - El método
dicc.items()devuelve una lista de tuplasclave:valor. - El método
dicc.keys()devuelve una lista de las claves. - El método
dicc.values()devuelve una lista de los valores. - El método
dicc.update()añade elementoclave:valoral diccionario. - El método
del diccborra el parclave:valor. - El método
dicc.pop()borra el parclave:valor.
A continuación vemos un ejemplo
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Bucles
Los Bucles son un tipo de estructura de control muy útil cuando queremos repetir un bloque de código varias veces. En Python existen dos tipos de bloques, el bucle for para contar la cantidad de veces que se ejecuta un bloque de código, y el bucle while que realiza la acción hasta que la condición especificada no sea cierta.
While
La sintaxis de while es la siguiente:
while condicion:
bloque de codigo
donde "condicion", que se evalúa en cada iteración, puede ser cualquier expresión realizado con operadores condicionales que devuelva como resultado un valor True o False. Mientra que "bloque de codigo" es el conjunto de instrucciones que se estarán ejecutando mientras la condición sea verdadera (True o '1'). Es lo mismo poner while true: que poner while 1:.
Para recorrer los bucles se utilizan variables que forman parte de la condición, estableciendose en esta lo que deben cumplir.
Un ejemplo sencillo podría ser el siguiente, controlar el riego de una planta en función del valor de la humedad de la tierra en la que está.
from microbit import *
while (humedad() < 45):
display.scroll(Image.SAD)
sleep(1000)
display.show(Image.HAPPY)
que hará que si la humedad baja por debajo de 45 se muestre una carita triste indicando que hay que regar y si es mayor mostrará una carita feliz. Evidentemente hay que resolver el tema de como obtener la humedad, pero esa es una historia que veremos mas adelante.
El bucle while puede tener de manera opcional un bloque else cuyas sentencias se ejecutan cuando se han realizado todas las iteraciones del bucle. Un ejemplo lo vemos a continuación:
cuenta = 0
while cuenta < 5:
print("Iteración del bucle")
cuenta = cuenta + 1
else:
print("bucle finalizado")
for
Son también bucles pero su acción está dirigida a contar el número de veces que ocurre algo o realizar una acción un determinado número de veces. Es especialmente útil para recorrer los datos de una lista, tupla o diccionario.
La sintaxis de este tipo de bucles en Python es:
for variable in secuencia:
declaracion
Siendo "variable" la variable que se va a recorrer en el bucle de forma que cuando se alcance el valor establecido se sale del bucle.
La variable puede ser una cadena, un rango de valores que se expresa con range(n), siendo n el número de valores del rango que se inicia en 0 y que pueden ser iterados con una variable. Mas ampliamente, la sintaxis de range() es range(start, stop, step) siendo start y stop opcionales.
Veamos un primer ejemplo en el que vamos a utilizar un bucle para encender uno a uno por filas los LEDs de la primera y última columna.
from microbit import *
for var in range(5): # var puede tomar 5 valores, del 0 al 4
display.set_pixel(0, var, 9) # Se ilumina el LED de la fila 0 y el valor de var para columna
sleep(300)
display.set_pixel(4, var, 9) # Se ilumina el LED de la fila 4 y el valor de var para columna
sleep(300)
Los bucles se pueden anidar, es decir se puede crear un bucle dentro de otro del mismo o diferente tipo, de forma que por cada iteración del bucle mas externo se tienen que producir todas las iteraciones del bucle mas interno. Veamos como ejemplo el de encender todos los LEDs de uno en uno, de izquierda a derecha, utilizando el valor de sus coordenadas x,y. El programa sería:
from microbit import *
display.clear()
for y in range(0, 5): # Valor de columna
for x in range(0, 5): # Valor de fila
display.set_pixel(x, y, 9) # Encender LED x,y
sleep(100)
En la animación siguiente vemos el programa en funcionamiento.

Federico Coca Guia de Trabajo de Microbit CC-BY-SA
El bucle for puede tener de manera opcional un bloque else cuyas sentencias se ejecutan cuando se han realizado todas las iteraciones del bucle. Un ejemplo lo vemos a continuación:
for var in range(5):
print(var)
else:
print("bucle finalizado")
Bucle for decontando
Se trata del mismo bucle for pero ahora la cuenta la realizamos hacia atrás. Hay dos formas sencillas de hacerlo:
- Utilizando la función
range(). Si queremos darle un enfoque Pythonic simplemente configuramos los argumentos de la función de manera que se indique el principio, el final y el incremento, que será logicamente negativo.
for i in range(20, 0, -2): #imprimere 20, 18, 16, ... 0
- Utilizando la función
reversed(). Es una función incorporada en la que hay que indicar como primer argumento el final de la cuenta, como segundo el principio, teniendo en cuenta que se omite, y como tercero el decremento si es ditintos de 1, pero se especifica en módulo. Se utiliza así:
for i in reversed(range(0,21,2)): #imprimere 20, 18, 16, ... 0
Sentencias break y continue
La sentencia break se utiliza para terminar un bucle de forma inmediata al ser encontrada. En la imagen vemos la sintaxis de la sentencia break y su funcionamiento.
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
La sentencia continue se utiliza para saltar la iteración actual del bucle y el flujo de control del programa pasa a la siguiente iteración. En la imagen vemos la sintaxis de la sentencia continue y su funcionamiento.
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
En la figura siguiente vemos dos ejemplos de esta sentencia
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Sentencia condicional if...else
En Python hay tres formas de declaración de if...else
- Declaración
if- Declaración
if...else- Declaración
if...elif...else
- Declaración
if. La sintaxix de esta declaración en Python tiene la forma siguiente:
if condicion:
# Cuerpo de la sentencia if
# Código después del if
Si el resultado de evaluar la condición es cierto (True o 1), el código en "Cuerpo de la sentencia if" y lo estará haciendo mientras se cumpla la condición.
En el momento que la condición sea evaluada como falsa (False o 0) el código en "Cuerpo de la sentencia if" se omite y continua la ejecución del programa por "Código después del if". En la figura siguiente vemos la explicación de forma gráfica.
Funcionamiento de la sentencia if
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
1. Declaración if...else. Una sentencia if puede tener de manera opcional una clausula else. La sintaxix de esta declaración en Python tiene la forma siguiente:
if condicion:
# Bloque de sentencias si condicion es True
else:
# Bloque de sentencias si condicion es False
La sentencia se evalúa de la siguiente forma: Si condición es True se ejecuta el código dentro del if y el código dentro del else se omite. Si condición es False se ejecuta el código dentro del else y el código dentro del if se omite. Cuando finaliza bien la parte del if o bien la del else el programa continua con la siguiente sentencia.
En la figura siguiente vemos la explicación de forma gráfica.
Funcionamiento de la sentencia if...else Federico Coca Guia de Trabajo de Microbit CC-BY-SA
- Declaración
if...elif...else. La sentenciaif...elsese utiliza para ejecutar un bloque de código entre dos alternativas posibles. Sin embargo, si necesitamos elegir entre más de dos alternativas, entonces utilizamos la sentenciaif...elif...else. La sintaxis de la sentenciaif...elif...elsees:
if condicion_1:
# Bloque 1
elif condicion_2:
#Bloque 2
else:
# Bloque 3
Se evalúa así: Si condicion_1 es True, se ejecuta Bloque 1. Si condicion_1 es False, se evalúa condicion_2. Si condicion_2 es True, se ejecuta Bloque 2. Si condicion_2 es False, se ejecuta Bloque 3.
En la figura siguiente vemos la explicación de forma gráfica.
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Funciones en Python
En esta sección vamos a dar solamente una breve introducción a lo que son las funciones y los módulos en Python para estudiar dos funciones concretas definidas en MicroPhyton para micro:bit.
Una función es un bloque de código que realiza una tarea específica.
Supongamos que necesitas crear un programa para crear un círculo y colorearlo. Puedes crear dos funciones para resolver este problema:
- crear una función de círculo
- crear una función de color
Dividir un problema complejo en trozos más pequeños hace que nuestro programa sea fácil de entender y reutilizar.
Existen dos tipos de funciones en Python:
- Standard library functions (Funciones de biblioteca estándar). Son funciones incorporadas en Python que están disponibles para su uso.
- User-defined functions (Funciones definidas por el usuario). Podemos crear nuestras propias funciones para que cumplan con nuestros requisitos.
La sintaxis de una función es la siguiente:
def nombre_funcion(argumentos):
#Cuerpo de la función
return
Donde,
defes la palabra reservada para declarar una funciónnombre_funciones el nombre que le damos a la funciónargumentoses el valor o valores pasados a la funciónreturnretorna un valor desde la función. Es opcional
Veamos un ejemplo sencillo que no manda parametros ni retorna nada.
def saludo():
print("Hola Mundo!")
saludo() #Llama a la función
print("Programa")
saludo()
print("Otra vez programa")
Va a generar como salida la cadena "Hola Mundo!" seguida de la cadena "Programa" seguida otra vez de "Hola Mundo!" y finaliza con "Otra vez programa".
Cuando se llama a la función, el control del programa pasa a la definición de la función, se ejecuta todo el código dentro de la función y despés el control del programa salta a la siguiente sentencia después de la llamada a la función.
Como ya se ha mencionado, una función también puede tener argumentos. Un argumento es un valor aceptado por una función. Cuando creamos una función con argumentos necesitamos pasar los correspondientes valores cuando la llamamos.
De forma genérica una función con argumentos tiene la siguiente sintaxis:
def funcion(arg1, arg2, ar3,...):
#Código
#Llamada a la función
funcion(valor1, valor2, valor3, ...)
#Código
Cuando llamamos a la función le pasamos los valores correspondiendo valor1 a arg1, valor2 a arg2 y así sucesivamente.
La llamada a la función se puede hacer mencionando el nombre del argumento, que es lo que se conoce como 'argumentos con nombre', siendo el código totalmente equivalente al anterior.
funcion(arg1=valor1, arg2=valor2, arg3=valor3, ...)
Una función Python puede o no devolver un valor. Si queremos que nuestra función devuelva algún valor a una llamada realizada a función, utilizamos la sentencia return.
En el ejemplo siguiente se llama a la función cuatro veces con valores diferentes.
def cal_potencia(base, exponente):
resultado = base ** exponente
return resultado
#Llamadas a la función
print('Potencia =', cal_potencia(2,8))
print('Potencia =', cal_potencia(3,3))
print('Potencia =', cal_potencia(4,5))
print('Potencia =', cal_potencia(9,6))
El resultado es:
Potencia = 256
Potencia = 27
Potencia = 1024
Potencia = 531441
En Python, las funciones de la biblioteca estándar son las funciones incorporadas que se pueden utilizar directamente en nuestro programa. Por ejemplo,
print(), imprime la cadena entre comillassqrt(), devuelve la raíz cuadrada de un númeropow(), devuelve la potencia de un número
Estas funciones están definidas dentro de un módulo. Y, para utilizarlas debemos incluir dicho módulo en nuestro programa. Por ejemplo, sqrt() y pow() están definidos en el módulo math. Para usar las funciones podemos hacer como en el ejemplo siguiente:
import math #Carga el módulo math
raiz = math.sqrt(25)
print("La raiz cuadrada de 25 es ", raiz)
potencia = pow(2, 8)
print("2^8 =", potencia)
En el ejemplo la variable raiz contendrá el cálculo de la raiz cuadrada y se define por defecto como variable real o decimal y potencia contendrá el resultado de elevar a 8 el número 2. Los resultados obtenidos son:
La raiz cuadrada de 25 es 5.0
2^8 = 256
Las principales ventajas de utilizar funciones son:
- Código reutilizable. Podemos llamar a la misma función tantas veces en nuestro programa como necesitemos, lo que hace que nuestro código sea reutilizable.
- Código legible. Las funciones nos ayudan a dividir nuestro código en trozos para que nuestro programa sea mas legible y fácil de entender.
Módulos en Python
A medida que nuestro programa crece, puede contener muchas líneas de código. En lugar de poner todo en un solo archivo, podemos utilizar módulos para separar por funcionalidad los códigos en varios archivos. Esto hace que nuestro código quede organizado y sea más fácil de mantener.
Un módulo es un archivo que contiene código para realizar una tarea específica. Un módulo puede contener variables, funciones, clases, etc. Veamos un ejemplo, vamos a crear un módulo escribiendo algo como lo siguiente:
#Definición del módulo suma
def sumar(a, b):
resultado = a + b
return resultado
Guardamos este programa en un archivo, por ejemplo modulo_sumar.py y tendremos definida una función de nombre sumar en ese módulo. La función recibe dos valores y devuelve la suma.
Cuando, en un programa diferente, queramos sumar dos números podemos importar la definición creada utilizando la palabra reservada import. Para acceder a la función definida en el módulo tenemos que utilizar el operador . (punto). Se parece mucho a que el módulo es una clase y la función una instancia de esa clase.
# Programa de sumas
import modulo_sumar
modulo_sumar.sumar(4, 5) #devolverá 9
Python tiene mas de 200 módulos estándar que pueden ser importados de la misma manera que importamos los módulos definidos por nosotros. En la documentación de Python en español encontramos la referencia a La biblioteca estándar de Python.
Números aleatorios
Este módulo está basado en el módulo random de la librería estándar de Python. Contiene funciones para generar comportamientos aleatorios.
Para acceder a este módulo es necesario:
import random
Vamos a ver sus funciones a continuación.
.getrandbits(n). Retorna un entero con "n" bits aleatorios. La función generadora devuelve como máximo 30 bits, por lo tanto "n" tiene que estar comprendido entre 1 y 30.
random.getrandbits(n)
* .seed(n). Inicializa el generador de números aleatorios con un número entero conocido "n". Esto le proporcionará una aleatoriedad determinista reproducible a partir de un estado inicial dado (n).
random.seed(n)
.randint(a, b). Devuelve un entero aleatorio N tal que a ≤N≤ b.
random.randint(a, b)
.randrange(stop). Devuelve un número entero seleccionado aleatoriamente entre cero y stop, que no está incluido.
random.randrange(stop)
.randrange(start, stop). Devuelve un número entero seleccionado aleatoriamente comprendido entre start y stop. El límite stop no está incluido.
random.randrange(start, stop)
.randrange(start, stop, step). Devuelve un número entero aleatorio entre start y stop separando los valores posibles entre si la distancia establecida por step. Por ejemplorandrange(3, 30, 5)devolverá un valor aleatorio de los siguientes posibles: 3, 8, 13, 18, 23, 28.
random.randrange(start, stop, step)
.choice(secuencia). Devuelve un elemento aleatorio de 'secuencia' que no puede estar vacía. Si 'secuencia' está vacía, genera inIndexError.
random.choice(secuencia)
.random(). Devuelve un número aleatorio en coma flotante en el rango [0.0, 1.0).
random.random()
.uniform(a, b). Devuelve un número aleatorio de coma flotante N tal que a≤N≤ba≤N≤b para a≤ba≤b y b≤N≤ab≤N≤a para b<ab<a.
random.uniform(a, b)
En la imagen vemos ejemplos ejecutados en la shell.
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Solo placa: Hola Mundo
No hay mejor manera para empezar que este sencillo programa
- Entramos en https://python.microbit.org/
- Nos vamos a la pestaña de Reference - Loops y arrastramos el código de While loops infinite
- Cambiamos el texto por "Hola Mundo" y lo simulamos en el microbit virtual de la izquierda
- ¿Lo ha hecho bien? pues conecta tu microbit a tu ordenador, y Sent to Microbit te saldrá un diálogo pidiendo vincular tu microbit, acepta y ya esta !!!!
El código Pytho que ha subido a Microbit es el siguiente, la primera línea importa las librerías para manejar microbit, la segunda es el bucle While y al poner la condición true, se ejecutará siempre, y la instrucción que ejecuta es display.scroll donde visualiza en forma de marquesina el texto que pongamos, también puede ser un número.
from microbit import *
while True:
display.scroll('Hola Mundo')
Solo placa: Imágenes
Extraído de Federico Coca Guia de Trabajo de Microbit CC-BY-SA
API: Display
Control de la matriz de 5x5 LEDs que en micro:bit se conoce como pantalla. Los métodos de la clase son:
display.get_pixel(x, y) #1
display.set_pixel(x, y, val) #2
display.clear() #3
display.show(image, delay=0, wait=True, loop=False, clear=False) #4
display.scroll(string, delay=400) #5
'''
1 Obtiene el brillo [0 (apagado) a 9 (máx))] del pixel (x,y)
2 Establece el brillo [0 (apagado) a 9 (máx))] del pixel (x,y)
3 Borra (apaga) la pantalla
4 Muestra la imagen
5 Desplaza una cadena por la pantalla a la velocidad en ms del *delay*
'''
En ambos casos de la API existen otras muchas opciones no incluidas. La funcionalidad de autocompletar nos ayudará para no tener que recordar la sintaxis y conocer las que no aparece aquí. En la animación siguiente vemos un ejemplo de ambos casos.

Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Imágenes prediseñadas
MicroPython nos ofrece muchas imágenes integradas para mostrar por pantalla y podemos crear efectos interesantes.
from microbit import *
while True:
display.show(Image.HEART)
sleep(500)
display.show(Image.HEART_SMALL)
sleep(500)
Las opciones son múltiples:
Image.HEART
Image.HEART_SMALL
Image.HAPPY
Image.SMILE
Image.SAD
Image.CONFUSED
Image.ANGRY
Image.ASLEEP
Image.SURPRISED
Image.SILLY
Image.FABULOUS
Image.MEH
Image.YES
Image.NO
Image.CLOCK12,Image.CLOCK11,Image.CLOCK10,Image.CLOCK9,Image.CLOCK8,Image.CLOCK7,Image.CLOCK6,Image.CLOCK5,Image.CLOCK4,Image.CLOCK3,Image.CLOCK2,Image.CLOCK1
Image.ARROW_N,Image.ARROW_NE,Image.ARROW_E,Image.ARROW_SE,Image.ARROW_S,Image.ARROW_SW,Image.ARROW_W,Image.ARROW_NW
Image.TRIANGLE
Image.TRIANGLE_LEFT
Image.CHESSBOARD
Image.DIAMOND
Image.DIAMOND_SMALL
Image.SQUARE
Image.SQUARE_SMALL
Image.RABBIT
Image.COW
Image.MUSIC_CROTCHET
Image.MUSIC_QUAVER
Image.MUSIC_QUAVERS
Image.PITCHFORK
Image.PACMAN
Image.TARGET
Image.TSHIRT
Image.ROLLERSKATE
Image.DUCK
Image.HOUSE
Image.TORTOISE
Image.BUTTERFLY
Image.STICKFIGURE
Image.GHOST
Image.SWORD
Image.GIRAFFE
Image.SKULL
Image.UMBRELLA
Image.SNAKE,Image.ALL_CLOCKS,Image.ALL_ARROW
Imágenes DIY
Es perfectamente posible crear nuestras propias imágenes configurando cada Pixel o LED de la pantalla. También es posible crear animaciones con imágenes.
Crear nuestras propias imágenes va a resultar una tarea sencilla cuando conozcamos la información para hacerlo. Cada pixel (LED) de la pantalla se puede configurar con diez valores que pueden tomar un valor entre 0 (cero) y 9 (nueve). Cuando le damos valor 0 (cero) es decirle literalmente que el brillo es nulo y sin embargo cuando le damos el valor 9 (nueve) lo ponemos al máximo de brillo posible. Podemos jugar con todos los valores intermedios para crear niveles de brillo.
La forma mas sencilla de definir una imagen consiste en utilizar la clase microbit.Image para crearla a partir de una cadena o string que devuelva el pictograma. Es decir utilizando el comando Image(string) teniendo que constar de dígitos con los valores 0 a 9 indicados. Para verlo rápidamente hacemos el ejemplos de dibujar una X en relieve asignándola a una variable.
mi_imagen_X = Image("90009:"
"06060:"
"00300:"
"06060:"
"90009")
Los dos puntos indican un salto de línea por lo que se puede usar el ASCII no imprimible "\n" que es precisamente eso, un salto de línea.
mi_imagen_X = Image("90009\n"
"06060\n"
"00300\n"
"06060\n"
"90009")
Los valores de brillo dan la sensación de relieve de profundidas a la X.
En cualquier caso esto no se escribe normalmente así, salvo para hacer mas o menos un gráfico del pixelado, sino en una sola línea.
mi_imagen_X = Image("90009\n06060\n00300\n06060\n90009")
Ahora parece mas elegante utilizar los dos puntos como indicador de salto de línea.
mi_imagen_X = Image("90009:06060:00300:06060:90009")
En la imagen vemos el resultado de lo explicado.
Imagen de una X en relieve
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Este es el código creado:
from microbit import *
"""mi_imagen_X = Image("90009\n"
"06060\n"
"00300\n"
"06060\n"
"90009")"""
#mi_imagen_X = Image("90009\n06060\n00300\n06060\n90009")
mi_imagen_X = Image("90009:06060:00300:06060:90009")
display.show(mi_imagen_X)
Animar imágenes
En micro:bit Python ya disponemos de un par de listas de imágenes incorporadas que se llaman
Image.ALL_Clocks
Image.ALL_ARROWS
Estas dos ordenes hacen que MicroPython entienda que necesita mostrar cada imagen de la lista, una tras otra.
Cuando queremos mostrar en la pantalla una imagen se nos muestra la siguiente ayuda contextual:
Ayuda contextual para display.show()
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
donde nos indica claramente que image puede ser una cadena, un número, una imagen o una lista de imágenes. Además aparecen las opciones que podemos configurar.
Con esta información crear un "reloj" que esté continuamente marcando cada hora es bastante sencillo, basta con poner el siguiente código y darle a simular.
# Imports go at the top
from microbit import *
display.show(Image.ALL_CLOCKS, delay=400, loop=True)
En la animación vemos el funcionamiento de este "reloj".
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Si cambiamos el reloj por las flechas veremos como van rotando flechas en ángulos de 45 grados.

Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Para animar nuestras propias imágenes tendremos que crear cada una sobre un lienzo de 5x5 pixeles y establecer las diferencias para crear la animación. Podemos crear tantas imágenes como creamos oportuno. Creamos una lista con todas las imágenes en el orden que se tienen que reproducir y ya podemos mostrar nuestra lista en la pantalla.
En la animación siguiente vemos un efecto creado de esta forma.

Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Este es el código para crear la animación.
# Imports go at the top
from microbit import *
display.clear()
cor1=Image("90000:90000:90000:90000:90000")
cor2=Image("79000:79000:79000:79000:79000")
cor3=Image("57900:57900:57900:57900:57900")
cor4=Image("35790:35790:35790:35790:35790")
cor5=Image("13579:13579:13579:13579:13579")
cor6=Image("01357:01357:01357:01357:01357")
cor7=Image("00135:00135:00135:00135:00135")
cor8=Image("00013:00013:00013:00013:00013")
cor9=Image("00001:00001:00001:00001:00001")
cor10=Image("00000:00000:00000:00000:00000")
todas_las_cortinas=[cor1,cor2,cor3,cor4,cor5,cor6,cor7,cor8,cor9,cor10]
display.show(todas_las_cortinas, delay=100, loop=True)
Funciones para la pantalla
microbit.display.get_pixel(x, y). Devuelve el brillo del LED en la columna x y la fila y como un número entero entre 0 (apagado) y 9 (brillante).microbit.display.set_pixel(x, y, value). Establece el brillo del LED en la columna x y la fila y como un número entero entre 0 y 9.microbit.display.clear(). Apaga (pone el brillo a 0) todos los LEDs.microbit.display.show(image). Muestra la imagen.microbit.display.show(image, delay=400, *, wait=True, loop=False, clear=False). Siimagees una cadena, un real o un entero, muestra las letras/dígitos en secuencia. De lo contrario, siimagees una secuencia iterable de imágenes, muestra estas imágenes en secuencia. Cada letra, dígito o imagen se muestra con undelayde milisegundos entre ellos.
Si wait es True, esta función se bloqueará hasta que la animación termine, de lo contrario la animación ocurrirá en segundo plano.
Si loop es True, la animación se repetirá para siempre.
Si clear es True, la pantalla se borrará después de que las iteraciones hayan terminado.
Los argumentos wait, loop y clear deben especificarse utilizando su palabra clave.
microbit.display.scroll(text, delay=150, *, wait=True, loop=False, monospace=False). Desplaza el texto horizontalmente en la pantalla. Si el texto es un número entero o flotante, se convierte primero en una cadena mediante str(). El parámetro delay controla la velocidad de desplazamiento del texto.
Si wait es True, esta función se bloqueará hasta que la animación termine, de lo contrario la animación ocurrirá en segundo plano.
Si loop es True, la animación se repetirá para siempre.
Si monospace es True, todos los caracteres ocuparán 5 columnas de píxeles de ancho, de lo contrario habrá exactamente 1 columna de píxeles en blanco entre cada carácter mientras se desplazan.
Los argumentos wait, loop y monospace deben especificarse utilizando su palabra clave.
microbit.display.on(). Enciende la pantalla.microbit.display.off(). Apaga la pantalla. Esto permitirá reutilizar los pines GPIO asociados a la pantalla para otros fines.microbit.display.is_on(). DevuelveTruesi la pantalla está encendida, en caso contrario devuelveFalse.microbit.display.read_light_level(). Utiliza los LEDs de la pantalla en modo de polarización inversa para detectar la cantidad de luz que incide sobre la pantalla. Devuelve un número entero entre 0 (oscuridad) y 255 (máximo brillo) que representa el nivel de luz.
Extraído de Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Solo placa: Imágenes estáticas y animadas
Imágenes estáticas
Sin tocar el código anterior, vamos ahora a Display y arrastramos el código de sonrisa
Vamos a tocar el código para que quede de esta forma, de esta manera practicamos la edición de código
# Imports go at the top
from microbit import *
# Code in a 'while True:' loop repeats forever
while True:
display.show(Image.SMILE)
sleep(1000)
display.scroll('Hola mundo')
La sonrisa se ve un segundo = 1.000 mseg y luego ejecuta el scroll
¿¿ Qué esperas para experimentar otras imágenes ?
Imágenes animadas
Podemos poner las imágenes prediseñadas en la variable Image pero también podemos crearlas fácilmente. En el siguiente programa se define qué led de la matriz 5x5 se enciende a la máxima intensidad (0-9)
Avanzando en la programación, se definen 5 variables catedux tipo imagen, y se define una variable all_catedus que es tipo array que contienen todas.
from microbit import *
catedu1 = Image("00900:"
"09000:"
"90000:"
"09000:"
"00900")
catedu2 = Image("09000:"
"90000:"
"09000:"
"00900:"
"00090")
catedu3 = Image("90000:"
"09000:"
"00900:"
"00090:"
"00009")
catedu4 = Image("00009:"
"00090:"
"00900:"
"09000:"
"90000")
catedu5 = Image("00090:"
"00900:"
"09000:"
"90000:"
"09000")
all_catedus = [catedu1,catedu2,catedu3,catedu2,catedu1,catedu5,catedu4]
while(True):
display.show(all_catedus, delay=200)
O jugar con las intensidades: En este juego de luces del coche fantástico se utiliza la intensidad media 5 :
Este ejemplo de regular la intensidad del led es imposible de realizar en programación por bloques.
from microbit import *
catedu1 = Image("00005:"
"00000:"
"00000:"
"00000:"
"00000")
catedu2 = Image("00009:"
"00050:"
"00000:"
"00000:"
"00000")
catedu3 = Image("00005:"
"00090:"
"00500:"
"00000:"
"00000")
catedu4 = Image("00000:"
"00050:"
"00900:"
"05000:"
"00000")
catedu5 = Image("00000:"
"00000:"
"00500:"
"09000:"
"50000")
catedu6 = Image("00000:"
"00000:"
"00000:"
"05000:"
"90000")
catedu7 = Image("00000:"
"00000:"
"00000:"
"00000:"
"50000")
all_catedus = [catedu1,catedu2,catedu3,catedu4,catedu5,catedu6,catedu7,catedu6,catedu5,catedu4,catedu3,catedu2]
while(True):
display.show(all_catedus, delay=100)
¿No sabes lo que es el coche fantástico? eso es que no tienes la edad adecuada para la robótica 😁
También podemos hacerlo pixel a pixel y no utilizar variables tipo array
from microbit import *
display.clear()
while(True):
for n in range(0, 5):
display.set_pixel(n, 3, 9)
if (n<4):
display.set_pixel(n+1, 3, 5)
if (1<n):
display.set_pixel(n-1, 3, 5)
if (1<n):
display.set_pixel(n-2, 3, 0)
sleep(200)
for n in reversed(range(0, 5)):
display.set_pixel(n, 3, 9)
if (n<4):
display.set_pixel(n+1, 3, 5)
if (1<n):
display.set_pixel(n-1, 3, 5)
if (n<3):
display.set_pixel(n+2, 3, 0)
sleep(200)
Solo placa: Eventos para los botones
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Si trabajamos con versiones anteriores a V2 solamente disponemos de los botones A, B y A+B, pero si tenemos una versión V2 también disponemos del botón táctil incorporado en el logo, aunque a todos los efectos este se considera un pin de entrada.
El logo no es tratado exactamente como un botón, sino como un pin de nombre logo. En el borde existen otros tres pines, los 0, 1 y 2. Por ello la forma de trabajar con el logo va a ser un poco diferente, como veremos en la actividad A04.
La diferencia fundamental, ademas de la forma, es que el logo es un sensor capacitivo y los pines son sensores resistivos. En la práctica esto significa que el logo funciona simplemente tocandolo y los pines necesitan cerrar el circuito con GND, por lo que para que funcionen como pulsador debemos tocar tanto el pinto como GND.
Si queremos que MicroPython reaccione a los eventos de pulsación de los botones, debemos ponerlo en un bucle infinito y comprobar si el botón is_pressed.
- Función
is_pressed()
Para trabajar con los botones de la micro:bit tenemos disponibles funciones que se han cargado al importar el módulo microbit. Estas funciones están basadas en la función genérica is_pressed() pensada para saber que tecla de un teclado se ha pulsado. Sin embargo, en el caso de MicroPython a para micro:bit a estos botones se les ha asignado un nombre a cada uno, button_a para el A y button_b para el B, de manera que para usarlos se llama al botón y con el operador . a la función is_pressed(). Por ejemplo, button_a.is_pressed() es el código encargado de saber si estamos pulsando el botón A y button_b.is_pressed() si lo es el B.
- Función
get_pressed()
Esta función retorna el total acumulado de pulsaciones de botones y restablece este total a cero antes de volver. Es decir, podemos capturar el número de veces que hemos pulsado un botón. El valor de retorno es un número, por lo que, para mostrarlo en la pantalla de LEDs hay que convertirlo en cadena con la función str().
- Función
was_pressed()
Devuelve True o False para indicar si se ha presionado el botón desde la última vez que se inicio el dispositivo o se llamó a este método. Llamar a este método borra el estado de que ha sido pulsado, de modo que el botón debe pulsarse de nuevo antes de que este método vuelva a retornar True.
Vamos a hacer un ejemplo que aclarará mejor lo explicado. Se trata de crear un programa (le podremos de nombre Caritas_X) en el que mientras mantegamos pulsado el botón A se muestra una cara sonriente, si no se pulsa ningún botón se muestra una cara triste y si se pulsa el botón B la cara desaparece (se apagan todos los LEDs) y tras 2 segundos aparece una X que se va haciendo cada vez mas grande partiendo del punto central. Finalmente pasados otros 2 segundos el programa vuelve a empezar. El código es:
from microbit import *
while True:
while True:
if button_a.is_pressed():
display.show(Image.HAPPY)
elif button_b.is_pressed():
break
else:
display.show(Image.SAD)
display.clear()
sleep(2000)
mi_X_peque = Image("00000:00000:00900:00000:0000")
display.show(mi_X_peque)
sleep(200)
mi_X_media = Image("00000:09090:00900:09090:0000")
display.show(mi_X_media)
sleep(200)
mi_X_grande = Image("90009:09090:00900:09090:90009")
display.show(mi_X_grande)
sleep(2000)
En la animación siguiente vemos como funciona

Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Si observamos con cuidado apreciaremos que en algún momento se accionan los botones A y B pero los que aparecen en la parte inferior, debajo de la pantalla de simulación. Están al lado de un logotipo que indica que se pulsen con una flechita. Justo debajo de estos aparecen los citados del borde de placa y el logo junto a ellos, pues es tratado asi, como un pin, y además a su izquierda hay un candado cerrado indicativo de que no se está usando ninguno de ellos. En la imagen siguiente se ve mejor lo indicado.
Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Vamos a crear otro ejemplo en el que se cuenten las veces que pulsamos el botón A o el botón B durante un tiempo de 3 segundo. El programa es el siguiente:
from microbit import *
sleep(3000) #Espera de 3 segundos
#Convertimos número a cadena con str()
pulsado = str(button_b.get_presses())
display.show(pulsado)
# Por si hemos pulsado mas de 9 veces
display.scroll(pulsado)
En la 'Referencia' del compilador, dentro de Botones tenemos un ejemplo que nos indica el botón que hemos pulsado con cuatro opciones posibles, el A, el B, A o B y finalmente A y B. Animamos a cargarlos y probarlos para familiarizarnos todo lo posible con ellos.
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA
Solo placa: Botones
Los botones pueden dar juego, combinándolos con la instrucción if --- else
from microbit import *
while True:
if button_a.is_pressed():
display.show(Image.HAPPY)
elif button_b.is_pressed():
break
else:
display.show(Image.SAD)
display.clear()
Extraido de tutorial https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/buttons.html
¿Qué pasa si pulsamos el botón B ?
En el apartado Reference podemos ir a Buttons tenemos diferentes muestras de código :
La diferencia entre este código
while True:
if button_a.was_pressed():
display.scroll('A')
y este otro código
while True:
if button_a.is_pressed():
display.scroll('A')
es muy sutil, no hay diferencia si apretamos el botón A excepto si lo mantenemos pulsado
El siguiente código, visualiza el número de veces que pulsas el botón A durante 3 segundos :
from microbit import *
display.scroll('Press A')
sleep(3000)
display.scroll(button_a.get_presses())
Solo sensores de la placa
Podríamos continuar, pero solo con la placa podemos hacer muchos más programas con Python
Nivel de luz
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA Vamos a ver como utilizar ...
Temperatura
La función en micropython para leer la temperatura de la placa en ºC interna y devuelve un valor ...
Magnetómetro
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA Este módulo permite accede...
Acelerómetro
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA Este objeto permite accede...
Micrófono
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA ATENCIÓN SÓLO VÁLIDO PARA ...
Radio
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA El módulo de radio permite...
Pines de Entrada/salida
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA En MicroPython, cada pin e...
Input output
Una manera rápida de probar las entradas y salidas de microbit es utilizar el código predefinido ...
Música predefinida o crea tu música
SALIDAS DE AUDIO La placa Microbit v2 tiene un altavoz incorporado que se puede anular o activar...
Musica
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA MicroPython de BBC micro:b...
Putty
Putty es un programa que nos permite realizar comunicaciones, normalmente se usa en protocolo SSH...
UART
Página extraída de Federico Coca Guia de Trabajo de Microbit https://fgcoca.github.io/Guia-de-tr...
Registro de datos
Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA Grabar datos Para utiliza...
Solo placa: Música
Tan fácil como elegir la música y arrastrar el código:
Si te sabe a poco aquí tienes más
Maqueta: Intermitente led amarillo
Nos vamos a https://python.microbit.org/ y ponemos este código:
from microbit import *
display.show(Image.HOUSE)
pin16.write_digital(0)
while True:
pin16.write_digital(1)
sleep(1000)
pin16.write_digital(0)
sleep(1000)
Maqueta: LED amarillo intermitente gradual
Vamos a hace lo mismo pero que el brillo vaya del mínimo 0 al máximo 255 y viceversa, aprovechando las señales PWM
from microbit import *
display.show(Image.HOUSE)
pin16.write_digital(0)
brillo=0
while True:
for brillo in range (0, 255):
pin16.write_analog(brillo)
sleep(5)
while brillo >0 :
pin16.write_analog(brillo)
brillo = brillo -1
sleep(5)
¿Qué es eso de señal PWM?
Arduino, ESP32, Micro:bit, PicoW... tienen entradas analógicas y digitales. Pero salidas sólo digitales.
Para simular una salida analógica entre 0V y 5V se utilizan señales digitales PWM. En Arduino sólo tiene 6 salidas pseudo-analógicas. En los pines digitales 3, 5, 6, 8, 10 y 11 son PWM
¿Qué es eso de PWM? La señal PWM (Pulse Width Modulation, Modulación de Ancho de Pulso) es una señal que utiliza el microcontrolador para generar una señal continua sobre el proceso a controlar. Por ejemplo, la variación de la intensidad luminosa de un led, el control de velocidad de un motor de corriente continua,...
Para que un dispositivo digital, microcontrolador de la placa Arduino, genere una señal continua lo que hace es emitir una señal cuadrada con pulsos de frecuencia constante y tensión de 5V. A continuación, variando la duración activa del pulso (ciclo de trabajo) se obtiene a la salida una señal continua variable desde 0V a 5V.
Veamos gráficamente la señal PWM:
Los pines digitales de la placa Arduino que se utilizan como salida de señal PWM generan una señal cuadrada de frecuencia constante (490Hz), sobre esta señal periódica por programación podemos variar la duración del pulso como vemos en estos 3 casos:
- La duración del pulso es pequeña y la salida va a tener un valor medio de tensión bajo, próximo a 0V.
- La duración del pulso es casi la mitad del período de la señal, por tanto, la salida va a tener un valor medio de tensión próximo a 2,5V.
- La duración del pulso se aproxima al tiempo del período y el valor medio de tensión de salida se aproxima a 5V.
Ejemplo en código ArduinoIDE y Arduino
Para ejecutar una señal PWM, es simplemente analogWrite(analogOutPin, outputValor); donde analogOutPin es el número del Pin PWM, acuérdate que sólo puede ser uno de estos 6 : 3, 5, 6, 8, 10 y 11 y outpuValor es el valor de la señal PWM pero ojo desde 0 a 255 es decir si quieres el valor de 0V tienes que poner 0, si quieres el valor de 5V tienes que poner 255 y si quieres poner un valor medio, haz una regla de tres, por ejemplo 2.5V tienes que poner 255/2=127 o 128 da igual
Otro ejemplo en Python con Micro:bit
pin16.write_analog(brillo) donde brillo puede ir de 0 a 255
Maqueta: Neopixel RGB
Vamos a hacer una discoteca !!!
from microbit import *
import neopixel
NEOPIXEL = neopixel.NeoPixel(pin14, 4)
from random import randint
while True:
for index in range(0, 4):
NEOPIXEL.clear()
NEOPIXEL[index] = (randint(10, 255), randint(10, 255), randint(10, 255))
NEOPIXEL.show()
sleep(100)
Maqueta : Sensor PIR
Vamos a visualizar la lectura del sensor PIR por el puerto serie:
from microbit import *
DETECTO = 0
display.show(Image.SILLY)
while True:
DETECTO = pin15.read_digital()
print("digital signals:", DETECTO)
sleep(100)
El resultado :
Servos
Hay varias opciones para manejar servos con micro:bit y python
Opción A: Lo más sencillo enviar un pulso adecuado
Los servos funcionan según la anchura del pulso que se envía, siendo los pulsos de 20mseg. Se explica mejor con una imagen :
Autor Luis Llamas CC-BY-SA https://www.luisllamas.es/controlar-un-servo-con-arduino/
- Por lo tanto podríamos establecer primero pulsos de 20 mseg con la instrucción adecuada (por ejemplo en la pueta pin 8 sería pin8.set_analog_period(20) )
- Enviar pulsos de forma adecuada. Ejemplo en puerta pin 8
- si queremos 0º enviamos pulsos de 1mseg que equivale a pin8.write_analog(50)
- si queremos 90º enviamos pulsos de 1.5mseg que equivale a pin8.write_analog(75)
- si queremos 180º enviamos pulsos de 2mseg que equivale a pin8.write_analog(100)
Los valores no responden a una regla de tres (en teoría 20mseg serían 255 en formato PWM) sino a la experiencia-ensayo-prueba-error. Hemos probado que para la puerta los valores 50-75-100 son correctos. Para la ventana que se ve bien la apertura y cierre los valores son 30-60-100
Mas info en https://support.microbit.org/support/solutions/articles/19000101864-using-a-servo-with-the-micro-bit
Opción B Cargar una librería servo.py
- Nos vamos a https://github.com/microbit-playground/microbit-servo-class y descargamos servo.py
- Lo grabamos en la carpeta /mu_code/ donde se ha instalado el editor Mu
- Utilizamos el código usando esta librería y poniendo los grados como grados
Por ejemplo para la puerta pin 8
sv1 = Servo(pin8)
sv1.write_angle(50) # turn servo to 50 degrees
Si quieres saber cómo se instala una librería, consulta la página LCD que ahí se ha instalado una librería https://libros.catedu.es/books/smart-home-para-microbit/page/maqueta-lcd
Opción C Crea tu una librería en tu programa
Esta opción esta extraída del tutorial del fabricante https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#project-6-servo
No explicamos el código pues se extiende de los objetivos del curso
from microbit import *
class Servo:
def __init__(self, pin, freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.analog_period = 0
self.pin = pin
analog_period = round((1/self.freq) * 1000) # hertz to miliseconds
self.pin.set_analog_period(analog_period)
def write_us(self, us):
us = min(self.max_us, max(self.min_us, us))
duty = round(us * 1024 * self.freq // 1000000)
self.pin.write_analog(duty)
sleep(100)
self.pin.write_analog(0)
def write_angle(self, degrees=None):
if degrees is None:
degrees = math.degrees(radians)
degrees = degrees % 360
total_range = self.max_us - self.min_us
us = self.min_us + total_range * degrees // self.angle
self.write_us(us)
Servo(pin8).write_angle(0)
display.show(Image.HAPPY)
while True:
Servo(pin8).write_angle(0)
sleep(1000)
Servo(pin8).write_angle(45)
sleep(1000)
Servo(pin8).write_angle(90)
sleep(1000)
Servo(pin8).write_angle(135)
sleep(1000)
Servo(pin8).write_angle(180)
sleep(1000)
Maqueta puerta
Utilizaremos la versión sencilla de manejo de los servos :
from microbit import *
pin8.set_analog_period(20) # pulsos de 20 milisegundos cada uno
while True:
pin8.write_analog(50) #equivale a 1mseg de pulso a la derecha
sleep(1000)
pin8.write_analog(75) #equivale a a 1.5mseg
sleep(1000)
pin8.write_analog(100) #equivale a 2mseg de pulso todo a la izquierda
sleep(1000)
Maqueta: Ventana
Para la ventana hemos usado el mismo código pero jugando, hemos visto que la ventana cierra mejor a valores más bajos
- pin9.write_analog(30) todo abierto
- pin9.write_analog(60) media ventana
- pin9.write_analog(100) ventana cerrada
el código
from microbit import *
pin9.set_analog_period(20) # pulsos de 20 milisegundos cada uno
while True:
pin9.write_analog(30) #equivale a 1mseg de pulso a la derecha
sleep(1000)
pin9.write_analog(60) #equivale a a 1.5mseg
sleep(1000)
pin9.write_analog(100) #equivale a 2mseg de pulso todo a la izquierda
sleep(1000)
Maqueta: Motor
El motor tiene un sencillo funcionamiento:
| PIN12 | PIN13 | MOTOR |
| 0 | 0 | PARADO |
| 0 | 1 | ROTACIÓN SENTIDO RELOJ |
| 1 | 0 | ROTACIÓN SENTIDO ANTIRELOJ |
| 1 | 1 | PARADO |
Pero con Pytho no sólo podemos poner los pines 12 y 13 a 0 o 1 sino también podemos poner su potencia
Valora qué pasa en cada una de las 4 situaciones siguiente
from microbit import *
pin12.write_digital(0)
pin13.write_digital(0)
while True:
# 1 Que pasa 1 ##########♥1
display.scroll('1')
pin12.write_digital(1)
pin13.write_analog(50)
sleep(5000)
# Paramos
pin12.write_digital(0)
pin13.write_analog(0)
sleep(1000)
# 2 Que pasa 2 ##########♥2
display.scroll('2')
pin12.write_digital(1)
pin13.write_analog(255)
sleep(5000)
# Paramos
pin12.write_digital(0)
pin13.write_analog(0)
sleep(1000)
# 3 Que pasa 3 ##########♥3
display.scroll('3')
pin12.write_digital(1)
pin13.write_digital(0)
sleep(5000)
# Paramos
pin12.write_digital(0)
pin13.write_analog(0)
sleep(1000)
# 4 Que pasa 4 ##########♥4
display.scroll('4')
pin12.write_digital(1)
pin13.write_digital(1)
sleep(5000)
# Paramos
pin12.write_digital(0)
pin13.write_analog(0)
sleep(1000)
# 5 Que pasa 5 ##########♥5
display.scroll('5')
pin12.write_digital(0)
pin13.write_digital(1)
sleep(5000)
# Paramos
pin12.write_digital(0)
pin13.write_analog(0)
sleep(1000)
Maqueta: LCD
El display LCD no es nativo, y no hay una solución simple como en los servos (ver https://libros.catedu.es/books/smart-home-para-microbit/page/servos) luego tenemos que incorporar UNA LIBRERIA EXTERNA para LCS 16x2 (16 columnas 2 filas)
La librería mb_i2c_lcd1602.py
La puedes descargar aquí https://github.com/Pratt-Institute/MicroPython4MicroBit/blob/master/mb_i2c_lcd1602.py
Vamos a utilizar el editor Python online https://python.microbit.org/
Abrimos un nuevo proyecto y le damos a Open
Abrimos el fichero mb_i2c_lcd1602.py que hemos descargado anteriormente
nos pide si queremos reemplazar el contenido de main.py LE DECIMOS QUE NO, que añada un nuevo fichero mb_i2c_lcd1602.py OJO QUE HAY QUE DAR AL ICONO PEQUEÑO que pone en esa imagen
Nuestro programa
Confirmamos, vamos al main.py y pegamos este código
from mb_i2c_lcd1602 import *
l = LCD1620()
l.puts("Hola microbit!")
Y send to micro:bit
Resultado
Maqueta Sensor lluvia
No necesitamos ninguna librería especial. Simplemente leer los valores analógicos del Pin 0. En este caso lo visualizamos por el puerto serie :
from microbit import *
while True:
val = pin0.read_analog()
print("Humedad=", val)
sleep(100)
Para leer el puerto serie en https://python.microbit.org/ lo tienes aquí :
ALARMA LLUVIA
El proyecto pide una alarma. El siguiente código es extraído de https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#project-11-rains-alarm
from microbit import *
import music
display.show(Image.HAPPY)
pin16.write_digital(0)
while True:
if pin0.read_analog() > 500:
music.play("C5:4")
pin16.write_digital(1)
sleep(100)
music.reset()
pin16.write_digital(0)
sleep(100)
music.play("C5:4")
pin16.write_digital(1)
sleep(100)
music.reset()
pin16.write_digital(0)
sleep(100)
else:
music.reset()
pin16.write_digital(0)
Una vez mojado el sensor, si se seca y queda por debajo de 500 se apaga la alarma:
Maqueta: Sensor Gas
Vamos a realizar un detector de gas
from microbit import *
import music
pin16.write_digital(0)
while True:
if pin1.read_digital() == 0:
music.play("C4:4")
pin16.write_digital(1)
sleep(100)
music.reset()
pin16.write_digital(0)
sleep(100)
else:
music.reset()
pin16.write_digital(0)
En este caso acercamos una botella de Alcohol
RETO visualiza la lectura del sensor gas por el pueto serie:
Solución https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#project-12-analog-gas-mq-2-sensor
Maqueta DHT11
Se ha intentado el código de fgcoca y no ha resultado
Se ha intentado con la librería version_2 y con el siguiente código
# Imports go at the top
from microbit import *
from version_2 import *
SENSOR = DHT11(pin2)
while True:
display.show(Image.HEART)
t , h = SENSOR.read()
print("Temperatura=",t)
print("Humedad=",h)
sleep(2000)
Y tampoco ha funcionado, el error lo sigue dando el chequeo de error. Si en la librería version_2 se anula, por el puerto serie no salen los valores correctos.
Si consigues hacer funcionar el DHT11 de la maqueta con Python dínoslo, https://catedu.es/informacion/
🤔🤔Que curioso que el fabricante no ha puesto código Python en su tutorial https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#expansion-projects
Para saber más ....
MATERIAL KS4027 MICROBIT SMART HOME de Keystudio
(English)
El fabricante pone a disposición numeroso material en este Dropbox que hay que matizar :
- Install Microbit Driver: No hace falta un driver para la microbit , quizás en equipos algo viejos sí que hace falta
- Makecode tutorial Buen material y buenos programas de Makecode
- Python tutorial: También buen trabajo y código para manejo tanto de la placa microbit sin la casa, como con la casa.
- Utiliza el editor Mu. Nosotros preferimos la versión online https://python.microbit.org/ pues Mu ha quedado sin mantenimiento y actualización
- How to Update the firmware La página de Microbit ya ofrece un tutorial más actualizado. https://microbit.org/get-started/user-guide/firmware/
- Maintenance mode Igualmente la página de microbit tiene mejor información https://support.microbit.org/support/solutions/articles/19000082598-maintenance-mode
- Troubleshooting Downloads with WebUSB Consideramos que si hay problemas, la página https://support.microbit.org/support/solutions ofrece mejores soluciones
- Cool Term Dowload es el programa para leer por el puerto USB. No obstante tanto Makecode como Python ya tienen integrado el lector de puerto USB
- Android APK No somos partidarios de instalar apks de terceros y sobre todo porque si instalamos una APP que controla remotamente la maqueta, la maqueta se convierte en un juguete. Si queremos que este material didáctico sea un instrumento para el pensamiento computacional recomendamos crear la APP tal y como lo mostramos en este tutorial https://libros.catedu.es/books/smart-home-para-microbit/page/app-inventor-tu-programa
- No obstante si quieres ver lo que hace la APP que propone el fabricante :
- No obstante si quieres ver lo que hace la APP que propone el fabricante :
Página oficial Keystudio KS4027 KS4028 Smart Home Kit for Micro:bit
(English)
Encontramos numeroso material para la maqueta (replica del anterior Dropbox pero online)
MANUAL DE USO DE SMARTHOME CON MICROBLOCKS
(Catalán)
En este enlace https://drive.google.com/file/d/1Im1-M6GKotzSo-bzsveeBFXFDWAndteQ/view
Créditos
Autores:
- Javier Quintana Peiró CATEDU noviembre 2025 excepto en los párrafos que se indique lo contrario
- Federico Coca GitHub Twitter Instagram Mas información.
- Autor de los siguientes capítulos :
- Jugando fuerte con Python
- Introducción al Python
- Micropython de microbit
- Solo placa Imágenes
- Solo placa: Eventos para los botones
- Jugando fuerte con Python
- Licencia Creative Commons Atribución-CompartirIgual 4.0 International ("CC BY-SA"). Ver: Guia de trabajo para micro:bit - Miscelanea-Licencias https://fgcoca.github.io/Guia-de-trabajo-para-microbit/Miscelanea/lic/
- Autor de los siguientes capítulos :
Cualquier observación o detección de error en soporte.catedu.es
Los contenidos se distribuyen bajo licencia Creative Commons tipo BY-NC-SA excepto en los párrafos que se indique lo contrario.
