Не, ова не е комерцијална понуда, ова е цената на компонентите на системот што можете да ги соберете откако ќе ја прочитате статијата.
Мала позадина:
Пред некое време решив да земам пчели, и тие се појавија ... цела сезона, но не ја напуштија зимата.
И ова и покрај фактот што се чинеше дека прави сè како што треба - есенска дополнителна храна, загревање пред студот.
Кошницата беше класичен дрвен систем „Дадан“ за 10 рамки од табла од 40 мм.
Но, таа зима, поради температурните промени, дури и искусните пчелари изгубија многу повеќе од вообичаено.
Така настана идејата за систем за следење на здравјето на кошниците.
Откако објавив неколку статии на Хабр и зборував на форумот на пчелари, решив да преминам од едноставно во сложено.
Тежината е единствениот неоспорен параметар, но по правило, постоечките системи следат само една „референтна“ кошница.
Ако нешто тргне наопаку со тоа (на пример, заминување на рој, пчелна болест), тогаш индикаторите стануваат ирелевантни.
Затоа, беше одлучено да се следи промената на тежината на три коприва одеднаш со еден микроконтролер, а потоа да се додадат други „добри“.
Како резултат на тоа, добивме автономен систем со време на работа од околу еден месец со едно полнење на батеријата 18650 и испраќање статистика еднаш дневно.
Се обидов да го поедноставам дизајнот што е можно повеќе, за да може да се повторува и без дијаграми, од една фотографија.
Логиката на работа е следна: при првото стартување / ресетирање, читањата на сензорите инсталирани под копривите се складираат во EEPROM.
Понатаму, секој ден, по зајдисонце, системот „се буди“, ги чита читањата и испраќа СМС со промена на тежината дневно и од моментот на вклучување.
Дополнително, вредноста на напонот на батеријата се пренесува и кога ќе падне на 3.5 V, се издава предупредување за потребата од полнење, бидејќи под 3.4 V комуникацискиот модул не се вклучува, а отчитувањата на тежината веќе „лебдат далеку“.
„Се сеќавате ли како започна се. Сè беше за прв пат и повторно.
Да, тоа беше таков сет на „железо“ што беше првично, иако само мерачите и жиците преживеаја до финалната верзија, но прво прво.
Впрочем, каблиот не е потребен, само испадна дека е иста цена како 30м директно.
Ако не се плашите од демонтирање на 3 smd-LED диоди и половина сто точки на конвенционално (излез) лемење, тогаш одете!
Значи, ни треба следниот сет на опрема / материјали:
- Arduino Pro Mini 3V
Треба да обрнете внимание на чипот на линеарниот конвертор - треба да биде точно 3.3 V - на чипот што означува KB 33 / LB 33 / DE A10 - Кинезите ми збркаа нешто, и целата серија
таблите во продавницата испаднаа со 5-волтни регулатори и кварц на 16MHz. - USB-Ttl на чипот CH340 - можно е дури и 5 волти, но потоа за време на фирмверот на микроконтролерот, Arduino ќе треба да се исклучи од GSM модулот за да не го изгори вториот.
Плочите базирани на чипот PL2303 не работат под Windows 10. - GSM комуникациски модул Goouu Tech IOT GA-6-B или AI-THINKER A-6 Mini.
Зошто застанавте таму? Neoway M590 - конструктор кој бара посебни танци со тамбура, GSM SIM800L - не му се допадна нестандардното логично ниво од 2.8V, кое бара координација дури и со триволтен ардуино.
Покрај тоа, решението од AiThinker има минимална потрошувачка на енергија (при праќање СМС, не видов струја над 100 mA). - Антена GSM GPRS 3DBI (на фотографијата погоре - правоаголна шамија со „опашка“, во 9 часот)
- Почетен пакет за оператор со добра покриеност на локацијата на вашиот пчеларник.
Да, пакетот мора прво да се активира во обичен телефон, да се ОНЕСЕБЕНИ БАРАЊЕТО ЗА ПИН на влезот и да се надополни сметката.
Сега има многу опции со имиња како „Сензор“, „ИоТ“ - тие имаат нешто помала месечна претплата. - жица дупон 20см женско-женско — 3 ЕЕЗ. (за поврзување на Arduino на USB-TTL)
- 3 ЕЕЗ. HX711 - ADC за вага
- 6 товарни ќелии за тежина до 50 кг
- 15 метри 4-жичен телефонски кабел - за поврзување на тежински модули со ARDUINO.
- Фотоотпорник GL5528 (важно е токму ова, со темен отпор од 1MΩ и светлосен отпор од 10-20kΩ) и два конвенционални отпорници од 20k
- Парче двострана „дебела“ лента 18х18мм - за прикачување на ардуино на комуникацискиот модул.
- Држач за батерија од 18650 година и, всушност, самата батерија ~ 2600 mAh.
- Малку восок или парафин (ароматична ламба свеќа-таблета) - за заштита од влага HX711
- Парче дрвена греда 25x50x300mm за основата на мерачите на деформација.
- Десетина завртки за самопреслушување со мијалник за печат 4,2x19 mm за прицврстување на сензорите на основата.
Батеријата може да се земе од демонтирање лаптопи - многу пати поевтино од нов, а капацитетот ќе испадне многу поголем од оној на кинескиот UltraFire - добив 1500 наспроти 450 (ова е за оган 6800 😉
Дополнително, ќе ви требаат некриви раце, рачка за лемење EPSN-25, колофон и лемење POS-60.
Пред 5 години користев советско рачка за лемење со бакарно убод (станиците за лемење не ми работеа - го однесов на тест возење и го завршив колото со EPSN).
Но, по неговиот неуспех и неколку кинески монструозни лажни (г) дрвја, ова последното го имаше името Спарта - нешто сурово како името, престана
на производ со термостат.
Па ајде да одиме!
За почеток, одлемевме две LED диоди од GSM модулот (местото каде што беа заокружени во портокалова овална форма)
Ја вметнуваме SIM-картичката со контактните влошки на плочата за печатено коло, закосениот агол на фотографијата е означен со стрелка.
Потоа спроведуваме слична постапка со ЛЕР на таблата Arduino (овална лево од квадратниот чип),
Го лемеме чешелот на четири контакти (1),
Земаме два отпори од 20 k, ги извртуваме каблите од едната страна, го залемеме извртувањето во дупката на контактот A5, преостанатите кабли во RAW и GND на ардуино (2),
Нозете на фотоотпорникот ги скратуваме на 10 mm и го залемеме на игличките GND и D2 на плочата (3).
Сега е време за сината електрична лента со двострана лента - ја лепиме на држачот за SIM картичката на комуникацискиот модул, а одозгора - arduino - црвеното (сребрено) копче е свртено кон нас и е над SIM картичката.
Ја залемеме моќноста: плус од кондензаторот на комуникацискиот модул (4) на иглата RAW arduino.
Факт е дека самиот комуникациски модул бара 3.4-4.2 V за неговото напојување, а неговиот PWR контакт е поврзан со конвертор надолу, затоа, за да работи од ли-јонски, напонот мора да се напојува заобиколувајќи го овој дел од колото .
Во 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):
На фотографијата погоре е прикажана првата верзија (од три) на системот што се користеше за дебагирање.
И сега ќе се оддалечиме од рачката за лемење некое време и ќе преминеме на софтверскиот дел.
Ќе ја опишам низата дејства за Windows:
Прво, треба да ја преземете и инсталирате/отпакувате програмата
За едноставност, ја отпакуваме архивата во папката C: arduino-„your_version number“, внатре ќе имаме /dist, драјвери, примери, хардвер, java, lib, библиотеки, референца, папки со алатки, како и arduino извршна датотека (меѓу другите).
Сега ни треба библиотека за да работиме со ADC
Содржината (папка HX711-master) е сместена во директориумот C: arduino-"your_version_number" libraries
И секако, возачот за
Во ред, стартувајте и конфигурирајте ја програмата C: arduino-„Your_version number“ arduino
Одиме во ставката „Tools“ - изберете ја таблата „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 го ставаме нашиот телефонски број со шифрата на државата на која ќе се испраќа СМС.
Сега го притискаме копчето за проверка (над број еден на сликата од екранот погоре) - ако подолу (под трите на екранот) „Компилацијата е завршена“ - тогаш можеме да го трепкаме микроконтролерот.
Значи, USB-TTL е поврзан со ARDUINO и компјутер, ставаме наполнета батерија во држачот (обично на нов ардуино, ЛЕР почнува да трепка со фреквенција од еднаш во секунда).
Сега фирмверот - тренираме да го притиснеме црвеното (сребрено) копче на микроконтролерот - ова ќе треба да се направи строго во одреден момент !!!
Јадете? Кликнете на копчето „Подигни“ (над двете на сликата од екранот) и внимателно погледнете ја линијата на дното на интерфејсот (под трите на екранот).
Штом натписот „компилација“ се замени со „вчитување“ - притиснете го црвеното копче (ресетирање) - ако сè е во ред - светлата на USB-TTL адаптерот весело трепкаат, а на дното на интерфејсот е натписот „Loaded "
Сега, додека чекаме да пристигне тест СМС на телефонот, ќе ви кажам како работи програмата:
На фотографијата - втората верзија на штандот за дебагирање.
Кога првпат ќе се вклучи, системот ги проверува бајтите број 500 и 501 на EEPROM, ако тие се еднакви, тогаш податоците за калибрација не се напишани и алгоритмот продолжува до делот за поставување.
Истото се случува ако, кога е вклучен, фотоотпорникот е засенчен (со капаче за пенкало) - режимот за ресетирање е активиран.
Товарните ќелии веќе треба да се инсталираат под коприва, бидејќи едноставно го поправаме почетното ниво на нула, а потоа ја мериме промената на тежината (сега само ќе дојде до нули, бидејќи сè уште не сме поврзале ништо).
Во исто време, вградената ЛЕД од пинот 13 ќе трепка на Arduino.
Ако не се случи ресетирање, LED свети 12 секунди.
После тоа, се испраќа пробна СМС порака со порака „ПОРВИЧЕН БАТ OK“ и напонот на батеријата.
Модулот за комуникација се исклучува и по 3 минути, плочката Arduino ги става плочите HX711 ADC во режим на мирување и сама заспива.
Таквото одложување е направено за да не се фатат пикапи од работен GSM модул (откако ќе го исклучите, тој „фонира“ некое време).
Понатаму, имаме прекин на фотосензорот на вториот пин (позитивното повлекување е овозможено со функцијата за повлекување).
Во исто време, по активирањето уште 3 минути, се проверува состојбата на фотоотпорникот - за да се исклучат повторените / лажни позитиви.
Се разбира, без никакво прилагодување, системот работи 10 минути по астрономското зајдисонце при облачно време и 20 минути подоцна при ведро време.
Да, за да не се ресетира системот секогаш кога ќе се вклучи, мора да се поврзе барем првиот HX711 модул (пинови DT-D10, SCK-A0)
Потоа се земаат отчитувањата на оптоварувачките ќелии, се пресметува промената на тежината од претходната операција (првиот број во линијата по Hive) и од првото вклучување се проверува напонот на батеријата и оваа информација се испраќа во форма на ПОРАКА:
Патем, дали добивте СМС порака? Секоја чест! Ние сме на средината на патот! Батеријата сè уште може да се отстрани од држачот, нема да ни треба компјутерот понатаму.
Патем, центарот за контрола на мисијата се покажа дека е толку компактен што може да се смести во тегла мајонез, во мојот случај совршено се вклопува проѕирна кутија со големина 30x60x100 mm (од визит-картички).
Да, системот за спиење троши ~2.3 mA - 90% поради комуникацискиот модул - не се исклучува целосно, туку оди во режим на подготвеност.
Продолжуваме со производство на сензори, за почеток, да го допреме распоредот на сензорите:
Ова е планот на кошницата - поглед одозгора.
Класично, 4 сензори се инсталирани во аглите (1,2,3,4)
Ќе мериме поинаку. Или подобро, дури и на трет начин. Затоа што момците од BroodMinder го прават тоа поинаку:
Во овој дизајн, сензорите се инсталирани на позициите 1 и 2, точките 3,4 и XNUMX се потпираат на зракот.
Тогаш сензорите чинат само половина од тежината.
Да, овој метод има помала прецизност, но сепак е тешко да се замисли дека пчелите ги изградиле сите рамки со „јазици“ од саќе долж еден ѕид од кошницата.
Значи, предлагам генерално да ги намалите сензорите до точка 5 - тогаш нема потреба да го заштитувате системот, а кога користите лесни коприва, можете воопшто да направите со еден сензор.
Општо земено, на HX711 беа тестирани два типа модули, два типа сензори и две опции за нивно поврзување - со полн Wheatstone мост (2 сензори) и со половина, кога вториот дел е дополнет со 1k отпорници со толеранција од 0.1%.
Но, вториот метод е непожелен и не се препорачува дури и од производителите на сензори, па затоа ќе го опишам само првиот.
Значи, на една кошница ќе инсталираме две оптоварувачки ќелии и еден модул HX711, дијаграмот за поврзување е како што следува:
Од ADC плочата до ардуиното има 5 метри телефонски кабел со 4 јадра -
Во принцип, оставаме „опашки“ од 8 см на сензорите, го чистиме изопачениот пар и одлемеме сè како на горната фотографија.
Пред да започнете со столаријата, ставете го восокот/парафинот во соодветен сад да се стопи во водена бања.
Сега го земаме нашето дрво и го делиме на три сегменти од по 100 мм
Следно, означуваме надолжен жлеб широк 25 mm, длабок 7-8 mm, користете ножовка и длето за да го отстраните вишокот - треба да излезе профил во форма на буквата У.
Дали восокот се загреал? - ги потопуваме нашите ADC плочи таму - ова ќе ги заштити од влага / магла:
Сето тоа го ставаме на дрвена основа (неопходно е да се третира со антисептик од распаѓање):
И, конечно, ги поправаме сензорите со завртки за самопреслушување:
Имаше уште една опција со сина електрична лента, но од хуманост не ја истакнувам 😉
Од страната на Arduino, направете го следново:
Ги чистиме телефонските кабли, ги вртиме обоените жици, играме трикови.
После тоа, залемете ги на контактите на таблата како на фотографијата:
Тоа е сè, сега за последната проверка, ги ставаме сензорите во секторите на кругот, на врвот - парче иверица, го ресетираме контролерот (ја ставаме батеријата со капаче за пенкало на фотодиодата).
Во исто време, ЛЕД-то на arduino треба да трепка и да дојде тест SMS.
Потоа го отстрануваме капачето од фотоќелијата и одиме да собереме вода во пластично шише од 1.5 литри.
Го ставаме шишето на иверица и ако веќе поминале неколку минути од вклучувањето, го враќаме капачето на фотоотпорникот (симулирајќи зајдисонце).
По три минути, ЛЕР на ардуино ќе светне и треба да добиете СМС со вредности на тежина од околу 1 кг во сите позиции.
Секоја чест! системот е успешно склопен!
Ако сега го принудиме системот повторно да работи, тогаш ќе се добијат нули во првата колона од тежината.
Да, во реални услови пожелно е да се ориентира фотоотпорникот вертикално нагоре.
Сега ќе дадам краток прирачник за употреба:
- Инсталирајте оптоварувачки ќелии под задните ѕидови на коприните (заменете греда / табла со дебелина ~ 30 mm под предните)
- Засенчете го фотоотпорникот и ставете ја батеријата - ЛЕР треба да трепка и треба да дојде пробна СМС порака со текст „ПОРВИЧЕН БАРАЊЕ OK“
- Поставете ја централната единица на максимално растојание од кошниците и така што жиците да не се мешаат при работа со пчели.
Секоја вечер, по зајдисонце, СМС ќе доаѓа со промена на тежината дневно и од лансирањето.
Кога напонот на батеријата ќе достигне 3.5 V, СМС ќе заврши со линијата „!!! ПОЛНЕТЕ БАТЕРИЈА!!!"
Времето на работа од една батерија со капацитет од 2600 mAh е околу еден месец.
Во случај на замена на батеријата, дневните промени во тежината на копривите не се меморираат.
UPD ПРЕДУПРЕДУВАЊЕ!
ВО УСЛОВИ СО СЛАБ СИГНАЛ, GSM модулот ја зголемува моќноста, што доведува до РЕСТАРТУВАЊЕ НА СИСТЕМОТ
Ова беше откриено за време на теренските тестови (не е јасно зошто корисниците на GSM штитовите не пријавуваат такви проблеми).
Сега подготвувам нова шема:
По успешната потврда, оваа публикација ќе се ажурира.
Електричен пчелар Андреј.
Извор: www.habr.com