Sistema HydroMazing: Jardim Inteligente IoT para Cuidado Avançado de Plantas
Componentes e Materiais
| Componente | Quantidade | Observações |
|---|---|---|
| Raspberry Pi 3 Model B | 1 | OPCIONAL - Internet das Coisas - mensagens de texto |
| Arduino Nano R3 | 2 | |
| Shield de Expansão para Arduino Nano | 2 | |
| Sensor de Temperatura/Umidade DHT21/22 | 1 | Pode precisar de resistor 10k entre Vcc/Data |
| Módulo Fotocélula (Sensor de Luz) | 1 | |
| Módulo Transceptor de Rádio Sem Fio nRF24L01 2.4GHz | 1 | Com ou sem antena SMA |
| Sensor de Temperatura Dallas (para temperatura da solução nutritiva) | 1 | Provavelmente precisa de conector |
| Módulos Transmissor e Receptor RF 433MHz | 1 | |
| Kit 3-5 Tomadas Controladas Sem Fio com Controle Remoto | 1 | |
| Shield LCD com Botões DFRobot para Arduino Uno | 1 |
Ferramentas Necessárias
- Ferro de solda
Software e Serviços Online
- Arduino IDE
- Microsoft Visual Studio 2015
Sobre o Projeto
Não era minha intenção fazer um produto. Eu simplesmente queria resolver um problema comum. Quero cultivar plantas em ambientes internos ou sob condições controladas. Como posso criar um ambiente ideal para as plantas prosperarem usando eletrônicos comumente disponíveis e itens domésticos? Qual é melhor, solo ou hidroponia?
O hydroMazing é uma ferramenta para facilitar o fornecimento de condições ideais de cultivo para cultivar plantas com sucesso em casa. Um sistema independente de coleta de dados e interface web localizada no seu próprio dispositivo, não em uma nuvem remota.
~
Aprender a cultivar plantas pode ser complicado e caro. As plantas são resistentes, mas apenas um descuido inocente pode arruinar sua colheita. Você pode evitar esses erros caros deixando um sistema de jardinagem inteligente fazer o trabalho duro por você!


Automação Residencial
Há dois anos, decidi tentar usar um microcontrolador Arduino Uno para substituir meus termostatos de tomada programáveis individuais Lux WIN100 para aquecimento e resfriamento. Essas tomadas controlam um aparelho, como um pequeno aquecedor ou, neste caso, um ventilador de exaustão. Um dispositivo conectado à tomada liga e desliga o aparelho usando configurações de temperatura que você programa manualmente em cada dispositivo. Essa técnica para controlar ventiladores é eficaz, mas usa vários cabos de extensão. Os controladores de tomada de temperatura usam relés antiquados para comutar o estado do dispositivo. Minha tentativa inicial foi hackear uma caixa de extensão inserindo meus próprios relés e conectando-os ao Arduino Uno. Não demorou muito para haver uma bagunça de fios com muitas porcas de conector e eu me senti desencorajado.

Uma ideia de automação residencial que eu tinha há um tempo era usar tomadas AC controladas sem fio que usam um controle remoto portátil. Hackear o controle remoto para enviar o sinal do botão LIGAR ou DESLIGAR selecionado por um pino correspondente no Arduino Uno não deveria ser muito difícil, certo? A preocupação persistente que me impedia de testar essa ideia era o medo de que o sinal não fosse confiável e o Uno pudesse "pensar" que havia ligado um dispositivo quando na verdade falhou. Eventualmente, consegui me convencer de que a melhor maneira de descobrir é apenas tentar e ver o que acontece. Infelizmente, os resultados desse teste não foram muito melhores que a tentativa com relés.
Uma busca na web por quase qualquer sensor ou componente eletrônico com "Arduino" resultará em vários produtos vendidos por alguns dólares. Neste caso, encontrei os pares transmissor e receptor de 315MHz e 433MHz que estão dentro da faixa de frequência da maioria das tomadas controladas sem fio comerciais. A maior vantagem de usar a família Arduino de microcontroladores para esses tipos de projetos é que você pode encontrar software open-source para começar. Outra busca na web por "biblioteca Arduino" e, neste caso, par transmissor/receptor ou tx/rx. Agora, estava ficando emocionante para mim. Eu podia ler os códigos vindos do controle remoto, gravá-los e então programar o Arduino para controlar as tomadas correspondentes. Projetar o software para operar no Arduino Uno tornou-se o desafio. Os exemplos que vêm com o software Arduino e os exemplos incluídos com bibliotecas são um excelente começo para um projeto. Na minha experiência, uma vez que você começa a combinar e fazer modificações nos exemplos, não demora muito para você bater em uma parede. Não acho que sou um bom programador, acho que sou um perfeccionista teimoso.
Em um dos meus livros favoritos, "Zen e a Arte da Manutenção de Motocicletas", o autor Robert Pirsig fala da armadilha da iniciativa. Essencialmente, a armadilha da iniciativa é um evento ou mentalidade que pode fazer uma pessoa perder o entusiasmo e ficar desencorajada de iniciar ou continuar um projeto. Saber quando persistir através do desconforto e frustração e quando fazer uma pausa e se afastar do projeto são desafios pessoais. Houve momentos em que, se eu tivesse feito uma pausa, talvez não tivesse chegado a uma excelente solução para um conflito no meu código-fonte. Contrariamente, houve momentos em que me afastei por um mês e trabalhei em um tipo completamente diferente de projeto sentindo-me revigorado. Talvez, se o projeto for importante o suficiente, seremos compelidos a voltar a trabalhar nele. A armadilha é nos convencer de que o projeto não vale a pena retornar mesmo quando poderia ser incrível. Talvez realmente não valha a pena retornar para completar e é aí que muitos projetos terminam.
Programação


O software que desenvolvi foi programado no microcontrolador e apresenta um conjunto de parâmetros base para temporização, gerenciamento, transmissão e recebimento de objetos "sensor" e "appliance" (eletrodoméstico). O controle de eletrodomésticos é alcançado através de um conjunto de algoritmos que chamei de "TheDecider" (O Decisor), que toma decisões baseadas nas leituras dos sensores e limites pré-programados e solicita ao microcontrolador para ligar ou desligar as tomadas controladas sem fio. Queria que o sistema fosse facilmente modificado para funcionar com outros ambientes, incluindo aquaponia, cultivo de cogumelos e qualquer coisa onde o controle seja alcançado pela leitura de sensores e operação de eletrodomésticos baseada em regras programadas. As tomadas controladas sem fio provaram ser um método confiável de controlar os ventiladores usando o Arduino para enviar os sinais dependendo das leituras do sensor de temperatura. Não demorou muito para o código-fonte evoluir para uma besta. A família Arduino de microcontroladores é limitada em quantas instruções pode executar e atingir o limite de tamanho do programa não demora muito quando você quer controlar mais do que alguns LEDs piscando. Descobri que a limitação de tamanho me forçou a escrever código melhor e mais eficiente do que faço inicialmente. Mesmo com manipulação criativa de variáveis e bibliotecas personalizadas, eventualmente há necessidade de outro microcontrolador ou de migrar para um maior.
Monitoramento Sem Fio Sem Internet


Existem várias maneiras de os microcontroladores se comunicarem entre si. O método sem fio mais barato que encontrei é o transceptor de rádio sem fio nRF24L01. O módulo é uma variedade de bluetooth de baixa potência e leve, dando ao hydroMazing a capacidade de se comunicar com uma unidade de monitoramento.
Decidi adicionar outro Arduino Uno com um shield LCD para que eu pudesse exibir o que os sensores estavam lendo, o estado dos eletrodomésticos e alertas com notificações.
Criei minha própria plataforma aberta e adaptável que pode ser personalizada para uma ampla variedade de necessidades e condições de jardinagem; ainda assim, um sistema sem fio autossuficiente. A arquitetura aberta do sistema permite facilidade de integração de conectividade Internet e serviços web.
Monitoramento via Internet



Entre o Raspberry Pi conectado com um módulo nRF24L01.
Consegui modificar grande parte do meu código-fonte Arduino para ouvir transmissões recebidas e então gravar esses dados em alguns arquivos. Primeiro, um arquivo de log que captura todas as comunicações entre o Pi e o Monitor hydroMazing. Em seguida, o programa grava o estado atual de todos os objetos sensores e um arquivo para todos os objetos eletrodomésticos. Quando um alerta ocorre, o programa cria um arquivo contendo esse alerta. Adicionei então um script PHP para ler os objetos de dados de seus respectivos arquivos e exibir ao vivo no servidor Apache do Pi.
Em seguida, escrevi um script Python para ler o diretório do arquivo de alertas e, se existir, ler o arquivo, analisar as informações pertinentes e então enviar e-mail ou SMS para o usuário. Além de enviar um alerta por e-mail ou texto, o script Python move o arquivo de alerta para posição para o script PHP ler e exibir. Usando os arquivos de log criados, sou capaz de importar os dados para um banco de dados. Uma vez que os dados do hydroMazing são registrados em um banco de dados residente no Raspberry Pi, podemos começar a realizar análises e gerar relatórios. O monitoramento e controle do sistema é feito principalmente para nós, mas quando o hydroMazing precisa nos alertar sobre um problema, agora pode fazer isso usando o Raspberry Pi.
O Assistente de Jardim hydroMazing que o guia durante todo o seu cultivo! O sistema fornece feedback e dicas sobre como gerenciar os problemas que o hydroMazing identifica. www.hydroMazing.com
Monitoramento da Solução Nutritiva



O nível da solução nutritiva do sistema de recipientes hidropônicos deve ser monitorado.
À medida que o nível da solução nutritiva diminui, ele precisa ser reposto com água fresca, caso contrário a solução nutritiva se torna mais concentrada e algumas plantas não responderão bem. O Controlador de Nutrientes hydroMazing pode ativar uma bomba que adiciona água fresca para trazer a concentração de volta ao nível em que começou, frequentemente referido como "complemento". O Controlador de Nutrientes hydroMazing também monitorará seu pH e EC, ativando bombas para gerenciar a solução e notificando você quando precisar fazer mudanças.



Quer Mais?
- Crise Existencial - Simulador de RPG Arduino
- Por que DIY quando você pode comprar?
- O que é um Jardim "Inteligente"?
- Iniciando um Jardim Interno Inteligente
- Aprofundando na Jardinagem Interna
- Jardinagem Interna: O que pode dar errado?
- Gerenciamento de Sistemas de Solução Nutritiva
- Por que Arduino quando você pode usar Pi?
Código
Configurações dos Objetos (CoreSettings.h)
O arquivo CoreSettings.h contém muitas configurações críticas, incluindo a rede nRF, os códigos do controle remoto das tomadas AC, as definições dos objetos Timer, Appliance e Sensor usados pelo sistema hydroMazing.
/* CoreSettings.h - Configurações principais do hydroMazing */
#ifndef __CORESETTINGS_H__
#define __CORESETTINGS_H__
#ifdef ARDUINO
#define RX_PIN 103
#define TONE_PIN 104
#define TX_PIN 8
uint8_t node_address = 1;
uint8_t totalNodes = 3;
unsigned long lastRxTimeStamp = 0;
const uint64_t nRFbaseAddress = 1034834473100;
uint8_t nRFaddress = 0;
uint64_t tx_pipes[3] = { 0xF0F0F0F0F8LL, 0xF0F0F0F0F7LL, 0xF0F0F0F0F6LL };
uint64_t rx_pipes[3] = { 0xF0F0F0F0F1LL, 0xF0F0F0F0F2LL, 0xF0F0F0F0F3LL };
/************************************************************************/
// Tomadas AC Controladas Sem Fio
/************************************************************************/
// ETEKCITY #0319
uint8_t totalSwitches = 5;
unsigned long mySwitchOn[] = {24,333107,333251,333571,335107,341251};
unsigned long mySwitchOff[] = {24,333116,333260,333580,335116,341260};
/************************************************************************/
/* Comunicações I2C */
/************************************************************************/
const int MY_ADDRESS = 42;
const int SEND_TO_ADDRESS = 22;
/************************************************************************/
/* Temporizadores */
/************************************************************************/
Timer Timer_txData = { TIMER_TX_DATA, 30000UL, true, false, 0, NULL };
Timer Timer_Lcd = { TIMER_LCD, 12000UL, true, false, 0, &Timer_Log };
Timer Timer_Lcd_Cycle = { TIMER_LCD_CYCLE, 6000UL, true, false, 0, &Timer_Lcd };
Timer Timer_Lcd_Scroller = { TIMER_LCD_SCROLLER, 500UL, true, false, 0, &Timer_Lcd_Cycle };
Timer Timer_Save_Settings = { TIMER_SAVE_SETTINGS, 3600000UL, true, false, 0, &Timer_txData };
Timer Timer_Sensor_Read = { TIMER_SENSOR_READINGS, 7000UL, true, false, 0, &Timer_Save_Settings };
Timer Timer_Alerts = { TIMER_ALERTS, 45000UL, true, false, 0, &Timer_Sensor_Read };
Timer Timer_rxData = { TIMER_RX_DATA, 6000UL, true, false, 0, &Timer_Save_Settings };
/************************************************************************/
// Inicialização de Eletrodomésticos
/************************************************************************/
Appliance Appliance_Light_1 = {101, 1, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, NULL };
Appliance Appliance_IntakeFan = {104, 1, APPLIANCE_INTAKE_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_Light_1 };
Appliance Appliance_ExhaustFan = {103, 1, APPLIANCE_EXHAUST_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_IntakeFan };
Appliance Appliance_Humidifier = {102, 0, APPLIANCE_HUMIDIFIER, DEFAULT_TIME, true, false, OFF, &Appliance_ExhaustFan };
Appliance Appliance_Heater = {101, 0, APPLIANCE_HEATER, DEFAULT_TIME, true, false, OFF, &Appliance_Humidifier };
Appliance Appliance_FeedPump = {105, 1, APPLIANCE_PUMP, DEFAULT_TIME, true, false, OFF, &Appliance_Heater };
uint8_t totalAppliances = 6;
/************************************************************************/
// Inicialização de Sensores
/************************************************************************/
Sensor Sensor_Photocell = { PIN_A0, 1, SENSOR_PHOTO, 100, 50, 100, 0, 25, NULL };
Sensor Sensor_Temp = { PIN7, 1, SENSOR_TEMPF, 50, 70, 80, 0, 75, &Sensor_Photocell };
Sensor Sensor_Humidity = { PIN7, 1, SENSOR_HUMIDITY, 50, 40, 70, 0, 50, &Sensor_Temp };
Sensor Sensor_WaterTemp = { PIN3_INT1, 1, SENSOR_WATER_TEMPF, 100, 50, 70, 0, 65, &Sensor_Humidity };
Sensor Sensor_Flow = { PIN2_INT0, 2, SENSOR_FLOW, 100, 50, 50, 0, 75, &Sensor_WaterTemp };
Sensor Sensor_Float = { PIN_A2, 1, SENSOR_FLOAT, 100, 0, 1, 0, 1, &Sensor_Flow };
Sensor Sensor_Voltage = { PIN1_TX, 1, SENSOR_VOLTAGE, 100, 0, 100, 0, 50, &Sensor_Float };
uint8_t totalSensors = 7;
Esquemáticos
Ventiladores de entrada e exaustão, luzes de cultivo, aquecedores, desumidificadores e bombas controlados automaticamente via tomadas AC sem fio.
Tomadas AC sem fio comumente usadas neste projeto.
Montado e em testes.
Interface Web do protótipo hydroMazing.
Interface Web do protótipo hydroMazing para notificações de alerta.
Processo de manufatura
- Monitoramento Profissional de Temperatura com Raspberry Pi e DS18B20
- Sistema de Controle de Temperatura Baseado em LM35 com Microcontrolador AT89S52
- Usando ADC MCP3008 para Ler Sensores Analógicos com Raspberry Pi
- Preenchendo a Lacuna de Habilidades em Casas Inteligentes: Por Que a Grã-Bretanha Fica Atrás da Europa
- O Futuro da Vida Urbana: Principais Características de Cidades Inteligentes Emergentes – Parte 1
- Aprimorando a Produção de Bebidas com Monitoramento de Nível de Líquido Habilitado por IoT
- Como Funcionam os Sistemas ABS (Antitravamento): Guia Completo
- Como Funcionam os Sistemas de Ignição Eletrônica: Guia Completo
- Como Funcionam os Sistemas de Ignição por Magneto: Princípios e Aplicações
- O Sistema Americano de Manufatura: História, Técnicas e Impacto