การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

ไม่ นี่ไม่ใช่ข้อเสนอเชิงพาณิชย์ แต่เป็นต้นทุนของส่วนประกอบระบบที่คุณสามารถประกอบได้หลังจากอ่านบทความแล้ว

พื้นหลังเล็กน้อย:

เมื่อไม่นานมานี้ ฉันตัดสินใจรับผึ้ง และพวกมันก็ปรากฏตัว... ตลอดทั้งฤดูกาล แต่ไม่ได้ออกจากกระท่อมฤดูหนาว
และแม้ว่าเขาจะทำทุกอย่างอย่างถูกต้องก็ตาม - การให้อาหารเสริมในฤดูใบไม้ร่วง, ฉนวนก่อนอากาศหนาว
รังเป็นระบบไม้ "ดาดัน" แบบคลาสสิกซึ่งมี 10 เฟรมทำจากไม้กระดานขนาด 40 มม.
แต่ในฤดูหนาวนั้น เนื่องจากอุณหภูมิที่ผันผวน แม้แต่ผู้เลี้ยงผึ้งที่มีประสบการณ์ก็สูญเสียมากกว่าปกติมาก

นี่คือที่มาของแนวคิดของระบบในการตรวจสอบสภาพของรัง
หลังจากเผยแพร่บทความเกี่ยวกับ Habr หลายบทความและสื่อสารในฟอรัมคนเลี้ยงผึ้งฉันก็ตัดสินใจเปลี่ยนจากง่ายไปสู่ซับซ้อน
น้ำหนักเป็นพารามิเตอร์เดียวที่เถียงไม่ได้ แต่ตามกฎแล้ว ระบบที่มีอยู่จะตรวจสอบกลุ่ม "อ้างอิง" เพียงกลุ่มเดียวเท่านั้น
หากมีสิ่งผิดปกติเกิดขึ้น (เช่น การจากไปของฝูงผึ้ง) ตัวชี้วัดก็จะไม่เกี่ยวข้อง

ดังนั้นจึงตัดสินใจติดตามการเปลี่ยนแปลงน้ำหนักของลมพิษ XNUMX ชนิดพร้อมกันโดยใช้ไมโครคอนโทรลเลอร์ตัวเดียว และเพิ่ม "สารพัด" อื่นๆ ในภายหลัง
ผลลัพธ์คือระบบอัตโนมัติที่มีอายุการใช้งานประมาณหนึ่งเดือนต่อการชาร์จหนึ่งครั้งของแบตเตอรี่ 18650 และส่งสถิติวันละครั้ง
ฉันพยายามทำให้การออกแบบง่ายขึ้นมากที่สุดเท่าที่จะเป็นไปได้ เพื่อที่จะสามารถทำซ้ำได้แม้จะไม่มีไดอะแกรม แค่จากรูปถ่ายเท่านั้น

ตรรกะของการทำงานมีดังนี้: ในระหว่างการเริ่มต้น/รีเซ็ตครั้งแรก การอ่านเซ็นเซอร์ที่ติดตั้งใต้ลมพิษจะถูกเก็บไว้ใน EEPROM
จากนั้นทุกวันหลังพระอาทิตย์ตกดิน ระบบจะ "ตื่น" อ่านค่าที่อ่านและส่ง SMS พร้อมการเปลี่ยนแปลงน้ำหนักของวันและทันทีที่เปิดเครื่อง
นอกจากนี้ ค่าแรงดันแบตเตอรี่จะถูกส่ง และเมื่อลดลงถึง 3.5V จะมีการออกคำเตือนเกี่ยวกับความจำเป็นในการชาร์จ เนื่องจากโมดูลการสื่อสารไม่เปิดต่ำกว่า 3.4V และการอ่านน้ำหนัก "ลอยออกไป" แล้ว

“คุณจำได้ไหมว่ามันเริ่มต้นอย่างไร ทุกอย่างเกิดขึ้นเป็นครั้งแรกและอีกครั้ง”
การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30
ใช่ นี่เป็นชุดฮาร์ดแวร์ที่มีมาแต่เดิม แม้ว่าจะมีเพียงสเตรนเกจและสายไฟเท่านั้นที่รอดมาจนถึงเวอร์ชันสุดท้าย แต่สิ่งแรกสุดก่อนอื่น
ที่จริงแล้ว คุณไม่จำเป็นต้องมีคอยล์สายเคเบิล แค่กลายเป็นราคาเดียวกับสายตรงยาว 30 ม.

หากคุณไม่กลัวที่จะแยกชิ้นส่วน LED SMD 3 ดวงและการบัดกรีแบบธรรมดา (เอาท์พุต) ครึ่งร้อยจุดล่ะก็ ไปได้เลย!

ดังนั้นเราจะต้องมีชุดอุปกรณ์/วัสดุดังต่อไปนี้:

  1. อาร์ดูโน่ โปร มินิ 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 ยังใช้พลังงานน้อยที่สุด (ฉันไม่เห็นกระแสไฟสูงกว่า 100mA เมื่อส่ง SMS)
  4. เสาอากาศ GSM GPRS 3DBI (ในภาพด้านบน - ผ้าพันคอสี่เหลี่ยมที่มี "หาง" เวลา 9 นาฬิกา)
  5. แพ็คเกจเริ่มต้นของผู้ปฏิบัติงานที่มีความครอบคลุมดี ณ ตำแหน่งโรงเลี้ยงผึ้งของคุณ
    ใช่ จะต้องเปิดใช้งานแพ็กเกจในโทรศัพท์ธรรมดาก่อน ปิดการใช้งานคำขอ PIN เมื่อเข้า และเติมเงินในบัญชีของคุณ
    ขณะนี้มีตัวเลือกมากมายที่มีชื่อในรูปแบบของ "เซ็นเซอร์", "IoT" - มีค่าธรรมเนียมการสมัครสมาชิกที่ต่ำกว่าเล็กน้อย
  6. ลวดดูปองท์ 20ซม. ตัวเมีย-ตัวเมีย - 3 ชิ้น (เพื่อเชื่อมต่อ Arduino กับ USB-TTL)
  7. 3 ชิ้น HX711 - ADC สำหรับเครื่องชั่ง
  8. โหลดเซลล์ 6 ตัว รับน้ำหนักได้ถึง 50 กก
  9. สายโทรศัพท์ 15 คอร์ ยาว 4 เมตร - สำหรับเชื่อมต่อโมดูลน้ำหนักกับ ARDUINO
  10. โฟโตรีซีสเตอร์ GL5528 (นี่คือตัวสำคัญที่มีความต้านทานความมืด 1 MΩ และความต้านทานแสง 10-20 kΩ) และตัวต้านทาน 20 kΩ ธรรมดาสองตัว
  11. เทปสองหน้า "หนา" ขนาด 18x18 มม. - สำหรับติด Arduino เข้ากับโมดูลการสื่อสาร
  12. ที่ใส่แบตเตอรี่ 18650 และจริงๆ แล้วตัวแบตเตอรี่มีขนาด ~2600mAh
  13. ขี้ผึ้งหรือพาราฟินเล็กน้อย (ตะเกียงอโรมาแบบเทียนแท็บเล็ต) - เพื่อป้องกันความชื้น HX711
  14. คานไม้ขนาด 25x50x300 มม. สำหรับฐานสเตรนเกจ
  15. สกรูเกลียวปล่อยจำนวนหนึ่งโหลพร้อมวงแหวนกดขนาด 4,2x19 มม. สำหรับติดเซ็นเซอร์เข้ากับฐาน

สามารถถอดแบตเตอรี่จากการถอดแล็ปท็อป - ราคาถูกกว่าแบตเตอรี่ใหม่หลายเท่าและความจุจะมากกว่า UltraFire จีนมาก - ฉันได้ 1500 ต่อ 450 (นี่คือ 6800 สำหรับไฟ😉

นอกจากนี้ คุณจะต้องมีมือที่มั่นคง หัวแร้ง EPSN-25, ขัดสน และบัดกรี POS-60

การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

เมื่อ 5 ปีที่แล้วฉันใช้หัวแร้งโซเวียตที่มีปลายทองแดง (สถานีบัดกรีไม่ได้ผลสำหรับฉัน - ฉันเอาไปทดลองขับและทำวงจรให้เสร็จด้วย EPSN)
แต่หลังจากความล้มเหลวและการปลอมแปลงอันมหึมาของจีนหลายรายการอย่างหลังก็ถูกเรียกว่าสปาร์ตาซึ่งรุนแรงพอ ๆ กับชื่อก็หยุดลง
บนผลิตภัณฑ์ที่มีเทอร์โมสตัท

งั้นไปกัน!

การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

ขั้นแรกเราคลาย LED สองดวงออกจากโมดูล GSM (สถานที่ที่พวกเขาอยู่นั้นถูกวงกลมไว้ในวงรีสีส้ม)
เราใส่ซิมการ์ดพร้อมแผ่นสัมผัสลงในแผงวงจรพิมพ์ มุมเอียงในภาพถ่ายจะมีลูกศรระบุ

การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

จากนั้นเราดำเนินการขั้นตอนที่คล้ายกันกับ 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):

การตรวจสอบน้ำหนักของผึ้งสามรังทาง 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” libraries

และแน่นอนว่าสำหรับคนขับ USB-TTL จาก GitHub เดียวกัน - จากไฟล์เก็บถาวรที่คลายแพ็ก การติดตั้งจะเปิดขึ้นโดยใช้ไฟล์ SETUP

ตกลง มาเริ่มและกำหนดค่าโปรแกรม C:arduino-“your_version_number”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 และคอมพิวเตอร์ แล้วใส่แบตเตอรี่ที่ชาร์จแล้วไว้ในที่ยึด (โดยปกติแล้ว LED บน Arduino ใหม่จะเริ่มกะพริบหนึ่งครั้งต่อวินาที)

ตอนนี้สำหรับเฟิร์มแวร์ - เรากำลังฝึกให้กดปุ่มสีแดง (สีเงิน) ของไมโครคอนโทรลเลอร์ - ซึ่งจะต้องทำอย่างเคร่งครัดในช่วงเวลาหนึ่ง !!!
กิน? คลิกปุ่ม "โหลด" (เหนือสองอันในภาพหน้าจอ) และดูที่บรรทัดที่ด้านล่างของอินเทอร์เฟซอย่างระมัดระวัง (ใต้สามอันในภาพหน้าจอ)
ทันทีที่คำจารึก "การรวบรวม" เปลี่ยนเป็น "กำลังดาวน์โหลด" ให้กดปุ่มสีแดง (รีเซ็ต) - หากทุกอย่างเรียบร้อยไฟบนอะแดปเตอร์ USB-TTL จะกะพริบอย่างสนุกสนานและที่ด้านล่างของอินเทอร์เฟซจะมีข้อความว่า "อัปโหลดแล้ว ”

ตอนนี้ ขณะที่เรากำลังรอ SMS ทดสอบมาถึงทางโทรศัพท์ ฉันจะบอกคุณว่าโปรแกรมทำงานอย่างไร:

การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

ภาพถ่ายแสดงแท่นตรวจแก้จุดบกพร่องเวอร์ชันที่สอง

เมื่อเปิดเครื่องเป็นครั้งแรก ระบบจะตรวจสอบไบต์หมายเลข 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 ในราคา $30

คุณได้รับ SMS หรือเปล่า? ยินดีด้วย! เรามาถึงครึ่งทางแล้ว! ตอนนี้สามารถถอดแบตเตอรี่ออกจากที่ยึดได้ เราจะไม่จำเป็นต้องใช้คอมพิวเตอร์อีกต่อไป

อย่างไรก็ตาม ศูนย์ควบคุมภารกิจมีขนาดกะทัดรัดมากจนสามารถใส่ในขวดมายองเนสได้ ในกรณีของฉัน กล่องโปร่งแสงขนาด 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

มีสายโทรศัพท์ 5 สายยาว 4 เมตรจากบอร์ด ADC ไปยัง Arduino - เราจำได้ว่าผึ้งไม่ชอบอุปกรณ์ GSM ในรังอย่างไร.

โดยทั่วไป เราจะเว้น “หาง” ไว้ 8 ซม. บนเซ็นเซอร์ ดึงสายคู่บิดเกลียวออก และบัดกรีทุกอย่างตามภาพด้านบน

ก่อนที่คุณจะเริ่มงานไม้ ให้วางขี้ผึ้ง/พาราฟินลงในภาชนะที่เหมาะสมเพื่อละลายในอ่างน้ำ

ตอนนี้เรานำไม้ของเรามาแบ่งออกเป็นสามส่วน ส่วนละ 100 มม

ต่อไปเราทำเครื่องหมายร่องตามยาวกว้าง 25 มม. ลึก 7-8 มม. เอาส่วนที่เกินออกโดยใช้เลื่อยเลือยตัดโลหะและสิ่ว - ควรมีโปรไฟล์รูปตัวยูปรากฏขึ้น

แว็กซ์อุ่นขึ้นหรือไม่? — เราจุ่มบอร์ด ADC ของเราไว้ตรงนั้น — ซึ่งจะช่วยป้องกันความชื้น/หมอก:

การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

เราวางทั้งหมดไว้บนฐานไม้ (ต้องได้รับการบำบัดด้วยน้ำยาฆ่าเชื้อเพื่อป้องกันการเน่าเปื่อย):

การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

และสุดท้ายเราก็ยึดเซ็นเซอร์ด้วยสกรูเกลียวปล่อย:

การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

นอกจากนี้ยังมีตัวเลือกด้วยเทปพันสายไฟสีน้ำเงิน แต่ด้วยเหตุผลของมนุษยชาติฉันไม่ได้นำเสนอ😉

จากฝั่ง Arduino เราทำสิ่งต่อไปนี้:

เราปอกสายโทรศัพท์ บิดสายไฟสีเข้าด้วยกัน และดีบุก

หลังจากนั้นประสานเข้ากับหน้าสัมผัสของบอร์ดดังภาพ:

การตรวจสอบน้ำหนักของผึ้งสามรังทาง SMS ในราคา $30

เพียงเท่านี้ สำหรับการตรวจสอบขั้นสุดท้าย เราวางเซ็นเซอร์ในส่วนของวงกลม โดยมีแผ่นไม้อัดอยู่ด้านบน รีเซ็ตคอนโทรลเลอร์ (เราใส่แบตเตอรี่ที่มีปลอกปากกาไว้บนโฟโตไดโอด)

ในเวลาเดียวกัน LED บน Arduino ควรกระพริบและมี SMS ทดสอบมาถึง

จากนั้น ถอดฝาออกจากตาแมวแล้วเติมน้ำลงในขวดพลาสติกขนาด 1.5 ลิตร
เราวางขวดไว้บนไม้อัด และหากผ่านไปหลายนาทีแล้วนับตั้งแต่เปิดเครื่อง เราก็ปิดฝากลับไว้บนโฟโตรีซีสเตอร์ (จำลองพระอาทิตย์ตก)

หลังจากผ่านไปสามนาที LED บน Arduino จะสว่างขึ้น และคุณควรได้รับ SMS ที่มีค่าน้ำหนักประมาณ 1 กิโลกรัมในทุกตำแหน่ง

ยินดีด้วย! ประกอบระบบสำเร็จแล้ว!

หากตอนนี้เราบังคับให้ระบบทำงานอีกครั้ง คอลัมน์น้ำหนักแรกจะมีค่าเป็นศูนย์

ใช่ ในสภาวะจริง แนะนำให้ปรับทิศทางโฟโตรีซีสเตอร์ขึ้นในแนวตั้ง

ตอนนี้ฉันจะให้คู่มือผู้ใช้ฉบับย่อ:

  1. ติดตั้งสเตรนเกจใต้ผนังด้านหลังของลมพิษ (วางคาน/กระดานหนาประมาณ 30 มม. ไว้ใต้ผนังด้านหน้า)
  2. แรเงาโฟโตรีซีสเตอร์และติดตั้งแบตเตอรี่ - ไฟ LED ควรกระพริบและคุณควรได้รับ SMS ทดสอบพร้อมข้อความ "เริ่มต้นการบูตตกลง"
  3. วางหน่วยส่วนกลางไว้ที่ระยะห่างสูงสุดจากลมพิษ และเพื่อไม่ให้สายไฟรบกวนเมื่อทำงานกับผึ้ง
    ทุกเย็นหลังพระอาทิตย์ตกดิน คุณจะได้รับ SMS พร้อมการเปลี่ยนแปลงน้ำหนักของคุณสำหรับวันและนับจากเวลาที่เปิดตัว
    เมื่อแรงดันแบตเตอรี่ถึง 3.5V SMS จะลงท้ายด้วยบรรทัด “!!! ชาร์จแบต!!!"
    อายุการใช้งานของแบตเตอรี่ 2600mAh หนึ่งก้อนคือประมาณหนึ่งเดือน
    หากเปลี่ยนแบตเตอรี่ จะไม่จดจำการเปลี่ยนแปลงน้ำหนักของลมพิษในแต่ละวัน

ทำอะไรต่อไป

  1. หาวิธีนำทั้งหมดนี้ไปไว้ในโปรเจ็กต์สำหรับ GitHub
  2. เริ่มต้น 3 ตระกูลผึ้งในลมพิษของระบบ Palivoda (หรือตัวมีเขาในคน)
  3. เพิ่ม "ซาลาเปา" - วัดความชื้น อุณหภูมิ และที่สำคัญที่สุด - วิเคราะห์เสียงหึ่งของผึ้ง

ขอแสดงความนับถือ Andrey คนเลี้ยงผึ้งไฟฟ้า

ที่มา: will.com

เพิ่มความคิดเห็น