Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

O sistema de jardim inteligente hidroMazing

Componentes e suprimentos

Raspberry Pi 3 Modelo B
OPCIONAL - Internet das coisas - mensagem de texto
× 1
Arduino Nano R3
× 2
Arduino Nano Expansion Shield
× 2
Sensor de temperatura / umidade DHT21 / 22
pode precisar de um resistor de 10k entre Vcc / Dados
× 1
Módulo de fotocélula
× 1
nRF24L01 Módulo transceptor de rádio sem fio de 2,4 Ghz
com ou sem antena SMA
× 1
Sensor de temperatura Dallas (para temperatura da solução nutritiva)
provavelmente precisa de um conector
× 1
Módulos transmissores e receptores RF de 433 MHz
× 1
definir 3-5 pack de Tomadas Controladas sem Fio com controle remoto
× 1
DFRobot LCD com botões Shield para Arduino Uno
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)

Aplicativos e serviços online

Arduino IDE
Microsoft Visual Studio 2015

Sobre este projeto








Não era minha intenção fazer um produto. Eu simplesmente queria resolver um problema comum. Quero cultivar plantas dentro de casa ou sob condições controladas. Como posso criar um ambiente ideal para as plantas prosperarem usando os eletrônicos e utensílios domésticos comumente disponíveis? O que é melhor, solo ou hidroponia?

HydroMazing é uma ferramenta para facilitar o fornecimento de ótimas condições de cultivo para o cultivo bem-sucedido de plantas em casa. Um sistema de coleta de dados independente e interface da web localizado em seu próprio dispositivo, não em uma nuvem remota.

~

Aprender como cultivar plantas pode ser complicado e caro. As plantas são resilientes, mas apenas um descuido inocente pode arruinar sua colheita. Você pode evitar esses erros caros deixando um sistema de jardinagem inteligente fazer o trabalho pesado por você!

Há dois anos, decidi tentar usar um microcontrolador Arduino Uno para substituir meu termostato de saída programável individual Lux WIN100. Essas saídas controlam um aparelho, como um pequeno aquecedor ou, neste caso, um ventilador. Um dispositivo conectado à tomada liga e desliga o aparelho usando as configurações de temperatura que você programa manualmente em cada dispositivo. Esta técnica para controlar os ventiladores é eficaz, mas usa vários cabos de extensão. Os controladores de saída de temperatura usam relés antigos para mudar o estado do dispositivo. Minha tentativa inicial foi hackear uma caixa de extensão inserindo meus próprios relés nela e conectando-os ao Arduino Uno. Não demorou muito para que houvesse uma confusão de fios com muitas porcas de conector e eu fiquei desanimado.





Automação residencial


Uma ideia de automação residencial que eu vinha pensando há algum tempo era usar tomadas de CA com controle sem fio que usam um controle remoto portátil. Hackear o controle remoto para enviar o sinal para o botão ON ou OFF selecionado por um pino correspondente no Arduino Uno não deve ser muito difícil, certo? A preocupação incômoda que estava me impedindo 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. Por fim, consegui me convencer de que a melhor maneira de descobrir é apenas tentar e ver o que acontece. Infelizmente, os resultados deste teste não foram muito melhores do que a tentativa de revezamento.

Uma pesquisa na web por quase qualquer sensor ou doo-dad eletrônico com “Arduino” resultará na venda de vários produtos por alguns dólares. Neste caso, encontrei os pares de transmissor e receptor de 315 MHz e 433 MHz que estão dentro da faixa de frequência da maioria das tomadas comerciais sem fio controladas. A maior vantagem de usar a família de microcontroladores Arduino para esses tipos de projetos é que você pode encontrar um software de código aberto para começar. Outra busca na web por uma “biblioteca Arduino” e neste caso, transmissor e receptor ou par tx / rx. Agora, estava ficando excitante para mim. Eu poderia ler os códigos que saiam do controle remoto, gravá-los e então programar o Arduino para controlar as saídas 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 as 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 antes de você bater em uma parede. Não me acho 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 coragem. Essencialmente, a armadilha do bom senso é um evento ou mentalidade que pode fazer com que uma pessoa perca o entusiasmo e desanime de iniciar ou continuar um projeto. Saber quando superar o desconforto e a frustração e quando fazer uma pausa e sair do projeto são desafios pessoais. Houve ocasiões em que, se eu tivesse feito uma pausa, não teria pensado em uma solução excelente para um conflito em meu código-fonte. Ao contrário, houve ocasiões em que me afastei por um mês e trabalhei em um tipo de projeto completamente diferente, sentindo-me revigorado. Talvez, se o projeto for importante o suficiente, sejamos obrigados a voltar a trabalhar nele. A armadilha é nos convencer de que não vale a pena retornar ao projeto, mesmo quando poderia ser incrível. Talvez realmente não valha a pena voltar para terminar e é aqui que muitos projetos terminam.





Programação


O software que desenvolvi foi programado no microcontrolador e apresenta um conjunto de parâmetros básicos para cronometrar, gerenciar, transmitir e receber objetos “sensores” e objetos “eletrodomésticos”. O controle dos aparelhos é obtido por meio de um conjunto de algoritmos que chamei de “TheDecider”, que toma decisões com base nas leituras dos sensores e limites pré-programados e solicita que o microcontrolador ligue ou desligue as tomadas controladas sem fio. Eu queria que o sistema fosse facilmente modificado para funcionar com outros ambientes, incluindo aquaponia, cultivo de cogumelos e qualquer coisa em que o controle seja obtido pela leitura de sensores e operação de aparelhos com base 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 que o código-fonte evoluísse e se tornasse uma besta. A família de microcontroladores Arduino é limitada em quantas instruções pode executar e atingir o limite de tamanho do programa não demora muito quando você deseja controlar mais do que alguns LEDs piscando. Descobri que a limitação de tamanho me forçou a escrever um código melhor e mais eficiente do que inicialmente. Mesmo com manipulação criativa de variáveis ​​e bibliotecas personalizadas, eventualmente, há a necessidade de outro microcontrolador ou de mudar 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 leve e de baixo consumo, dando ao hidroMazing a capacidade de se comunicar com uma unidade de monitoramento.

Decidi adicionar outro Arduino Uno com um escudo de tela de cristal líquido para que eu pudesse exibir o que os sensores estavam lendo, o estado dos aparelhos e alertas com notificações.

Eu fiz minha própria plataforma aberta e adaptável que pode ser personalizada para uma ampla variedade de necessidades e condições de jardinagem; no entanto, também um sistema sem fio independente. A arquitetura aberta do sistema facilita a integração da conectividade com a Internet e os serviços da web.





Monitoramento de Internet


Digite o Raspberry Pi conectado com um módulo nRF24L01.

Consegui modificar muito do meu código-fonte do Arduino para ouvir as transmissões de entrada e, em seguida, gravar esses dados em alguns arquivos. Primeiro, um arquivo de log que captura todas as comunicações entre o Pi e o monitor de hidroMazing. Em seguida, faço com que o programa escreva o estado atual de todos os objetos sensores e um arquivo para todos os objetos de eletrodomésticos. Quando ocorre um alerta, o programa cria um arquivo contendo esse alerta. Em seguida, adicionei 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 houver, leia o arquivo, analise as informações pertinentes e envie um e-mail ou texto SMS para o usuário. Além de enviar um e-mail ou alerta de texto, o script python move o arquivo de alerta para a posição para o script PHP ler e exibir. Usando os arquivos de log que são criados, posso importar os dados para um banco de dados. Uma vez que os dados da hidroMazing são registrados em um banco de dados residente no Raspberry Pi, podemos começar a realizar análises e gerar alguns relatórios. O monitoramento e o controle do sistema são feitos principalmente para nós, mas quando a hidroMazing precisa nos alertar sobre um problema, ele pode agora, usando o Raspberry Pi.

O assistente de jardim hidroMazing que o orienta em todo o seu cultivo! O sistema fornece feedback e dicas sobre como gerenciar os problemas identificados pela hidroMazing. http://www.hydroMazing.com





Monitoramento de solução nutritiva


O nível de solução nutritiva do sistema de contêiner de hidroponia deve ser monitorado.

À medida que o nível da solução nutritiva diminui, ela precisa ser reabastecida com água doce, caso contrário, a solução nutritiva se torna mais concentrada e algumas plantas não respondem bem. O controlador de nutrientes hidroMazing pode ativar uma bomba que adiciona água doce para trazer a concentração de volta ao nível de quando foi iniciado, muitas vezes referido como "complemento". O controlador de nutrientes hidroMazing também monitorará seu pH e CE, ativando bombas para gerenciar a solução e notificando-o quando você precisar fazer alterações.









Quer mais?

  • Crise existencial - Simulador de RPG Arduino
  • Por que faça você mesmo quando você pode comprar?
  • O que é um jardim “inteligente”?
  • Iniciando um jardim interno inteligente
  • Aprofundando-se na jardinagem interna
  • Jardinagem interna:o que pode dar errado?
  • Gerenciando sistemas de solução de nutrientes
  • Por que Arduino quando você pode Pi?

Código

  • Configurações de objetos
Configurações de objetos C / C ++
O arquivo CoreSettings.h contém muitas configurações críticas, incluindo a rede nRF, os códigos de chave remota da tomada CA, as definições de objeto Timer, Appliance e Sensor usadas pelo sistema hydroMazing.
 / ** @file CoreSettings.h * Copyright ( C) 2015 Cory J. Potter - Todos os direitos reservados * Você pode usar, distribuir e modificar este código sob os * termos do LICENSE.txt * NÃO DESTINADO PARA USO COMERCIAL! * Você deve ter recebido uma cópia do LICENSE.txt com * este ficheiro. Caso contrário, escreva para: * / # ifndef __CORESETTINGS_H __ # define __CORESETTINGS_H __ # ifdef ARDUINO // RX_PIN 3 em uso pela Sonda de Temperatura Dallas # define RX_PIN 103 # define TONE_PIN 104 # define TX_PIN 8 // O que é nosso endereço 1 ou 2uint8_t node_address =1; uint8_t totalNodes =3; unsigned long lastRxTimeStamp =0; const uint64_t nRFbaseAddress =1034834473100; uint8_t nRFaddress =0; // 00 - 255 // NOTA:o "LL" no final da constante é tipo "LongLong" // 1034834473185, 1034834473170 // const uint64_t tx_pipes [5] ={0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL1, 1034834473170 // const uint64_t tx_pipes [5] ={0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL1, 0xF0F0F0F14LL1, 0xF0F0F0F14LL1, 0xF0F0F0F141F1, 0xF0F0F0F141F // const uint64_t rx_pipes [5] ={0xF0F0F0F22ALL, 0xF0F0F0F299LL, 0xF0F0F0F308LL, 0xF0F0F0F377LL, 0xF0F0F0F3E6LL}; tx_pipes // uint64_t [3] ={0xF0F0F0F0E8LL, 0xF0F0F0F0E7LL, 0xF0F0F0F0E6LL}; rx_pipes // uint64_t [3] ={0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL}; uint64_t tx_pipes [3] ={0xF0F0F0F0F8LL, 0xF0F0F0F0F7LL, 0xF0F0F0F0F6LL}; uint64_t rx_pipes [3] ={0xF0F0F0F0F0F0F0F0*3, 0xF**3F0F0F0F0F0F0F0F0F0F0*3, 0xF**3, 0xF**3, 0xF** *************************************************** **** /// Chaves de tomada controladas sem fio / *************************************** *********************************** /// ETEKCITY # 1401 // unsigned long mySwitchOn [] ={24 , 1398067,1398211,1398531}; // unsigned long mySwitchOff [] ={24, 1398076,1398220,1398540}; // ETEKCITY # 1405 // unsigned l ong mySwitchOn [] ={24,1135923,1136067,1136387}; // unsigned long mySwitchOff [] ={24,1135932,1136076,1136396}; // ETEKCITY # 1406 // unsigned long mySwitchOn [] ={24,4281651 , 4281795,4282115}; // unsigned long mySwitchOff [] ={24,4281660,4281804,4282124}; // ETEKCITY # 1407 // unsigned long mySwitchOn [] ={24,87347,87491,87811}; // não assinados long mySwitchOff [] ={24,87356,87500,87820}; // ETEKCITY # 1411 // unsigned long mySwitchOn [] ={24.283955,284099,284419}; // unsigned long mySwitchOff [] ={24,283964 , 284108,284428}; // ETEKCITY # 1415 // unsigned long mySwitchOn [] ={24,21811,21955,22275,23811,29955}; // unsigned long mySwitchOff [] ={24,21820,21964,22284, 23820,29964}; // ETEKCITY # 1419 // unsigned long mySwitchOn [] ={24,333107,333251,333571,335107,341251}; // unsigned long mySwitchOff [] ={24,333116,333260,333580,335116 , 341260}; // ETEKCITY # 0319uint8_t totalSwitches =5; unsigned long mySwitchOn [] ={24,333107,333251,333571,335107,341251}; unsigned long mySwitchOff [] ={24,333116,3 33260,333580,335116,341260}; / ***************************************** ********************************* // * I2C Communications * // ********** *************************************************** ************ / const int MY_ADDRESS =42; const int SEND_TO_ADDRESS =22; / ************************* ************************************************* // * Temporizadores * // ********************************************** **************************** /// Timer Object ={(tipo), (intervalo em milis), pronto, acionado, carimbo de data / hora, (ponteiro para o próximo objeto) 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_Ping ={TIMER_SENSOR_READINGS, 10UL, true, false, 0, &Timer_Log} /; / Timer Timer_Lite ={TIMER_LITE, 180000UL, true, false, 0, &Timer_Ping}; 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_Sensor_Read ={TIMER_SENSOR_READINGS, 7000UL, true, false, 0, &Timer_Save_Settings}; // Timer Timer_Sensor_Read ={TIMER_SENSOR_READINGS, 7000UL, true, false, 0, &Timer_Save_Settings}; // Timer Timer_ULTS, verdadeiro , &Timer_Sensor_Read}; Timer Timer_rxData ={TIMER_RX_DATA, 6000UL, true, false, 0, &Timer_Save_Settings}; / ****************************** ********************************************** /// Inicializar aparelhos / *************************************************** *********************** / Appliance Appliance_Light_1 ={101, 1, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, NULL}; // Appliance Appliance_Light_2 ={ 102, 0, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, &Appliance_Light_1}; // Appliance Appliance_Light_3 ={103, 0, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, &Appliance_Light_2}; Appliance Appliance_IntakeFan ={104, 1, APPLIANCE_INTA DEFAULT_TIME, true, false, OFF, &Appliance_Light_1}; Appliance Appliance_ExhaustFan ={1 03, 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_Humidifier ={102, 0, APPLIANCE_HUMIDIFIER, DEFAULT_TIME, true, false, OFF, &Appliance_ExhaustFan}; Appliance_ExhaustFan}; Appliance_HUMIDIFIER ={102, 0, APPLIANCE_HUMIDIFIER, DEFAULT_TIME, true, false, OFF, &Appliance_ExhaustFan}; true, false, OFF, &Appliance_Humidifier}; // Appliance Appliance_AirPump ={PIN4, 2, APPLIANCE_PUMP, DEFAULT_TIME, true, false, OFF, e Appliance_Heater}; Appliance Appliance_FeedPump ={105, 1, APPLIANCE_PUMP, DEFAULT_TIME, true, false, &Appliance_Heater}; uint8_t totalAppliances =6; / ******************************************** ********************************* /// Initialize Sensors / ************* *************************************************** ********* /// Sensor:={pino; node_address; SENSOR_TYPE; frequencia; minVal; maxVal; Carimbo de data / hora UL; valor flutuante; struct Sensor * next; } // NULL para o primeiro - Não podemos apontar para um objeto que ainda não foi criado. 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_Microphone ={PIN_A1, 0, SENSOR_SOUND, 60, 10, 100, 0, 75, &Sensor_Flow}; // Sensor Sensor_Ultrasonic ={PIN_A2, 0, SENSOR_ULTRASONIC, 60, 10, 100, 0, 75, &Sensor_Microphone}; // Sensor Sensor_PIR ={PIN_A2, 0, SENSOR_PHOTO, 60, 10, 100, 0, 75, &Sensor_Microphone}; // Sensor Sensor_Moisture ={PIN_A2, 0, SENSOR_MOISTURE, 60, 10, 100, 0, 75, &Sensor_Flow}; 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;/************************************************************************/

Esquemas

Intake and exhaust fans, grow lights, heaters, dehumidifiers, and pumps automatically controlled via wireless AC outlets common wirelessly controlled AC outlets used in this project. Assembled and testing hydroMazing prototype Web Interface hydroMazing prototype web Interface for alert notifications.

Processo de manufatura

  1. Monitoramento de temperatura no Raspberry Pi
  2. Sistema de controle de dispositivo baseado em temperatura usando LM35
  3. Sensores analógicos no Raspberry Pi usando um MCP3008
  4. A lacuna de habilidades da casa inteligente
  5. Tudo pode ser inteligente:Principais características das mais novas cidades inteligentes - Parte 1
  6. Tornando a indústria de bebidas mais inteligente com o sistema de monitoramento de nível alimentado por IoT
  7. Compreender o funcionamento do sistema de travagem antibloqueio (ABS)
  8. Entendendo o funcionamento do sistema de ignição eletrônica
  9. Entendendo o funcionamento do sistema de ignição por magneto
  10. O que é o sistema americano de fabricação?