Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-23 14:40
¡Pero espera hay mas!
Paso 1: Introducción
¿Qué es APEX?
APEX es un dispositivo de monitoreo de plantas inteligente (por no mencionar lindo). ¡Simplemente conéctelo a cualquier planta y mostrará el nivel de "felicidad" de la planta! Este es un gran recordatorio para regar sus plantas si tiene la mala costumbre de olvidarse de regarlas.
¿Como funciona?
Magia. ¡Es una broma! APEX usa un Arduino conectado a un sensor de humedad, que se inserta en el suelo de la planta. Este sensor leerá el contenido de humedad del suelo y luego el Arduino calcula qué cara mostrar.
¿Pero por qué?
¿Por qué no?
Paso 2: Recopilación de piezas y herramientas
¡Entremos en ello! Para este Instructable, necesitará bastantes piezas y herramientas. Afortunadamente para ti, todos se enumeran a continuación:
En el espíritu del Concurso de Microcontroladores, ¡este proyecto se realizó completamente con piezas compradas en Amazon! (no patrocinado)
Lista de partes:
- Arduino Uno
- Pantalla LED 8x8
- Sensor táctil capacitivo
- Sensor de humedad
- Conector de batería de 9V
- Batería de 9V
Lista de herramientas:
- Alambre de calibre 22
- Cinta eléctrica
- Pelacables
- Soldador
- Bomba desoldadora
Una vez que haya reunido todo el equipo necesario, ¡es hora de configurar el software Arduino!
Paso 3: Instalar el IDE de Arduino
Para que este proyecto funcione, necesitaremos poder programar el Arduino. Esto requiere descargar e instalar Arduino Integrated Development Environment (IDE) en su computadora. Es una explicación bastante simple, pero lo guiaré a través del proceso:
1. Visite el sitio web de Arduino
2. Vaya a la página de descargas (Software> Descargas)
3. Haga clic en el enlace de descarga para su sistema operativo.
Nota al margen: el programa funcionará en Windows, Mac y Linux.
4. Instalación en Windows
- Haga doble clic en el archivo descargado para ejecutarlo.
- Haga clic en "Aceptar" para aceptar la licencia
- Siga el resto de las indicaciones
- ¡El programa debería estar instalado ahora!
(Asegúrate de mirar las capturas de pantalla si te pierdes)
5. Instalación en Mac
- Haga clic en el archivo descargado
- Elija "Abrir"
- ¡El programa se instalará y ejecutará automáticamente!
(Asegúrese de revisar las capturas de pantalla si se confunde)
6. ¡Eso es
¡Y tu estas listo! ¡Ahora tiene el IDE de Arduino descargado en su sistema!
Paso 4: el código
Este paso tiene que ver con el código. Es un programa bastante corto, así que lo repasaré contigo y te explicaré cómo funciona. Primero, una breve descripción general, luego una explicación en profundidad y, finalmente, ¡cómo llevarlo al Arduino!
La breve descripción
Para aquellos de ustedes que no estén interesados en la explicación detallada del código, ¡les proporciono un segmento TL; DR! Aquí está la explicación básica. El Arduino toma los valores del sensor de humedad cada pocos segundos. Esta información se utiliza para calcular y mostrar una determinada cara. También hay un código al final que permite que el botón táctil capacitivo encienda y apague la pantalla. Bastante simple, ¿verdad?
El Nitty Gritty
Esta parte del tutorial es para aquellos que están muy interesados en cómo funciona todo el programa, línea por línea. Proporcionaré capturas de pantalla arriba para ayudarlo a comprender de lo que estoy hablando, así como también incluir algunas de las líneas de código en esta descripción.
Este programa se divide en cinco secciones:
- Incluir bibliotecas y crear variables
- La función de configuración
- Funciones para expresiones faciales
- La función Write Arduino On Matrix
- La función de bucle
Incluyendo bibliotecas y creando variables:
La primera sección de este código trata sobre las variables y bibliotecas que usaremos.
#include "LedControlMS.h"
#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool iniciado = falso; bool on = verdadero; booleano presionado = BAJO;
La primera línea incluye una biblioteca llamada LedControlMS. Esta biblioteca es necesaria para poder enviar valores a la pantalla LED. La siguiente línea es una declaración de definición que establece el pin para el sensor táctil en 7. Después de eso, tenemos tres variables más que definen los pines para la pantalla LED, el sensor de humedad y su valor. Las últimas tres líneas son todas booleanas que regulan el estado del botón táctil y la pantalla. Después de esto, tenemos nuestros valores de bytes:
byte smile [4] = {B00000100, B00110010, B01100100, B01100000}; byte sorpresa [4] = {B00001110, B00001010, B01101110, B10010000}; byte meh [4] = {B00000100, B00100100, B00100100, B00100000}; byte triste [4] = {B00000010, B01100100, B00110010, B00110000}; byte muerto [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; error de byte [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // Byte de caras malvadas esmile [4] = {B00000010, B00101010, B01000100, B01000000}; byte elaugh [4] = {B00000010, B00101010, B01100100, B01100000}; byte eplain [4] = {B00000010, B00101010, B00100100, B00100000}; octeto ocular [4] = {B00000001, B01101001, B01100010, B01100000}; byte etalk [4] = {B00000001, B00101001, B01100010, B01100000};
Estos valores representan todas las caras de APEX. Cada byte es una matriz que contiene varios bits que dictan el estado de cada píxel en una fila determinada. "1" y "0" representan encendido / apagado respectivamente.
La función de configuración:
Pasando a la siguiente sección, tenemos nuestra función de configuración.
void setup () {// Salida serial MS Serial.begin (9600);
pinMode (TouchSensor, ENTRADA);
// Configuración de la matriz de LED lc.shutdown (0, false); lc.setIntensity (0, 4); lc.clearDisplay (0); }
El nombre lo explica muy bien. Aquí es donde "configuramos" nuestro sensor táctil y la pantalla. Las dos primeras líneas comienzan nuestra salida en serie (utilizada para depurar). La tercera línea establece el pin del sensor táctil en una entrada, y las últimas cuatro líneas inician la pantalla.
Funciones para expresiones faciales:
Esta es probablemente la sección más larga de todas, pero es muy simple y repetitiva.
vacío roto () {lc.setRow (0, 0, error [0]); lc.setRow (0, 1, error [1]); lc.setRow (0, 2, error [2]); lc.setRow (0, 3, error [3]); lc.setRow (0, 4, error [4]); lc.setRow (0, 5, error [5]); lc.setRow (0, 6, error [6]); lc.setRow (0, 7, error [7]); }
void happy () {
lc.setRow (0, 0, sonrisa [0]); lc.setRow (0, 1, sonrisa [1]); lc.setRow (0, 2, sonrisa [2]); lc.setRow (0, 3, sonrisa [3]); lc.setRow (0, 4, sonrisa [3]); lc.setRow (0, 5, sonrisa [2]); lc.setRow (0, 6, sonrisa [1]); lc.setRow (0, 7, sonrisa [0]); }
void plain () {
lc.setRow (0, 0, meh [0]); lc.setRow (0, 1, meh [1]); lc.setRow (0, 2, meh [2]); lc.setRow (0, 3, meh [3]); lc.setRow (0, 4, meh [3]); lc.setRow (0, 5, meh [2]); lc.setRow (0, 6, meh [1]); lc.setRow (0, 7, meh [0]); }
vacío sorprendido () {
lc.setRow (0, 0, sorpresa [0]); lc.setRow (0, 1, sorpresa [1]); lc.setRow (0, 2, sorpresa [2]); lc.setRow (0, 3, sorpresa [3]); lc.setRow (0, 4, sorpresa [3]); lc.setRow (0, 5, sorpresa [2]); lc.setRow (0, 6, sorpresa [1]); lc.setRow (0, 7, sorpresa [0]); }
moribundo vacío () {
lc.setRow (0, 0, muerto [0]); lc.setRow (0, 1, muerto [1]); lc.setRow (0, 2, muerto [2]); lc.setRow (0, 3, muerto [3]); lc.setRow (0, 4, muerto [4]); lc.setRow (0, 5, muerto [5]); lc.setRow (0, 6, muerto [1]); lc.setRow (0, 7, muerto [0]); }
vacío llorando () {
lc.setRow (0, 0, triste [0]); lc.setRow (0, 1, triste [1]); lc.setRow (0, 2, triste [2]); lc.setRow (0, 3, triste [3]); lc.setRow (0, 4, triste [3]); lc.setRow (0, 5, triste [2]); lc.setRow (0, 6, triste [1]); lc.setRow (0, 7, triste [0]); }
void evilsmile () {
lc.setRow (0, 0, esmile [0]); lc.setRow (0, 1, esmile [1]); lc.setRow (0, 2, esmile [2]); lc.setRow (0, 3, esmile [3]); lc.setRow (0, 4, esmile [3]); lc.setRow (0, 5, esmile [2]); lc.setRow (0, 6, esmile [1]); lc.setRow (0, 7, esmile [0]); }
void evillaugh () {
lc.setRow (0, 0, elaugh [0]); lc.setRow (0, 1, elaugh [1]); lc.setRow (0, 2, elaugh [2]); lc.setRow (0, 3, elaugh [3]); lc.setRow (0, 4, elaugh [3]); lc.setRow (0, 5, elaugh [2]); lc.setRow (0, 6, elaugh [1]); lc.setRow (0, 7, elaugh [0]); }
void evilplain () {
lc.setRow (0, 0, eplain [0]); lc.setRow (0, 1, eplain [1]); lc.setRow (0, 2, eplain [2]); lc.setRow (0, 3, eplain [3]); lc.setRow (0, 4, eplain [3]); lc.setRow (0, 5, eplain [2]); lc.setRow (0, 6, eplain [1]); lc.setRow (0, 7, eplain [0]); }
void evilyell () {
lc.setRow (0, 0, eyell [0]); lc.setRow (0, 1, eyell [1]); lc.setRow (0, 2, eyell [2]); lc.setRow (0, 3, eyell [3]); lc.setRow (0, 4, eyell [3]); lc.setRow (0, 5, eyell [2]); lc.setRow (0, 6, eyell [1]); lc.setRow (0, 7, eyell [0]); }
void eviltalk () {
lc.setRow (0, 0, etalk [0]); lc.setRow (0, 1, etalk [1]); lc.setRow (0, 2, etalk [2]); lc.setRow (0, 3, etalk [3]); lc.setRow (0, 4, etalk [3]); lc.setRow (0, 5, etalk [2]); lc.setRow (0, 6, etalk [1]); lc.setRow (0, 7, etalk [0]); }
Estas funciones se utilizan para definir cada expresión facial utilizando nuestros valores de bytes de la primera sección. Cada línea define una posición x y valores de bytes y luego aplica los valores a esa columna. Algunas funciones requieren más líneas porque se usan más filas para mostrar los valores de esa cara. Cada cara es simétrica, por eso repetimos las líneas.
La función WriteArduinoOnMatrix:
La cuarta sección se utiliza para calcular y escribir las caras adecuadas en la pantalla LED. Consiste en una serie de declaraciones else if que verifican los valores del agua y luego configuran la pantalla llamando a diferentes funciones de la sección anterior.
void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {sorprendido (); } else {roto (); }}
Puede notar que agregamos caras "rotas" en caso de que el sensor se salga de los rangos de trabajo. Esto evita algunos errores nulos extraños que suceden y nos da una mejor comprensión visual de lo que está sucediendo dentro del código.
La función de bucle:
Por último, pero no menos importante, está la función de bucle. Este código hace exactamente lo que dice su nombre, ¡se repite! Aunque hay bastantes líneas en esta función, en realidad es bastante simple. El código primero lee el estado del botón y ve si la pantalla está "encendida". Si encuentra que esto es cierto, entonces llamará a la función WriteArduinoOnMatrix, que luego dibujará una cara en APEX. Debido a que esta función se repite, actualizará la pantalla tantas veces como queramos. Este retraso está dictado por la variable delaytime.
bucle vacío () {si (iniciado == verdadero) {tiempo de retardo = 3000; } // Botón de lectura presionado = digitalRead (TouchSensor);
si (presionado) {
si (en == verdadero) {lc.clearDisplay (0); encendido = falso; delay (delaytime); } else {on = true; delay (delaytime); }} sensorValue = analogRead (sensorPin); delay (delaytime); if (on == true) {// Dibujar caras writeArduinoOnMatrix (); }
iniciado = verdadero;
}
Eso es todo lo que hay en el código. ¡Esperamos que ahora comprenda mejor cómo funciona todo y pueda usar este conocimiento para comenzar a personalizarlo para su proyecto!
Empujando el código al Arduino
Ahora que hemos cubierto todo el código, ¡es hora de enviarlo al Arduino! Afortunadamente, el IDE hace que esto sea muy simple. Todo lo que tienes que hacer es conectar tu Arduino a tu computadora con un cable USB, y luego hacer clic en la flecha derecha en la parte superior izquierda del IDE. Deje que el código se inserte y debería ver un mensaje de éxito en la parte inferior del programa si lo hizo bien.
Paso 5: diagrama de circuito
De manera similar al código, el diagrama del circuito no es demasiado complicado. Solo consta de tres sensores y el Arduino, por lo que te diré los pines para cada uno, y si necesitas alguna otra ayuda, solo consulta el diagrama de arriba.
La pantalla LED:
- VCC -> 5 V
- GRD -> GRD
- DIN -> Pin 12
- CS -> Pin 10
- CLK -> Pin 11
El sensor de humedad:
- Positivo -> 5V
- Negativo -> GRD
- Señal -> A5
El sensor táctil capacitivo:
- VCC -> 5 V
- GRD -> GRD
- SIG -> 7
No es demasiado difícil, ¿verdad? Si tiene algún problema con este pin-out, asegúrese de consultar el video a continuación donde le explicaré cómo conectarlo.
Paso 6: Poniéndolo todo junto
Es difícil explicar en texto cómo encaja todo, por lo que definitivamente sugeriría ver el video de esta parte. En realidad, no voy a explicar exactamente cómo armé el mío, es demasiado difícil. Pero para explicar las cosas vagamente, soldé las conexiones de los cables y las envolví alrededor de la parte posterior de la placa. Luego coloqué los sensores y usé cinta aislante para mantenerlo todo junto. Por último, lo probé con la batería de 9 V y, una vez que supe que funcionaba, coloqué la batería en la parte posterior y la pegué también. Como dije antes, VERIFIQUE EL VIDEO PARA ESTE PASO, tiene un pequeño segmento de soldadura que se acelera y lo ayudará a envolver los cables correctamente. Siéntete libre de pausarlo o reproducirlo a la mitad de la velocidad si te pierdes.
¡Felicidades! Si todo salió bien, ¡ahora debería tener una unidad APEX completamente funcional!
Para probar su unidad, busque una planta regada y conéctela. ¡Debería encontrar que está feliz o sorprendido y esto significa que debería estar funcionando! ¡Buen trabajo por completar el proyecto!
Paso 7: Conclusión
¡Y ese es todo Instructable! ¡Gracias por revisar el proyecto! ¡Deje cualquier pregunta y comentario a continuación y asegúrese de seguir a Urban Farming Guys para obtener más tutoriales geniales como este! Nos encantaría saber cómo fue su construcción APEX, ¡y apreciamos mucho las imágenes! Gracias de nuevo por visitarnos, ¡que tengas un gran día!
(¡Este Instructable se inspiró en un proyecto anterior, Plant Emoji!)
PD Este Instructable está inscrito en el concurso de Microcontroladores, ¡así que no olvides votar por nosotros! Se lo agradecemos mucho:)
P. P. S. ¡Consigamos APEX en Make Magazine! Vote aquí ! Gracias:)
Recomendado:
Encendedor de fuegos artificiales Bluetooth remoto: 6 pasos (con imágenes)
Encendedor de fuegos artificiales Bluetooth remoto: ¿No sería bueno encender más de un fuego artificial al mismo tiempo? O incluso tener una distancia segura a explosivos más peligrosos. En este proyecto, le mostraré cómo construir un circuito que puede hacer precisamente eso con la ayuda de la función Bluetooth
Alimentador automático de plantas WiFi con depósito - Configuración de cultivo interior / exterior - Plantas de agua automáticamente con monitoreo remoto: 21 pasos
Alimentador automático de plantas WiFi con depósito - Configuración de cultivo interior / exterior - Riegue las plantas automáticamente con monitoreo remoto: En este tutorial, demostraremos cómo configurar un sistema de alimentador de plantas interior / exterior personalizado que riega las plantas automáticamente y se puede monitorear de forma remota utilizando la plataforma Adosia
Fuegos artificiales LED: 6 pasos (con imágenes)
Fuegos artificiales LED: dos de estas cadenas de LED quedaron de un proyecto anterior.Como era casi la víspera de Año Nuevo, parecía agradable hacer fuegos artificiales LED con él
Encendedor de fuegos artificiales controlado por teléfono simple y económico: 4 pasos (con imágenes)
Encendedor de fuegos artificiales controlado por teléfono simple y económico: ¿Qué es y cómo funciona? Este es un proyecto para principiantes en el que estaremos encendiendo fuegos artificiales usando nuestro teléfono habilitado con bluetooth. El teléfono activará el evento de disparo, el módulo bluetooth de escucha (HC-05) lo comunicará a un
Controlador de fuegos artificiales: 15 pasos (con imágenes)
Controlador de fuegos artificiales: este instructivo está en un controlador de fuegos artificiales de 12 canales que construí durante el verano. Fue muy divertido de construir, ¡y es una maravilla (perdón por el juego de palabras) de operar! No pude encontrar un instructable de buena calidad sobre cómo construir un control completo de fuegos artificiales