35ドルの3つのじんましんの重量のSMS監視

ニュービー







30ドルのシステムについての以前の発表以来、それはかなり長い間です。







過去の月の間に何が変わったのですか?







  1. 太陽電池が追加されました-動作時間はほぼ無制限です。
  2. 通話に関する送信情報を追加しました。
  3. 私の視野に入ってきたあらゆるタイプの通信モジュールと連携する機能-AiThinker、Gouou tech、SIM800 / 900、Neoway M590 *


しかし、最も重要なことは、通信モジュールとマイクロコントローラーが物理的に分離されていることです。これにより、HX711との動作の干渉がなくなります。







そして、このすべては、システムの議論に参加したハブロフスクの住民と養蜂家に対する建設的な批判のおかげです。







TTXの残りの部分は同じままでした。日没の測定が実行され、インジケータが送信された後、ハイブの最大重量は200 kgです。







GSMモジュールのスリープモードと追加の信号線の不使用に関する批判を予想して、私は次のように言います:







各通信モジュールには独自の特性があります。低信号レベルでスリープ状態になるもの、高レベルでダブルスリープするものがあります。







日曜大工の特異性は特定の創造的な部分を意味し、ここでそれを示す価値があります。







私はまた、睡眠が本当に必要とされない巣箱の他のパラメーターのモニタリングのさらなる発展に目を向けたシステムを作りました。







一般的に、タイトルチャートでは- 純粋なアンドロイド センサー、モジュールなどのデザインと数/セットでどこからでも踊ることができる基本システム







この記事ではスケールについて説明しますが、私の個人的なビジョンとシステムの実装について説明します。







一言で言えば-ようこそ! 行こう!







そもそも、このシステムはスリープしません...曇りの天候でも、6ボルトの2セル太陽電池は5ボルト、最大100ミリアンペアを生成するためです。







また、システム全体の消費は、スタンバイモード(GSM1800標準)で17mA、GSM900では約30です。







さらに、すでに述べたように、これは追加の監視機能をリアルタイムで実装する目的で行われました(たとえば、群れは5分で外に出ることができます)-眠る時間がありません;-)







絶対的な省エネを望んでいるので、それは次の出版物にありますが、それは完全に異なります 物語 システム。







*はい、通信モジュールに関する脚注に関する限り、私がAiThinkerに熟達したということではなく、Neowayを自分で組み立てる必要があります。SIM800Lモジュールには、それらと連携するための教育プログラムを含む別の記事が必要です。



一言で言えば、選択されたGSMは私見であり、タンバリンとの追加のダンスなしで、電力を含む4本のワイヤーで動作できる唯一のものです。







次の機器/材料のセットが必要になります。







  1. Arduino Pro Mini 3V

    KB 33 / LB 33 / DE A10マーキングチップでは-リニアコンバーターマイクロチップに注意を払う必要があります-正確に3.3Vである必要があります

    店内の回路基板は、5ボルトのレギュレータと16 MHzの水晶を使用していることが判明しました。
  2. CH340チップ上のUSB-Ttl-5ボルトでもかまいませんが、マイクロコントローラーのファームウェアの実行中は、GSMモジュールを焼き付けないようにArduinoをGSMモジュールから切断する必要があります。

    PL2303チップ上のボードは、Windows 10では機能しません。
  3. GSM通信モジュールGoouu Tech IOT GA-6-BまたはAI-THINKER A-6 Mini。
  4. GSMアンテナGPRS「YG-01」



    彼らがどのようにそのような増加を達成したのか-なぞなぞ-多分これは、それの完全な欠如に関連する;-)。
  5. あなたの養蜂場の場所で良いカバレッジを持っているオペレーターのためのスターターパッケージ。

    はい、まずパッケージを通常の電話でアクティベートし、入り口でPINリクエストを無効にし、アカウントを補充する必要があります。
  6. ワイヤーデュポン20cmマザーマザー-4個 (ArduinoをUSB-TTLに接続するため)
  7. 3個 HX711-スケール用ADC
  8. 最大50 kgのロードセル6個
  9. 15メートルの4芯電話ケーブル-ウェイトモジュールとGSMをARDUINOに接続します。
  10. フォトレジスターGL5528(これは重要であり、暗抵抗1MOhm、耐光抵抗10-20kOhm)。
  11. 2組のプラグとソケット6P6C-電話、ソケット-「テール」付き
  12. 幅10mmの50cm両面テープ-ソーラーパネルをGSMモジュールのハウジングに取り付けるため。
  13. LiIonバッテリー用のTP4056ベースの充電器ボード
  14. 18650バッテリーホルダーと、実際にはバッテリー自体。
  15. 少量のワックスまたはパラフィン(アロマランプタブレットキャンドル)-防湿用HX711
  16. ロードセルのベース用の木片25x50x300mm。
  17. センサーをベースに取り付けるための4.2x19 mmプレスワッシャー付きの12本のセルフタッピングネジ。
  18. 太陽電池5-6V 2W(次のラジオメイジにはありませんでした-シングルワット2個と1N4148ダイオード1組を取りました)

    パネルの背面図

    充電器に逆電流はありませんが、並列ソーラーモジュールはダイオードを介して適切にオンにする必要があります
  19. 通信モジュールと太陽電池(サイズ60x100mm)の箱-電気製品を適切に配布できます。私のプラスチック製の名刺は30x60x100が理想的です。


さらに、曲がった手、EPSN-25はんだごて、ロジン、POS-60はんだが必要です。







木工用には、木材/金属用の弓のこ、ノミ、3mmドリルのドリルで十分です。







システムのレイアウトは次のとおりです。







レイアウト







いずれの場合でも、GSMモジュールをArduinoから1メートルよりも近くに配置しないでください。GSM900標準では信号強度が高いため、マイクロコントローラーが再起動する可能性があります。







さて、太陽電池を備えた通信モジュール-ポールにインストールする必要があります-と受信はより良くなり、ミツバチから遠くなります。







アセンブリを開始しましょう:







GSM A6







まず、2つのLEDがGSMモジュール(オレンジ色の楕円で囲まれた場所)からはんだ付けされます。







パッド付きのSIMカードをプリント基板に挿入します。写真の斜めの角は矢印で示されています。







さらに、バッテリーとコントローラーへの配線から、コンデンサーに直接はんだ付けされます(4)。







実際には、通信モジュール自体が電源に3.4-4.2Vを必要とし、そのPWR接点が降圧降圧コンバータに接続されているため、リチウムイオン電圧からの動作には、回路のこの部分をバイパスして適用する必要があります。







Arduino Pro Mini 3v







次に、Arduinoボード(正方形のチップの右側にある楕円形)のLEDを使用して同様の手順を実行します。







常に水平に-ボードに沿って、櫛を4つの接点(1)にはんだ付けします。







フォトレジスタの脚を10 mmに短くし、20 cmの導体で基板の端子GNDとD2にはんだ付けします(2)。







リニアコンバーターを介して電力を供給します。低電流でのドロップアウト電圧降下は0.1Vです。







しかし、安定化された電圧をHX711モジュールに印加することにより、より低い電圧でモジュールを改良する必要がなくなります(同時に、この操作の結果としてノイズが増加します)。







ここで、5メートルの電話4線ケーブルを取り、記事の冒頭の図に従って、マイクロコントローラーと通信モジュールの間にケーブルをはんだ付けする必要があります(ワイヤーの色は現実に対応しています)。







バッテリーホルダーもはんだ付けします。残りは少し後で行います。







そして、しばらくの間、はんだごてから脱却し、ソフトウェア部分に移ります。

Windowsのアクションのシーケンスについて説明します。

まず、 Arduino IDEプログラムをダウンロードしてインストール/解凍する必要があります-現在のバージョンは1.8.9ですが、1.6.4を使用しています







簡単にするために、アーカイブをフォルダーC:\ arduino- "your_version_number"に解凍します。内部には、/ dist、ドライバー、例、ハードウェア、java、lib、ライブラリ、リファレンス、ツールフォルダー、およびarduino実行可能ファイル(など)があります。







ここで、 HX711 ADCを操作するためのライブラリ(緑色の[クローンまたはダウンロード]ボタン)が必要です。ZIPをダウンロードしてください。







コンテンツ(フォルダーHX711-master)は、ディレクトリC:\ arduino- "your_version_number" \ librariesに配置されます。







そしてもちろん、 USB-TTLのドライバーは同じgithubからのものです-解凍されたアーカイブから、インストーラーのSETUPファイルが起動されます。







ライブラリに煩わされるのを嫌がる人のために、 Arduino IDEプログラムのアセンブリをパックしました。ダウンロードしてアンパックするだけです。







プログラムCを開始して構成します。\ arduino- "your_version_number" \ arduino







プログラムインターフェース







「ツール」項目に移動します-「Arduino ProまたはPro Mini」ボード、Atmega 328 3.3V 8 MHzプロセッサを選択します。ポートはシステムCOM1以外の番号です(USB-TTLアダプターを接続したCH340ドライバーをインストールした後に表示されます)。







OK、次のスケッチ(プログラム)をコピーしてArduino IDEに貼り付けます







char phone_no[]="+123456789012"; // Your phone number that receive SMS with counry code // NeverSleep #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 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; boolean forceSend=false; char ch = 0; char ch1 = 0; char ch2 = 0; char ch3 = 0; char ch4 = 0; void readVcc() // read battery capacity { ch = mySerial.read(); while (mySerial.available() > 0) { ch = mySerial.read(); } // empty input buffer from modem mySerial.println("AT+CBC?"); //ask gprs for battery status (for sim800 and neoway command must be "AT+CBC" ) delay(200); while (mySerial.available() > 0) { //read input string between coma and CR ch = mySerial.read(); if (ch ==','){ ch1 = mySerial.read(); ch2 = mySerial.read(); ch3 = mySerial.read(); ch4 = mySerial.read(); } } } // ********************************************************************** void SendStat() { detachInterrupt(digitalPinToInterrupt(0)); // turn off external interrupt digitalWrite(13, HIGH); if (!forceSend){ 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 || forceSend ) { 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; readVcc(); delay(200); mySerial.println("AT+CMGF=1"); // Part of SMS sending 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("Battery capacity is "); mySerial.print(ch1); mySerial.print(ch2); mySerial.print(ch3); mySerial.print(ch4); mySerial.println(" %"); if (forceSend) {mySerial.print("Forced SMS");} mySerial.println (char(26));//the ASCII code of the ctrl+z is 26 delay(3000); } forceSend=false; digitalWrite(13, LOW); attachInterrupt(0, SendStat , RISING); // Interrupt by HIGH level } // ************************************************************************************************* void switchto9600() { mySerial.begin(115200); // Open software serial port delay(16000); // wait for boot mySerial.println("AT"); delay(200); mySerial.println("AT"); delay(200); mySerial.println("AT+IPR=9600"); // Change Serial Speed delay(200); mySerial.begin(9600); mySerial.println("AT&W0"); delay(200); mySerial.println("AT&W"); } void setup() { // Setup part run once, at start pinMode(13, OUTPUT); // Led pin init pinMode(2, INPUT_PULLUP); // Set pullup voltage Serial.begin(9600); // ------------------------------------------------------------------------------- switchto9600(); // switch module port speed // ------------------------------------------------------------------------------- mySerial.begin(9600); delay(200); 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 readVcc(); delay(200); mySerial.println("AT+CMGF=1"); 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("Battery capacity is "); mySerial.print(ch1); mySerial.print(ch2); mySerial.print(ch3); mySerial.print(ch4); mySerial.println(" %"); mySerial.println (char(26));//the ASCII code of the ctrl+z is 26 delay(3000); raw02=raw00; raw12=raw10; raw22=raw20; attachInterrupt(0, SendStat , RISING); // Interrupt by HIGH level } void loop() { digitalWrite(13, LOW); ch=mySerial.read(); if ( ch=='R' ) { //wait first lerrer from "RING" string forceSend=true; mySerial.println("ATH"); SendStat(); ch=' '; } }
      
      





最初の行の引用符で、char phone_no [] = "+ 123456789012"; -123456789012の代わりに、SMSの送信先の国番号を電話番号に入れます。







チェックボタン(上のスクリーンショットのナンバーワンの上)をクリックします-下の場合(スクリーンショットのトリプルの下)「コンパイルが完了しました」-そしてマイクロコントローラーをフラッシュできます。







そのため、USB-TTLはARDUINOとコンピューターに接続され(上の写真のように)、充電されたバッテリーをホルダーに入れます(通常、新しいarduinoで、LEDが1秒に1回点滅し始めます)。







さて、ファームウェア-マイクロコントローラの赤い(シルバー)ボタンを押すようにトレーニングしています-これは特定の瞬間に厳密に行う必要があります!!!







ありますか 「アップロード」ボタン(スクリーンショットの2つの上)をクリックし、インターフェースの下部(3つの画面の下)の行を注意深く見てください。







碑文「コンパイル」が「ダウンロード」に置き換えられるとすぐに-赤いボタンを押して(リセット)-すべて問題なければ-USB-TTLアダプターが嬉しく点滅し、インターフェースの下部にある「ダウンロード済み」という碑文







テストSMSが電話で届くのを待っている間に、プログラムの仕組みを説明します。







システムの最初の電源投入時に、EEPROMのバイト500と501をチェックします;これらが等しい場合、キャリブレーションデータは書き込まれておらず、アルゴリズムはセットアップセクションに進みます。







オンにすると、フォトレジスタがシェーディングされます(ペンのキャップ付き)-パラメータリセットモードがアクティブになった場合も同じことが起こります。







初期レベルのゼロを修正し、重量の変化を測定するだけなので、ひずみゲージはすでに巣箱の下に設置されているはずです(まだ何も接続していないので、ゼロになります)。







arduinoでは、ピン13の内蔵LEDが点滅します。

リセットが発生しない場合、LEDは12秒間点灯します。

その後、メッセージ「INITIAL BOOT OK」とバッテリー充電の割合を含むテストSMSが送信されます。







さらに、2番目のピンの光センサーに割り込みがあります(プルアップ機能によりリフトが有効になります)。

この場合、さらに3分間トリップした後、フォトレジスターの状態がチェックされ、繰り返し/誤検出が除外されます。

システムがオンになるたびにリセットが行われないようにするには、少なくとも最初のHX711モジュールを接続する必要があります(ピンDT-D10、SCK-A0)







次に、ロードセルの読み取り値が取得され、前の操作(Hiveの後の行の最初の数)からの重量変化が計算され、最初の開始からバッテリー電圧がチェックされ、この情報がSMSの形式で送信されます。







サンプルシステム







ところで、SMSを受信しましたか? おめでとうございます! 途中です! バッテリーはホルダーから取り外すことができますが、コンピューターをこれ以上必要としません。







センサーの製造に進みます。まず、センサーのレイアウトを見てみましょう。







センサーの位置







これがハイブの平面図です。







古典的には、4つのセンサーが隅に取り付けられています(1,2,3,4)







異なる方法で測定します。 むしろ、3番目でも。 BroodMinderのメンバーが異なるように:







ひよこ







この設計では、センサーは位置1と2に設置され、ポイント3.4はビームに基づいています。

その後、センサーにかかる重量は半分になります。

はい、この方法の精度は劣りますが、ミツバチが巣箱の壁に沿ったハニカムからの「舌」ですべてのフレームを構築することは想像しにくいです。







したがって、センサーをすべてポイント5に減らすことを提案します。システムを保護する必要はありません。また、ライトハイブを使用する場合は、1つのセンサーを使用する必要があります。







そのため、1つのハイブに2つのひずみゲージと1つのHX711モジュールを設置します。配線図は次のとおりです。













ADCボードからarduinoまで、5メートルの4コア電話ケーブル(重量2および3のモジュールの場合)があり、最初のセンサーは10 cmの「テール」に接続されますが、それ以降はさらに続きます。







一般に、センサーには8 cmの「テール」を残し、ツイストペアをクリーニングし、上の写真のようにすべてのはんだ付けを解除します。







建具を開始する前に、適切な容器にワックス/パラフィンを入れて、水浴で溶かします。







次に、ビームを取得し、100 mmの3つのセグメントに分割します







次に、幅25 mm、深さ7〜8 mmの縦溝を、ノコギリとノミを使用してマークし、余分な部分を取り除きます。U字型のプロファイルが表示されます。







基本







実際、1つのH字型のパーツ1と2つ、つまりすべて10 cmのP-shkiが必要です。







なぜN-ka-信じないで、Arduinoを隠してください:







敵対的な技術の奇跡







さらに、センサー2と3を接続するための6P6Cソケットもここに取り付けられます。







ワックスは温まりましたか? -私たちはそこにADCボードを浸します-これは湿気/霧からそれらを保護します:







湿気に対するADCの保護







私たちはそれをすべて木製のベースに置きます(腐敗から防腐剤で処理する必要があります):







組立







最後に、ネジでセンサーを固定します。







レディセンサー







次に、ヘッダーのスキームと常識に従って、残りのすべてのコンポーネントをはんだ付けします。







コンポーネントの位置に関しては、想像力を発揮することをお勧めします。1つ考慮すべきことは、マイクロコントローラーとGSMモジュールの間の距離が少なくとも1メートルあることです!



私は次のデザインを得ました:







ファイナル







はい、パネルの設置角度を45度にしました-製造が簡単なため、キエフの緯度で夏に最適な40度に近いです。







これで、最後のチェックのために、センサーを円のセクターに配置します。上に合板を置き、コントローラーをゼロにします(万年筆のフォトダイオードのキャップでシステムをオンにします)。







同時に、arduinoのLEDが点滅し、テストSMSが来るはずです。







次に、フォトセルからキャップを取り外し、6リットルのプラスチックボトルに水を集めます。

ボトルを合板に置き、電源を入れてから数分経過したら、キャップをフォトレジスターに戻します(日没をシミュレートします)。







同時に、arduinoのLEDが点灯し、すべての位置で体重が約4 kgのSMSを受信する必要があります。







おめでとうございます! システムが正常に組み立てられました!







システムを再び動作させると、重みの最初の列にゼロが表示されます。







はい、実際の条件では、フォトレジスタを垂直に上に向けることが望ましいです。







次に、以下の使用に関する簡単なマニュアルを提供します。







  1. ハイブの後壁の下にひずみゲージを取り付けます(前面の下に、厚さ約30 mmの梁/板を置きます)
  2. 巣箱から数メートル離れた高さにソーラーパネルを備えた通信モジュールを設置します。

    太陽電池パネルの向き-南へ-はコンパスできます(本当のものをキャッチしません)。
  3. フォトレジスタをシェーディングし、バッテリーを入れます-LEDが点滅し、テキスト「INITIAL BOOT OK」を含むテストSMSが来るはずです

    毎晩、日没後、SMSは1日あたりの重量の変化とともに、打ち上げの瞬間から到着します。

    GSMモジュールのSIMカード番号に電話をかけると、コントローラーはオフフックになり(「加入者は電話を受けることができません」と聞こえます)、SMSには異常な測定値が付きます。

    そのようなメッセージには、「強制SMS」という行が追加されます。


システムの完全な美しさに残っているものはほとんどありません。







  1. フォトセンサーにデバイスの自動システムを追加します。
  2. 他のタイプの通信モジュールを確認してください。
  3. ESP-8266の下ですべてを行うには、まず、「無線で」ファームウェアの更新をサポートします-便利です。


第二に、単純なWebページの形式で統計情報を提供できます。

そして最後に、Wi-Fiがあれば、GSM-kiを完全に放棄できます。







ああ、私はワイヤーをいじくり回すことにうんざりしていて、「絶対的な」省エネを備えたシステムを約束しました。







一言で言えば、私は少し「ばか」をしてすべてをすることにしました。

どれだけ成功したか-1か月で出版物を読んでください!







Habr-aのページで会いましょう

電気の養蜂家アンドレイ







PSこのトピックに関する新しい出版物については、 beefree.xyzをご覧ください








All Articles