ロヌカル自埋デヌタ収集システム

同瀟は、ネクストテクノロゞヌズ瀟が囜産したモニタリングポストNEKST-Mを賌入した。 ポンプナニットの動䜜を確実に芋える化するために、
火灜譊報噚ず防犯譊報噚、スタヌタヌの電圧の有無、宀枩、緊急氎䜍。 NEKST-M の心臓郚は ATMEGA 1280 であり、この事実は、特定のニヌズに合わせお独自のキットを䜜成できる可胜性ずいう点で心匷いものです。

特定のニヌズに察応する完党自埋型のロヌカル配車システムを可胜な限り最短の時間ず最小限のコストで構築するこずが課題ずしお蚭定されたした。 基瀎ずなるのはマむクロコントロヌラヌです。 開発、補造、スタッフ自らが䜜り䞊げたもの。

システムは、携垯電話ネットワヌク、サヌバヌ、むンタヌネット、および無線呚波数リ゜ヌスを䜿甚するためのラむセンス システムに䟝存せずに動䜜する必芁があり、監芖および制埡システムの動䜜にコンピュヌタを䜿甚したり、せいぜい定期的にラップトップを䜿甚したりする必芁はありたせん。長期間 (6  9 か月) のオブゞェクト。 ネットワヌク構成は攟射状構造ずなっおいたす。 デヌタは XNUMX ぀の時点で収集され、通垞の通信チャネルを介しお、たたはハヌドコピヌずしお凊理のために送信されたす。

システムは以䞋を提䟛する必芁がありたす。

  • ポンプナニットの動䜜の監芖
  • 技術的な自動化
  • 緊急事態の結果からの保護
  • 緊急信号
  • 皌働時間の蚈算
  • 消費電力量の蚈算
  • 機噚の枩床管理
  • セキュリティず火灜譊報噚
  • 情報の定期的な遠隔蚘録
  • 将来の芁件は䞍明

劎働条件

  • カバヌ゚リア 1 平方キロメヌトル。
  • オブゞェクト間の盎接可芖性
  • 枩床+50℃から-50℃
  • 湿床100%たで
  • 生物孊的に掻性な沈着物カビ、硫酞塩還元现菌
  • GOST ISO 1-2-10816 に基づくクラス 1  97 の機械の振動はこれ以䞊ありたせん
  • 電磁環境 - KT 6053 コンタクタによる電気モヌタヌのスむッチング、RVS-DN ゜フトスタヌト装眮、SIEMENS MICROMASTER PID 制埡装眮、これらのデバむスの芁件に埓った ISM および GSM 範囲の攟射線、珟堎での手動アヌク溶接
  • 過剰なネットワヌク電圧、電源の短期間の䞭断、雷の過電圧、6  10 kV の配電ネットワヌクで架空線が断線した堎合の䜍盞の䞍均衡。

このような厳しい芁件にもかかわらず、問題を段階的に解決する堎合、実装は非垞に簡単です。

すべおを考慮しお、「Arduino Nano 3.0」ボヌドが蚈画の「頭脳」ずなりたした。 robotdyn ボヌドには ATMEGA 328 コントロヌラヌが搭茉されおおり、
電流 800 mA ず CH340G UART-USB ぞのコンバヌタ。

たず、営業時間カりンタヌが最新のものずしお䜜成されたした。 以前䜿甚されおいたトランスレス電源回路を備えた PIC 䞊に組み立おられた工業甚メヌタヌは、動䜜埌 5 幎以内に電圧サヌゞにより故障したした。 自家補の 1V 電源を䜿甚しお接続されおいるものだけがそのたた残りたした。 蚭眮を迅速化し、接続の倚様性を高めるために、ナニットの状態に関する信号がスむッチング デバむスの端子から取埗されたす。 380V の䞉盞電源で 220 盞電圧の存圚を登録したす。 コントロヌラず調敎するには、5516V 巻線を備えた䞭間リレヌ、たたは LED ず GL817 フォトレゞスタで構成されるフォトカプラ、たたは PC22 フォトカプラが䜿甚されたす。 すべおのオプションがテストされたした。 LED は、メガオヌム蚈による回路の偶発的なテスト䞭の安党のために盎列に接続された 630 V の電圧向けに蚭蚈された XNUMX ぀の SVVXNUMX​​XNUMX コンデンサを䜿甚しお、電流制限付きの敎流された電圧によっお電力を䟛絊されたす。
ST7735S LCD スクリヌンを䜿甚しお動䜜時間の読み取り倀を読み取り、呚波数 01 MHz の E01-ML05DP2,4 モゞュヌルを䜿甚しお無線経由でリアルタむム デヌタ送信を行いたす。 このデバむスには、nRF24L01+ チップず RFX2401C 送信/受信アンプが含たれおいたす。
最倧出力100mW。 オンラむン蚈算機で必芁な範囲に合わせお蚭蚈されたヘリカル アンテナ сайта。 アンテナの皮類の遞択は、呚囲の金属構造からの単䞀反射波の受信を排陀するこずによっお決たりたす。 アンテナ郚分は3Dプリンタヌで出力。 カりンタの珟圚の状態はコントロヌラ自䜓の EEPROM に保存され、予期しない停電が発生した堎合には埩元されたす。 カりントの時間間隔は、バックアップ バッテリヌを備えたモゞュヌルの圢匏で RTC チップ DS3231 によっお提䟛されたす。 電源には 3 ぀のモゞュヌル、実際のパルス源 220/5V HLK-PM01 600mA、1-5V から 5V ぞのコンバヌタを䜿甚したす。 HW-553 О 03962A - バッテリヌコントロヌラヌ付き スキヌム 短絡、過攟電、過充電に察する保護。 すべおのコンポヌネントは Aliexpress Web サむトで賌入したした。

ブレッドボヌドロヌカル自埋デヌタ収集システム
4チャンネルカりンタヌ。 ツむストペア通信回線を介した干枉から保護するために、入力に LC フィルタヌがありたす。 制埡察象の状態デヌタを1秒に36回垞に読み蟌み、LCDにカラヌ衚瀺したす。 枬定倀は 36 秒ごずに曎新され、䞍揮発性メモリに蚘録されたす。 1 秒は 100 時間の 12/100000 であり、これがデヌタが必芁な圢匏です。 1秒ごず各コントロヌルナニットの動䜜秒数に関する情報が送信されたす。 EEPROM メモリの曞き蟌み消去サむクル数は、メヌカヌによれば 4 回に制限されおいたす。 最悪の遞択肢は、少なくずも 4 ぀のセルが垞に曎新されおいる堎合です。 16 番目のカりンタのボリュヌムは 1024 バむトで、これは長い圢匏の数倀で、64 ぀のカりンタ、合蚈 4 バむトが 7 ぀のレコヌドによっお占有されたす。 チップのメモリの長さは XNUMX バむトで、XNUMX ぀のカりンタヌの XNUMX ゚ントリの埌、蚘録が再開されたす。 EEPROM ラむブラリでは、EEPROM.put メ゜ッドは曞き蟌みを行いたせん。セルの倀ず曞き蟌たれる情報が䞀臎しおいれば、セルの劣化はありたせん。 これにより、メモリ動䜜保蚌時間はXNUMX幎以䞊ずなりたす。 可胜ではありたすが、䜜業が保蚌されるわけではないため、䜜業時間がさらに長くなる可胜性がありたす。

回路図ロヌカル自埋デヌタ収集システム
Arduino IDEでのプログラム//12 バむト (328%)

含む// コアグラフィックスラむブラリ
含む// ハヌドりェア固有のラむブラリ
含む
含む
#include
含む
含む
RF24 無線 (9、10); // RF24 ラむブラリを操䜜するためのラゞオ オブゞェクト、
// およびピン番号 nRF24L01+ (CE、CSN)
含む
DS3231 rtc(SDA、SCL);
時間t;

//#TFT_CS 10 を定矩する
#TFT_CS 8 の定矩
#define TFT_RST -1 // これを Arduino リセットに接続するこずもできたす
// その堎合、この #define ピンを -1 に蚭定したす。
//#define TFT_DC 9 // DC=RS=A0 - コマンドたたはデヌタ レゞスタを遞択するための指定オプション。
#TFT_DC 3 の定矩

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS、TFT_DC、TFT_RST);

// オプション 2: 任意のピンを䜿甚したすが、少し遅くなりたす。
#define TFT_SCLK 13 // これらを奜きなピンに蚭定したす。
#define TFT_MOSI 11 // これらを奜きなピンに蚭定したす。
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS、TFT_DC、TFT_MOSI、TFT_SCLK、TFT_RST);
含む

バむトシフト = 52;
バむトピン状態。
unsigned long Pump[4];// 4 秒のカりンタヌ倀を含む配列
浮動小数点 m = 3600.0;
unsigned int アドレス = 0;
int rc;// カりンタ甚の倉数
unsigned long sumprim = 0;
unsigned long sumsec = 0;
バむト i = 0;
バむトk = 34;
unsigned int z = 0;
バむト b = B00000001;
バむト pumrcounter[4]; // オブゞェクトの状態を栌玍する配列、1 - オフ、0 - オン。
int 開始 = 0; //

voidセットアップ{

rtc.begin();
radio.begin(); // 䜜業を開始したす nRF24L01+
radio.setChannel(120); // デヌタ チャネル (0  127)。
radio.setDataRate(RF24_250KBPS); // デヌタ転送速床 (RF24_250KBPS、RF24_1MBPS、RF24_2MBPS)。
radio.setPALevel(RF24_PA_MAX); // 送信電力 (RF24_PA_MIN=-18dBm、RF24_PA_LOW=-12dBm、
// RF24_PA_HIGH=-6dBm、RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // デヌタ転送甚の識別子を䜿甚しおパむプを開きたす

// 時間を蚭定するには、必芁な行のコメントを解陀したす
//rtc.setDOW(1); // 曜日
//rtc.setTime(21, 20, 0); // 24 時間圢匏の時刻。
//rtc.setDate(29, 10, 2018); // 日付、29 幎 2018 月 XNUMX 日

tft.initR(INITR_BLACKTAB); // ST7735S チップを初期化したす、黒いタブ
// 1.44 むンチ TFT を䜿甚しおいる堎合は、このむニシャラむザを䜿甚したす (コメントを解陀したす)。
//tft.initR(INITR_144GREENTAB); // ST7735S チップを初期化する、RED rcB タブ
tft.setTextWrap(false); // テキストが右端からはみ出るようにする
tft.setRotation( 2 ); // BLACK PCB ず RED の堎合 tft.setRotation(0) かどうか。
tft.fillScreen(ST7735_BLACK); // 画面をクリア

DDRD = DDRD | B00000000;
ポヌトド = ポヌトド | B11110000; // ゜フトりェアの匷化は機胜しおいたす、高レベル -
// 制埡されたオブゞェクトは「機胜しない」。4 ぀​​の䞊䜍ポヌト D すべおに「1」が曞き蟌たれ、カりントは行われない。

for ( rc = 0; rc < 4; rc++)
{
tft.setCursor ( 3, rc * 10 + シフト ); // 制埡オブゞェクトの䜍眮番号を衚瀺する
tft.print(rc + 1);
}

tft.setCursor(12, 0); // 3行のテキストを出力したす
tft.println("開発者ずビルド"); // 愛する人たちに自分を耒めるために
tft.setCursor(24, 10); // あるいは邪悪な著䜜暩
tft.print("開発者MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

//デヌタ埩旧/​​///////////////////////////////////////////// ///////////

for ( z = 0; z < 1023; z += 16 ) { // 業界のすべおのセルを反埩凊理したす
//そしお、4 ぀のポンプ倉数の配列 (各カりンタヌに 4 バむト) に曞き蟌みたす。
// 笊号なしのlong倉数。 カりンタヌは 4 ぀あり、4 ぀すべおの 16 ぀のレコヌドには XNUMX バむトかかりたす。
EEPROM.get(z, ポンプ[0]); // したがっお、for ルヌプを䜿甚しないず、ボリュヌムが少なくなりたす
EEPROM.get(z+4, ポンプ[1]);
EEPROM.get(z+8, ポンプ[2]);
EEPROM.get(z+12, ポンプ[3]);

// 4 ぀のカりンタヌの合蚈に新しい次の倀を割り圓おたす
sumprim = (ポンプ [0] + ポンプ [1] + ポンプ [2] + ポンプ [3]);

// sumprim 倉数内の 4 ぀のカりンタヌの合蚈の新しい倀を、倉数内の以前の倀ず比范したす。
// sumsec で、前の合蚈が新しい合蚈以䞋の堎合は、新しい合蚈が割り圓おられたす。
// sumsec 倀。

if ( sumsec <= sumprim ) {
sumsec = サムプリム; //

//そしお珟圚の倀 z がアドレス倉数に割り圓おられたす。z は 16 ぀の倀からなる 4 バむトのブロックの先頭のアドレスです
// カりンタヌは同時に蚘録されたす (ポヌトをポヌリングするずき、ポヌトの 8 ビットすべおが同時に曞き蟌たれるため、
// ポヌト D の必芁な䞊䜍 4 ビットを含みたす。
アドレス = z;
}
}

// 蚘録された 16 ぀のカりンタ倀の 4 バむトのブロックの先頭アドレスにある EEPROM メモリに再床アクセスしたす。
// 最埌、぀たりフリヌズによるシャットダりンたたは再起動前の倀。 最新の蚘録
// カりンタ倀を 4 ぀の倉数の配列にポンプしたす。

EEPROM.get(アドレス, ポンプ[0]);
EEPROM.get(アドレス + 4, ポンプ[1]);
EEPROM.get(アドレス + 8, ポンプ[2]);
EEPROM.get(アドレス + 12, ポンプ[3]);

アドレス += 16; //最埌のレコヌドのデヌタを䞊曞きせずに、次のブロックを曞き蟌むためのアドレスを増加したす

//デヌタ埩旧の終了////////////////////////////////////////// / //////////////////

attachInterrupt(0, count, RISING); // ピン D2、割り蟌みを有効にする、毎秒来る
// SQW 出力からの RTC DS3231 からのパルス

wdt_enable(WDTO_8S); // りォッチドッグ タむマヌを開始し、フリヌズした堎合にはコントロヌラヌを再起動したす。
// これには、タむマヌ リセット コマンド wdt_reset( を発行する必芁があり、通垞の動䜜䞭の再起動を避ける必芁がありたす - 8 秒。
// テストの堎合、倀を 8 秒未満に蚭定するこずはお勧めできたせん。この堎合、タむマヌはリセットされるこずが望たしいです。
// けいれん、そしおそれが毎秒起こりたす。

}

voidルヌプ{
// 空のサむクル。ここでは電気モヌタヌの欠盞動䜜が制埡されたす。
}

void count() {

tft.setTextColor(ST7735_WHITE); // フォントの色を蚭定したす
t = rtc.getTime(); // 読み取り時間
tft.setCursor(5, 120); // カヌ゜ル䜍眮の蚭定
tft.fillRect(5, 120, 50, 7, ST7735_BLACK); // 時刻出力領域をクリア
tft.print(rtc.getTimeStr()); // クロック読み取り倀を出力したす

wdt_reset(); // サむクルごず、぀たり秒ごずにりォッチドッグをリセットしたす

for (rc = 0; rc < 4; rc ++) // 入力状態の準拠性をチェックするためのサむクルの開始
// ポヌトビットをポヌト D ビットの以前の読み取り状態に戻す
{
pinState = (PIND >> 4) & ( b << rc );

if (pumrcounter [rc] != pinState) { // 䞀臎しない堎合は、
pumrcounter[rc] = ピン状態; // ポヌトビットステヌタス倉数に新しい倀 1/0 を割り圓おたす
}
// カラヌコントロヌルオブゞェクトの状態の衚瀺
// ブルヌは既存の画面 (たたはラむブラリ?) の小さな䞍具合で、RGB ず BGR が混同されおいたす。
if (pinState == ( b << rc )) {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_BLUE); // 䜎レベルのカりントの堎合は、緑を青に倉曎したす
堎合} else {
tft.fillRect(15, ((rc * 10 + シフト)), 7, 7, ST7735_GREEN); // 䜎レベルのカりントの堎合は、青を緑に倉曎したす
ポンプ [rc] += 1; // 動䜜時間カりンタに 1 秒を加算したす
}
}

k++;
if (k == 36) {
  

tft.fillRect(30, シフト, 97, 40, ST7735_BLACK); // 皌働時間衚瀺゚リアをクリア
tft.fillRect(60, 120, 73, 7, ST7735_BLACK); // 日付も

tft.setCursor(60, 120); // カヌ゜ル䜍眮の蚭定
tft.print(rtc.getDateStr()); // LCD画面に日付を衚​​瀺したす

for (rc = 0; rc < 4; rc ++) //皌働時間を敎数、XNUMX分のXNUMX、およびXNUMX分のXNUMXで出力したす。
{
tft.setCursor ( 30, rc * 10 + SHIFT ); // 10分のXNUMX時間、画面がXNUMXピクセル䞋にシフト
tft.println(ポンプ [rc] / m);
}

// 「生の」動䜜時間倀 (秒単䜍) を EEPROM に曞き蟌む //////////////////////////////

for (rc = 0; rc < 4; rc++)
{
EEPROM.put(アドレス, ポンプ [rc]);
アドレス += sizeof(float); // 曞き蟌みアドレス倉数をむンクリメントしたす
}
}

// 送信するバむト数を瀺すデヌタから無線チャネルを介しおデヌタを送信したす。
if ((k == 6 ) || (k == 18 ) || (k == 30 )) {

眲名されおいない長いデヌタ。

radio.write(&start, sizeof(start));

for (i = 0; i < 4; i++) {
デヌタ = ポンプ [i ];
radio.write( &data, sizeof( data));
}
}
}

最埌にいく぀かメモ。 カりントは入力の䜎論理レベルで発生したす。

フォトレゞスタ GL2 を䜿甚したオプションの堎合、プルアップ抵抗 R5  R36 は 5516 kOhm です。 フォトトランゞスタフォトカプラおよびリレヌの堎合は、4,7  5,1 kΩ に蚭定したす。 りォッチドッグ タむマヌを正しく動䜜させるために、Arduino Nano v3.0 ブヌトロヌダヌは TL866A プログラマを䜿甚しお Arduino Uno に眮き換えられたした。 ヒュヌズは 4,3 V 以䞊の電圧で動䜜するように修正されおいたす。倖郚リセット回路 R6 C3 は䜿甚されたせんでした。 サンプル プログラムでは、送信機の呚波数はラむセンスのない範囲に察応しおおらず、2,4 MHz の範囲は呚波数 2400.0  2483.5 MHz に制限されおいたす。

E01-ML01DP05 トランスミッタの範囲は 2400  2525 MHz です。 1 ぀のチャネルの垯域幅は 24 MHz で、速床を「RF2_120MBPS」に蚭定するず、指定された radio.setChannel(2) チャネルず次のチャネルが占有されたす。 垯域はXNUMXMHzになりたす。

出所 habr.com

コメントを远加したす