SMS-следене на теглото на три кошера за 30$

SMS-следене на теглото на три кошера за 30$

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

Малко предистория:

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

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

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

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

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

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

И така, имаме нужда от следния набор от оборудване / материали:

  1. Arduino Pro Mini 3V
    Трябва да обърнете внимание на чипа на линейния преобразувател - трябва да е точно 3.3 V - върху маркировката на чипа 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 логическо ниво, което изисква координация дори с триволтово ардуино.
    В допълнение, решението от AiThinker има минимална консумация на енергия (при изпращане на SMS не видях ток над 100mA).
  4. Антена GSM GPRS 3DBI (на снимката по-горе - правоъгълен шал с "опашка", на 9 часа)
  5. Стартов пакет за оператор с добро покритие на вашия пчелин.
    Да, пакетът трябва първо да се активира в обикновен телефон, да се ИЗКЛЮЧИ ЗАЯВКА НА ПИН на входа и да се зареди сметката.
    Сега има много опции с имена като "Sensor", "IoT" - те са с малко по-ниска месечна такса.
  6. тел дюпон 20см женски-женски — 3 бр. (за свързване на Arduino към USB-TTL)
  7. 3 бр. HX711 - АЦП за везни
  8. 6 динамометрични клетки за тегло до 50 кг
  9. 15 метра 4-жилен телефонен кабел - за свързване на тегловни модули с ARDUINO.
  10. Фоторезистор GL5528 (важното точно това, с тъмно съпротивление 1MΩ и светло съпротивление 10-20kΩ) и два конвенционални 20k резистора
  11. Парче двустранно "дебело" тиксо 18х18мм - за закрепване на ардуино към комуникационния модул.
  12. 18650 държач за батерия и всъщност самата батерия ~ 2600mAh.
  13. Малко восък или парафин (арома лампа свещ-таблетка) - за защита от влага HX711
  14. Парче дървена греда 25х50х300 мм за основа на тензодатчиците.
  15. Десетина самонарезни винта с пресова шайба 4,2х19 мм за закрепване на сензорите към основата.

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

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

SMS-следене на теглото на три кошера за 30$

Преди 5 години използвах съветски поялник с медно жило (станциите за запояване не работеха за мен - взех го за тест драйв и завърших веригата с EPSN).
Но след неговия провал и няколко китайски чудовищни ​​фалшиви (d) дървета, последното имаше името Спарта - нещо толкова грубо като името, спря
на продукт с термостат.

Така че да тръгваме!

SMS-следене на теглото на три кошера за 30$

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

SMS-следене на теглото на три кошера за 30$

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

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

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

В arduino, напротив, захранваме чрез линеен преобразувател - при ниска консумация на ток падането на напрежението е 0.1V.
Но като прилагаме стабилизирано напрежение към модулите HX711, ние се освобождаваме от необходимостта да ги модифицираме за по-ниско напрежение (и в същото време от увеличаване на шума в резултат на тази операция).

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

SMS-следене на теглото на три кошера за 30$

Снимката по-горе показва първата версия (от три) на системата, която е използвана за отстраняване на грешки.

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

За по-лесно разопаковаме архива в папката C: arduino-"your_version number", вътре ще имаме /dist, драйвери, примери, хардуер, java, lib, библиотеки, справочници, папки с инструменти, както и изпълнимия файл на arduino (наред с други).

Сега имаме нужда от библиотека, за да работим с ADC HX711 - зелен бутон "клониране или изтегляне" - изтегляне на ZIP.
Съдържанието (папка HX711-master) се поставя в директорията библиотеки C: arduino-"your_version_number"

И разбира се, драйверът за 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 и компютър, поставяме заредена батерия в държача (обикновено на нов arduino светодиодът започва да мига с честота веднъж в секунда).

Сега фърмуерът - тренираме да натискаме червения (сребърен) бутон на микроконтролера - това ще трябва да се направи стриктно в определен момент !!!
Яжте? Щракнете върху бутона „Качване“ (над двете на екранната снимка) и внимателно погледнете реда в долната част на интерфейса (под трите на екрана).
Веднага след като надписът "компилация" се замени с "зареждане" - натиснете червения бутон (reset) - ако всичко е наред - светлинките на USB-TTL адаптера мигат щастливо, а в долната част на интерфейса надписът "Loaded "

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

SMS-следене на теглото на три кошера за 30$

На снимката - втората версия на стойката за отстраняване на грешки.

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

Товарните клетки трябва вече да са монтирани под кошерите, тъй като ние просто фиксираме първоначалното ниво на нула и след това измерваме промяната в теглото (сега просто ще идват нули, тъй като все още не сме свързали нищо).
В същото време вграденият светодиод на пин 13 ще мига на Arduino.
Ако не се извърши нулиране, светодиодът светва за 12 секунди.
След това се изпраща тестов SMS със съобщението "INITIAL BOOT OK" и напрежението на батерията.
Комуникационният модул се изключва и след 3 минути платката Arduino поставя платките HX711 ADC в режим на заспиване и заспива сама.
Такова забавяне се прави, за да не се хващат пикапи от работещ GSM модул (след като го изключите, той „фонира“ за известно време).

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

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

SMS-следене на теглото на три кошера за 30$

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

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

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

SMS-следене на теглото на три кошера за 30$

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

SMS-следене на теглото на три кошера за 30$

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

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

Ще мерим по различен начин. Или по-скоро дори по трети начин. Защото момчетата от BroodMinder го правят по различен начин:

SMS-следене на теглото на три кошера за 30$

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

Така че предлагам като цяло да намалим сензорите до точка 5 - тогава няма нужда да екранирате системата, а когато използвате леки кошери, можете да направите с един сензор изобщо.

SMS-следене на теглото на три кошера за 30$

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

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

SMS-следене на теглото на три кошера за 30$

От ADC платката до arduino има 5 метра 4-жилен телефонен кабел - помним как пчелите не обичат GSM апаратите в кошера.

Като цяло оставяме „опашки“ от 8 см на сензорите, почистваме усуканата двойка и разпояваме всичко, както е на снимката по-горе.

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

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

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

Загрял ли е восъкът? - потапяме нашите ADC платки там - това ще ги предпази от влага / мъгла:

SMS-следене на теглото на три кошера за 30$

Поставяме всичко върху дървена основа (необходимо е да се третира с антисептик от гниене):

SMS-следене на теглото на три кошера за 30$

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

SMS-следене на теглото на три кошера за 30$

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

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

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

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

SMS-следене на теглото на три кошера за 30$

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

В същото време светодиодът на arduino трябва да мига и трябва да дойде тестов SMS.

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

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

Честито! системата е успешно сглобена!

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

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

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

  1. Монтирайте товарни клетки под задните стени на кошерите (заменете греда / дъска с дебелина ~ 30 mm под предните)
  2. Засенчете фоторезистора и поставете батерията - светодиодът трябва да мига и трябва да дойде тестов SMS с текст "INITIAL BOOT OK"
  3. Разположете централния блок на максимално разстояние от кошерите и така, че проводниците да не пречат при работа с пчелите.
    Всяка вечер, след залез слънце, ще идват SMS с промяна в теглото за ден и след стартирането.
    Когато напрежението на батерията достигне 3.5 V, SMS ще завърши с реда „!!! ЗАРЕДЕТЕ БАТЕРИЯТА!!!"
    Времето за работа от една батерия с капацитет 2600mAh е около месец.
    При смяна на батерията дневните промени в теглото на кошерите не се запомнят.

Каква е следващата?

  1. Разберете как да подредите всичко това в проект за github
  2. Имате 3 пчелни семейства в кошерите на система Паливода (или рогати в народа)
  3. Добавете "кифли" - измерване на влажност, температура и най-важното - анализ на жуженето на пчелите.

Това е всичко за сега, искрено Ваш, електропчелар Андрей

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

Добавяне на нов коментар