ไม่ นี่ไม่ใช่ข้อเสนอเชิงพาณิชย์ แต่เป็นต้นทุนของส่วนประกอบระบบที่คุณสามารถประกอบได้หลังจากอ่านบทความแล้ว
พื้นหลังเล็กน้อย:
เมื่อไม่นานมานี้ ฉันตัดสินใจรับผึ้ง และพวกมันก็ปรากฏตัว... ตลอดทั้งฤดูกาล แต่ไม่ได้ออกจากกระท่อมฤดูหนาว
และแม้ว่าเขาจะทำทุกอย่างอย่างถูกต้องก็ตาม - การให้อาหารเสริมในฤดูใบไม้ร่วง, ฉนวนก่อนอากาศหนาว
รังเป็นระบบไม้ "ดาดัน" แบบคลาสสิกซึ่งมี 10 เฟรมทำจากไม้กระดานขนาด 40 มม.
แต่ในฤดูหนาวนั้น เนื่องจากอุณหภูมิที่ผันผวน แม้แต่ผู้เลี้ยงผึ้งที่มีประสบการณ์ก็สูญเสียมากกว่าปกติมาก
นี่คือที่มาของแนวคิดของระบบในการตรวจสอบสภาพของรัง
หลังจากเผยแพร่บทความเกี่ยวกับ Habr หลายบทความและสื่อสารในฟอรัมคนเลี้ยงผึ้งฉันก็ตัดสินใจเปลี่ยนจากง่ายไปสู่ซับซ้อน
น้ำหนักเป็นพารามิเตอร์เดียวที่เถียงไม่ได้ แต่ตามกฎแล้ว ระบบที่มีอยู่จะตรวจสอบกลุ่ม "อ้างอิง" เพียงกลุ่มเดียวเท่านั้น
หากมีสิ่งผิดปกติเกิดขึ้น (เช่น การจากไปของฝูงผึ้ง) ตัวชี้วัดก็จะไม่เกี่ยวข้อง
ดังนั้นจึงตัดสินใจติดตามการเปลี่ยนแปลงน้ำหนักของลมพิษ XNUMX ชนิดพร้อมกันโดยใช้ไมโครคอนโทรลเลอร์ตัวเดียว และเพิ่ม "สารพัด" อื่นๆ ในภายหลัง
ผลลัพธ์คือระบบอัตโนมัติที่มีอายุการใช้งานประมาณหนึ่งเดือนต่อการชาร์จหนึ่งครั้งของแบตเตอรี่ 18650 และส่งสถิติวันละครั้ง
ฉันพยายามทำให้การออกแบบง่ายขึ้นมากที่สุดเท่าที่จะเป็นไปได้ เพื่อที่จะสามารถทำซ้ำได้แม้จะไม่มีไดอะแกรม แค่จากรูปถ่ายเท่านั้น
ตรรกะของการทำงานมีดังนี้: ในระหว่างการเริ่มต้น/รีเซ็ตครั้งแรก การอ่านเซ็นเซอร์ที่ติดตั้งใต้ลมพิษจะถูกเก็บไว้ใน EEPROM
จากนั้นทุกวันหลังพระอาทิตย์ตกดิน ระบบจะ "ตื่น" อ่านค่าที่อ่านและส่ง SMS พร้อมการเปลี่ยนแปลงน้ำหนักของวันและทันทีที่เปิดเครื่อง
นอกจากนี้ ค่าแรงดันแบตเตอรี่จะถูกส่ง และเมื่อลดลงถึง 3.5V จะมีการออกคำเตือนเกี่ยวกับความจำเป็นในการชาร์จ เนื่องจากโมดูลการสื่อสารไม่เปิดต่ำกว่า 3.4V และการอ่านน้ำหนัก "ลอยออกไป" แล้ว
“คุณจำได้ไหมว่ามันเริ่มต้นอย่างไร ทุกอย่างเกิดขึ้นเป็นครั้งแรกและอีกครั้ง”
ใช่ นี่เป็นชุดฮาร์ดแวร์ที่มีมาแต่เดิม แม้ว่าจะมีเพียงสเตรนเกจและสายไฟเท่านั้นที่รอดมาจนถึงเวอร์ชันสุดท้าย แต่สิ่งแรกสุดก่อนอื่น
ที่จริงแล้ว คุณไม่จำเป็นต้องมีคอยล์สายเคเบิล แค่กลายเป็นราคาเดียวกับสายตรงยาว 30 ม.
หากคุณไม่กลัวที่จะแยกชิ้นส่วน LED SMD 3 ดวงและการบัดกรีแบบธรรมดา (เอาท์พุต) ครึ่งร้อยจุดล่ะก็ ไปได้เลย!
ดังนั้นเราจะต้องมีชุดอุปกรณ์/วัสดุดังต่อไปนี้:
- อาร์ดูโน่ โปร มินิ 3V
คุณควรใส่ใจกับวงจรไมโครคอนเวอร์เตอร์เชิงเส้น - มันควรจะเป็น 3.3V พอดี - บนชิปที่ทำเครื่องหมาย 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 ที่ไม่ได้มาตรฐานซึ่งต้องมีการประสานงานแม้จะมี Arduino สามโวลต์ก็ตาม
นอกจากนี้ โซลูชันจาก AiThinker ยังใช้พลังงานน้อยที่สุด (ฉันไม่เห็นกระแสไฟสูงกว่า 100mA เมื่อส่ง SMS) - เสาอากาศ GSM GPRS 3DBI (ในภาพด้านบน - ผ้าพันคอสี่เหลี่ยมที่มี "หาง" เวลา 9 นาฬิกา)
- แพ็คเกจเริ่มต้นของผู้ปฏิบัติงานที่มีความครอบคลุมดี ณ ตำแหน่งโรงเลี้ยงผึ้งของคุณ
ใช่ จะต้องเปิดใช้งานแพ็กเกจในโทรศัพท์ธรรมดาก่อน ปิดการใช้งานคำขอ PIN เมื่อเข้า และเติมเงินในบัญชีของคุณ
ขณะนี้มีตัวเลือกมากมายที่มีชื่อในรูปแบบของ "เซ็นเซอร์", "IoT" - มีค่าธรรมเนียมการสมัครสมาชิกที่ต่ำกว่าเล็กน้อย - ลวดดูปองท์ 20ซม. ตัวเมีย-ตัวเมีย - 3 ชิ้น (เพื่อเชื่อมต่อ Arduino กับ USB-TTL)
- 3 ชิ้น HX711 - ADC สำหรับเครื่องชั่ง
- โหลดเซลล์ 6 ตัว รับน้ำหนักได้ถึง 50 กก
- สายโทรศัพท์ 15 คอร์ ยาว 4 เมตร - สำหรับเชื่อมต่อโมดูลน้ำหนักกับ ARDUINO
- โฟโตรีซีสเตอร์ GL5528 (นี่คือตัวสำคัญที่มีความต้านทานความมืด 1 MΩ และความต้านทานแสง 10-20 kΩ) และตัวต้านทาน 20 kΩ ธรรมดาสองตัว
- เทปสองหน้า "หนา" ขนาด 18x18 มม. - สำหรับติด Arduino เข้ากับโมดูลการสื่อสาร
- ที่ใส่แบตเตอรี่ 18650 และจริงๆ แล้วตัวแบตเตอรี่มีขนาด ~2600mAh
- ขี้ผึ้งหรือพาราฟินเล็กน้อย (ตะเกียงอโรมาแบบเทียนแท็บเล็ต) - เพื่อป้องกันความชื้น HX711
- คานไม้ขนาด 25x50x300 มม. สำหรับฐานสเตรนเกจ
- สกรูเกลียวปล่อยจำนวนหนึ่งโหลพร้อมวงแหวนกดขนาด 4,2x19 มม. สำหรับติดเซ็นเซอร์เข้ากับฐาน
สามารถถอดแบตเตอรี่จากการถอดแล็ปท็อป - ราคาถูกกว่าแบตเตอรี่ใหม่หลายเท่าและความจุจะมากกว่า UltraFire จีนมาก - ฉันได้ 1500 ต่อ 450 (นี่คือ 6800 สำหรับไฟ😉
นอกจากนี้ คุณจะต้องมีมือที่มั่นคง หัวแร้ง EPSN-25, ขัดสน และบัดกรี POS-60
เมื่อ 5 ปีที่แล้วฉันใช้หัวแร้งโซเวียตที่มีปลายทองแดง (สถานีบัดกรีไม่ได้ผลสำหรับฉัน - ฉันเอาไปทดลองขับและทำวงจรให้เสร็จด้วย EPSN)
แต่หลังจากความล้มเหลวและการปลอมแปลงอันมหึมาของจีนหลายรายการอย่างหลังก็ถูกเรียกว่าสปาร์ตาซึ่งรุนแรงพอ ๆ กับชื่อก็หยุดลง
บนผลิตภัณฑ์ที่มีเทอร์โมสตัท
งั้นไปกัน!
ขั้นแรกเราคลาย LED สองดวงออกจากโมดูล GSM (สถานที่ที่พวกเขาอยู่นั้นถูกวงกลมไว้ในวงรีสีส้ม)
เราใส่ซิมการ์ดพร้อมแผ่นสัมผัสลงในแผงวงจรพิมพ์ มุมเอียงในภาพถ่ายจะมีลูกศรระบุ
จากนั้นเราดำเนินการขั้นตอนที่คล้ายกันกับ LED บนบอร์ด Arduino (วงรีทางด้านซ้ายของชิปสี่เหลี่ยม)
ประสานหวีเข้ากับหน้าสัมผัสสี่อัน (1)
เราใช้ตัวต้านทาน 20k สองตัวบิดลีดที่ด้านหนึ่งบัดกรีบิดเข้าไปในรูของพิน A5 ลีดที่เหลืออยู่ใน RAW และ GND ของ Arduino (2)
เราย่อขาของโฟโตรีซีสเตอร์ให้สั้นลงเหลือ 10 มม. แล้วประสานเข้ากับพิน GND และ D2 ของบอร์ด (3)
ตอนนี้ถึงเวลาสำหรับเทปไฟฟ้าสีน้ำเงินของเทปสองหน้า - เราติดมันเข้ากับที่ใส่ซิมการ์ดของโมดูลการสื่อสารและด้านบน - Arduino - ปุ่มสีแดง (สีเงิน) หันหน้าเข้าหาเราและอยู่เหนือซิมการ์ด
เราประสานแหล่งจ่ายไฟ: บวกจากตัวเก็บประจุโมดูลการสื่อสาร (4) ไปยังพิน Arduino RAW
ความจริงก็คือโมดูลการสื่อสารนั้นต้องการแหล่งจ่ายไฟ 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):
รูปภาพด้านบนแสดงเวอร์ชันแรก (จากสามเวอร์ชัน) ของระบบ ซึ่งใช้สำหรับการดีบัก
แต่ตอนนี้เราจะหยุดพักจากหัวแร้งสักพักแล้วไปยังส่วนซอฟต์แวร์
ฉันจะอธิบายลำดับการดำเนินการสำหรับ 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 กันดีกว่า
ไปที่รายการ "เครื่องมือ" - เลือกบอร์ด "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 และคอมพิวเตอร์ แล้วใส่แบตเตอรี่ที่ชาร์จแล้วไว้ในที่ยึด (โดยปกติแล้ว LED บน Arduino ใหม่จะเริ่มกะพริบหนึ่งครั้งต่อวินาที)
ตอนนี้สำหรับเฟิร์มแวร์ - เรากำลังฝึกให้กดปุ่มสีแดง (สีเงิน) ของไมโครคอนโทรลเลอร์ - ซึ่งจะต้องทำอย่างเคร่งครัดในช่วงเวลาหนึ่ง !!!
กิน? คลิกปุ่ม "โหลด" (เหนือสองอันในภาพหน้าจอ) และดูที่บรรทัดที่ด้านล่างของอินเทอร์เฟซอย่างระมัดระวัง (ใต้สามอันในภาพหน้าจอ)
ทันทีที่คำจารึก "การรวบรวม" เปลี่ยนเป็น "กำลังดาวน์โหลด" ให้กดปุ่มสีแดง (รีเซ็ต) - หากทุกอย่างเรียบร้อยไฟบนอะแดปเตอร์ USB-TTL จะกะพริบอย่างสนุกสนานและที่ด้านล่างของอินเทอร์เฟซจะมีข้อความว่า "อัปโหลดแล้ว ”
ตอนนี้ ขณะที่เรากำลังรอ SMS ทดสอบมาถึงทางโทรศัพท์ ฉันจะบอกคุณว่าโปรแกรมทำงานอย่างไร:
ภาพถ่ายแสดงแท่นตรวจแก้จุดบกพร่องเวอร์ชันที่สอง
เมื่อเปิดเครื่องเป็นครั้งแรก ระบบจะตรวจสอบไบต์หมายเลข 500 และ 501 ของ EEPROM หากเท่ากัน ข้อมูลการสอบเทียบจะไม่ถูกบันทึก และอัลกอริทึมจะดำเนินการต่อไปยังส่วนการตั้งค่า
สิ่งเดียวกันนี้จะเกิดขึ้นหากเมื่อเปิดเครื่อง photoresistor ถูกแรเงา (โดยฝาปากกา) - โหมดรีเซ็ตจะถูกเปิดใช้งาน
โหลดเซลล์ควรได้รับการติดตั้งไว้ใต้ลมพิษแล้ว เนื่องจากเราเพียงแก้ไขระดับศูนย์เริ่มต้น จากนั้นจึงวัดการเปลี่ยนแปลงของน้ำหนัก (ตอนนี้เลขศูนย์เพิ่งจะมา เนื่องจากเรายังไม่ได้เชื่อมต่ออะไรเลย)
ในเวลาเดียวกัน LED ในตัวของพิน 13 จะเริ่มกะพริบบน Arduino
หากไม่ทำการรีเซ็ต ไฟ LED จะสว่างเป็นเวลา 12 วินาที
หลังจากนั้น SMS ทดสอบจะถูกส่งพร้อมข้อความ "INITIAL BOOT OK" และแรงดันไฟฟ้าของแบตเตอรี่
โมดูลการสื่อสารจะปิดลง และหลังจากผ่านไป 3 นาที บอร์ด Arduino จะทำให้บอร์ด HX711 ADC เข้าสู่โหมดสลีปและหลับไปเอง
ความล่าช้านี้เกิดขึ้นเพื่อไม่ให้รับการรบกวนจากโมดูล GSM ที่ใช้งานได้ (หลังจากปิดเครื่องแล้วจะ "ถั่ว" เป็นระยะเวลาหนึ่ง)
ต่อไป เรามีเซ็นเซอร์รับภาพขัดจังหวะบนพินที่สอง (เปิดใช้งานฟังก์ชันบวก)
ในกรณีนี้ หลังจากการกระตุ้น สถานะของโฟโตรีซีสเตอร์จะถูกตรวจสอบอีก 3 นาที เพื่อกำจัดการกระตุ้นซ้ำ/เท็จ
สิ่งปกติคือหากไม่มีการปรับแต่งใดๆ ระบบจะเปิดใช้งาน 10 นาทีหลังจากพระอาทิตย์ตกดินในสภาพอากาศที่มีเมฆมาก และ 20 นาทีในสภาพอากาศที่ชัดเจน
ใช่ เพื่อให้ระบบไม่รีเซ็ตทุกครั้งที่เปิด อย่างน้อยจะต้องเชื่อมต่อโมดูล HX711 แรก (พิน DT-D10, SCK-A0)
จากนั้นทำการอ่านค่าสเตรนเกจ คำนวณการเปลี่ยนแปลงน้ำหนักจากการทำงานครั้งก่อน (ตัวเลขแรกในบรรทัดหลังไฮฟ์) และจากการเปิดใช้งานครั้งแรก แรงดันไฟฟ้าของแบตเตอรี่จะถูกตรวจสอบ และข้อมูลนี้จะถูกส่งเป็น SMS:
คุณได้รับ SMS หรือเปล่า? ยินดีด้วย! เรามาถึงครึ่งทางแล้ว! ตอนนี้สามารถถอดแบตเตอรี่ออกจากที่ยึดได้ เราจะไม่จำเป็นต้องใช้คอมพิวเตอร์อีกต่อไป
อย่างไรก็ตาม ศูนย์ควบคุมภารกิจมีขนาดกะทัดรัดมากจนสามารถใส่ในขวดมายองเนสได้ ในกรณีของฉัน กล่องโปร่งแสงขนาด 30x60x100 มม. (จากนามบัตร) ใส่ได้พอดี
ใช่ ระบบสลีปกินไฟ ~2.3mA - 90% เนื่องจากโมดูลการสื่อสาร - ไม่ได้ปิดสนิท แต่เข้าสู่โหมดสแตนด์บาย
มาเริ่มสร้างเซ็นเซอร์กันก่อน เรามาสัมผัสถึงเค้าโครงของเซ็นเซอร์กันก่อน:
นี่คือแผนผังรังผึ้ง - มุมมองด้านบน
คลาสสิกมีการติดตั้งเซ็นเซอร์ 4 ตัวที่มุม (1,2,3,4)
เราจะวัดที่แตกต่างกัน หรือมากกว่านั้นแม้ในวิธีที่สาม เพราะคนจาก BroodMinder ทำแตกต่างออกไป:
ในการออกแบบนี้ เซ็นเซอร์จะถูกติดตั้งที่ตำแหน่ง 1 และ 2 จุดที่ 3,4 และ XNUMX วางอยู่บนลำแสง
จากนั้นเซ็นเซอร์จะมีน้ำหนักเพียงครึ่งหนึ่งเท่านั้น
ใช่ วิธีการนี้มีความแม่นยำน้อยกว่า แต่ก็ยังยากที่จะจินตนาการว่าผึ้งจะสร้างรังผึ้งทั้งหมดที่มี "ลิ้น" อยู่ตามผนังด้านหนึ่งของรัง
ดังนั้นฉันจึงเสนอให้ลดเซ็นเซอร์โดยทั่วไปลงเหลือจุดที่ 5 - จากนั้นไม่จำเป็นต้องป้องกันระบบ และเมื่อใช้ลมพิษ จำเป็นต้องทำด้วยเซ็นเซอร์ตัวเดียวโดยสิ้นเชิง
โดยทั่วไป เราได้ทดสอบโมดูลสองประเภทบน HX711 เซ็นเซอร์สองประเภท และสองตัวเลือกในการเชื่อมต่อ - ด้วยสะพานวีทสโตนแบบเต็ม (เซ็นเซอร์ 2 ตัว) และครึ่งหนึ่งเมื่อส่วนที่สองเสริมด้วยตัวต้านทาน 1k พร้อม ความอดทน 0.1%
แต่วิธีหลังนั้นไม่เป็นที่พึงปรารถนาและแม้แต่ผู้ผลิตเซ็นเซอร์ก็ไม่แนะนำดังนั้นฉันจะอธิบายเฉพาะวิธีแรกเท่านั้น
ดังนั้น สำหรับรังหนึ่งเราจะติดตั้งสเตรนเกจสองตัวและโมดูล HX711 หนึ่งตัว แผนภาพการเดินสายไฟจะเป็นดังนี้:
มีสายโทรศัพท์ 5 สายยาว 4 เมตรจากบอร์ด ADC ไปยัง Arduino -
โดยทั่วไป เราจะเว้น “หาง” ไว้ 8 ซม. บนเซ็นเซอร์ ดึงสายคู่บิดเกลียวออก และบัดกรีทุกอย่างตามภาพด้านบน
ก่อนที่คุณจะเริ่มงานไม้ ให้วางขี้ผึ้ง/พาราฟินลงในภาชนะที่เหมาะสมเพื่อละลายในอ่างน้ำ
ตอนนี้เรานำไม้ของเรามาแบ่งออกเป็นสามส่วน ส่วนละ 100 มม
ต่อไปเราทำเครื่องหมายร่องตามยาวกว้าง 25 มม. ลึก 7-8 มม. เอาส่วนที่เกินออกโดยใช้เลื่อยเลือยตัดโลหะและสิ่ว - ควรมีโปรไฟล์รูปตัวยูปรากฏขึ้น
แว็กซ์อุ่นขึ้นหรือไม่? — เราจุ่มบอร์ด ADC ของเราไว้ตรงนั้น — ซึ่งจะช่วยป้องกันความชื้น/หมอก:
เราวางทั้งหมดไว้บนฐานไม้ (ต้องได้รับการบำบัดด้วยน้ำยาฆ่าเชื้อเพื่อป้องกันการเน่าเปื่อย):
และสุดท้ายเราก็ยึดเซ็นเซอร์ด้วยสกรูเกลียวปล่อย:
นอกจากนี้ยังมีตัวเลือกด้วยเทปพันสายไฟสีน้ำเงิน แต่ด้วยเหตุผลของมนุษยชาติฉันไม่ได้นำเสนอ😉
จากฝั่ง Arduino เราทำสิ่งต่อไปนี้:
เราปอกสายโทรศัพท์ บิดสายไฟสีเข้าด้วยกัน และดีบุก
หลังจากนั้นประสานเข้ากับหน้าสัมผัสของบอร์ดดังภาพ:
เพียงเท่านี้ สำหรับการตรวจสอบขั้นสุดท้าย เราวางเซ็นเซอร์ในส่วนของวงกลม โดยมีแผ่นไม้อัดอยู่ด้านบน รีเซ็ตคอนโทรลเลอร์ (เราใส่แบตเตอรี่ที่มีปลอกปากกาไว้บนโฟโตไดโอด)
ในเวลาเดียวกัน LED บน Arduino ควรกระพริบและมี SMS ทดสอบมาถึง
จากนั้น ถอดฝาออกจากตาแมวแล้วเติมน้ำลงในขวดพลาสติกขนาด 1.5 ลิตร
เราวางขวดไว้บนไม้อัด และหากผ่านไปหลายนาทีแล้วนับตั้งแต่เปิดเครื่อง เราก็ปิดฝากลับไว้บนโฟโตรีซีสเตอร์ (จำลองพระอาทิตย์ตก)
หลังจากผ่านไปสามนาที LED บน Arduino จะสว่างขึ้น และคุณควรได้รับ SMS ที่มีค่าน้ำหนักประมาณ 1 กิโลกรัมในทุกตำแหน่ง
ยินดีด้วย! ประกอบระบบสำเร็จแล้ว!
หากตอนนี้เราบังคับให้ระบบทำงานอีกครั้ง คอลัมน์น้ำหนักแรกจะมีค่าเป็นศูนย์
ใช่ ในสภาวะจริง แนะนำให้ปรับทิศทางโฟโตรีซีสเตอร์ขึ้นในแนวตั้ง
ตอนนี้ฉันจะให้คู่มือผู้ใช้ฉบับย่อ:
- ติดตั้งสเตรนเกจใต้ผนังด้านหลังของลมพิษ (วางคาน/กระดานหนาประมาณ 30 มม. ไว้ใต้ผนังด้านหน้า)
- แรเงาโฟโตรีซีสเตอร์และติดตั้งแบตเตอรี่ - ไฟ LED ควรกระพริบและคุณควรได้รับ SMS ทดสอบพร้อมข้อความ "เริ่มต้นการบูตตกลง"
- วางหน่วยส่วนกลางไว้ที่ระยะห่างสูงสุดจากลมพิษ และเพื่อไม่ให้สายไฟรบกวนเมื่อทำงานกับผึ้ง
ทุกเย็นหลังพระอาทิตย์ตกดิน คุณจะได้รับ SMS พร้อมการเปลี่ยนแปลงน้ำหนักของคุณสำหรับวันและนับจากเวลาที่เปิดตัว
เมื่อแรงดันแบตเตอรี่ถึง 3.5V SMS จะลงท้ายด้วยบรรทัด “!!! ชาร์จแบต!!!"
อายุการใช้งานของแบตเตอรี่ 2600mAh หนึ่งก้อนคือประมาณหนึ่งเดือน
หากเปลี่ยนแบตเตอรี่ จะไม่จดจำการเปลี่ยนแปลงน้ำหนักของลมพิษในแต่ละวัน
ทำอะไรต่อไป
- หาวิธีนำทั้งหมดนี้ไปไว้ในโปรเจ็กต์สำหรับ GitHub
- เริ่มต้น 3 ตระกูลผึ้งในลมพิษของระบบ Palivoda (หรือตัวมีเขาในคน)
- เพิ่ม "ซาลาเปา" - วัดความชื้น อุณหภูมิ และที่สำคัญที่สุด - วิเคราะห์เสียงหึ่งของผึ้ง
ขอแสดงความนับถือ Andrey คนเลี้ยงผึ้งไฟฟ้า
ที่มา: will.com