Lokalni autonomni sustav prikupljanja podataka (nastavak)

Započnite na ovoj stranici по ссылке.
Najprikladnija opcija za dohvaćanje informacija o uključivanju startera pokazala se opcija s PC817 optocouplerom. Dijagram krugaLokalni autonomni sustav prikupljanja podataka (nastavak)Ploče sadrže tri identična strujna kruga, sve je smješteno u kutije od ABS plastike, dimenzija 100x100 mm. Fotografija optokapleraLokalni autonomni sustav prikupljanja podataka (nastavak) Kada su spojeni na uređaje za pokretanje s poluvodičkim ventilima, njihova struja curenja dovoljna je za otvaranje PC817 i brojač će se lažno aktivirati. Da bi se takva situacija isključila još jedan se dodaje u seriju krugu LED optokaplera i LED indikatora rada. Da biste to učinili, kratkospojnik J1 je otvoren i zalemljen je dodatni LED LED1.
Prihvatni dio je izrađen na strana 1Lokalni autonomni sustav prikupljanja podataka (nastavak)strana 2Lokalni autonomni sustav prikupljanja podataka (nastavak)razvojna ploča spojena na ARDUINO MEGA 2560. Za to se na kraju koristi dvoredni konektor. Kao uređaj za prikaz informacija koristi se zaslon rezolucije 240x400 s rezistivnim zaslonom osjetljivim na dodir i senzorom temperature. HX8352B.Lokalni autonomni sustav prikupljanja podataka (nastavak) Štoviše, priključak za ICSP na ploči zaslona je uklonjen i mikro SD utor se ne koristi. Činjenica je da se "izvorna" SD utičnica ne može koristiti zbog sukoba na SPI sabirnici. Za flash karticu korišten je zaseban čitač kartica, koji je uključivao stabilizator od 3,3 V i međuspremnik s tri izlazna stanja 74LVS125A. Tu su me čekale grablje. Međuspremnik s tri stanja, ali radili su ili E01-ML01DP5 ili čitač kartica. U komentarima knjižnice SdFat je vidio upozorenje o nekompatibilnosti s drugim uređajima. Pretvarač razine na TXS0108E je uklonjen i zamijenjen kratkospojnicima, jer E01-ML01DP5 je tolerantan na 5V signale - nije pomoglo. Pomoću osciloskopa detektiran je gubitak signala na MISO liniji kada je priključen čitač kartica. Nakon pažljivog ispitivanja, utvrđeno je da su ulazi signala za uključivanje OE 4 kanala 74LVS125A jednostavno zalemljeni na zajedničku žicu i nije moglo biti govora o bilo kakvom trećem stanju. Čip međuspremnika korišten je kao primitivni pretvarač razine od 5 V do 3.3 V pomoću otpornika od 3,3 KΩ spojenih u seriju sa signalnim vodovima. Osim linije MISO. Njegov izlazni donji prekidač vjerojatno je privukao signale na tlo. Utvrdivši da je signal za uključivanje MISO linije bio pin 13, isti je otkinut sa staze ilemljenLokalni autonomni sustav prikupljanja podataka (nastavak)između ulaznog pina za odabir uređaja 9LVS74A CS (125) i završnog otpornika. Sada, ako nema pristupa memorijskoj kartici, MISO međuspremnik je onemogućen i ne ometa rad drugog uređaja.Dijagram razvojne pločeLokalni autonomni sustav prikupljanja podataka (nastavak)Prijemnik u funkcijiLokalni autonomni sustav prikupljanja podataka (nastavak)DS3231 koristi softversku I2C sabirnicu (TWI) za povezivanje sata.
Arduino IDE program// VAŽNO: BIBLIOTEKA Adafruit_TFTLCD MORA BITI POSEBNO
// KONFIGURIRAN ILI ZA TFT ŠTIT ILI ZA PROJEKTIVNU PLOČU.
// POGLEDAJTE RELEVANTNE KOMENTARE U Adafruit_TFTLCD.h ZA POSTAVLJANJE.
//od Open-Smart tima i Catalex tima
//[e-pošta zaštićena]
//Spremi: dx.com
// open-smart.aliexpress.com/store/1199788
//Demo funkcija: Prikaz grafike, znakova
//Arduino IDE: 1.6.5
// Ploča: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo

// Ploča: OPEN-SMART UNO R3 5V / 3.3V, Arduino UNO R3, Arduino Mega2560
//3.2 INČNI 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

#uključi // Osnovna grafička biblioteka
//#uključi // Biblioteka specifična za hardver
#uključi
MCUFRIEND_kbv tft;
#include "SdFat.h" // Koristi biblioteku SdFat
SdFat SD;
SdFile datoteka;
File myFile;
#define SD_CS_PIN SS

#uključi // Povežite knjižnicu za rad sa SPI sabirnicom
#uključi // Povežite datoteku s postavkama iz biblioteke RF24
#uključi // Povežite knjižnicu za rad s nRF24L24+
RF24 radio (47, 49);

#uključi

DS3231 rtc(27, 25);
Vrijeme t;

uint16_t r = 6000;
uint32_t k = 0;

nestabilni nepredpisani dugi podaci;
plovak leb_1;
plovak leb_2;
plovak leb_3;
plovak leb_4;

uint8_t cijev;
int rc = 0;

uint8_t vrijeme_sek_prev;
uint8_t vrijeme_dan_pret;

//************************************************ ***************/ /
// Ako koristite OPEN-SMART TFT breakout ploču //
// Preporučujemo da dodate krug za pretvaranje razine 5V-3.3V.
// Naravno, možete koristiti OPEN-SMART UNO crnu verziju s 5V/3.3V prekidačem napajanja,
// samo trebate prebaciti na 3.3 V.
// Kontrolni pinovi za LCD mogu se dodijeliti bilo kojem digitalnom ili
// analogni pinovi...ali koristit ćemo analogne pinove jer nam to omogućuje
//——————————————-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO crna
// 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

// Dodijelite ljudima čitljiva imena nekim uobičajenim 16-bitnim vrijednostima boja:
#definiraj CRNO 0x0000
#definiraj PLAVO 0x001F
#definiraj RED 0xF800
#definiraj ZELENO 0x07E0
#definiraj CYAN 0x07FF
#definiraj MAGENTA 0xF81F
#definiraj ŽUTO 0xFFE0
#definiraj BIJELO 0xFFFF
#definiraj SIVO 0x8C51
#definiraj SIVO 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Ako koristite štit, sve kontrolne i podatkovne linije su fiksne, i
// opcionalno se može koristiti jednostavnija deklaracija:
// Adafruit_TFTLCD tft;
uint16_t g_identifikator;

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

void setup (void) {

rtc.begin();

// Za postavljanje vremena uklonite komentare s potrebnih redaka
// rtc.setDOW(6); // Dan u tjednu
// rtc.setTime(22, 04, 0); // Vrijeme, u 24-satnom formatu.
// rtc.setDate(4, 5, 2019); // Datum, 29. listopada 2018

Serijski počet (2000000);
//////// Inicijalizacija zaslona
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(true);
///////////////////Izlaz imena, pribor opreme, naziv organizacije
tft.fillScreen(BLACK);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("RAZVOJI & IZGRADNJA");
tft.setCursor(30, 20);
tft.print (utf8rus("Konstruktor V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
kašnjenje (2000);

radio.begin(); // Pokretanje rada nRF24L01+
radio.setChannel(120); // Navedite kanal za prijem podataka (od 0 do 127)
radio.setDataRate(RF24_250KBPS); // Navedite brzinu prijenosa podataka (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Navedite snagu odašiljača (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Otvaranje 1 cijevi s identifikatorom 1 odašiljača 0xAABBCCDD11 za primanje podataka
// Otvaranje cijevi 2 s ID-om odašiljača 2xAABBCCDD0 za primanje podataka
radio.startListening(); // Uključite prijemnik, počnite slušati otvorene cijevi
// radio.stopListening();
////////Izlaz servisnih informacija
tft.fillScreen(BLACK);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////Počnite inicijalizirati SD karticu
Serial.println("Inicijalna SD kartica");
tft.println("Inicijalna SD kartica");
tft.setCursor(8, 10);
////////Inicijalizacija kartice
if (!SD.begin(SD_CS_PIN)) {
Serial.println("početno nije uspjelo!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(BLACK);
tft.println("Početno nije uspjelo!");
povratak;
}
tft.setTextColor(WHITE);
Serial.println("inicijalizacija obavljena");
tft.println("Inicijalizacija obavljena");
kašnjenje (2000);
////////Čitanje vremena i datuma i njihovo dodjeljivanje varijablama
t = rtc.getTime();
vrijeme_sek_prev = t.sek;
vrijeme_dan_pret = t.datum;
////////Prisilno ispis datuma kako se ne bi čekalo da se datum promijeni za prikaz
tft.setCursor(180, 0); // postavljanje položaja kursora
tft.fillRect(178, 0, 65, 7, SIVO); // brisanje područja vremenskog izlaza
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Izlaz naziva kontrolnih objekata
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Vitla I"));
////////Stvaranje log datoteke i ispisivanje rezultata pokušaja stvaranja
tft.setTextSize(1);
tft.setCursor(130, 10); // ako se kreira log datoteka 2.txt, tada će se pisanje u datoteku nastaviti
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Else {
myFile = SD.open(perv, FILE_WRITE); // ako datoteka 2.txt ne postoji, bit će kreirana
mojaDatoteka.zatvori();
tft.println(perv);
Serial.println(perv);
}
}

void loop (void) {
////////Provjera postojanja zahtjeva za izlaz dnevnika na monitor COM porta
if (Serial.available() > 0) {
if (1 == Serial.read());
////////A ako je prihvaćeno “1”, tada je izlaz
File myFile = SD.open(perv);
// ako je datoteka dostupna, upišite u nju:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
mojaDatoteka.zatvori();
}
inače {
Serial.println("pogreška pri otvaranju .txt");
}
}
////////Vrijeme za čitanje
t = rtc.getTime();
tft.setTextColor(WHITE);
////////Ako se vrijeme promijenilo, prikažite nova očitanja sata
if ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // postavljanje položaja kursora
tft.fillRect(118, 0, 50, 7, SIVO); // brisanje područja vremenskog izlaza
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // izlaz očitanja sata
vrijeme_sek_prev = t.sek;
}
////////Ako se datum promijenio, prikažite novi datum
if ( time_day_prev != t.date) {
tft.setCursor(180, 0); // postavljanje položaja kursora
tft.fillRect(178, 0, 65, 7, SIVO); // brisanje područja prikaza datuma
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // prikaz očitanja datuma
vrijeme_dan_pret = t.datum;
}
////////Ako je radio prijem dostupan, onda
if (radio.available(&pipe)) {
////////provjera je li prijemni međuspremnik pun,
radio.read(&podaci, sizeof(podaci));
////////ako je potrebna adresa odašiljača dostupna, tada
if (cijev == 1) {
////////čeka se sinkronizirajući niz nula za određivanje
//početak bloka podataka
ako (podaci == 0000) {
rc = 0;
} Else {
rc++;
}
////////Snimanje vrijednosti brojača i njihovo izračunavanje u 10. i 100. dijelu sata
if (rc == 1) {
leb_1 = podaci / 3600.0;
}

if (rc == 2) {
leb_2 = podaci / 3600.0;
}

if (rc == 3) {
leb_3 = podaci / 3600.0;
}

if (rc == 4) {
leb_4 = podaci / 3600.0;
}
}
}
r++;
k++; // samo brojač
//////// Ažuriranje podataka s određenom periodičnošću
if ( r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, SIVO);
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;
}
////////Pisanje podataka u zapisnik na SD-u svakih 10 minuta.
if ((t.min % 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(BLACK);
////////Stvaranje niza u .csv formatu
String dataString = String (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
////////Pisanje u datoteku i izlaz rezultata procesa pisanja
myFile = SD.open(perv, FILE_WRITE); // ako ne postoji datoteka pod nazivom “2.txt”, ona će biti kreirana.
if (myFile) {
mojaDatoteka.println(dataString);
mojaDatoteka.zatvori();
tft.fillRect(198, 8, 42, 10, GREEN);
tft.println("SD OK");
Serial.println("SD OK");
kašnjenje (900); // kašnjenje, inače bilježi 13 identičnih očitanja dok ne prođe sekunda
} Else {
tft.fillRect(198, 8, 42, 10, RED);
tft.println("SD GREŠKA");
Serial.println("SD ERR");
}
}
}Program za pretvorbu znakova/* Prekodirajte ruske fontove iz UTF-8 u Windows-1251 */

String utf8rus (izvor niza)
{
int i,k;
String target;
nepotpisani znak n;
char m[2] = { '0', ' ' };

k = izvor.duljina(); i = 0;

dok je (i < k) {
n = izvor [i]; i++;

if (n >= 0xC0) {
prekidač (n) {
case 0xD0: {
n = izvor [i]; i++;
if (n == 0x81) { n = 0xA8; pauza; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
razbiti;
}
case 0xD1: {
n = izvor [i]; i++;
if (n == 0x91) { n = 0xB8; pauza; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
razbiti;
}
}
}
m[0] = n; cilj = cilj + String(m);
}
povratni cilj;
}Program za transkodiranje znakova za ćirilični izlaz pomoću biblioteke Adafruit_GFX nalazi se u istoj mapi s glavnim programom. Također morate zamijeniti datoteku glcdfont.c u Adafruit_GFX drugim fontom. Ovdje knjižnica s potrebnom zamjenom. Više informacija o rusifikaciji možete lako pronaći na Internetu.
Ukratko, reći ću da je sustav opravdao očekivanja, postalo je lakše pratiti vrijeme rada opreme. Iako je sve sastavljeno na matičnim pločama, odmah nema pritužbi na rad. Prvi elementi rade više od šest mjeseci i preživjeli su zimu. Najnoviji dizajn Od 9. ožujka radi za 5 kontroliranih jedinica i službeno se registrira vrijeme rada pomoću njega.

Izvor: www.habr.com

Dodajte komentar