SMS мониторинг на теглото на три кошера за 30 $

SMS мониторинг на теглото на три кошера за 30 $

Не, това не е търговско предложение, а цената на компонентите на системата, която можете да сглобите след прочитане на статията.

Няколко думи за историята:

Преди известно време реших да отглеждам пчели и те наистина дойдоха... за един цял сезон, но не презимуваха.
И то, въпреки че изглежда, че направих всичко правилно – есенна храна, изолиране преди студа.
Улеят беше класически дървен, система "Дадан" с 10 рамки от 40 мм дъска.
Но през тази зима, заради температурните "люлки", дори опитни пчелари загубиха много повече, отколкото обикновено.

Така се роди идеята за система за наблюдение на състоянието на кошера.
След публикуването на няколко статии в Хабр и комуникация във форума на пчеларите, реших да започна от простото към сложното.
Теглото е единственият безспорен параметър, но обикновено съществуващите системи наблюдават само един "еталонен" кошер.
Ако с него нещо се обърка (например излитане на роя, болест на пчелите), показателите стават неактуални.

Затова беше решено да се следи промяната на теглото на три кошера с един микроконтролер, а останалите "плюшки" да се добавят по-късно.
В резултат се получи автономна система с време на работа около месец на едно зареждане на батерия 18650 и изпращане на статистика веднъж на ден.
Опитах се конструкцията да бъде максимално опростена, за да може да бъде повторена дори без схеми, само по снимки.

Логиката на работа е следната: при първоначалното стартиране/нулата се запомнят в EEPROM показанията на сензорите, поставени под кошерите.
След това, всеки ден, след залез слънце, системата "се събужда", прочита показанията и изпраща SMS с промяната в теглото за денонощие и от момента на включване.
Освен това се предава стойността на напрежението на батерията, а при спад до 3.5V се издава предупреждение за необходимостта от зареждане, защото под 3.4V модулът за свързване не се включва и показанията на теглото вече "изплъзват".

„Помниш ли как всичко започна. Всичко беше за първи път и отново.“
SMS мониторинг на теглото на три кошера за 30 $
Да, именно такъв комплект "железария" беше първоначално, но до окончателния вариант стигнаха само тензодатчиците и проводниците, но за всичко по реда.
На всъщност, макарата кабел не е необходима, просто се оказа на същата цена, както и 30м на отрязък.

Ако не се страхувате от демонтаж на 3 smd-светодиода и половин стотина точки обикновено (изходни) запоявания – тогава напред!

Следва да подготвим следния комплект оборудване/материали:

  1. Arduino Pro Mini 3V
    Трябва да обърнете внимание на чипа на линейния преобразувател – той трябва да бъде точно 3.3V – на чипа с обозначение KB 33/LB 33/DE A10 – при мен китайците нещо объркаха и цялата партида
    платки в магазина се оказаха с 5-волтови регулатори и кварцове на 16MHz.
  2. USB-Ttl на чипа CH340 – може да е и 5-вольтов, но тогава по време на програмата на микроконтролера, Arduino трябва да бъде изключен от GSM модула, за да не го изгорите.
    Платките на чипа PL2303 не работят под Windows 10.
  3. Модул за свързване GSM Goouu Tech IOT GA-6-B или AI-THINKER A-6 Mini.
    Защо се спрях на него? Neoway M590 – конструктор, изискващ отделни танци с бубоните, GSM SIM800L – не ми хареса нестандартното ниво на логика от 2.8V, което изисква съгласуване дори с триволната Arduino.
    Освен това, решението от AiThinker има минимална консумация на енергия (при изпращане на SMS не видях ток над 100mA).
  4. Антенна GSM GPRS 3DBI (на снимката по-горе – правоъгълна платка с 'опашка', на 9 часа)
  5. Стартов пакет от оператор с добро покритие в мястото, където е разположен вашият кошер.
    Да, пакета трябва предварително да се активира в обикновен телефон, ДА СЕ ИЗКЛЮЧИ ЗАЯВКАТА за PIN при вход и да се зареди сметката.
    Сега има много варианти с имена в стил 'Сензор', 'IoT' – те имат малко по-ниска абонаментна такса.
  6. кабел dupont 20см мама-мама – 3 бр. (за свързване на Arduino към USB-TTL)
  7. 3 бр. HX711 – АЦП за везни
  8. 6 тензодатчика с товар до 50кг
  9. 15 метра 4-жилен телефонен кабел – за свързване на модулите с теглото с ARDUINO.
  10. Фоторезистор GL5528 (важно е точно такъв, с тъмен резистор 1MΩ и светлинен 10-20kΩ) и два обикновени резистора на 20k
  11. Парче двустранна 'дебела' тиксо 18х18мм – за закрепване на Arduino към модула.
  12. Държач за батерии 18650 и всъщност самата батерия ~2600mAh.
  13. Леко восък или парафин (свещ-таблетка за ароматни лампи) – за влагозащита HX711
  14. Парче дървен блок 25х50х300мм за основата на тензодатците.
  15. Дузина саморези с пресс шайба 4,2х19 мм за закрепване на сензорите към основата.

Батерия може да бъде взета от разглобени лаптопи – много по-евтино от новата, а капацитетът ще бъде много по-голям, отколкото при китайската UltraFire – при мен се получи 1500 срещу 450 (това е за фаера 6800 😉

Освен това, ще са необходими не криви ръце, поялник EPSN-25, колофон и спойка POS-60.

SMS мониторинг на теглото на три кошера за 30 $

Преди 5 години използвах съветски солдер с медно накрайник (никога не ми допаднаха солдер станции — пробвах ги, но завършвах схемата с ЕПСН).
Но след като се повреди и след няколко ужасни китайски измами, последният бе с името Sparta — нещо толкова сурово, колкото и името, спрях
на изделие с терморегулатор.

И така, да започнем!

SMS мониторинг на теглото на три кошера за 30 $

Първо, изваждаме два светодиода от GSM модула (мястото, където се намираха, е обведено с оранжев овал)
Вмъкваме SIM картата с контактните площадки към печатната платка, наклоненият ъгъл на снимката е обозначен със стрелка.

SMS мониторинг на теглото на три кошера за 30 $

След това провеждаме аналогична процедура със светодиода на платката Arduino (овал вдясно от квадратния чип),
Солим гребенката на четирите контакта (1),
Вземаме два резистора по 20k, усукваме изводите от едната страна, запояваме усукването в отвора на контакт A5, а останалите изводи в RAW и GND на ардуиното (2),
Съкращаваме крачетата на фоторезистора до 10 мм и го запояваме към изводите GND и D2 на платката (3).

Сега е време за синя двустранна изолента — лепим я на държача за SIM картата на модула за свързване, а отгоре — Arduino — червената (сребриста) бутона е обърната към нас и е над SIM картата.

Запояваме захранването: плюс от конденсатора на модула за свързване (4) към контакт RAW на Arduino.
Работата е там, че самият модул за свързване изисква за своята работа 3.4-4.2V, а контактът PWR е свързан към понижаващ преобразувател step-down, така че за работа от li-ion напрежение трябва да се подава на заобиколка на тази част от веригата.

В Arduino, обратно, захранването постъпва през линеен преобразувател — при малки токове на потребление, спадът на напрежението drop-out е 0.1V.
Така подаването на стабилизирано напрежение на модулите HX711, освобождава от необходимостта за доработка под по-ниско напрежение (и заедно с него от повишаването на шума в следствие на тази операция).

След това запояваме джъмпери (5) между контактите PWR-A1, URX-D4 и UTX-D5, „земята“ GND-G (6) и накрая захранването от държача на батерии 18650 (7), свързваме антената (8).
Сега вземаме USB-TTL преобразувател и свързваме с Dupont проводници с ARDUINO (гребенката 1) контактите RXD-TXD и TXD-RXD, GND-GND:

SMS мониторинг на теглото на три кошера за 30 $

На снимката по-горе — още първата версия (от три) на системата, която се използва за отладка.

А ето сега за малко ще се отклоним от солдери и ще преминем към софтуерната част.
Ще описвам последователността на действията за Windows:
Първо, необходимо да изтеглите и инсталирате/разпаковате програмата Arduino IDE — текущата версия — 1.8.9, но аз използвам 1.6.4

За улеснение разпаковаме архива в папка C:arduino-«вашият_номер_на_версията», вътре ще имаме папките /dist, drivers, examples, hardware, java, lib, libraries, reference, tools, както и изпълнимия файл arduino (освен другите).

Сега ще ни е нужна библиотека за работа с АЦП HX711 — зеленото копче „clone or download“ — download ZIP.
Съдържанието (папката HX711-master) се поставя в директорията C:arduino-«вашият_номер_на_версията»libraries

И разбира се, драйвер за USB-TTL от същия github — от разпакования архив просто се стартира инсталаторът с файла SETUP.

Ок, стартираме и настройваме програмата C:arduino-«вашият_номер_на_версията»arduino

SMS мониторинг на теглото на три кошера за 30 $

Влизаме в секцията „Инструменти“ - избираме платката „Arduino Pro или Pro Mini“, процесор Atmega 328 3.3V 8 MHz, порт — номер освен системния COM1 (той се появява след инсталирането на драйвера CH340 при свързан USB-TTL адаптер)

Ок, копираме следния скеч (програма) и я поставяме в прозореца на Arduino IDE

char phone_no[]="+123456789012"; // Your phone number that receive SMS with counry code 
#include <avr/sleep.h>  // ARDUINO sleep mode library
#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  
byte pin2sleep=15; //  Set powerON/OFF pin

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;

float readVcc() { // Read battery voltage function
  long result1000;
  float rvcc;  
  result1000 = analogRead(A5);
  rvcc=result1000;
  rvcc=6.6*rvcc/1023;
  return rvcc;
}

void setup() { // Setup part run once, at start

  pinMode(13, OUTPUT);  // Led pin init
  pinMode(2, INPUT_PULLUP); // Set pullup voltage
  Serial.begin(9600);
  mySerial.begin(115200); // Open Software Serial port to work with GSM-shield
  pinMode(pin2sleep, OUTPUT);// Itit ON/OFF pin for GSM
  digitalWrite(pin2sleep, LOW); // Turn ON modem
  delay(16000); // Wait for its boot 

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

//
  mySerial.println("AT+CMGF=1");    //  Send SMS part
  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("V Bat= ");
  mySerial.println(readVcc());
 if (readVcc()<3.5) {mySerial.print("!!! CHARGE BATTERY !!!");}
  delay(500);
  mySerial.println (char(26));//the ASCII code of the ctrl+z is 26
  delay(3000);

//  

raw02=raw00;
raw12=raw10;
raw22=raw20;

//scale0.power_down(); //power down all scales 
//scale1.power_down();
//scale2.power_down();

}

void loop() {

  attachInterrupt(0, NULL , RISING); // Interrupt on high lewel
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); //Set ARDUINO sleep mode
  digitalWrite(pin2sleep, HIGH); // Turn OFF GSM-shield
  delay(2200);
  digitalWrite(pin2sleep, LOW); // Turn OFF GSM-shield
  delay(2200);
  digitalWrite(pin2sleep, HIGH);
  digitalWrite(13, LOW);
  scale0.power_down(); //power down all scales 
  scale1.power_down();
  scale2.power_down();
  delay(90000);
  sleep_mode(); // Go to sleep
  detachInterrupt(digitalPinToInterrupt(0)); // turn off external interrupt

  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 )
  { 
  digitalWrite(13, HIGH);
  digitalWrite(pin2sleep, LOW); // Turn-ON GSM-shield
  scale0.power_up(); //power up all scales 
  scale1.power_up();
  scale2.power_up();
  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;

  delay(16000);
  mySerial.println("AT+CMGF=1");    //  Send SMS part
  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("V Bat= ");
  mySerial.println(readVcc());
  if (readVcc()<3.5) {mySerial.print("!!! CHARGE BATTERY !!!");}
  delay(500);
  mySerial.println (char(26));//the ASCII code of the ctrl+z is 26
  delay(3000);

  }

}

В първия ред, в кавички char phone_no[]=»+123456789012″; — вместо 123456789012 поставяме нашия телефонен номер с кода на страната, на който ще пристигат SMS.

Сега натискаме бутона за проверка (над цифрата едно в скрийншота по-горе) — ако долу (под тройката на скриншота) е написано „Компилацията е завършена“ — можем да програмираме микроконтролера.

И така, USB-TTL е свързан към ARDUINO и компютъра, поставяме заредената батерия в държача (обикновено на новата ардуинка започва да мига светодиодът с честота веднъж в секунда).

Сега програмирането — практикуваме да натискаме червения (сребрист) бутон на микроконтролера — това трябва да се направи точно в определен момент!!!
Има ли? Натискаме бутона „Зареждане“ (над двójката на скрийншота) и внимателно наблюдаваме реда в долната част на интерфейса (под тройката на скрина).
Веднага щом надписът „компилация“ се смени с „зареждане“ — натискаме червения бутон (ресет) — ако всичко е наред — на USB-TTL адаптера радостно ще мигат лампичките, а в долната част на интерфейса ще се появи надпис „Заредихме“

Сега, докато чакаме тестовия SMS да пристигне на телефона, ще обясня как работи програмата:

SMS мониторинг на теглото на три кошера за 30 $

На снимката — втората версия на тестовата стойка.

При първото включване системата сверява байтовете номер 500 и 501 EEPROM, ако те са равни, значи калибровъчните данни не са записани и алгоритъмът преминава към раздела за настройки.
Същото се случва, ако фотосензорът е затъмнен (с капачка от химикалка) при включване — активира се режимът за нулиране на параметрите.

Тензометричните сензори трябва да са вече инсталирани под кошерите, тъй като просто фиксираме началното ниво на нула и след това измерваме промяната в теглото (в момента просто ще получим нули, тъй като не сме свързвали нищо до сега).
На Arduino в този момент ще започне да мига вграденият светодиод на пин 13.
Ако нулирането не се случи, светодиодът свети в продължение на 12 секунди.
След това се изпраща тестова СМС с съобщение «INITIAL BOOT OK» и напрежение на батерията.
Комуникационният модул се изключва, и след 3 минути платката Arduino поставя платките АЦП HX711 в режим на сън и сама заспива.
Тази забавяне е направена, за да не ловим наводки от работещия GSM модул (след изключване той определено «фонира» за кратко).

След това при нас работи прекъсвачът по фотосензора на втория пин (включена е опцията pullup).
При това след сработването още 3 минути се проверява състоянието на фотосензора — за да се избегнат повторни/ложни сработвания.
Както е характерно, без каквото и да е настройване, системата сработва след 10 минути след астрономическия залез в облачно време и 20 минути в ясно.
Да, за да не се прави нулиране при всяко включване, поне първият модул HX711 трябва да бъде свързан (пинове DT-D10, SCK-А0).

След това се вземат показания от тензометричните сензори, изчислява се промяната в теглото от последното сработване (първото число в реда след Hive) и от първоначалното включване, проверява се напрежението на батерията и тази информация се изпраща в СМС:

SMS мониторинг на теглото на три кошера за 30 $

Между другото, получихте ли СМС? Поздравления! Ние сме по средата на пътя! Батерията временно може да бъде извлечена от държача, компютърът вече не ни е нужен.

По случая, контролният център за полети се оказа толкова компактен, че може да се побере в бурканче от майонеза, в моя случай отлично се вписа полупрозрачна кутия с размери 30х60х100мм (от визитки).

Да, спящата система консумира ~2.3мА — на 90% от модула за комуникация — той не се изключва напълно, а преминава в режим на готовност.

SMS мониторинг на теглото на три кошера за 30 $

Пристъпваме към производството на сензорите, за начало ще се докоснем до схемата на разположение на сензорите:

SMS мониторинг на теглото на три кошера за 30 $

Това е план с кошера — изглед отгоре.

Класически, се инсталират 4 сензора по ъглите (1,2,3,4)

Ние ще измерим по различен начин. По-точно, дори по трети, тъй като по различен начин работят момчетата от BroodMinder:

SMS мониторинг на теглото на три кошера за 30 $

В тази конструкция сензорите са разположени на позиции 1 и 2, точки 3 и 4 се основават на греда.
Тогава на сензорите се пада само половината от тежестта.
Да, такъв метод има по-ниска точност, но все пак е трудно да си представим, че пчелите са запълнили всички рамки с 'езици' от восъчни пити по дължината на една стена на кошера.

Предлагам изобщо да съберем сензорите в точка 5 — тогава отпада необходимостта от екраниране на системата, а при използване на леки кошери изобщо може да обходим с един сензор.

SMS мониторинг на теглото на три кошера за 30 $

Общо взето, бяха тествани два вида модули на HX711, два вида сензори и два варианта на свързване — с пълен мост на Уитстън (2 сензора) и с половинка, когато втората част се допълва с 1к резистори с толерантност 0.1%.
Но последният метод е нежелателен и не се препоръчва дори от производителите на сензори, затова ще опиша само първия.

И така, на един кошер ще се инсталират два тензодатчика и един модул HX711, схемата на запояване е следната:

SMS мониторинг на теглото на три кошера за 30 $

От платката на АЦП до Arduino отиват 5 метра 4-жилен телефонен кабел — помним как пчелите не обичат GSM устройства в кошера..

Общо взето, на сензорите оставяме 'опашки' по 8 см, отстраняваме усукания чифт и всичко запояваме както е показано на снимката по-горе.

Преди да започнете дърводелската част, сложете восък/парафин в подходящ съд да се разтопи на водна баня.

Сега взимаме нашата греда и я разделяме на три сегмента по 100 мм.

След това отбелязваме надлъжен жлеб с ширина 25 мм, дълбочина 7-8 мм, с помощта на трион и стамеска отстраняваме излишното — трябва да е излязъл U-образен профил.

Разтопи ли се восъкът? — потапяме там нашите платки на АЦП — това ще ги защити от влага/мъгла:

SMS мониторинг на теглото на три кошера за 30 $

Разполагаме всичко това на дървена основа (необходимо е да се обработи с антисептик против гниене):

SMS мониторинг на теглото на три кошера за 30 $

И накрая, фиксираме сензорите с винтове:

SMS мониторинг на теглото на три кошера за 30 $

Имаше и вариант със синя изолента, но по хуманни причини не го представям 😉

От страната на Arduino правим следното:

Почистваме телефонните ни кабели, цветните жици усукваме помежду си, и запояваме.

След това, запояваме към контактите на платката както е показано на снимката:

SMS мониторинг на теглото на три кошера за 30 $

Всичко, сега за окончателна проверка, поставяме сензорите по секторите на кръга, отгоре — парче фанера, нулираме контролера (слагаме батерия с капачка от химикалка, поставена на фотодиода).

При това светодиодът на Ардуино трябва да мига, а тестов SMS да бъде получен.

След това сваляме капачката от фотоелемента и отиваме да напълним 1.5-литрова пластмасова бутилка с вода.
Поставяме бутилката на фанера и ако е минало няколко минути от включването, слагаме капачката обратно на фоторезистора (имитирайки залез).

След три минути светодиодът на Ардуино ще светне и трябва да получите SMS с тегло около 1 кг на всичките позиции.

Поздравления! Системата е успешно сглобена!

Ако сега подкарате системата отново, в първата колона теглата ще бъдат нули.

Да, в реални условия е желателно фоторезисторът да бъде ориентиран вертикално нагоре.

Сега ще дам кратко ръководство за употреба:

  1. Поставете тензодатчиците под задните стени на улиците (под предните поставете греда/дъска с дебелина около 30 мм)
  2. Покрийте фоторезистора и поставете батерия - светодиодът трябва да мига и да получите тестов SMS с текст «INITIAL BOOT OK»
  3. Разположете централния блок на максимално разстояние от улиците така, че проводниците да не пречат при работата с пчелите.
    Всеки вечер, след залез, ще получавате SMS с промяната в теглото за денонощието и от момента на стартиране.
    Когато напрежението на батерията достигне 3.5V, SMS ще завършва с фразата «!!! CHARGE BATTERY !!!»
    Времето на работа от една батерия с капацитет 2600mAh е около месец.
    При смяна на батерията, дневните промени в теглото на улиците не се запомня.

UPD ПРЕДУПРЕЖДЕНИЕ !

В УСЛОВИЯ НА СЛАБ СИГНАЛ, GSM-модулът увеличава мощността, което води до РЕСТАРТ НА СИСТЕМАТА.

Това беше установено по време на «полеви» изпитания (не е ясно защо потребителите на GSM щитовете не съобщават за подобни проблеми).

Сега подготвям нова схема:
SMS мониторинг на теглото на три кошера за 30 $

След успешна проверка, това публикуване ще бъде обновено.

Електропчеловод Андрей.

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster