Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Um sistema automático de coleta de informações aplicado à plantação de chá. Faz parte da coleta inteligente de informações agrícolas.
Etapa 1: Coisas usadas neste projeto
Componentes de hardware
- Grove - Sensor de dióxido de carbono (MH-Z16)
- Grove - Sensor Digital de Luz
- Grove - Sensor de Poeira (PPD42NS)
- Grove - Sensor de oxigênio (ME2-O2-Ф20)
- Sensor de umidade e temperatura do solo
- Gateway LoRa LoRaWAN - Kit de 868 MHz com Raspberry Pi 3
- Grove - Sensor de temperatura e humi e barômetro (BME280)
Aplicativos de software e serviços online
Microsoft Visual Studio 2015
Etapa 2: História
Agricultura inteligente é aplicar a tecnologia da Internet das Coisas à agricultura tradicional, usando sensores e software para controlar a produção agrícola por meio de plataformas móveis ou de computador, tornando a agricultura tradicional mais “inteligente”.
Na Montanha Mengding, a nordeste de Ya'an, Sichuan, o cume da montanha corre de oeste para leste em um mar verde. Esta é uma visão muito familiar para Deng, de 36 anos, um dos poucos fabricantes de chá Mengding de sua geração, com uma plantação de 50mu (= 3,3 hectares) situada a 1100m acima do nível do mar. Deng vem de uma família de fabricantes de chá, mas levar adiante o legado familiar não é uma tarefa fácil. “Nossos chás são cultivados em grande altitude em ambiente orgânico para garantir sua excelente qualidade. Mas, ao mesmo tempo, a densidade de crescimento é baixa, o custo é alto e a floração é desigual, tornando o chá difícil de colher. É por isso que os chás de alta montanha são normalmente de safras pequenas e seus valores não se refletem no mercado.” Nos últimos dois anos, Deng tem tentado conscientizar os consumidores sobre o chá de alta montanha para promover seu valor. E quando ele conheceu Fan, que estava procurando uma plantação para implementar a tecnologia IoTea da Seeed, uma combinação perfeita para uma solução foi feita. A solução Seeed IoTea visa ajudar os produtores de chá a gerenciar melhor as plantações sem alterar as práticas tradicionais de cultivo do chá e apresentar dados ambientais em tempo real das plantações em uma plataforma aberta.
Composto por sensores, nós e gateways, o IoTea coleta dados em tempo real de fatores que podem afetar a qualidade do chá durante o cultivo e os processos de produção, incluindo temperatura e umidade, CO2, O2, PM e exposição à luz. Os dados são coletados pelos sensores, enviados pelos nós ao gateway e, eventualmente, à nuvem, e são disponibilizados aos clientes finais em uma página da web.
Etapa 3: Conexão de Hardware
Passo 1: Conexão de Gateway
O gateway é instalado separadamente em uma caixa. Considerando o problema de dissipação de calor, adicionamos 2 ventoinhas. Um é para a dissipação de calor do Raspberry Pi, o outro é para a circulação de ar interna e externa. A caixa de entrada é colocada na casa de um fazendeiro, então não precisamos considerar seu problema de energia.
Passo 2: Conexão do Nó
O nó é o terminal dos dados e todos os dados originais são obtidos a partir daqui. Existem 6 sensores conectados ao nó. Além do sensor de umidade e temperatura do solo, colocamos outros sensores dentro da caixa da veneziana.
O nó é colocado em uma caixa à prova d'água. Para ter uma melhor conexão com o nodo, fazemos uma placa adaptadora. Por fim, forneceremos o link de download do esquema desta placa. Conforme mostrado abaixo, os cabos dos sensores são conectados à placa adaptadora por meio de blocos de terminais. Usamos 3 tubos MOS (SI2301) para construir circuitos de interruptores para controlar a ativação e desativação dos sensores e do ventilador. Ventilador é usado para esfriar. Temos um sensor de temperatura (DS18B20) montado na placa. Ele pode nos dizer a temperatura interna da caixa, e então o microcontrolador decide se deve ligar o ventilador. Usamos vários resistores para fazer um circuito divisor de tensão para medir a tensão da bateria de chumbo-ácido. Finalmente, reservamos 3 interfaces IIC e porta serial na placa para expansão e depuração posteriores.
Vamos falar sobre o problema de fornecimento de energia do nó. O nó é colocado na plantação de chá aleatoriamente, então o método tradicional de fornecimento de energia não é mais aplicável. Usar uma solução de energia solar é uma boa ideia. Existem muitas soluções fornecidas no mercado atualmente. Podemos selecionar um deles que atenda às nossas necessidades. Existem 3 partes na solução que escolhemos: painel solar, controlador de carregamento solar e bateria de chumbo-ácido. Para captar melhor a energia solar, colocamos o painel solar na parte superior do suporte e ajustamos seu ângulo para garantir que esteja voltado para o sol. Colocamos o controlador de carregamento solar na mesma caixa com o nó. Por não haver espaço extra dentro da caixa, tivemos que encontrar uma nova caixa à prova d'água para colocar a bateria de chumbo-ácido.
Etapa 4: configuração do software
Nó
Nesta seção, apresentaremos principalmente a configuração de software do nó.
Formato de dados
Dados carregados pelo nó para o gateway:
unsigned char Lora_data [15] = {0, 1, 2, 3,, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
Significado de cada bit de dados:
Lora_data [0] : Temperatura do ar, ℃
Lora_data [1] : Umidade do ar,%
Lora_data [2] : Altitude alta oito, m
Lora_data [3] : Altitude baixo oito
Lora_data [4]: concentração de CO2 alta de oito, ppm
Lora_data [5]: Concentração de CO2 baixa oito
Lora_data [6]: Concentração de poeira alta, oito, pcs / 0,01cf
Lora_data [7]: Concentração de poeira baixa oito
Lora_data [8]: Intensidade de luz alta oito, lux
Lora_data [9]: Intensidade de luz baixa oito
Lora_data [10]: concentração de O2,% (dados brutos divididos por 1000)
Lora_data [11]: Temperatura do solo, ℃
Lora_data [12]: Umidade do solo,%
Lora_data [13]: Tensão da bateria, v
Lora_data [14]: Código de erro dos sensores
Erro de código:
Lora_data [14] = [bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0]
Significado de cada bit:
bit 0: 1 ---- Erro do sensor de temperatura e humi e barômetro (BME280)
bit 1: 1 ---- Erro do sensor de dióxido de carbono (MH-Z16)
bit 2: 1 ---- Erro do sensor de poeira (PPD42NS)
bit 3: 1 ---- Erro do sensor de luz digital
bit 4: 1 ---- Erro do sensor de oxigênio (ME2-O2-Ф20)
bit 5: 1 ---- Erro do sensor de umidade e temperatura do solo
bit 6: Reservado
bit 7: Reservado
Fizemos um Error_code_transform.exe, abrimos e inserimos o código de erro em hexadecimal, você saberá rapidamente qual sensor está com erro. O link para download está no final deste artigo.
Ajuste de parâmetros: a) Ciclo de transmissão de dados
// seeedtea.ino
#defineinterval_time 600 // segundo
Este parâmetro pode ser variado para alterar o ciclo de transmissão de dados. Em cada ciclo, a aquisição de dados leva cerca de 1 minuto. Portanto, não é recomendável alterar esse valor para menos de 60 segundos.
b) Tempo de aquecimento do sensor de poeira
//seeedtea.ino
#definePreheat_time 30000 // Tempo de aquecimento do DustSensor, milissegundos //Dust_other.cpp #definesampletime_ms 30000 // samplingtime30s
c) Coeficiente de tensão
//POWER_Ctrl.cpp
#defineBattery_coefficient 0,159864 // valor ADC × Battery_coefficient = battery_voltage #defineSolar_coefficient 0,22559 // valor ADC × Solar_coefficient = solar_voltage
Esses dois parâmetros são calculados com base no circuito divisor de tensão.
d) Limite de temperatura de abertura do ventilador
//POWER_Ctrl.cpp
#defineFan_start_temp 45 // temperaturethreshold #defineFan_start_light 500 // intensidade da luz
Quando a temperatura real exceder o limite, o ventilador começará a esfriar.
e) Parâmetro de inicialização do sensor de O2
//Oxygen.cpp
# defineO2_percentage 208.00 //20.8%
f) Chave macro
//seeedtea.ino
#defineLORA_RUN // Após o comentário, a inicialização do Lora e a transmissão de dados irão parar #defineSENSOR_RUN // Após o comentário, os sensores externos irão parar de funcionar //POWER_Ctrl.cpp #defineFAN_ON // Apenas Fortesting, aplicação prática precisa ser comentada / **** *** Modo de controle DS18B20 *********************** / #defineSlower_Mode // Modo lento para obter a temperatura. Comentário é o modo rápido
g) Mapeamento de pinos
D2: Indicador LED e microcontrolador de reset externoIIC: SCL e SDA
//Dust_other.h
#defineDust_pin 3 // Sensor de poeira //CO2.cpp # defineCO2_serial Serial1 // usa a porta hardwareserial (D0 & D1) //seeedtea.ino #definedataPin 6 // Pino de dados do solo #defineclockPin 7 // Pino do relógio do solo // POWER_Ctrl. h # defineDS18B20_pin 8 // DS18B20 #defineFan_pin 9 // Ventilador #defineAir_CtrlPin 10 // Pino de controle para os sensores colocados em louverbox #defineSoil_CtrlPin 11 // Botão do sensor de umidade e temperatura do solo #defineBattery_pin A2 // Mede a tensão da bateria #defineSolar_pin A3 / / Medir a tensão do painel solar //Oxygen.h # defineO2_pin A1 // sensor de O2
h) Cronômetro de watchdog
O cronômetro de watchdog é usado para monitorar o status de execução do sistema. Quando o sistema está funcionando de forma anormal, o nó será reiniciado, para que possa funcionar continuamente por um longo tempo.
A biblioteca a ser referenciada:
- Adafruit_SleepyDog.h foi adicionado ao projeto
- Adafruit_ASFcore-master.zip é empacotado na pasta do projeto e precisa ser adicionado manualmente ao IDE do Arduino.
Funções relacionadas:
Habilitar watchdog
int WatchdogSAMD:: enable (int maxPeriodMS, bool isForSleep)
Parâmetros de entrada:
Int maxPeriodMS: Tempo de espera em milissegundos. O máximo permitido é 16000 milissegundos.
valor de retorno:
Tipo interno, retorna o tempo de espera real
Reiniciar watchdog
void WatchdogSAMD:: reset ()
Chame essa função para zerar o cronômetro de vigilância, conhecido como "alimentar o cachorro". Exceder o tempo de espera sem redefinir fará com que o nó seja reiniciado.
Pare o cão de guarda
void WatchdogSAMD:: disable ()
Porta de entrada
Nesta seção, apresentaremos como se conectar ao servidor Loriot.
Etapa 1: Registro do Loriot Server Gateway
a) O novo usuário precisa primeiro registrar uma conta, clique no endereço de registro. Preencha o nome de usuário, senha e endereço de e-mail para se cadastrar, após o cadastro um e-mail será enviado para você, siga as instruções no e-mail para ativar.
b) Após a ativação bem-sucedida, clique aqui para fazer login. O nível padrão é “Community Network”, que suporta 1 Gateway (RHF2S001) e 10 nós.
c) Entre no Dashboard -> Gateway, clique em Adicionar Gateway e clique em Iniciar para adicionar Gateway.
d) Selecione Raspberry Pi 3
e) Defina como abaixo:
- Front-end de rádio -> RHF2S001 868/915 MHz (SX1257)
- BUS -> SPI
f) Preencha o endereço MAC do seu RHF2S001, deve estar no formato b8: 27: eb: xx: xx: xx. E também inserir informações de localização do gateway.
g) Clique em “Registrar gateway Raspberry Pi” para finalizar o registro.
h) Clique no gateway registrado para entrar na página de configuração, alterne “Plano de frequência” manualmente, seu plano aqui é decidido pelo tipo de seu tipo RHF2S001, o plano disponível é CN470, CN473, CN434, CN780 , EU868, depois de selecionado, atualize a página para obter o canal exato. Neste wiki, escolhemos EU868.
i) Execute o comando no terminal de massa:
cd /home/rxhf/loriot/1.0.2
sudo systemctl stop pktfwd sudo gwrst wget > -O loriot-gw.bin chmod +x loriot-gw.bin./loriot-gw.bin -f -s cn1.loriot.io
j) Finish gateway registration. You will see the gateway is Connected now. Next is to register node.
Passo 2: Dispositivo Loriot Server Connect Node
a) Obtenha os canais de gateway disponíveis
Os canais de gateway atuais podem ser obtidos em Dashboard -> Gateway -> Seu Gateway, você pode ver os canais disponíveis conforme a imagem abaixo.
b) Configuração Seeeduino LoRAWAN GPS (RHF3M076)
Abra o monitor serial do ArduinoIDE, toque no comando abaixo.
em + ch
Para confirmar o canal padrão de seu GPS Seeeduino_LoRAWAN, você terá 3 canais. Se não houver um canal disponível, você pode alterar os canais de Seeeduino_LoRAWAN pelo comando abaixo.
em + ch = 0, 868,1
em + ch = 1, 868,3 em + ch = 2, 868,5
Então você pode usar at + ch novamente para verificar.
c) Adicione Seeeduino_LoRAWAN GPS como um NodeLog ABP no servidor Loriot, clique em Dash Board -> Aplicativos -> SimpleApp. Clique em Importar ABP, insira os itens abaixo
- DevAddr: Seeeduino_LoRAWAN GPS obter por meio do comando "AT + ID" (Observação: Loriot não oferece suporte ao conector de dois pontos, precisa ser removido manualmente)
- FCntUp : Setto 1
- FCntDn : Definir para 1
- NWKSKEY: Valor padrão 2B7E151628AED2A6ABF7158809CF4F3C
- APPSKEY: Valor padrão 2B7E151628AED2A6ABF7158809CF4F3C
- EUI : DEVEUI, Seeeduino_LoRAWAN GPS passa pelo comando "AT + ID"
Clique no botão Importar dispositivo para finalizar a importação do dispositivo. Agora escolha Dashboard-> Applications -> SampleApp, você verá o novo Node ABP que acabou de adicionar.
d) Enviar dados de Seeeduino_LoRAWAN
ATENÇÃO! Este é apenas um teste.
De volta ao monitor serial do ArduinoIDE, envie o comando:
AT + CMSGHEX = "0a 0b 0c 0d 0e"
Em seguida, vá para Dashboard -> Aplicativos -> SampleApp -> Dispositivo, clique em Node Device EUI ou DevAddr, você encontrará os dados que acabou de enviar aqui.
Para obter detalhes, consulte este wiki.
Etapa 5: construção do site
Ferramentas Relacionadas
- virtualenv
- Python3
- Gunicorn
- Supervisor
- Nginx
- MySQL
Usamos CentOS7 como ambiente de implementação de teste
virtualenv
Use o virtualenv para construir um ambiente de produção python3 autônomo
a) instalar
pip install virtualenv
b) criar um ambiente virtual python3
virtualenv -p python3 iotea
c) inicie o ambiente virtual e insira o diretório iotea
fonte bin / ativar
d) existe ambiente
desativar
Python3
a) instalar
yum install epel-release
yum install python 36
b) instalar a biblioteca dependente PyMySQL, DBUtils, Flask, websocket-client, configparser
pip install pymysql
pip instalar dbutils pip instalar frasco pip instalar websocket-cliente pip instalar configparser
Gunicorn
a) instalar (em ambiente Python3)
pip instalar gunicorn
b) execute o projeto flask (no diretório do projeto iotea)
gunicorn -w 5 -b 0.0.0.0:5000 app: app
c) execute websocket-clint para obter dados de Loriot
gunicorn loriot: app
d) visualizar a árvore de processo do Gunicorn
pstree -ap | grep gunicorn
Supervisor
a) instalar (usuário root)
supervisor de instalação de pip
b) gerar arquivos de configuração
echo_supervisord_conf> /etc/supervisord.conf
c) criar um diretório e introduzir uma configuração de diretório
mkdir -p /etc/supervisor/conf.d
Edite /etc/supervisord.conf e modifique o campo de arquivos em [incluir] no final do arquivo.
Observe que você precisa remover o ';' na frente dessas duas linhas, que é o caractere de comentário.
[incluir]
Arquivos = /etc/supervisor/conf.d/*.conf
Significa apresentar /etc/supervisor/conf.d/. O seguinte arquivo de configuração é usado como o arquivo de configuração do processo (monitorado pelo supervisor).
d) configuração de entrada (no diretório iotea)
cp iotea.conf /etc/supervisor/conf.d/
cp loriot.conf /etc/supervisor/conf.d/
e) abrir iotea servir
superviosrctl reload #reload o arquivo de configuração
superviosrctl start loriot #open loriot data reception superviosrctl start iotea #open the iotea flask application
f) outras operações comuns
supervisorctl reload # recarregar o arquivo de configuração
supervisorctl update supervisorctl start xxx supervisorctl stop xxx supervisorctl status xxx supervisorctl help # view more command
Nginx
a) instalar
yum install -y nginx
b) configuração
cp NginxIotea.conf /etc/nginx/conf.d/
c) iniciar o Nginx
systemctl start nginx.service
MySQL
a) parâmetros relacionados
usuário = 'root'
passwd = '1234' db = 'iotea' port = 3306
b) arquivo
iotea_iotea.sql
c) arquivo de configuração
db.ini