
Já faz um bom tempo desde a publicação anterior sobre o sistema por US $ 30 .
O que mudou no último mês lunar?
- Uma bateria solar foi adicionada - o tempo de operação é quase ilimitado.
- Adicionado o envio de informações em uma chamada.
- 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:
- 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. - 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. - Módulo de comunicação GSM Goouu Tech IOT GA-6-B ou AI-THINKER A-6 Mini.
- Antena GSM GPRS "YG-01"

Como eles alcançaram esse aumento - um enigma - talvez isso seja relativo à completa ausência dele ;-). - 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. - fio dupont 20cm mãe mãe - 4 unid. (para conectar o Arduino ao USB-TTL)
- 3pcs HX711 - ADC para balanças
- 6 células de carga com peso até 50 kg
- 15 metros de cabo telefônico de 4 núcleos - para conectar módulos de peso e GSM ao ARDUINO.
- Fotoresistor GL5528 (isto é importante, com uma resistência escura de 1MOhm e uma resistência à luz de 10-20kOhm).
- dois pares de fichas e tomadas 6P6C - telefone, tomadas - com "rabos"
- Fita dupla face de 50 cm com 10 mm de largura - para conectar o painel solar à carcaça do módulo GSM.
- Placa do carregador baseada em TP4056 para baterias LiIon
- O suporte da bateria 18650 e, de fato, a própria bateria.
- Um pouco de cera ou parafina (vela de tablet com lâmpada de aroma) - para proteção contra umidade HX711
- Um pedaço de viga de madeira 25x50x300mm para a base das células de carga.
- Uma dúzia de parafusos autorroscantes com uma arruela de pressão de 4,2x19 mm para montar sensores na base.
- 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)

Não há corrente reversa através do carregador, mas os módulos solares paralelos devem ser ligados corretamente através de diodos - 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:

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:

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.

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

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:

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:

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:

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.

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:

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:

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

E, finalmente, consertamos os sensores com parafusos:

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:

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:
- Instale extensômetros sob as paredes traseiras das colmeias (sob a frente, substitua uma viga / placa com aproximadamente 30 mm de espessura)
- 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). - 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:
- Adicione o sistema automático do dispositivo no fotosensor.
- Verifique outros tipos de módulos de comunicação.
- 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