ロヌカル自埋デヌタ収集システム (続き)

このサむトから始める リンク.
スタヌタヌのオンに関する情報を取埗するための最も䟿利なオプションは、PC817 フォトカプラヌを䜿甚したオプションであるこずが刀明したした。 抂略図ロヌカル自埋デヌタ収集システム (続き)ボヌドには 100 ぀の同䞀の回路が含たれおおり、すべおがサむズ 100xXNUMX mm の ABS プラスチックの箱に入れられおいたす。 フォトカプラの写真ロヌカル自埋デヌタ収集システム (続き) 半導䜓バルブを備えた始動装眮に接続するず、その挏れ電流が PC817 を開くのに十分であり、カりンタヌが誀っおトリガヌされたす。 そういった事態を排陀するために フォトカプラ LED ず動䜜衚瀺 LED の回路に盎列にもう 1 ぀远加されたす。 これを行うには、ゞャンパ J1 を開き、远加の LED LEDXNUMX をはんだ付けしたす。
受信郚分は サむド1ロヌカル自埋デヌタ収集システム (続き)サむド2ロヌカル自埋デヌタ収集システム (続き)開発ボヌドを ARDUINO MEGA 2560 に接続したす。このために、端に 240 列コネクタが䜿甚されたす。 情報衚瀺デバむスずしお、抵抗膜タッチスクリヌンず枩床センサヌを備えた解像床 400xXNUMX のスクリヌンが䜿甚されたす。 HX8352B。ロヌカル自埋デヌタ収集システム (続き) たた、スクリヌン基板䞊のICSPぞのコネクタが撀去され、micro SDスロットは䜿甚されたせん。 実際には、SPI バス䞊の競合により、「ネむティブ」SD ゜ケットは䜿甚できたせん。 フラッシュ カヌドには、3,3 V スタビラむザヌず 74 ぀の出力状態を持぀バッファ チップ 125LVS01A を含む別個のカヌド リヌダヌが䜿甚されたした。 ここで熊手が私を埅っおいたした。 スリヌステヌト バッファですが、E01-ML5DP0108 たたはカヌド リヌダヌのいずれかが動䜜したした。 ラむブラリのコメントで、SdFat は他のデバむスずの非互換性に関する譊告を確認したした。 TXS01E のレベル コンバヌタが削陀され、ゞャンパに眮き換えられたした。 E01-ML5DP5 は 4V 信号に耐性がありたすが、圹に立ちたせんでした。 オシロスコヌプを䜿甚するず、カヌド リヌダヌが接続されおいるずきに MISO ラむンで信号損倱が怜出されたした。 泚意深く調べたずころ、74LVS125A の OE 5 チャネルのむネヌブル信号の入力は単に共通のワむダにはんだ付けされおおり、第 3.3 の状態に぀いおは䜕も語れないこずがわかりたした。 バッファ チップは、信号線ず盎列に接続された 3,3 KΩ 抵抗を䜿甚しお、13 V から XNUMX V ぞの原始レベル コンバヌタずしお䜿甚されたした。 MISOラむンを陀く。 おそらく、その出力䞋郚スむッチが信号をグランドレベルに匕き蟌んだず考えられたす。 MISO ラむンのむネヌブル信号がピン XNUMX であるず刀断したため、それをトラックから切り離し、はんだ付けされたロヌカル自埋デヌタ収集システム (続き)9LVS74A CS デバむス遞択入力ピン (125) ず終端抵抗の間。 メモリ カヌドにアクセスがない堎合、MISO バッファは無効になり、別のデバむスの動䜜を劚げたせん。開発ボヌド図ロヌカル自埋デヌタ収集システム (続き)受信機動䜜䞭ロヌカル自埋デヌタ収集システム (続き)DS3231 は、゜フトりェア I2C バス (TWI) を䜿甚しおクロックを接続したす。
Arduino IDE プログラム// 重芁: Adafruit_TFTLCD ラむブラリは特別に指定する必芁がありたす
// TFT シヌルドたたはブレヌクアりト ボヌドのいずれか甚に構成されおいたす。
// セットアップに぀いおは、Adafruit_TFTLCD.h の関連コメントを参照しおください。
//Open-Smart チヌムず Catalex チヌムによる
//[メヌル保護]
//店 dx.com
// open-smart.aliexpress.com/store/1199788
//デモ機胜グラフィックス、文字の衚瀺
//Arduino IDE: 1.6.5
// ボヌド: Arduino UNO R3、Arduino Mega2560、Arduino Leonardo

// ボヌド:OPEN-SMART UNO R3 5V / 3.3V、Arduino UNO R3、Arduino Mega2560
//3.2むンチTFT:
// www.aliexpress.com/store/product/3-2-TFT-LCD-Display-module-Touch-Screen-Shield-board-onboard-temperature-sensor-w-Touch-Pen/1199788_32755473754.html?spm=2114.12010615.0.0.bXDdc3
//オヌプンスマヌト UNO R3 5V / 3.3V:
// www.aliexpress.com/store/product/OPEN-SMART-5V-3-3V-Compatible-UNO-R3-CH340G-ATMEGA328P-Development-Board-with-USB-Cable-for/1199788_32758607490.html?spm=2114.12010615.0.0.ckMTaN

含む// コアグラフィックスラむブラリ
//含む// ハヌドりェア固有のラむブラリ
含む
MCUFRIEND_kbv tft;
#include "SdFat.h" // SdFat ラむブラリを䜿甚する
SdFat SD;
SdFile ファむル;
ファむルmyFile;
#SD_CS_PIN SS を定矩

含む// SPI バスで動䜜するようにラむブラリを接続したす
含む// RF24ラむブラリから蚭定ファむルを接続
含む// nRF24L24+ で動䜜するようにラむブラリを接続したす
RF24 無線 (47、49);

含む

DS3231 rtc(27, 25);
時間t;

uint16_t r = 6000;
uint32_t k = 0;

揮発性の笊号なし長いデヌタ。
フロヌト leb_1;
フロヌト leb_2;
フロヌト leb_3;
フロヌト leb_4;

uint8_t パむプ;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//*********************************************** ****************//
// OPEN-SMART TFT ブレヌクアりトボヌドを䜿甚する堎合 //
// 5V-3.3Vレベル倉換回路の远加を掚奚したす。
// もちろん、5V/3.3V 電源スむッチ付きの OPEN-SMART UNO Black バヌゞョンも䜿甚できたす。
// 3.3V に切り替えるだけです。
// LCD の制埡ピンは、任意のデゞタルたたはピンに割り圓おるこずができたす。
// アナログ ピン...ただし、これにより次のこずが可胜になるため、アナログ ピンを䜿甚したす。
//——————————————-|
// TFT ブレヌクアりト - Arduino UNO / Mega2560 / OPEN-SMART UNO ブラック
// GND - GND
// 3V3 - 3.3V
//CS-A3
// RS-A2
// WR-A1
// RD-A0
// RST - リセット
// LED - GND
// DB08
// DB19
// DB210
// DB311
// DB44
// DB513
// DB66
// DB77

// 人間が刀読できる名前をいく぀かの䞀般的な 16 ビット カラヌ倀に割り圓おたす。
#ブラック0x0000を定矩したす
#define ブルヌ 0x001F
#RED 0xF800 を定矩
#define 緑 0x07E0
#シアン 0x07FF を定矩
#define マれンタ 0xF81F
#YELLOW 0xFFE0 を定矩
#癜0xFFFFを定矩
#グレヌ 0x8C51 を定矩したす
#GREYD 0x39E7 を定矩したす

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// シヌルドを䜿甚する堎合、すべおの制埡線ずデヌタ線は固定され、
// オプションで、より単玔な宣蚀を䜿甚できたす。
// Adafruit_TFTLCD tft;
uint16_t g_identifier;

文字列デヌタ文字列;
//文字列 numfileMonth = "1.txt";
char perv [] = {"2.txt"};
//String *numfileMonth="1.txt" (sizeof (numfileMonth));
//////////////////////////////////////////////////// //////////////////

void setupvoid{

rtc.begin();

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

Serial.begin2000000;
//////// 画面初期化
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(true);
//////////////////名前、装備付属品、組織名を出力
tft.fillScreen(BLACK);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("開発者ずビルド");
tft.setCursor(30, 20);
tft.print (utf8rus("コンストラクタヌ V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("タヌナヌ I.I." ));
遅延2000;

radio.begin(); // 䜜業を開始したす nRF24L01+
radio.setChannel(120); // デヌタ受信チャンネルを指定(0127)
radio.setDataRate(RF24_250KBPS); // デヌタ転送速床を指定 (RF24_250KBPS、RF24_1MBPS、RF24_2MBPS)、RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // 送信電力を指定したす (RF24_PA_MIN=-18dBm、RF24_PA_LOW=-12dBm、RF24_PA_HIGH=-6dBm、RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // デヌタを受信するために、1 ぀の送信機 1xAABBCCDD0 の識別子を持぀ 11 ぀のパむプを開きたす
// 送信機 ID 2xAABBCCDD2 のパむプ 0 を開いおデヌタを受信したす
radio.startListening(); // 受信機の電源を入れ、開いたパむプの音を聞き始めたす
// radio.stopListening();
////////サヌビス情報の出力
tft.fillScreen(BLACK);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////SDカヌドの初期化を開始したす
Serial.println("初期SDカヌド");
tft.println("初期SDカヌド");
tft.setCursor(8, 10);
////////カヌドの初期化䞭
if (!SD.begin(SD_CS_PIN)) {
Serial.println("初期倱敗!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(BLACK);
tft.println("初期倱敗!");
戻り倀;
}
tft.setTextColor(WHITE);
Serial.println("初期化が完了したした");
tft.println("初期化が完了したした");
遅延2000;
////////時刻ず日付を読み取り、倉数に代入する
t = rtc.getTime();
time_sec_prev = t.sec;
time_day_prev = t.date;
////////日付の衚瀺倉曎を埅たずに匷制的に日付を出力する
tft.setCursor(180, 0); // カヌ゜ル䜍眮の蚭定
tft.fillRect(178, 0, 65, 7, GREY); // 時刻出力領域をクリア
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////コントロヌルオブゞェクト名を出力
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("りィンチ I"));
////////ログファむルの䜜成ず䜜成詊行の結果の出力
tft.setTextSize(1);
tft.setCursor(130, 10); // ログ ファむル 2.txt が䜜成された堎合、ファむルぞの曞き蟌みは続行されたす
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
堎合} else {
myFile = SD.open(perv, FILE_WRITE); // ファむル 2.txt が存圚しない堎合は䜜成されたす
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

void loopvoid{
////////COMポヌトモニタぞのログ出力芁求の有無を確認
if (Serial.available() > 0) {
if (1 == Serial.read());
////////そしお「1」が受け入れられた堎合、出力は
ファむル myFile = SD.open(perv);
// ファむルが利甚可胜な堎合は、それに曞き蟌みたす:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
他{
Serial.println(".txt を開くずきに゚ラヌが発生したした");
}
}
////////読曞の時間
t = rtc.getTime();
tft.setTextColor(WHITE);
////////時間が倉曎された堎合は、新しい時蚈の読み取り倀を衚瀺したす
if ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // カヌ゜ル䜍眮の蚭定
tft.fillRect(118, 0, 50, 7, GREY); // 時刻出力領域をクリア
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // クロック読み取り倀を出力したす
time_sec_prev = t.sec;
}
////////日付が倉曎されおいる堎合は、新しい日付を衚瀺したす
if ( time_day_prev != t.date) {
tft.setCursor(180, 0); // カヌ゜ル䜍眮の蚭定
tft.fillRect(178, 0, 65, 7, GREY); // 日付衚瀺領域をクリア
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // 日付の読み取り倀を衚瀺したす
time_day_prev = t.date;
}
////////ラゞオ受信が可胜であれば、
if (radio.available(&pipe)) {
////////受信バッファがいっぱいかどうかを確認し、
radio.read(&data, sizeof(data));
////////必芁な送信機アドレスが利甚可胜な堎合、
if (パむプ == 1) {
////////れロの同期シヌケンスが決定するのを埅っおいたす
//デヌタブロックの先頭
if (デヌタ == 0000) {
rc = 0;
堎合} else {
rc++;
}
////////カりンタ倀を蚘録し、10 時間の 100 分の XNUMX ず XNUMX 分の XNUMX で蚈算したす。
if (rc == 1) {
leb_1 = デヌタ / 3600.0;
}

if (rc == 2) {
leb_2 = デヌタ / 3600.0;
}

if (rc == 3) {
leb_3 = デヌタ / 3600.0;
}

if (rc == 4) {
leb_4 = デヌタ / 3600.0;
}
}
}
r++;
k++; // ただのカりンタヌ
//////// 䞀定の呚期でデヌタ曎新
if ( r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, GREYD);
Serial.println("レベドキ I");
tft.setCursor(0, 41);
tft.println(leb_1);
Serial.println(leb_1);
tft.println(leb_2);
Serial.println(leb_2);
tft.println(leb_3);
Serial.println(leb_3);
tft.println(leb_4);
Serial.println(leb_4);
Serial.println(k);
r = 0;
}
////////SD 䞊のログに 10 分ごずにデヌタを曞き蟌みたす。
if ((t.min % 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(BLACK);
////////.csv 圢匏で文字列を䜜成する
文字列 dataString = 文字列 (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
////////ファむルぞの曞き蟌みず曞き蟌み凊理の結果の出力
myFile = SD.open(perv, FILE_WRITE); // 「2.txt」ずいうファむルが存圚しない堎合は䜜成されたす。
if (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, 緑);
tft.println("SD OK");
Serial.println("SD OK");
遅延(900); // 遅延、そうでない堎合は 13 秒が経過するたで XNUMX 個の同䞀の読み取り倀を蚘録したす
堎合} else {
tft.fillRect(198, 8, 42, 10, RED);
tft.println("SD ゚ラヌ");
Serial.println("SD ゚ラヌ");
}
}
}文字倉換プログラム/* ロシア語フォントを UTF-8 から Windows-1251 に再コヌド化したす */

文字列 utf8rus(文字列゜ヌス)
{
int i,k;
文字列タヌゲット。
笊号なし文字 n;
char m[2] = { '0', ' ' };

k = ゜ヌス.長さ(); i = 0;

while (i < k) {
n = ゜ヌス[i]; i++;

if (n >= 0xC0) {
スむッチ (n) {
ケヌス0xD0: {
n = ゜ヌス[i]; i++;
if (n == 0x81) { n = 0xA8; 壊す; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
ç Žã‚‹;
}
ケヌス0xD1: {
n = ゜ヌス[i]; i++;
if (n == 0x91) { n = 0xB8; 壊す; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
ç Žã‚‹;
}
}
}
m[0] = n; タヌゲット = タヌゲット + 文字列(m);
}
リタヌンタヌゲット。
}Adafruit_GFX ラむブラリを䜿甚したキリル文字出力の文字コヌド倉換プログラムは、メむン プログラムず同じフォルダヌに配眮されたす。 Adafruit_GFX の glcdfont.c ファむルを別のフォントに眮き換える必芁もありたす。 それは 必芁な眮換を含むラむブラリ。 ロシア化に関する詳现情報は、むンタヌネットで簡単に芋぀けるこずができたす。
芁玄するず、このシステムは期埅どおりであり、機噚の皌働時間の監芖が容易になったず蚀えたす。 すべおブレッドボヌド䞊で組み立おられおいたすが、䜜業に関しおすぐに䞍満はありたせん。 最初の芁玠は半幎以䞊機胜し、冬を乗り越えたした。 最新のデザむン 9月5日から管理察象XNUMX台で皌働しおおり、皌働時間を正匏に登録しおいる。

出所 habr.com

コメントを远加したす