Programas básicos con Smart Agriculture Kit
- OLED
- DHT11
- Sonda sumergible DS18B20
- Servo
- Sensor de agua
- Humedad del suelo
- Led Neopixel
- Sensor de movimiento PIR
- Sensor distancia de ultrasonidos
OLED
Un OLED (Organic light-emitting diode) es un tipo de LED en el que la capa emisiva es está formada por un compuesto orgánico que emite luz en respuesta a la electricidad...
...Las pantallas OLED tienen la ventaja de tener un consumo muy bajo, en torno a 20mA, dado que solo se enciende el pixel necesario y no requieren de backlight. Esto es especialmente interesante en aplicaciones que funcionan con baterías. Además, tienen una mejor visibilidad en ambientes luminosos, como bajo el sol. Aunque el pequeño tamaño de estas pantallas OLED de 0.96” pueden ser un problema para su correcta visualización.
Luis Llamas CC-BY-NC-SA https://www.luisllamas.es/conectar-arduino-a-una-pantalla-oled-de-0-96/
La pantalla OLED nos permitirá visualizar variables y mensajes muy fácilmente :
Para tener las instrucciones OLED instalaremos la extensión de ELECFREAKS
E instala estas instrucciones
En este programa visualiza el nivel de luz (el sensor esta integrado en la placa microbit) en el OLED:
- Inicializa la pantalla OLED como 128x64 pixeles
- limpia de anteriores mensajes
- Enseña la frase (con salto de línea)
- Enseña frase sin salto de línea
- Enseña número con salto de línea
El resultado:
https://makecode.microbit.org/S69148-73800-11713-89082
DHT11
La lectura de este sensor que es doble, lleva un protocolo que lo hemos visto en el apartado de sensores por lo que utilizaremos alguna función definida de alguna extensión.
La extensión recomendada es la que instala el fabricante ELECFREAKS en la extensión Environment
La instrucción esta un poco escondida
Para ver su funcionamiento, vamos a visualizar su valor en la pantalla OLED :
https://makecode.microbit.org/S31229-07212-54331-00904
El resultado
Sonda sumergible DS18B20
El sensor DS18B20 es un sensor barato y, sin embargo, bastante avanzado. Dispone de un rango amplio de medición de -55ºC a +125ºC y una precisión superior a ±0.5°C en el rango –10°C de +85°C.
Una de las ventajas del DS18B20 es que se comercializa tanto en un integrado TO-92 como en forma de sonda impermeable, lo que permite realizar mediciones de temperatura en líquidos y gases.Luis LLamas CC-BY-NC-SA https://www.luisllamas.es/temperatura-liquidos-arduino-ds18b20/
Esto nos permite hacer mediciones en agua incluso hirviendo.
Recomendamos usar una extensión específica para esta sonda, buscar como DS TEMP
Esto nos instala estas dos instrucciones:
El siguiente programa:
- Prepara OLED
- Esta rutina permite visualizar por el OLED si hay algún error
- Grabamos en la variable TEMPERATURA el valor que lee la sonda en el P1
- Visualizamos el valor
https://makecode.microbit.org/S42317-53460-45843-40235
Aquí podemos ver que marca cerca de 90ºC en una infusión:
Servo
Nos da mucho juego y permite muchos proyectos. El fabricante sólo proporciona uno 😢 ¡¡¡ que sólo cuesta 2€ !!
Para utilizarlo no hace falta ninguna extensión en pines tenemos las instrucciones correspondientes
Vamos a hacer un programa para que veas que sólo puede girar de 0º a 180º
- Creamos una variable angulo y al principio le asignamos el valor de 0 por lo tanto obligamos que empiece con ese valor
- Fijamos el ángulo del servo que esta en el pin P9 al valor de la variable ángulo dentro del bucle para siempre. Una pausa breve de ms que podemos bajar si queremos que vaya más rápido
- si la variable ángulo supera los 180 que vuelva a "resetearse" a 0
- la variable ángulo se va incrementando de 10 en 10 con otra pausa. Estos valores se pueden cambiar para conseguir la velocidad deseada
https://makecode.microbit.org/S99415-22198-23132-97526
RETO: Crear un programa que alimente automáticamente a los animales, mediante una programación semanal, es decir dado una fecha, que se active el servo que abrirá la compuerta del silo durante un tiempo determinado. Solución
RETO: Crear un programa que proteja las plantas de la luz directa, es decir si la luz es mayor que un cierto valor, se acive el servo que pondrá una sombra a la planta. Solución
Sensor de agua
Este tipo de sensores detectan la presencia de lluvia por la variación de conductividad del sensor al entrar en contacto con el agua. Luis Llamas CC-BY-NC-SA https://www.luisllamas.es/arduino-lluvia/
Para este sensor no utilizaremos ningúna extensión especial, la instrucción lectura de pin analógico correspondiente es suficiente y fiable, no tiene protocolo de datos como los otros sensores :
- Inicializamos el OLED
- Grabamos en una variable nueva AGUA el valor del pin analógico P2
- Visualizamos la lectura
https://makecode.microbit.org/S42209-00876-15805-47351
Aquí vemos el resultado
RETO: VISUALIZALO EN FORMA DE TANTO POR CIEN:
La variable analógica va de 0 a 1024 si quieres que visualice valores de 0 a 100 tienes que "mapear" o "cambio de variable" una forma de hacerlo es con la instrucción. (también hay otra de mapear en "Pines").
O de forma casera, con una regla de 3, es decir multiplicarlo por 100/1024
Humedad del 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/
Te proponemos este sencillo programa para poder calibrar y medir las humedades del suelo :
- Inicializamos el OLED
- Grabamos en una variable la lectura del pin P4
- Visualizamos en el OLED la lectura
Para este sensor no utilizaremos ningúna extensión especial, la instrucción lectura de pin analógico correspondiente es suficiente y fiable, no tiene protocolo de datos como los otros sensores :
https://makecode.microbit.org/S85526-52667-76006-02288
RETO: VISUALIZALO EN FORMA DE TANTO POR CIEN:
La variable analógica va de 0 a 1024 si quieres que visualice valores de 0 a 100 tienes que "mapear" o "cambio de variable" una forma de hacerlo es con la instrucción. (también hay otra de mapear en "Pines").
O de forma casera, con una regla de 3, es decir multiplicarlo por 100/1024
RETO: Este sensor junto con el servo pide a gritos un proyecto de riego automático: ¿Te atreves?
Led Neopixel
Los leds Neopixels son "chulos" cuando hay muchos, pues los datos van pasando de un led a otro y tiene mucho juego pero en este caso el fabricante sólo ha puesto uno 😢
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/
Para utilizar este elemento tenemos que descargarnos la Extensión Neopixel y tendremos las instrucciones adecuadas.
Vamos a hacer UNA LUZ CREPUSCULAR PARA LA GRANJA es decir que cuando sea de noche se encienda la luz
- Inicializamos el led neopixel en el pin P14 con 1 led y formato GRB (se refiere al orden de envío de las instrucciones, primero el green, luego red y luego blue, hay otro formato que es más común el RGB)
- Si la luz ambiental (detectado por el sensor integrado en la placa micro:bit) es menor que 50 (un valor arbitrario para detectar si es de noche o es de día)
- Apaga la luz si es de día
- Enciende la luz si es de noche
https://makecode.microbit.org/S47979-61604-21560-37629
Sensor de movimiento PIR
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/
Para este sensor no utilizaremos ningúna extensión especial, la instrucción lectura de pin analógico correspondiente es suficiente y fiable, no tiene protocolo de datos como los otros sensores :
Vamos a hacer una alarma sencilla:
- Inicializamos el OLED
- Si la lectura del sensor es mayor que 100 (valor arbitrario) es que hay "alguien"
- Si hay alguien
- lo visualizo por el OLED
- sale la palabra INTRUSO
- y reproduce un tono de alarma
- Si no hay nadie
- sale el valor por el OLED
- sale que no hay nadie
- una breve pausa para no saturar la placa
PROPUESTA: Ajusta el valor arbitrario del paso 2 para que detecte personas pero no animales
https://makecode.microbit.org/S47327-01515-95700-67184
RETO: VISUALIZALO EN FORMA DE TANTO POR CIEN:
La variable analógica va de 0 a 1024 si quieres que visualice valores de 0 a 100 tienes que "mapear" o "cambio de variable" una forma de hacerlo es con la instrucción. (también hay otra de mapear en "Pines").
O de forma casera, con una regla de 3, es decir multiplicarlo por 100/1024
Sensor distancia de ultrasonidos
Hardware
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 😍
Software
La extensión recomendada es la que instala el fabricante ELECFREAKS en la extensión Environment
Y en una sección que pone Octopus
Vamos a hacer un programa que visualice las mediciones:
- Preparamos la OLED
- En una variable nueva DISTANCIA recoge la medida del sensor que está conectado en el pin P13
- visualiza la DISTANCIA en el OLED
https://makecode.microbit.org/S66928-56344-60970-73771
En la foto me he colocado a aproximadamente 11cm de los "ojos"