Lokal nga Autonomous Data Acquisition System (gipadayon)

Pagsugod sa kini nga site link.
Ang labing kombenyente nga kapilian alang sa pagkuha sa kasayuran bahin sa pag-on sa starter nahimo nga kapilian sa PC817 optocoupler. Diagram sa sirkitoLokal nga Autonomous Data Acquisition System (gipadayon)Ang mga tabla adunay tulo ka managsama nga mga sirkito, ang tanan gibutang sa mga plastik nga kahon sa ABS, gidak-on nga 100x100 mm. Litrato sa mga optocouplerLokal nga Autonomous Data Acquisition System (gipadayon) Kung konektado sa pagsugod sa mga aparato nga adunay mga balbula sa semiconductor, ang ilang leakage karon igo na aron maablihan ang PC817 ug ang counter mag-trigger nga sayup. Aron dili iapil ang ingon nga kahimtang usa pa ang gidugang sa serye sa sirkito sa optocoupler LED ug ang operation indication LED. Aron mahimo kini, ang jumper J1 giablihan ug usa ka dugang nga LED LED1 ang gibaligya.
Ang bahin sa pagdawat gihimo sa kilid 1Lokal nga Autonomous Data Acquisition System (gipadayon)kilid 2Lokal nga Autonomous Data Acquisition System (gipadayon)development board konektado sa ARDUINO MEGA 2560. Alang niini, usa ka double-row connector gigamit sa katapusan. Ang usa ka screen nga adunay resolusyon nga 240x400, nga adunay resistive touchscreen ug usa ka sensor sa temperatura, gigamit ingon usa ka aparato sa pagpakita sa impormasyon. HX8352B.Lokal nga Autonomous Data Acquisition System (gipadayon) Dugang pa, ang connector sa ICSP sa screen board gikuha ug ang micro SD slot wala gigamit. Ang tinuod mao nga ang "native" SD socket dili magamit tungod sa panagbangi sa SPI bus. Alang sa flash card, usa ka separado nga card reader ang gigamit, nga naglakip sa usa ka 3,3V stabilizer ug usa ka buffer chip nga adunay tulo ka output states nga 74LVS125A. Dinhi ang rake naghulat kanako. Usa ka tulo ka estado nga buffer, apan ang E01-ML01DP5 o ang card reader nagtrabaho. Sa mga komentaryo sa librarya, nakita sa SdFat ang usa ka pasidaan bahin sa dili pagkaangay sa ubang mga aparato. Ang level converter sa TXS0108E gikuha ug gipulihan sa mga jumper, tungod kay Ang E01-ML01DP5 motugot sa 5V nga mga signal - wala kini makatabang. Gamit ang usa ka oscilloscope, usa ka pagkawala sa signal ang nakit-an sa linya sa MISO kung ang usa ka magbabasa sa kard konektado. Sa mabinantayon nga pagsusi, nahibal-an nga ang mga input sa pagpaandar nga mga signal sa OE 4 nga mga kanal sa 74LVS125A yano nga gibaligya sa usa ka sagad nga wire ug wala’y paghisgot sa bisan unsang ikatulo nga estado. Ang buffer chip gigamit isip primitive level converter gikan sa 5V ngadto sa 3.3V gamit ang 3,3 KΩ resistors nga konektado sa serye sa mga linya sa signal. Gawas sa linya sa MISO. Ang output sa ilawom nga switch niini lagmit nakadani sa mga signal sa lebel sa yuta. Sa pagtino nga ang enable signal sa linya sa MISO mao ang pin 13, kini gikuha gikan sa track uggibaligyaLokal nga Autonomous Data Acquisition System (gipadayon)tali sa 9LVS74A CS device pilia ang input pin (125) ug ang termination resistor. Karon, kung wala’y access sa memory card, ang MISO buffer na-disable ug dili makabalda sa operasyon sa laing device.Diagram sa development boardLokal nga Autonomous Data Acquisition System (gipadayon)Receiver sa operasyonLokal nga Autonomous Data Acquisition System (gipadayon)Ang DS3231 naggamit ug software I2C bus (TWI) aron makonektar ang orasan.
Arduino IDE nga programa// IMPORTANTE: ANG Adafruit_TFTLCD LIBRARY KINAHANGLANG ESPESPIKAL
// GI-CONFIGURED PARA SA TFT SHIELD O SA BREAKOUT BOARD.
// TAN-AWA ANG HINUNGDANONG MGA KOMENTO SA Adafruit_TFTLCD.h ALANG SA SETUP.
//sa Open-Smart Team ug Catalex Team
//[protektado sa email]
//Tindahan: dx.com
// open-smart.aliexpress.com/store/1199788
//Demo Function: Ipakita ang mga graphic, mga karakter
//Arduino IDE: 1.6.5
// Board: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo

// Board:OPEN-SMART UNO R3 5V / 3.3V, Arduino UNO R3, Arduino Mega2560
//3.2INCH 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
//OPEN-SMART 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

#apil // Core graphics library
//#apil // librarya nga espesipiko sa hardware
#apil
MCUFRIEND_kbv tft;
#include "SdFat.h" // Gamita ang SdFat library
SdFat SD;
SdFile file;
File myFile;
#define SD_CS_PIN SS

#apil // Ikonektar ang library aron magtrabaho sa SPI bus
#apil // Ikonektar ang setting file gikan sa RF24 library
#apil // Ikonektar ang librarya aron magtrabaho sa nRF24L24+
RF24 nga radyo(47, 49);

#apil

DS3231 rtc(27, 25);
Oras t;

uint16_t r = 6000;
uint32_t k = 0;

dali nga wala’y pirma nga taas nga datos;
float leb_1;
float leb_2;
float leb_3;
float leb_4;

uint8_t tubo;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//**************************************************** *****************/ /
// Kung mogamit ka OPEN-SMART TFT breakout board //
// Girekomenda nga idugang ang 5V-3.3V nga lebel sa pagbag-o sa sirkito.
// Siyempre mahimo nimong gamiton ang OPEN-SMART UNO Black nga bersyon nga adunay 5V / 3.3V power switch,
// kinahanglan ra nimo ibalhin sa 3.3V.
// Ang control pin para sa LCD mahimong i-assign sa bisan unsang digital o
// analog pins...apan gamiton namo ang analog pins kay kini nagtugot kanamo
//——————————————-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO Black
// GND - GND
// 3V3 - 3.3V
//CS - A3
// RS - A2
// WR - A1
// RD - A0
// RST - RESET
// LED - GND
// DB0 - 8
// DB1 - 9
// DB2 - 10
// DB3 - 11
// DB4 - 4
// DB5 - 13
// DB6 - 6
// DB7 - 7

// I-assign ang mga ngalan nga mabasa sa tawo sa pipila ka sagad nga 16-bit nga mga kantidad sa kolor:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define DILAW 0xFFE0
#define WHITE 0xFFFF
#define GREY 0x8C51
#define GRAYD 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Kung gamiton ang taming, ang tanan nga kontrol ug mga linya sa datos naayo, ug
// ang usa ka mas simple nga deklarasyon mahimong opsyonal nga gamiton:
// Adafruit_TFTLCD tft;
uint16_t g_identifier;

String dataString;
//String numfileMonth = "1.txt";
char perv [] = {"2.txt"};
//String *numfileMonth="1.txt" (sizeof (numfileMonth));
///////////////////////////////////////////// //////////////////

wala’y pulos nga pag-setup (void) {

rtc.begin();

// Aron itakda ang oras, i-uncomment ang kinahanglan nga mga linya
// rtc.setDOW(6); // Adlaw sa semana
// rtc.setTime(22, 04, 0); // Oras, sa 24 oras nga pormat.
// rtc.setDate(4, 5, 2019); // Petsa, Oktubre 29, 2018

Serial.begin (2000000);
//////// Pag-initialize sa screen
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(tinuod);
//////////////////Output sa mga ngalan, kagamitan sa kagamitan, ngalan sa organisasyon
tft.fillScreen(BLACK);
tft.setTextColor(PUTI);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("DEVELOPERS & BUILD");
tft.setCursor(30, 20);
tft.print (utf8rus("Constructor V.V."));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
paglangan(2000);

radio.begin(); // Pagsugod sa trabaho nRF24L01+
radio.setChannel(120); // Ipiho ang channel sa pagdawat sa datos (gikan sa 0 hangtod 127)
radio.setDataRate(RF24_250KBPS); // Ipiho ang rate sa pagbalhin sa datos (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Ipiho ang gahum sa transmitter (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Ablihi ang 1 pipe nga adunay identifier sa 1 transmitter 0xAABBCCDD11, aron makadawat data
// Ablihi ang tubo 2 nga adunay transmitter ID 2xAABBCCDD0 aron makadawat mga datos
radio.startListening(); // I-on ang receiver, sugdi ang pagpaminaw sa mga open pipe
// radio.stopListening();
////////Output sa impormasyon sa serbisyo
tft.fillScreen(BLACK);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////Sugdi ang pagsugod sa SD card
Serial.println("Initial SD card");
tft.println("Initial SD card");
tft.setCursor(8, 10);
////////Pagsugod sa kard
kon (!SD.begin(SD_CS_PIN)) {
Serial.println("Inisyal napakyas!");
tft.fillRect(8, 10, 85, 7, PULA);
tft.setTextColor(BLACK);
tft.println("Napakyas ang inisyal!");
mobalik;
}
tft.setTextColor(PUTI);
Serial.println("nahimo na ang inisyalisasyon");
tft.println("Nahimo na ang inisyalisasyon");
paglangan(2000);
//////// Oras ug petsa sa pagbasa ug pag-assign niini sa mga variable
t = rtc.getTime();
time_sec_prev = t.sec;
time_day_prev = t.petsa;
////////Pugos nga ipagawas ang petsa aron dili maghulat nga mausab ang petsa para ipakita
tft.setCursor(180, 0); // pagbutang sa posisyon sa cursor
tft.fillRect(178, 0, 65, 7, GRAY); // paghawan sa lugar nga output sa oras
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Output ang ngalan sa kontrol nga mga butang
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Winches I"));
////////Paghimo ug log file ug pag-output sa resulta sa pagsulay sa paghimo
tft.setTextSize(1);
tft.setCursor(130, 10); // kung ang log file 2.txt gihimo, nan ang pagsulat sa file magpadayon
kon (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Laing {
myFile = SD.open(perv, FILE_WRITE); // kung wala ang file 2.txt, kini pagabuhaton
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

void loop (void) {
////////Pagsusi sa paglungtad sa usa ka hangyo nga magpagawas ug log sa COM port monitor
kon (Serial.available() > 0) {
kon (1 == Serial.read());
////////Ug kung ang "1" gidawat, nan ang output
File myFile = SD.open(perv);
// kung ang file anaa, pagsulat niini:
kon (akongFile) {
samtang (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
laing {
Serial.println("error opening .txt");
}
}
////////Oras sa pagbasa
t = rtc.getTime();
tft.setTextColor(PUTI);
////////Kon ang oras nausab, dayon ipakita ang bag-ong mga pagbasa sa orasan
kon ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // pagbutang sa posisyon sa cursor
tft.fillRect(118, 0, 50, 7, GRAY); // paghawan sa lugar nga output sa oras
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // mga pagbasa sa orasan sa output
time_sec_prev = t.sec;
}
////////Kon ang petsa nausab, dayon ipakita ang bag-ong petsa
kon ( time_day_prev != t.date) {
tft.setCursor(180, 0); // pagbutang sa posisyon sa cursor
tft.fillRect(178, 0, 65, 7, GRAY); // tin-aw nga lugar sa pagpakita sa petsa
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // ipakita ang mga pagbasa sa petsa
time_day_prev = t.petsa;
}
////////Kon ang pagdawat sa radyo anaa, nan
kon (radio.available(&pipe)) {
////////pagsusi kung puno ba ang nadawat nga buffer,
radio.read(&data, sizeof(data));
////////kon ang gikinahanglan nga adres sa transmitter anaa, nan
kon (pipe == 1) {
////////naghulat alang sa usa ka pag-synchronize nga han-ay sa mga zero aron mahibal-an
//pagsugod sa data block
kon (data == 0000) {
rc = 0;
} Laing {
rc++;
}
//////// Pagrekord sa mga kantidad sa counter ug pagkalkula niini sa ika-10 ug ika-100 sa usa ka oras
kon (rc == 1) {
leb_1 = data / 3600.0;
}

kon (rc == 2) {
leb_2 = data / 3600.0;
}

kon (rc == 3) {
leb_3 = data / 3600.0;
}

kon (rc == 4) {
leb_4 = data / 3600.0;
}
}
}
r++;
k++; // counter lang
//////// Pag-update sa datos nga adunay piho nga periodicity
kon ( r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, GRAYD);
Serial.println("Lebedki 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;
}
////////Isulat ang datos sa log sa SD matag 10 minuto.
kon ((t.min % 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(BLACK);
////////Paghimo ug string sa .csv format
String dataString = String (rtc.getDateStr()) + ","+(rtc.getTimeStr()) + "," + (leb_1) + "," + (leb_2)
+ "," + (leb_3) + "," + (leb_4) + ",";
////////Pagsulat sa usa ka file ug ipagawas ang mga resulta sa proseso sa pagsulat
myFile = SD.open(perv, FILE_WRITE); // kung walay file nga ginganlan og "2.txt", kini pagabuhaton.
kon (akongFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, GREEN);
tft.println("SD OK");
Serial.println("SD OK");
paglangan(900); // paglangan, kung dili, nagrekord sa 13 nga parehas nga pagbasa hangtod nga milabay ang usa ka segundo
} Laing {
tft.fillRect(198, 8, 42, 10, PULA);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}Programa sa pagbag-o sa karakter/* Recode Russian nga mga font gikan sa UTF-8 ngadto sa Windows-1251 */

String utf8rus(String source)
{
int i,k;
Target nga string;
unsigned char n;
char m[2] = { '0', ' ' };

k = tinubdan.gitas-on(); ako = 0;

samtang (i < k) {
n = tinubdan[i]; ako++;

kon (n >= 0xC0) {
switch (n) {
kaso 0xD0: {
n = tinubdan[i]; ako++;
kon (n == 0x81) {n = 0xA8; guba; }
kon (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
paglapas;
}
kaso 0xD1: {
n = tinubdan[i]; ako++;
kon (n == 0x91) {n = 0xB8; guba; }
kon (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
paglapas;
}
}
}
m[0] = n; target = target + String(m);
}
balik nga target;
}Ang karakter transcoding nga programa alang sa Cyrillic output gamit ang Adafruit_GFX librarya gibutang sa samang folder nga adunay nag-unang programa. Kinahanglan nimo usab nga ilisan ang glcdfont.c file sa Adafruit_GFX nga adunay lahi nga font. kini mao ang librarya nga adunay gikinahanglan nga kapuli. Ang dugang nga kasayuran bahin sa Russification dali nga makit-an sa Internet.
Sa pag-summarize, isulti ko nga ang sistema nagsunod sa mga gipaabut, nahimong mas sayon ​​​​ang pag-monitor sa oras sa pag-operate sa mga ekipo. Bisan kung ang tanan gitigum sa mga breadboard, wala’y mga reklamo dayon bahin sa trabaho. Ang unang mga elemento nagtrabaho sulod sa sobra sa unom ka bulan ug nakalahutay sa tingtugnaw. Pinakabag-o nga disenyo Nagdagan kini alang sa 9 nga kontrolado nga mga yunit sukad kaniadtong Marso 5 ug ang oras sa pag-opera opisyal nga narehistro gamit kini.

Source: www.habr.com

Idugang sa usa ka comment