Monitoramento por SMS do peso de três colmeias por US $ 35

Newbee


Já faz um bom tempo desde a publicação anterior sobre o sistema por US $ 30 .


O que mudou no último mês lunar?


  1. Uma bateria solar foi adicionada - o tempo de operação é quase ilimitado.
  2. Adicionado o envio de informações em uma chamada.
  3. A capacidade de trabalhar com todos os tipos de módulos de comunicação que surgiram em minha opinião - AiThinker, Goouu tech, SIM800 / 900, Neoway M590 *

Mas o mais importante é que agora o módulo de comunicação e o microcontrolador estão fisicamente separados, o que elimina a interferência em sua operação com o HX711.


E tudo isso graças às críticas construtivas dos moradores e apicultores de Habrovsk, que se juntaram à discussão do sistema.


O restante das características de desempenho permaneceu o mesmo - o peso máximo das colmeias é de 200 kg, após a medição do pôr-do-sol e os indicadores são enviados.


Antecipando críticas sobre o não uso dos modos de suspensão e linhas de sinal adicionais dos módulos GSM, direi o seguinte:


Cada módulo de comunicação tem suas próprias especificidades - algumas adormecem com um nível de sinal baixo, outras com um nível alto, outras com um toque duplo.


As especificidades de "faça você mesmo" implicam uma certa parte criativa e vale a pena mostrá-la aqui.


Também fiz um sistema de olho no desenvolvimento adicional de monitoramento de outros parâmetros da colméia, onde o sono não é particularmente necessário.


Em geral, no quadro de títulos - android puro sistema básico a partir do qual você pode dançar em qualquer lugar com o design e o número / conjunto de sensores, módulos, etc.


Este artigo é sobre escalas e, sob o corte, minha visão pessoal e implementação do sistema.


Em uma palavra - BEM-VINDO! Vamos lá!


Para começar, esse sistema não dorme ... de jeito nenhum, porque uma bateria solar de duas células de 6 volts produz 5 volts e até cem miliamperes, mesmo em tempo nublado.


E o consumo de todo o sistema é 17mA, no modo de espera (no padrão GSM1800) e cerca de trinta no GSM900.


Além disso, como já mencionado, isso foi feito com o objetivo de implementar funções de monitoramento adicionais em tempo real (um enxame, por exemplo, pode sair em 5 minutos) - não há tempo para dormir ;-)


Você deseja economia absoluta de energia, por isso será na próxima publicação, mas será completamente diferente a história o sistema.


* Sim, no que diz respeito à nota de rodapé sobre os módulos de comunicação, não é que eu me tornei adepto do AiThinker, só preciso montar a Neoway pessoalmente, e os módulos SIM800L exigem um artigo separado com programa educacional sobre como trabalhar com eles.


Em uma palavra, os GSMs selecionados são IMHO, os únicos que podem trabalhar em 4 fios, incluindo energia, sem danças adicionais com pandeiros.


Vamos precisar do seguinte conjunto de equipamentos / materiais:


  1. Arduino Pro Mini 3V
    Você deve prestar atenção ao microchip do conversor linear - ele deve ser exatamente 3,3V - no chip de marcação KB 33 / LB 33 / DE A10 - os chineses misturaram algo comigo e todo o lote
    as placas de circuito na loja eram de reguladores de 5 volts e quartzo de 16 MHz.
  2. USB-Ttl em um chip CH340 - você pode até 5 volts, mas, durante o firmware do microcontrolador, o Arduino precisará ser desconectado do módulo GSM, para não queimar o último.
    As placas no chip PL2303 não funcionam no Windows 10.
  3. Módulo de comunicação GSM Goouu Tech IOT GA-6-B ou AI-THINKER A-6 Mini.
  4. Antena GSM GPRS "YG-01"

    Como eles alcançaram esse aumento - um enigma - talvez isso seja relativo à completa ausência dele ;-).
  5. Pacote inicial para um operador com boa cobertura no local do seu apiário.
    Sim, o pacote deve primeiro ser ativado em um telefone comum, DESATIVAR o PEDIDO DE PIN na entrada e reabastecer a conta.
  6. fio dupont 20cm mãe mãe - 4 unid. (para conectar o Arduino ao USB-TTL)
  7. 3pcs HX711 - ADC para balanças
  8. 6 células de carga com peso até 50 kg
  9. 15 metros de cabo telefônico de 4 núcleos - para conectar módulos de peso e GSM ao ARDUINO.
  10. Fotoresistor GL5528 (isto é importante, com uma resistência escura de 1MOhm e uma resistência à luz de 10-20kOhm).
  11. dois pares de fichas e tomadas 6P6C - telefone, tomadas - com "rabos"
  12. Fita dupla face de 50 cm com 10 mm de largura - para conectar o painel solar à carcaça do módulo GSM.
  13. Placa do carregador baseada em TP4056 para baterias LiIon
  14. O suporte da bateria 18650 e, de fato, a própria bateria.
  15. Um pouco de cera ou parafina (vela de tablet com lâmpada de aroma) - para proteção contra umidade HX711
  16. Um pedaço de viga de madeira 25x50x300mm para a base das células de carga.
  17. Uma dúzia de parafusos autorroscantes com uma arruela de pressão de 4,2x19 mm para montar sensores na base.
  18. Bateria solar de 5-6V 2W (não havia no próximo mago do rádio - tomei dois watts simples e um par de diodos 1N4148)
    Vista traseira dos painéis
    Não há corrente reversa através do carregador, mas os módulos solares paralelos devem ser ligados corretamente através de diodos
  19. Uma caixa para um módulo de comunicação e uma bateria solar (tamanho 60x100mm) - você pode obter uma distribuição adequada de produtos elétricos, o meu plástico dos cartões de visita 30x60x100 ideais.

Além disso, serão necessárias mãos tortas, ferro de solda EPSN-25, resina e solda POS-60.


Para carpintaria, uma serra para madeira / metal, um formão e uma broca com uma broca de 3 mm são suficientes.


O layout do sistema é o seguinte:


Layout


Em qualquer caso, você não deve colocar o módulo GSM a menos de um metro do Arduino - com uma alta potência de sinal no padrão GSM900, isso pode causar a reinicialização do microcontrolador!


Bem, o módulo de comunicação com a bateria solar - deve ser instalado em um poste - e a recepção será melhor e mais distante das abelhas.


Agora vamos começar a montagem:


GSM A6


Para iniciantes, dois LEDs são soldados no módulo GSM (o local em que foram circulados em um oval laranja).


Nós inserimos o cartão SIM com os blocos na placa de circuito impresso, o canto chanfrado da foto é indicado pela seta.


Além disso, a bateria e o fio que vai para o controlador são soldados diretamente no capacitor (4).


O fato é que o próprio módulo de comunicação requer 3,4-4,2V para sua fonte de alimentação e seu contato PWR é conectado a um conversor abaixador, de modo que a operação com tensão de íon de lítio deve ser aplicada ignorando esta parte do circuito.


Arduino Pro Mini 3v


Em seguida, realizamos um procedimento semelhante com o LED na placa Arduino (o oval à direita do chip quadrado).


Soldamos o pente em quatro contatos (1), sempre na horizontal - ao longo do quadro.


Encurtamos as pernas do fotoresistor para 10 mm e a soldamos com condutores de 20 cm aos terminais GND e D2 da placa (2).


Nós fornecemos energia através de um conversor linear - em correntes baixas, a queda de tensão de abandono é de 0.1V.


Mas, ao aplicar tensão estabilizada aos módulos HX711, eliminamos a necessidade de refiná-los sob uma tensão mais baixa (e ao mesmo tempo aumentamos o ruído como resultado dessa operação).


Agora você precisa pegar 5 metros de cabo telefônico de quatro fios e soldar entre o microcontrolador e o módulo de comunicação, conforme o diagrama no início do artigo (as cores dos fios correspondem à realidade).


Também soldamos o suporte da bateria, faremos o resto um pouco mais tarde.


E agora, por algum tempo, nos desviamos do ferro de soldar e passamos à parte do software.
Vou descrever a sequência de ações para o Windows:
Primeiro, você precisa baixar e instalar / descompactar o programa IDE do Arduino - a versão atual é 1.8.9, mas eu uso o 1.6.4


Por uma questão de simplicidade, descompactamos o arquivo na pasta C: \ arduino- "your_version_number", onde teremos / dist, drivers, exemplos, hardware, java, lib, bibliotecas, referências, pastas de ferramentas, além do arquivo executável do arduino (entre outros).


Agora precisamos de uma biblioteca para trabalhar com o HX711 ADC - o botão verde "clonar ou baixar" - faça o download do ZIP.


O conteúdo (pasta HX711-master) é colocado no diretório C: \ arduino- "your_version_number" \ library


E, é claro, o driver do USB-TTL é do mesmo github - do arquivo descompactado, o arquivo SETUP do instalador é simplesmente iniciado.


Para aqueles que relutam em se incomodar com as bibliotecas, empacotei minha montagem do programa IDE do Arduino - basta baixar e descompactá-lo.


Iniciamos e configuramos o programa C: \ arduino- "your_version_number" \ arduino


Interface do programa


Vamos para o item "Ferramentas" - selecione a placa "Arduino Pro ou Pro Mini", o processador Atmega 328 3.3V 8 MHz, a porta é o número diferente do COM1 do sistema (ele aparece após a instalação do driver CH340 com o adaptador USB-TTL conectado).


Ok, copie o seguinte esboço (programa) e cole-o na janela do IDE do Arduino


char phone_no[]="+123456789012"; // Your phone number that receive SMS with counry code // NeverSleep #include <SoftwareSerial.h> // Sofrware serial library #include "HX711.h" // HX711 lib. https://github.com/bogde/HX711 #include <EEPROM.h> // EEPROM lib. HX711 scale0(10, 14); HX711 scale1(11, 14); HX711 scale2(12, 14); #define SENSORCNT 3 HX711 *scale[SENSORCNT]; SoftwareSerial mySerial(5, 4); // Set I/O-port TXD, RXD of GSM-shield float delta00; // delta weight from start float delta10; float delta20; float delta01; // delta weight from yesterday float delta11; float delta21; float raw00; //raw data from sensors on first start float raw10; float raw20; float raw01; //raw data from sensors on yesterday float raw11; float raw21; float raw02; //actual raw data from sensors float raw12; float raw22; word calibrate0=20880; //calibration factor for each sensor word calibrate1=20880; word calibrate2=20880; word daynum=0; //numbers of day after start int notsunset=0; boolean setZero=false; boolean forceSend=false; char ch = 0; char ch1 = 0; char ch2 = 0; char ch3 = 0; char ch4 = 0; void readVcc() // read battery capacity { ch = mySerial.read(); while (mySerial.available() > 0) { ch = mySerial.read(); } // empty input buffer from modem mySerial.println("AT+CBC?"); //ask gprs for battery status (for sim800 and neoway command must be "AT+CBC" ) delay(200); while (mySerial.available() > 0) { //read input string between coma and CR ch = mySerial.read(); if (ch ==','){ ch1 = mySerial.read(); ch2 = mySerial.read(); ch3 = mySerial.read(); ch4 = mySerial.read(); } } } // ********************************************************************** void SendStat() { detachInterrupt(digitalPinToInterrupt(0)); // turn off external interrupt digitalWrite(13, HIGH); if (!forceSend){ notsunset=0; for (int i=0; i <= 250; i++){ if ( !digitalRead(2) ){ notsunset++; } //is a really sunset now? you shure? delay(360); } } if ( notsunset==0 || forceSend ) { raw01=raw02; raw11=raw12; raw21=raw22; raw02=scale0.get_units(16); //read data from scales raw12=scale1.get_units(16); raw22=scale2.get_units(16); daynum++; delta00=(raw02-raw00)/calibrate0; // calculate weight changes delta01=(raw02-raw01)/calibrate0; delta10=(raw12-raw10)/calibrate1; delta11=(raw12-raw11)/calibrate1; delta20=(raw22-raw20)/calibrate2; delta21=(raw22-raw21)/calibrate2; readVcc(); delay(200); mySerial.println("AT+CMGF=1"); // Part of SMS sending delay(2000); mySerial.print("AT+CMGS=\""); mySerial.print(phone_no); mySerial.write(0x22); mySerial.write(0x0D); // hex equivalent of Carraige return mySerial.write(0x0A); // hex equivalent of newline delay(2000); mySerial.print("Turn "); mySerial.println(daynum); mySerial.print("Hive1 "); mySerial.print(delta01); mySerial.print(" "); mySerial.println(delta00); mySerial.print("Hive2 "); mySerial.print(delta11); mySerial.print(" "); mySerial.println(delta10); mySerial.print("Hive3 "); mySerial.print(delta21); mySerial.print(" "); mySerial.println(delta20); mySerial.print("Battery capacity is "); mySerial.print(ch1); mySerial.print(ch2); mySerial.print(ch3); mySerial.print(ch4); mySerial.println(" %"); if (forceSend) {mySerial.print("Forced SMS");} mySerial.println (char(26));//the ASCII code of the ctrl+z is 26 delay(3000); } forceSend=false; digitalWrite(13, LOW); attachInterrupt(0, SendStat , RISING); // Interrupt by HIGH level } // ************************************************************************************************* void switchto9600() { mySerial.begin(115200); // Open software serial port delay(16000); // wait for boot mySerial.println("AT"); delay(200); mySerial.println("AT"); delay(200); mySerial.println("AT+IPR=9600"); // Change Serial Speed delay(200); mySerial.begin(9600); mySerial.println("AT&W0"); delay(200); mySerial.println("AT&W"); } void setup() { // Setup part run once, at start pinMode(13, OUTPUT); // Led pin init pinMode(2, INPUT_PULLUP); // Set pullup voltage Serial.begin(9600); // ------------------------------------------------------------------------------- switchto9600(); // switch module port speed // ------------------------------------------------------------------------------- mySerial.begin(9600); delay(200); scale[0] = &scale0; //init scale scale[1] = &scale1; scale[2] = &scale2; scale0.set_scale(); scale1.set_scale(); scale2.set_scale(); delay(200); setZero=digitalRead(2); //if (EEPROM.read(500)==EEPROM.read(501) || setZero) // first boot/reset with hiding photoresistor if (setZero) { raw00=scale0.get_units(16); //read data from scales raw10=scale1.get_units(16); raw20=scale2.get_units(16); EEPROM.put(500, raw00); //write data to eeprom EEPROM.put(504, raw10); EEPROM.put(508, raw20); for (int i = 0; i <= 24; i++) { //blinking LED13 on reset/first boot digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(500); } } else { EEPROM.get(500, raw00); // read data from eeprom after battery change EEPROM.get(504, raw10); EEPROM.get(508, raw20); digitalWrite(13, HIGH); // turn on LED 13 on 12sec. delay(12000); digitalWrite(13, LOW); } delay(200); // Test SMS at initial boot readVcc(); delay(200); mySerial.println("AT+CMGF=1"); delay(2000); mySerial.print("AT+CMGS=\""); mySerial.print(phone_no); mySerial.write(0x22); mySerial.write(0x0D); // hex equivalent of Carraige return mySerial.write(0x0A); // hex equivalent of newline delay(2000); mySerial.println("INITIAL BOOT OK"); mySerial.print("Battery capacity is "); mySerial.print(ch1); mySerial.print(ch2); mySerial.print(ch3); mySerial.print(ch4); mySerial.println(" %"); mySerial.println (char(26));//the ASCII code of the ctrl+z is 26 delay(3000); raw02=raw00; raw12=raw10; raw22=raw20; attachInterrupt(0, SendStat , RISING); // Interrupt by HIGH level } void loop() { digitalWrite(13, LOW); ch=mySerial.read(); if ( ch=='R' ) { //wait first lerrer from "RING" string forceSend=true; mySerial.println("ATH"); SendStat(); ch=' '; } } 

Na primeira linha, entre aspas char phone_no [] = "+ 123456789012"; - em vez de 123456789012, colocamos nosso número de telefone com o código do país para o qual o SMS será enviado.


Clique no botão de verificação (acima do número um na captura de tela acima) - se a compilação estiver abaixo (abaixo do triplo na captura de tela), poderemos exibir o microcontrolador.


Portanto, o USB-TTL está conectado ao ARDUINO e ao computador (como na foto acima), colocamos a bateria carregada no suporte (geralmente em um novo arduino, o LED começa a piscar uma vez por segundo).


Agora o firmware - estamos treinando para pressionar o botão vermelho (prateado) do microcontrolador - isso precisará ser feito estritamente em um determinado momento !!!


Existe Clique no botão "Upload" (acima dos dois na captura de tela) e observe atentamente a linha na parte inferior da interface (nas três telas).


Assim que a inscrição "compilação" for substituída por "download" - pressione o botão vermelho (redefinir) - se estiver tudo bem - o adaptador USB-TTL pisca com alegria e a inscrição "Downloaded" na parte inferior da interface


Enquanto aguardamos a chegada do SMS de teste no telefone, mostrarei como o programa funciona:


Na primeira vez em que o sistema é ligado, ele verifica os bytes 500 e 501 da EEPROM; se eles são iguais, os dados de calibração não foram gravados e o algoritmo prossegue para a seção de configuração.


O mesmo acontece se, quando ligado, o fotorresistor estiver sombreado (com uma tampa de uma caneta) - o modo de redefinição de parâmetro é ativado.


Os strain gauges já devem ser instalados sob as colmeias, pois simplesmente fixamos o nível inicial de zero e medimos a mudança de peso (agora os zeros virão, pois ainda não conectamos nada).


No arduino, o LED embutido do pino 13 pisca.
Se a redefinição não ocorrer, o LED acenderá por 12 segundos.
Depois disso, um SMS de teste é enviado com a mensagem "INICIAL BOOT OK" e a porcentagem de carga da bateria.


Além disso, temos uma interrupção no fotossensor trabalhando no segundo pino (mais a elevação é ativada pela função pullup).
Nesse caso, depois de disparar por mais 3 minutos, o estado do fotorresistor é verificado para excluir positivos repetidos / falsos.
Para impedir que o sistema faça um reset sempre que for ligado, pelo menos o primeiro módulo HX711 deve ser conectado (pinos DT-D10, SCK-A0)


Em seguida, são feitas as leituras das células de carga, calculada a alteração de peso da operação anterior (o primeiro número na linha após o Hive) e, desde o primeiro início, a tensão da bateria é verificada e essas informações são enviadas na forma de SMS:


Sistema de amostra


A propósito, você recebeu SMS? Parabéns! Estamos a meio caminho! Enquanto a bateria puder ser removida do suporte, não precisaremos de mais um computador.


Prosseguimos na fabricação de sensores, para começar, vamos tocar no layout dos sensores:


Localização do sensor


Este é o plano da colméia.


Classicamente, 4 sensores são instalados nos cantos (1,2,3,4)


Vamos medir de forma diferente. Ou melhor, mesmo no terceiro. Como os caras do BroodMinder fazem diferente:


Broodminder


Neste projeto, os sensores são instalados nas posições 1 e 2, os pontos 3.4 são baseados na viga.
Então, apenas metade do peso cai nos sensores.
Sim, esse método tem menos precisão, mas é difícil imaginar que as abelhas construíssem todos os quadros com "línguas" dos favos de mel ao longo de uma parede da colméia.


Então, proponho reduzir os sensores para o ponto 5 completamente - então não há necessidade de proteger o sistema e, ao usar colmeias de luz, é completamente necessário fazer um sensor.


Portanto, em uma seção, instalaremos duas células de carga e um módulo HX711, o diagrama de fiação é o seguinte:



Da placa ADC ao arduino, existem 5 metros de cabo telefônico de 4 núcleos (no caso dos módulos de peso 2 e 3), o primeiro sensor é conectado a uma cauda de 10 cm, mas mais sobre isso posteriormente.


Em geral, nos sensores deixamos "caudas" de 8 cm, limpamos o par trançado e vendemos tudo como na foto acima.


Antes de iniciar a carpintaria, coloque cera / parafina em um recipiente adequado para derreter em banho-maria.


Agora pegamos nossa viga e dividimos em três segmentos de 100 mm


Em seguida, marque uma ranhura longitudinal de 25 mm de largura e 7-8 mm de profundidade, usando uma serra e um cinzel para remover o excesso - um perfil em forma de u deve sair.


O básico


De fato, precisamos de uma parte 1 e duas em forma de H - P-shki, todas com 10 cm de comprimento.


Por que N-ka - não acredite, esconda o Arduino nele:


o milagre da tecnologia hostil


Além disso, os soquetes 6P6C para conectar os sensores 2 e 3 também estão conectados aqui.


Cera aquecida? - mergulhamos nossas placas ADC lá - isso as protegerá da umidade / névoa:


Proteção ADC contra umidade


Temos tudo em uma base de madeira (é necessário tratá-lo com um anti-séptico por decomposição):


Assembléia


E, finalmente, consertamos os sensores com parafusos:


Sensor pronto


Em seguida, soldamos todos os componentes restantes de acordo com o esquema no cabeçalho e no senso comum.


Em termos de localização dos componentes, é aconselhável mostrar imaginação, uma coisa a considerar - a distância entre o microcontrolador e o módulo GSM deve ser de pelo menos um metro!


Eu tenho o seguinte design:


Final


Sim, assumi o ângulo de instalação dos painéis em 45 graus - devido à simplicidade da fabricação, mas está próximo dos quarenta graus ideais para o verão na latitude de Kiev.


É isso, agora, para a verificação final, coloque os sensores nos setores do círculo, em cima - um pedaço de madeira, zere o controlador (ligue o sistema com a tampa no fotodiodo da caneta-tinteiro).


Nesse caso, o LED no arduino deve piscar e um SMS de teste deve aparecer.


Depois removemos a tampa da fotocélula e vamos coletar água em uma garrafa de plástico de 6 litros.
Colocamos a garrafa no compensado e, se já passaram alguns minutos de ligá-la, colocamos a tampa novamente no fotorresistor (simulando o pôr do sol).


Ao mesmo tempo, o LED do arduino acenderá e você deverá receber um SMS com um valor de peso de cerca de 4 kg em todas as posições.


Parabéns! O sistema foi montado com sucesso!


Se agora fizermos o sistema funcionar novamente, na primeira coluna do peso obteremos zeros.


Sim, em condições reais, é desejável orientar o fotorresistor verticalmente para cima.


Agora vou dar um breve manual sobre o uso de:


  1. Instale extensômetros sob as paredes traseiras das colmeias (sob a frente, substitua uma viga / placa com aproximadamente 30 mm de espessura)
  2. Instale um módulo de comunicação com painéis solares a uma altitude, a poucos metros das colmeias.
    A orientação dos painéis solares - para o sul - pode ser calculada (não pegaremos o verdadeiro).
  3. Proteja o fotorresistor e coloque a bateria - o LED deve piscar e um SMS de teste com o texto "INICIAL BOOT OK" deve aparecer
    Todas as noites, após o pôr do sol, o SMS chega com uma alteração de peso por dia e a partir do momento do lançamento.
    Quando você liga para o número do cartão SIM do módulo GSM, o controlador fica fora do gancho (ouvimos “O assinante não pode receber a chamada”) e o SMS vem com medições extraordinárias.
    Em tal mensagem, haverá uma linha adicional - "SMS forçado";

Resta muito pouco à beleza completa do sistema:


  1. Adicione o sistema automático do dispositivo no fotosensor.
  2. Verifique outros tipos de módulos de comunicação.
  3. Para fazer tudo sob o ESP-8266 - em primeiro lugar, ele suporta atualizações de firmware "over the air" - é conveniente.

Em segundo lugar - ele pode fornecer estatísticas na forma de simples páginas da web.
E, finalmente, se você possui Wi-Fi, pode recusar completamente o GSM-ki.


Ah, sim, estou cansado de algo que mexe com os fios e prometi um sistema com economia de energia "absoluta".


Em uma palavra, eu decidi brincar de "idiota" e fazer tudo.
Quanto sucesso - leia a publicação em um mês!


Vejo você nas páginas da Habr-a,
Apicultor elétrico Andrey


PS Para novas publicações sobre esse tópico, consulte beefree.xyz

Source: https://habr.com/ru/post/pt448274/


All Articles