Monitoreo por SMS del peso de tres colmenas por $ 35

Newbee


Ha pasado bastante tiempo desde la publicación anterior sobre el sistema por $ 30 .


¿Qué ha cambiado en el último mes lunar?


  1. Se ha agregado una batería solar: el tiempo de funcionamiento es casi ilimitado.
  2. Se agregó información de envío en una llamada.
  3. La capacidad de trabajar con todos los tipos de módulos de comunicación que he visto: AiThinker, Goouu tech, SIM800 / 900, Neoway M590 *

Pero lo más importante es que el módulo de comunicación y el microcontrolador ahora están físicamente separados, lo que elimina la interferencia en su funcionamiento con el HX711.


Y todo esto gracias a las críticas constructivas de los residentes y apicultores de Habrovsk que se unieron a la discusión del sistema.


El resto de las características de rendimiento permanecieron iguales: el peso máximo de las colmenas es de 200 kg, después del atardecer, se realiza la medición y se envían los indicadores.


Anticipando las críticas con respecto a la no utilización de los modos de suspensión y las líneas de señal adicionales de los módulos GSM, diré lo siguiente:


Cada módulo de comunicación tiene sus propios detalles: algunos se quedan dormidos a un nivel de señal bajo, otros a un nivel alto, otros con un doble toque.


Los detalles de "hágalo usted mismo" implica una cierta parte creativa, y vale la pena mostrarlo aquí.


También hice un sistema con miras al desarrollo posterior de la supervisión de otros parámetros de la colmena, donde el sueño no es particularmente necesario.


En general, en la tabla de títulos: Android puro sistema básico desde el que puedes bailar en cualquier lugar con el diseño y el número / conjunto de sensores, módulos, etc.


Este artículo trata sobre escalas y, debajo del corte, mi visión personal y la implementación del sistema.


En una palabra: ¡BIENVENIDO! Vamos!


Para empezar, este sistema no duerme ... en absoluto, porque una batería solar de dos celdas y 6 voltios produce 5 voltios y hasta cien miliamperios incluso en tiempo nublado.


Y el consumo de todo el sistema es de 17 mA, en modo de espera (en el estándar GSM1800) y alrededor de treinta en el GSM900.


Además, como ya se mencionó, esto se hizo con el objetivo de implementar funciones de monitoreo adicionales en tiempo real (un enjambre, por ejemplo, puede salir en 5 minutos); no hay tiempo para dormir ;-)


Desea un ahorro absoluto de energía, por lo que estará en la próxima publicación, pero será completamente diferente la historia El sistema.


* Sí, en lo que respecta a la nota al pie sobre los módulos de comunicación, no es que me haya convertido en un seguidor de AiThinker, solo necesito armar a Neoway yo mismo, y los módulos SIM800L requieren un artículo separado con un programa educativo para trabajar con ellos.


En una palabra, los GSM seleccionados son IMHO, los únicos que pueden funcionar con 4 cables, incluida la alimentación, sin bailes adicionales con panderetas.


Necesitaremos el siguiente conjunto de equipos / materiales:


  1. Arduino Pro Mini 3V
    Debe prestar atención al microchip convertidor lineal (debe ser exactamente 3,3 V) en el chip de marcado KB 33 / LB 33 / DE A10: los chinos han mezclado algo conmigo y todo el lote
    Las placas de circuito en la tienda resultaron ser con reguladores de 5 voltios y cuarzo de 16MHz.
  2. USB-Ttl en un chip CH340: puede incluso 5 voltios, pero luego, durante el firmware del microcontrolador, Arduino deberá desconectarse del módulo GSM para no quemar el último.
    Las placas en el chip PL2303 no funcionan en Windows 10.
  3. Módulo de comunicación GSM Goouu Tech IOT GA-6-B o AI-THINKER A-6 Mini.
  4. Antena GSM GPRS "YG-01"

    Cómo lograron tal aumento, un acertijo, tal vez esto sea relativo a la ausencia total del mismo ;-).
  5. Paquete de inicio para un operador que tiene una buena cobertura en la ubicación de su colmenar.
    Sí, el paquete debe activarse primero en un teléfono normal, DESHABILITAR la SOLICITUD DE PIN en la entrada y reponer la cuenta.
  6. alambre dupont 20cm madre madre - 4 piezas (para conectar Arduino a USB-TTL)
  7. 3 piezas HX711 - ADC para básculas
  8. 6 células de carga que pesan hasta 50 kg
  9. 15 metros de cable telefónico de 4 núcleos: para conectar módulos de pesas y GSM con ARDUINO.
  10. Fotoresistor GL5528 (esto es importante, con una resistencia oscura de 1MOhm y una resistencia a la luz de 10-20kOhm).
  11. dos pares de enchufes y enchufes 6P6C - teléfono, enchufes - con "colas"
  12. Cinta de 50 cm de doble cara de 10 mm de ancho: para fijar el panel solar a la carcasa del módulo GSM.
  13. Cargador basado en TP4056 para baterías LiIon
  14. El soporte de la batería 18650 y, de hecho, la batería en sí.
  15. Un poco de cera o parafina (vela de tableta con lámpara de aroma) - para protección contra la humedad HX711
  16. Una pieza de viga de madera de 25x50x300mm para la base de las celdas de carga.
  17. Una docena de tornillos autorroscantes con una arandela de presión de 4.2x19 mm para montar los sensores en la base.
  18. Batería solar 5-6V 2W (no había en el siguiente radio mago: tomé dos diodos de un solo vatio y un par de 1N4148)
    Vista trasera de paneles
    No hay corriente inversa a través del cargador, pero los módulos solares paralelos se deben encender correctamente a través de diodos
  19. Una caja para un módulo de comunicación y una batería solar (tamaño 60x100mm): puede llevar una distribución adecuada de productos eléctricos, mi plástico de tarjetas de visita 30x60x100 idealmente adecuado.

Además, requerirá manos torcidas, un soldador EPSN-25, colofonia y soldadura POS-60.


Para carpintería, una sierra para madera / metal, un cincel y un taladro con un taladro de 3 mm son suficientes.


El diseño del sistema es el siguiente:


Diseño


En cualquier caso, no debe colocar el módulo GSM a menos de un metro del Arduino; con una alta potencia de señal en el estándar GSM900, ¡esto puede hacer que el microcontrolador se reinicie!


Bueno, el módulo de comunicación con la batería solar, debe instalarse en un poste, y la recepción será mejor, y más lejos de las abejas.


Ahora comencemos el ensamblaje:


GSM A6


Para empezar, se sueldan dos LED del módulo GSM (el lugar donde se rodearon en un óvalo naranja).


Insertamos la tarjeta SIM con las almohadillas en la placa de circuito impreso, la esquina biselada en la foto se indica con la flecha.


Además, desde la batería y el cable que va al controlador, se suelda directamente al condensador (4).


El hecho es que el módulo de comunicación en sí mismo requiere 3.4-4.2V para su fuente de alimentación, y su contacto PWR está conectado a un convertidor reductor, por lo que para la operación del voltaje de iones de litio debe aplicarse sin pasar por esta parte del circuito.


Arduino Pro Mini 3v


Luego realizamos un procedimiento similar con el LED en la placa Arduino (el óvalo a la derecha del chip cuadrado).


Soldamos el peine en cuatro contactos (1), siempre horizontalmente, a lo largo del tablero.


Acortamos las patas del fotorresistor a 10 mm y lo soldamos con conductores de 20 cm a los terminales GND y D2 de la placa (2).


Suministramos energía a través de un convertidor lineal: a bajas corrientes, la caída de voltaje de caída es de 0.1V.


Pero al suministrar un voltaje estabilizado a los módulos HX711, nos libramos de la necesidad de refinarlos a un voltaje más bajo (y al mismo tiempo aumentamos el ruido como resultado de esta operación).


Ahora debe tomar 5 metros de un cable telefónico de cuatro hilos y soldarlo entre el microcontrolador y el módulo de comunicación de acuerdo con el diagrama al comienzo del artículo (los colores de los cables corresponden a la realidad).


También soldamos el soporte de la batería, haremos el resto un poco más tarde.


Y ahora, por un tiempo, nos alejamos del soldador y pasamos a la parte del software.
Describiré la secuencia de acciones para Windows:
En primer lugar, debe descargar e instalar / descomprimir el programa Arduino IDE : la versión actual es 1.8.9, pero uso 1.6.4


Por simplicidad, desempaquetamos el archivo en la carpeta C: \ arduino- "your_version_number", dentro tendremos las carpetas / dist, drivers, ejemplos, hardware, java, lib, bibliotecas, referencias, herramientas, así como el archivo ejecutable arduino (entre otros).


Ahora necesitamos una biblioteca para trabajar con el ADC HX711 - el botón verde "clonar o descargar" - descargar ZIP.


El contenido (carpeta HX711-master) se coloca en el directorio C: \ arduino- "your_version_number" \ bibliotecas


Y, por supuesto, el controlador para USB-TTL es del mismo github: desde el archivo desempaquetado, simplemente se inicia el archivo de instalación del instalador.


Para aquellos que son reacios a molestarse con las bibliotecas, empaqué mi ensamblaje del programa Arduino IDE , solo descargue y desempaquete.


Comenzamos y configuramos el programa C: \ arduino- "your_version_number" \ arduino


Interfaz de programa


Vamos al elemento "Herramientas": seleccione la placa "Arduino Pro o Pro Mini", el procesador Atmega 328 3.3V 8 MHz, el puerto es el número que no sea el sistema COM1 (aparece después de instalar el controlador CH340 con el adaptador USB-TTL conectado).


Ok, copie el siguiente boceto (programa) y péguelo en la ventana Arduino IDE


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=' '; } } 

En la primera línea, entre comillas char phone_no [] = "+ 123456789012"; - en lugar de 123456789012 ponemos nuestro número de teléfono con el código del país al que se enviarán los SMS.


Haga clic en el botón de verificación (encima del número uno en la captura de pantalla anterior): si la compilación está debajo (debajo del triple en la captura de pantalla), entonces podemos flashear el microcontrolador.


Entonces, el USB-TTL está conectado al ARDUINO y a la computadora (como en la foto de arriba), colocamos la batería cargada en el soporte (generalmente en un nuevo arduino, el LED comienza a parpadear una vez por segundo).


Ahora el firmware, estamos entrenando para presionar el botón rojo (plateado) del microcontrolador, ¡esto tendrá que hacerse estrictamente en un momento determinado!


Hay Haga clic en el botón "Cargar" (arriba de los dos en la captura de pantalla) y mire cuidadosamente la línea en la parte inferior de la interfaz (debajo de las tres pantallas).


Tan pronto como la inscripción "compilación" sea reemplazada por "descarga" - presione el botón rojo (reiniciar) - si todo está bien - el adaptador USB-TTL parpadea alegremente y la inscripción "Descargado" en la parte inferior de la interfaz


Mientras esperamos que llegue el SMS de prueba al teléfono, le diré cómo funciona el programa:


La primera vez que se enciende el sistema, verifica los bytes 500 y 501 de la EEPROM; si son iguales, entonces los datos de calibración no se han registrado y el algoritmo pasa a la sección de configuración.


Lo mismo sucede si, cuando se enciende, el fotorresistor está sombreado (con una tapa de un bolígrafo): se activa el modo de restablecimiento de parámetros.


Los medidores de tensión ya deberían estar instalados debajo de las colmenas, ya que simplemente fijamos el nivel inicial de cero y luego medimos el cambio de peso (ahora vendrán ceros, ya que todavía no hemos conectado nada).


En arduino, el LED incorporado del pin 13 parpadeará.
Si no se produce el reinicio, el LED se ilumina durante 12 segundos.
Después de eso, se envía un SMS de prueba con el mensaje "INITIAL BOOT OK" y el porcentaje de carga de la batería.


Además, tenemos una interrupción en el fotosensor que funciona en el segundo pin (más la elevación está habilitada por la función pullup).
En este caso, después de disparar durante otros 3 minutos, se verifica el estado del fotorresistor para excluir los positivos repetidos / falsos.
Para evitar que el sistema se reinicie cada vez que se enciende, al menos el primer módulo HX711 debe estar conectado (pines DT-D10, SCK-A0)


Luego se toman las lecturas de la celda de carga, se calcula el cambio de peso de la operación anterior (el primer número en la línea después de Hive) y desde el primer inicio, se verifica el voltaje de la batería y esta información se envía en forma de SMS:


Sistema de muestra


Por cierto, ¿recibiste SMS? Felicidades Estamos a medio camino! Si bien la batería se puede quitar del soporte, ya no necesitaremos una computadora.


Procedemos a la fabricación de sensores, para empezar, veamos el diseño de los sensores:


Ubicación del sensor


Este es el plan de la colmena: vista superior.


Clásicamente, se instalan 4 sensores en las esquinas (1,2,3,4)


Mediremos de manera diferente. O más bien, incluso en el tercero. Como los chicos de BroodMinder hacen diferente:


Broodminder


En este diseño, los sensores se instalan en las posiciones 1 y 2, los puntos 3.4 se basan en el haz.
Entonces solo la mitad del peso cae sobre los sensores.
Sí, tal método tiene menos precisión, pero es difícil imaginar que las abejas construyeron todos los marcos con "lenguas" de los panales a lo largo de una pared de la colmena.


Por lo tanto, propongo reducir los sensores al punto 5 por completo, entonces no hay necesidad de proteger el sistema, y ​​cuando se usan colmenas ligeras, es completamente necesario hacerlo con un sensor.


Entonces, en una colmena, instalaremos dos celdas de carga y un módulo HX711, el diagrama de cableado es el siguiente:



Desde la placa ADC hasta el arduino hay 5 metros de un cable telefónico de 4 núcleos (en el caso de los módulos de peso 2 y 3), el primer sensor está conectado con una "cola" de 10 cm, pero más sobre eso más adelante.


En general, en los sensores dejamos "colas" de 8 cm, limpiamos el par trenzado y soldamos todo como en la foto de arriba.


Antes de comenzar la carpintería, coloque cera / parafina en un recipiente adecuado para derretir en un baño de agua.


Ahora tomamos nuestro haz y lo dividimos en tres segmentos de 100 mm.


A continuación, marque una ranura longitudinal de 25 mm de ancho, 7-8 mm de profundidad, con una sierra para metales y un cincel eliminamos el exceso; debe salir un perfil en forma de U.


Los fundamentos


De hecho, necesitamos una parte en forma de H 1 y dos: P-shki, todas de 10 cm de largo.


¿Por qué N-ka? No lo creas, esconde el Arduino en él:


el milagro de la tecnología hostil


Además, los enchufes 6P6C para conectar los sensores 2 y 3 también están conectados aquí.


Cera calentada? - sumergemos nuestros tableros de ADC allí - esto los protegerá de la humedad / niebla:


Protección ADC contra la humedad


Lo tenemos todo sobre una base de madera (es necesario tratarlo con un antiséptico contra la descomposición):


Asamblea


Y finalmente, arreglamos los sensores con tornillos:


Sensor listo


A continuación, soldamos todos los componentes restantes de acuerdo con el esquema en el encabezado y el sentido común.


En términos de ubicación de componentes, es recomendable mostrar imaginación, una cosa a tener en cuenta: ¡la distancia entre el microcontrolador y el módulo GSM debe ser de al menos un metro!


Tengo el siguiente diseño:


Final


Sí, tomé el ángulo de instalación de los paneles 45 grados, debido a la simplicidad de fabricación, pero está cerca de los cuarenta grados óptimos para el verano en la latitud de Kiev.


Eso es todo, ahora para la verificación final, coloque los sensores en los sectores del círculo, en la parte superior: una pieza de madera contrachapada, ponga a cero el controlador (encienda el sistema con la tapa en el fotodiodo de la pluma estilográfica).


En este caso, el LED del arduino debería parpadear y debería aparecer un SMS de prueba.


Luego retiramos la tapa de la fotocélula y vamos a recoger agua en una botella de plástico de 6 litros.
Ponemos la botella en madera contrachapada y, si ya han pasado varios minutos desde que se encendió, vuelva a colocar la tapa en el fotorresistor (simulando la puesta de sol).


Al mismo tiempo, el LED del arduino se iluminará y debería recibir un SMS con un valor de peso de aproximadamente 4 kg en todas las posiciones.


Felicidades ¡El sistema se ha ensamblado con éxito!


Si ahora hacemos que el sistema vuelva a funcionar, entonces en la primera columna del peso obtenemos ceros.


Sí, en condiciones reales es deseable orientar la fotorresistencia verticalmente hacia arriba.


Ahora daré un breve manual sobre el uso de:


  1. Instale medidores de tensión debajo de las paredes traseras de las colmenas (debajo de la parte delantera sustituya una viga / tabla de ~ 30 mm de espesor)
  2. Instale un módulo de comunicación con paneles solares en una elevación, a pocos metros de las colmenas.
    La orientación de los paneles solares, hacia el sur, se puede abarcar (no atraparemos el verdadero).
  3. Sombree el fotorresistor y coloque la batería: el LED debería parpadear y debería aparecer un SMS de prueba con el texto "INICIAL INICIAL"
    Cada tarde, después del atardecer, los SMS llegarán con un cambio de peso por día y desde el momento del lanzamiento.
    Al hacer una llamada al número de la tarjeta SIM del módulo GSM, el controlador se descuelga (escuchamos "El suscriptor no puede recibir la llamada") y llega un SMS con mediciones extraordinarias.
    En dicho mensaje habrá una línea adicional: "SMS forzado";

Queda muy poco para la belleza completa del sistema:


  1. Agregue el sistema automático del dispositivo en el fotosensor.
  2. Verifique otros tipos de módulos de comunicación.
  3. Para hacer todo bajo ESP-8266, en primer lugar, admite actualizaciones de firmware "por aire", es conveniente.

En segundo lugar, puede proporcionar estadísticas en forma de páginas web simples.
Y finalmente, si tiene Wi-Fi, puede rechazar completamente GSM-ki.


Ah, sí, estoy cansado de que algo esté jugando con cables, y prometí un sistema con ahorro de energía "absoluto".


En una palabra, decidí jugar un poco "tonto" y hacerlo todo.
¡Cuánto éxito, lea la publicación en un mes!


Nos vemos en las páginas de Habr-a,
Apicultor eléctrico Andrey


PD Para nuevas publicaciones sobre este tema, vea beefree.xyz

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


All Articles