Smart Home para Micro:bit ¿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. BBC Micro. Dominio público. 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 en el robot mClon   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 Disparo láser en Arduino con ArduinoBlocks Apertura de puerta en Domotica con Arduino 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: Alarma por fuego en Domótica con Arduino 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: Smart Home Microbit Smart Home ESP32 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). Smart Agriculture Kit micro:bit 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 : Curso de Domótica con Arduino Smart Agriculture Kit micro:bit 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 :  Smart Home para Microbit Smart Agriculture Kit para Microbit 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 Timbre Arduino con Echidna Arduino blocks en el aula 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 Domótica con Arduino, interruptor crepuscular Intermitente RGB en Arduino con ArduinoBlocks 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 : en  Arduino con código Arduinoblocks en el aula Smart Home para Microbit 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 https://makecode.microbit.org/   -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 https://learningml.org/lml-scratch/ -Se puede usar IA -En vivo Es el que proponemos en el curso de micro:bit en LearningML BLOQUES Classroom Microbit https://classroom.microbit.org/ - Se puede crear una clase, enviar proyectos a los alumnos, corregir.... BLOQUES Microblocks https://microblocks.fun/ -Código abierto BLOQUES mBlock -Permite usar multitud de extensiones Recomendamos usar la versión descargada no la online CÓDIGO PYTHON https://python.microbit.org/ - 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 PYTHON ( tutorial específico para SmartHome para Micro:bit in English ) 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 Para acceder al entorno basta con abrir en un navegador cualquiera el enlace: https://makecode.microbit.org/.  Si nuestro navegador tiene desactivadas las cookies o navega en modo incógnito, aparecerá un mensaje de advertencia: 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 Y outube 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 Y outube 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 Y outube 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 Y outube 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 Y outube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube Un lateral del tejado tiene la tira de leds Captura Y outube 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 Y outube 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 Y outube KS4027 (KS4028)Microbit Smart Home autor Keyestudio licencia Youtube Juntamos las paredes con el techo y el suelo de la planta 2 Captura Y outube 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 Y outube 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 Y outube 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 Y outube 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 Y outube 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 Y outube 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 Y outube 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: El resultado : 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 DH11MICROBLOCKS.ubp 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 10 9 ) 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 SMARTHOMEMICROBIT.aia 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 Ver https://appinventor.mit.edu/explore/ai2/setup 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, t iene 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 binario Deben comenzar por 0b. Por ejemplo: 0b110, 0b11 string son frases, son " cadenas " de caracteres entre "  bool Solamente hay dos literales booleanos True o False lista Se pueden declarar variables que son conjuntos por ejemplo Colores = ["verde", "rojo", "naranja" ] Para crear una variable puedes usar cualquier palabra, x, y, z o Nombre_alumno ... pero algunas palabras no puedes usar,  ver Para visualizar variables puedes usar la  instrucción print poniendo entre paréntesis el valor o variable que quieres visualizar. En la siguiente ventana puedes dar al botón play y ver el resultado Modifica los valores como quieras, es un intérprete , juega y dale al play para ver el resultado  Como puedes ver se ha introducido un operador el + que realiza la suma del valor de x original (43) y se le incrementa una unidad resultando en la impresión un 44. Cadenas Cadenas son secuencias de caracteres, por ejemplo la palabra "banana" fuente 'Python for Everybody'  por  Charles R. Severance Se puede obtener su longitud con la función len, o obtener un carácter ... Operadores Este apartado de operadores es adaptado de Federico Coca  Guia de Trabajo de Microbit  CC-BY-SA Los operadores aritméticos se utilizan para realizar operaciones matemáticas como sumas, restas, multiplicaciones, etc. Operador Descripción Ejemplo + Suma o concatenación en textos 5+3=8 ,  "Hola" + "Mundo" = "Hola Mundo - Diferencia 6-3=3 * Multiplicación 3*3=9 / División 6/2=3 // Parte entera de un cociente 10//3=3 % Resto de un cociente 10%3=1 ** Potenciación 5**2=25 Los operadores de asignación se utilizan para asignar valores a variables. Operador Descripción Ejemplo = Asignación x=4 ,  a = a + 1 += Suma y asignación x+=1  equivale a  x = x + 1 -= Diferencia y asignación x-=1  equivale a  x = x - 1 *= Multiplicación y asignación x*=3  equivale a  x = x * 3 /= División y asignación x/=3  equivale a  x = x / 3 %= Asignación de restos x%=3  equivale a  x = x % 3 **= Asignación de exponentes x**=3  equivale a  x = x ** 3 Los operadores de comparación comparan dos valores/variables y devuelven un resultado booleano: Verdadero o Falso True  o  False . Operador Descripción Ejemplo == Igual a 2==3  retorna  False != Distinto de 2!=3  retorna  True < Menor que 2<3  retorna  True > Mayor que 2>3  retorna  False <= Menor o igual que 2<=3  retorna  True >= Mayor o igual que 2>=3  retorna  False Los operadores lógicos se utilizan para comprobar si una expresión es Verdadera o Falsa. Se utilizan en la toma de decisiones. Operador Descripción Ejemplo and AND lógica a and b #True si a y b son ciertos or OR lógica a or b #True si a o b son ciertos not NOT lógica not a #True si el operador a es falso in pertenencia Devuelve True si pertenece no int no pertenencia Devuelve True si no pertenece is identidad Devuelve True si son iguales is not no identidad Devuelve True si no son inguales Los operadores bit a bit o bitwise actúan sobre los operandos como si fueran cadenas de dígitos binarios. Operan bit a bit: Operador Descripción Ejemplo & AND bit a bit 5&6 # 101 & 110 = 110 = 4 | OR bit a bit 5 \| 6 # 101 \| 110 = 111 = 7 ~ NOT bit a bit ~3 # ~011 = 100 = -4 ^ XOR bit a bit 5^3 # 101^011 = 110 = 6 << Desplazamiento izquierda 4<<1 # 100 << 1 = 1000 = 8 >> Desplazamiento derecha 4 >> 1 # 100 >> 1 = 010 = 2 Prueba, juega con este código: Comentarios en Python Una sola línea : Escribiendo el símbolo almohadilla (#) delante del comentario. Multilínea: Escribiendo triple comillas dobles (“””) al principio y al final del comentario. Entradas de teclado Ya hemos visto salidas por pantalla con print , pero ahora con input puede leer variables del teclado, esto es mejor experimentarlo que leerlo : Fíjate que hay que poner las líneas x = float (x) e y = float(y) para convertirlos a números decimales, en caso contrario las interpreta string y no puede multiplicar en Resultado, pero en el siguiente ejemplo  no es necesario en la variable cel (celsius) pues se multiplica por números decimales 32.0 5.0 y 9.0  try y except son dos funciones que son  un seguro para el programador por si el usuario en vez de teclear un número, mete un string o carácter La sangría es importante en Python La sangría se refiere a los espacios al comienzo de una línea de código. Mientras que en otros lenguajes de programación la sangría en el código es solo para facilitar la lectura, la sangría en Python es muy importante ya que se usa para indicar un bloque de código. Condicionales Las instrucciones if: else: son las que nos permiten realizar operaciones según las condiciones puestas. Ojo con la sangría \n es un carácter especial que significa "Salto de página" Bucles while ejecuta lo contenido en la sangría mientras sea verdadero la condición for ejecuta lo contenido en la sangría mientras y va recorriendo la variable dentro del rango creado Para verlo mejor vamos a ver estos ejemplos EJEMPLO BUCLE WHILE mientras n sea positivo va ejecutando : imprime n y lo decrementa al decrementar llega un momento que deja de ser positivo y finaliza el bucle EJEMPLO BUCLE WHILE INFINITO Es muy típico en robótica, todo el rato hace el bucle (en robótica para que lea los sensores y realice cosas en los actuadores) pero este ejemplo no esta en un robot sino en tu pc y no queremos que se quede "colgado" luego al teclear "fin" acaba gracias a la instrucción break Fíjate que hay una instrucción continue para que pase a la siguiente iteración provocando que no imprime lo tecleado EJEMPLO BUCLE FOR FRIENDS Va recorriendo la variable friend dentro del cojunto lista friends como puedes ver la diferencia entre for y while es que for además recorre la variable EJEMPLO BUCLE FOR mientras n este en el rango de 0 a 5 se ejecuta Venga pruébalo !!! Funciones No vamos a entrar en detalle, pero observa el siguiente código FUNCIONES PREDEFINIDAS Si observas, la primera línea llama a importar una librería externa,  import math donde math es un fichero que tienen funciones predefinidas, vamos a utilizar una de ellas, la raiz cuadrada sqrt luego para llamar a esa función que esta definida dentro de math se hace con la instrucción  math.sqrt FUNCIONES DEFINIDAS POR TI  em este caso, se utiliza la palabra  def para crear una función, que le vamos a pasar tres argumentos a, b y c y para finalizar la función usamos return para devolver el valor que queremos obtener Para saber más de Python CURSO PYTHON FOR EVERYBODY en español ver Curso completo de Python 222pag pdf (*) Descargar Curso completo de Python 422pag (*) Descargar Curso completo de Python desde 0 (*) Ver Curso de Python desde 0 (*) Ver Manual de referencia Python (*) Ver Programación en Python (*) Ver Trabajando con ficheros en Python (*) Ver Programación orientada a objeto en Python (*) Ver un manual para aquellos usuarios con previos conocimientos de Python, como la programación modular y orientada a objetos. También algunos conocimientos de las librerías tkinter   (Para crear interfaces gráficos y SQlite3 (para gestionar bases de datos). (*) Descargar (*) Agradecimientos a Pere Manel  http://peremanelv.com 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 elemento  elem  en la posición  pos  indicada. 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 tuplas  clave: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 elemento  clave:valor  al diccionario. El método  del dicc  borra el par  clave:valor . El método  dicc.pop()  borra el par  clave: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 for Bucle for decontando Sentencias break y continue 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 sentencia  if...else  se 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 sentencia  if...elif...else . La sintaxis de la sentencia  if...elif...else es: 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, def  es la palabra reservada para declarar una función nombre_funcion  es el nombre que le damos a la función argumentos  es el valor o valores pasados a la función return  retorna 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 comillas sqrt() , devuelve la raíz cuadrada de un número pow() , 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 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 ejemplo  randrange(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 in  IndexError . 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 b0 : 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 : 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) KS4027 KS4028 Smart Home Kit for Micro:bit Python Tutorial Introduction: Description: Kit List: Preparations: Assemble the Smart Home Makecode Tutorial Python Tutorial 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 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/ 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.