Lokal autonom Datesammlungssystem

D'Firma huet NEKST-M Iwwerwaachungsposte kaaft, déi domestizéiert vun Next Technologies produzéiert ginn. Fir d'Visualiséierung vun der Operatioun vun de Pompel Eenheeten ze garantéieren,
Feier- a Sécherheetsalarm, Spannungspräsenz bei Starter, Raumtemperatur, Noutwaasserniveau. D'Häerz vun NEKST-M ass ATMEGA 1280 an dës Tatsaach ass encouragéiert wat d'Méiglechkeet ass Ären eegene Kit fir spezifesch Besoinen ze kreéieren.

D'Aufgab gouf opgestallt fir e komplett autonome lokale Verschéckensystem fir spezifesch Besoinen an der kuerst méiglecher Zäit a mat minimale Käschten ze kreéieren. D'Basis ass e Mikrokontroller. Entwécklung, Fabrikatioun, erstallt vum Personal selwer.

De System muss ouni Ofhängegkeet vu Cellular Netzwierker, Serveren, Internet an de Lizenzsystem fir d'Benotzung vu Radiofrequenzressourcen operéieren, keng Computeren an der Operatioun vum Iwwerwaachungs- a Kontrollsystem benotzen oder héchstens periodesch Laptops benotzen, ouni Zougang zu Objete fir eng laang Zäit (6-9 Méint). D'Netzkonfiguratioun huet eng radial Struktur. D'Donnéeë ginn op engem Punkt gesammelt an duerno fir d'Veraarbechtung iwwer regelméisseg Kommunikatiounskanäl oder als Hardcopy geschéckt.

De System muss ubidden:

  • Iwwerwachung vun der Operatioun vun Pompel Unitéiten
  • technologesch Automatisatioun
  • Schutz vun de Konsequenze vun Noutfall Konditiounen
  • Noutfall Signalisatioun
  • Operatioun Zäit Berechnung
  • d'Berechnung vun der Quantitéit vum Stroum verbraucht
  • Equipement Temperatur Kontroll
  • Sécherheet a Feier Alarm
  • periodesch Fernopname vun Informatioun
  • onbekannt Zukunft Ufuerderunge

Aarbechtskonditiounen:

  • Ofdeckung Beräich 1 sq km.
  • direkt Visibilitéit tëscht Objeten
  • Temperatur vun +50 bis -50 C
  • Fiichtegkeet bis zu 100%
  • biologesch aktiv Oflagerungen (Schimmel, Sulfat-reduzéierter Bakterien)
  • Schwéngung, net méi, vu Maschinnen vun de Klassen 1-2 no GOST ISO 10816-1-97
  • elektromagnetesch Ëmfeld - Schaltung vun Elektromotoren mat KT 6053 Kontaktoren, RVS-DN Softstart Ausrüstung, SIEMENS MICROMASTER PID Kontrollausrüstung, Stralung am ISM- a GSM-Bereich no den Ufuerderunge fir dës Apparater, manuell Bogenschweißen op der Plaz
  • exzessiv Netzspannung, kuerzfristeg Ënnerbriechungen an der Energieversuergung, Blitz-Iwwerspannungen, Phase-Ongläichgewiicht wann en Overhead-Draad an 6-10 kV Verdeelungsnetzwierker brécht.

Trotz esou streng Ufuerderunge ass d'Ëmsetzung ganz einfach wann Dir de Problem Schrëtt fir Schrëtt léist.

Wann Dir alles berücksichtegt, gouf den "Arduino Nano 3.0" Board de "Gehir" vum Plang. De Robotdyn Board huet en ATMEGA 328 Controller, déi néideg 3,3V Spannungsstabilisator fir
aktuell 800 mA an Converter ze CH340G UART-USB.

Fir d’éischt goufen d’Operatiounszäitteller als déi aktuellsten erstallt. Virdrun benotzt industriell Meter op PICs versammelt mat engem transformerless Stroumversuergung Circuit gescheitert wéinst Spannung surges bannent engem Joer vun Operatioun. Nëmmen déi verbonne mat hausgemaachte 5V Stroumversuergung bliwwen intakt. Fir d'Installatioun an d'Vielfalt vun der Verbindung ze beschleunegen, gëtt e Signal iwwer den Zoustand vun den Unitéiten vun den Klemmen vun de Schaltgeräter geholl, d.h. Aschreiwung vun der Präsenz vun der 1. Phase Spannung mat enger Dräi-Phas Energieversuergung vun 380V. Fir mat dem Controller ze koordinéieren, gëtt en Zwëschenrelais mat enger 220V Wicklung oder engem Optocoupler aus enger LED an engem GL5516 Photoresistor oder engem PC817 Optocoupler benotzt. All Optiounen goufen getest. D'LED gëtt vun enger rectifizéierter Spannung mat Stroumbegrenzung ugedriwwen mat zwee SVV22 Kondensatoren entworf fir eng Spannung vu 630V an Serie verbonne fir Sécherheet während zoufälleg Tester vun de Circuiten mat engem Megaohmmeter.
Liesen Operatiounszäitmessungen mam ST7735S LCD Bildschierm, Echtzäit Dateniwwerdroung iwwer Radio mam E01-ML01DP05 Modul mat enger Frequenz vun 2,4 MHz. Dësen Apparat enthält den nRF24L01+ Chip an den RFX2401C Send-/Empfangverstärker,
Ausgangsleistung bis 100 mW. Helical Antennen entworf fir de gewënschte Beräich am Online Rechner Site. D'Wiel vun der Antennetyp gëtt bestëmmt duerch d'Ausgrenzung vum Empfang vun eenzel reflektéierte Wellen aus Ëmgéigend Metallstrukturen. Antennedeeler ginn op engem 3D Drécker gedréckt. Den aktuellen Zoustand vun de Konter gëtt am EEPROM vum Controller selwer gespäichert a gëtt am Fall vun engem onerwaarten Stroumausfall restauréiert. Zäitintervaller fir ze zielen gi vum RTC-Chip DS3231 a Form vun engem Modul mat enger Backupbatterie geliwwert. D'Energieversuergung benotzt 3 Moduler, déi tatsächlech Pulsquell 220/5V HLK-PM01 600mA, e Konverter vun 1-5V op 5V HW-553 Fotoen и 03962A - Batterie Controller mat Schema Schutz géint kuerz Circuit, overdischarge an overcharge. All Komponente goufen op der Aliexpress Websäit kaaft.

Brout VerwaltungsrotLokal autonom Datesammlungssystem
4-Kanal Konter. Et gi LC Filtere bei den Inputen fir géint Stéierungen iwwer eng verdréint Pair Kommunikatiounslinn ze schützen. D'Donnéeën iwwer den Zoustand vun de Kontrollobjekter ginn dauernd eemol pro Sekonn gelies an a Faarf um LCD ugewisen. D'Liesunge ginn all 1 Sekonnen aktualiséiert an an net-flüchtlech Erënnerung opgeholl. 36 Sekonnen ass 36/1 vun enger Stonn, dëst ass de Format an deem d'Donnéeën erfuerderlech sinn. All 100 Sekonnen. Informatiounen iwwer d'Zuel vun de Sekonnen vun Operatioun fir all Kontroll Eenheet iwwerdroen. EEPROM Erënnerung huet eng limitéiert Zuel vu Schreiwen-läschen Zyklen, laut den Hiersteller, 12 Mol. Déi schlëmmste Optioun ass wann op d'mannst eng Zell dauernd aktualiséiert gëtt. De Volume vum 100000. Konter ass 1 Bytes, dëst ass eng laang Formatzuel, 4 Teller, insgesamt 4 Bytes ass vun engem Rekord besat. D'Längt vun der Erënnerung vum Chip ass 16 Bytes; No 1024 Entréen vu 64 Konter fänkt d'Opnahm erëm un. An der EEPROM Bibliothéik schreift d'EEPROM.put Method net; Wann de Wäert vun der Zell an d'Informatioun déi geschriwwe gëtt entsprécht, gëtt et keng Degradatioun vun den Zellen. Als Resultat wäert déi garantéiert Erënnerung Operatiounszäit méi wéi 4 Joer sinn. D'Zäit vu méiglecher awer net garantéierter Aarbecht ka vill méi laang sinn.

Circuit DiagrammLokal autonom Datesammlungssystem
Programm an Arduino IDE//12 Bytes (328%)

# enthalen // Kär Grafiken Bibliothéik
#include // Hardware-spezifesch Bibliothéik
# abegraff
#include
# abegraff
# enthalen
#include
RF24 Radio (9, 10); // Radioobjekt fir mat der RF24 Bibliothéik ze schaffen,
// an Pinnummeren nRF24L01+ (CE, CSN)
# enthalen
DS3231 rtc(SDA, SCL);
Zeit t;

//#definéieren TFT_CS 10
#definéieren TFT_CS 8
#define TFT_RST -1 // Dir kënnt dëst och un den Arduino Reset verbannen
// an deem Fall, setze dëse #definéieren Pin op -1!
//#define TFT_DC 9 // DC=RS=A0 - Bezeechnungsoptioune fir e Kommando oder Datenregister ze wielen.
#definéieren TFT_DC 3

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

// Optioun 2: benotzt all Pins awer e bësse méi lues!
#define TFT_SCLK 13 // setzen dës op wéi eng Pins Dir wëllt!
#define TFT_MOSI 11 // setzen dës op wéi eng Pins Dir wëllt!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
# enthalen

Byte Verréckelung = 52;
byte pinState;
onënnerschriwwe laang Pompel [4];// Array mat 4 Sekonnen Konter Wäerter
float m = 3600.0;
net ënnerschriwwen int Adress = 0;
int rc;// Variabel fir Konter
net ënnerschriwwen laang sumprim = 0;
net ënnerschriwwen laang sumsec = 0;
byte i = 0;
byte k = 34;
unsigned int z = 0;
byte b = B00000001;
byte pumrcounter[4]; // Array fir Objektzoustand ze späicheren, 1 - aus, 0 - op.
int start = 0; //

Void Setup () {

rtc.begin();
radio.begin(); // Initiate Aarbecht nRF24L01+
radio.setChannel(120); // Daten Kanal (vun 0 ze 127).
radio.setDataRate(RF24_250KBPS); // Datenübertragungsrate (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // Sender Muecht (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Open eng Päif mat engem Identifizéierer fir Daten Transfert

// Fir d'Zäit ze setzen, decommentéieren déi néideg Zeilen
//rtc.setDOW(1); // Dag vun der Woch
//rtc.setTime(21, 20, 0); // Zäit, am 24 Stonn Format.
//rtc.setDate(29, 10, 2018); // Datum, 29. Oktober 2018

tft.initR(INITR_BLACKTAB); // initialize engem ST7735S Chip, schwaarz Reiter
// Benotzt dësen Initialisator (net kommentéieren) wann Dir en 1.44" TFT benotzt
//tft.initR(INITR_144GREENTAB); // initialize engem ST7735S Chip, RED rcB Tab
tft.setTextWrap(falsch); // Erlaabt den Text vum rietse Rand ze lafen
tft.setRotation(2); // fir BLACK PCB an RED tft.setRotation (0) oder net.
tft.fillScreen(ST7735_BLACK); // kloer Écran

DDRD = DDRD | B00000000;
PORTD = PORTD | B11110000; // Software Spannung funktionnéiert, héich Niveau -
// kontrolléiert Objete "schaffen net", "4" gëtt op all 1 Senior Häfen D geschriwwen, keng zielen geschitt.

fir (rc = 0; rc < 4; rc++)
{
tft.setCursor (3, rc * 10 + Verréckelung); // ugewisen Positioun Zuelen Kontroll Objete
tft.print(rc + 1);
}

tft.setCursor(12, 0); // Ausgab 3 Zeilen Text
tft.println("DEVELOPERS & BUILD"); // selwer Léifsten ze luewen
tft.setCursor(24, 10); // oder béis Copyright
tft.print("DEVELOPER M.M.");
tft.setCursor(28, 20);
tft.print("BUILD-ER D.D.");

//Daten Erhuelung/////////////////////////////////////////// //////////

fir (z = 0; z < 1023; z += 16) {// Iteréiert duerch all Zellen vun der Industrie
// a schreift op eng Rei vun 4 Pompel Verännerlechen, 4 Bytes fir all Konter, well
// onënnerschriwwe laang Variabel. Et gi 4 Konter, ee Rekord vun all 4 hëlt 16 Bytes.
EEPROM.get(z, pump[0]); // also, ouni de for Loop, manner Volumen
EEPROM.get(z+4, pump[1]);
EEPROM.get(z+8, pump[2]);
EEPROM.get(z+12, pump[3]);

// eng nei nächst Wäert fir d'Zomm vun 4 Konter zougewisen
sumprim = (Pompel [0] + Pompel [1] + Pompel [2] + Pompel [3]);

// vergläicht den neie Wäert vun der Zomm vu 4 Konter an der Sumprim Variabel mam fréiere Wäert an der Variabel
// sumsec a wann déi viregt Zomm manner wéi oder gläich wéi déi nei Zomm ass, gëtt déi nei méi grouss oder gläich zougewisen
// sumsec Wäert.

if (sumsec <= sumprim) {
sumsec = sumprim; //

// an den aktuelle Wäert z gëtt der Adressvariabel zougewisen, z ass d'Adress vum Ufank vun engem 16-Byte Block vu 4 Wäerter
// Zähler gläichzäiteg opgeholl (zënter beim Ëmfroen vun engem Hafen, ginn all 8 Bits dovunner gläichzäiteg geschriwwe,
// dorënner eis néideg héich 4 Bits vun port D).
Adress = z;
}
}

// nach eng Kéier Zougang zum eeprom Memory op der Adress vum Ufank vun engem Block vu 16 Bytes vu 4 opgeholle Konterwäerter
// lescht, d.h. Wäerter virum Ausschalten oder Neistart wéinst Afréiere. Recording déi lescht
// Konter Wäerter an eng Array vu 4 Variabelen Pompel.

EEPROM.get(Adress, Pompel[0]);
EEPROM.get(Adress + 4, Pompel[1]);
EEPROM.get(Adress + 8, Pompel[2]);
EEPROM.get(Adress + 12, Pompel[3]);

Adress += 16; // d'Erhéijung vun der Adress fir den nächste Block ze schreiwen ouni d'Donnéeë vum leschte Rekord ze iwwerschreiwe

//Enn vun Daten Erhuelung ////////////////////////////////////////// ////////////////

attachInterrupt(0, zielen, RISING); // PIN D2, aktivéiert Ënnerbriechungen, kommen all zweet
// Impulser aus RTC DS3231 aus SQW Ausgang

wdt_enable(WDTO_8S); // Start de Watchdog Timer, restart de Controller am Fall vun Afréiere, Zäit,
// fir déi Dir den Timer Reset Kommando ausginn wdt_reset (a vermeide Restart während normal Operatioun - 8 sec.
// fir Tester ass et net recommandéiert de Wäert op manner wéi 8 Sekonnen ze setzen, an dësem Fall gëtt den Timer am léifsten zréckgesat
// jerking, an et geschitt all zweet.

}

eidel Schlëff () {
// eidel Zyklus, hei gëtt et Kontroll iwwer d'Open-Phase Operatioun vum Elektromotor
}

void count() {

tft.setTextColor(ST7735_WHITE); // d'Schrëftfaarf setzen
t = rtc.getTime(); // liesen Zäit
tft.setCursor(5, 120); // d'Cursorpositioun setzen
tft.fillRect(5, 120, 50, 7, ST7735_BLACK); // d'Zäitausgangsberäich läschen
tft.print(rtc.getTimeStr()); // Ausgang Auer Liesungen

wdt_reset(); // Reset der Iwwerwaachung all Zyklus, dh zweet

fir (rc = 0; rc <4; rc ++) // Ufank vum Zyklus fir d'Konformitéit vum Inputzoustand ze kontrolléieren
// port Bits zu der viregter liesen Staat vun port D Bits
{
pinState = (PIND >> 4) & (b << rc);

wann (pumrcounter [rc] != pinState) {// a wann et net passt, dann
pumrcounter[rc] = pinState; // der port Bit Status Variabel en neie Wäert zougewisen 1/0
}
// Indikatioun vum Zoustand vun Faarf Kontroll Objete
// BLUE ass e klenge Feeler vum existente Bildschierm (oder Bibliothéik?), RGB a BGR si vermëscht.
if (pinState == (b << rc)) {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_BLUE); // fir niddereg Niveau zielen änneren GREEN ze BLOU
} {Aanescht
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_GREEN); // fir niddereg Niveau zielen änneren BLOU op GREEN
Pompel [rc] += 1; // derbäi 1 Sekonn op d'Betribszäitzähler
}
}

k++;
wann (k == 36) {
k = 0;

tft.fillRect(30, shift, 97, 40, ST7735_BLACK); // d'Operatiounszäit Displayberäich läschen
tft.fillRect(60, 120, 73, 7, ST7735_BLACK); // an daten

tft.setCursor(60, 120); // d'Cursorpositioun setzen
tft.print(rtc.getDateStr()); // weist den Datum um LCD Écran

fir (rc = 0; rc < 4; rc ++) //output Operatiounsstonnen insgesamt, Zéngtel an
{
tft.setCursor (30, rc * 10 + Verréckelung); // Honnertstel vun enger Stonn mat engem Bildschierm ëm 10 Pixel erof
tft.println(pumpe [rc] / m);
}

// Schreiwen "raw" Operatiounsstonnen Wäerter (a Sekonnen) op EEPROM ///////////////////////////////////////////////

fir (rc = 0; rc < 4; rc++)
{
EEPROM.put(Adress, Pompel [rc]);
Adress += sizeof(float); // d'Schreifadressvariabel erhéijen
}
}

// schéckt Daten iwwer de Radiokanal vun Daten, déi uginn wéivill Bytes geschéckt solle ginn.
wann ((k == 6) || (k == 18) || (k == 30)) {

net ënnerschriwwen laang Daten;

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

fir (i = 0; i < 4; i++) {
daten = Pompel [i];
radio.write(&data, sizeof(daten));
}
}
}

E puer Notizen zum Schluss. Zielen geschitt op engem nidderegen logesche Niveau bei den Inputen.

Pull-up Resistenz R2-R5 sinn 36 kOhm fir d'Optioun mat photoresistors GL5516. Am Fall vun engem Phototransistor Optocoupler a Relais, op 4,7-5,1 kOhm gesat. Den Arduino Nano v3.0 Bootloader gouf mam Arduino Uno ersat mam TL866A Programméierer fir déi korrekt Operatioun vum Watchdog Timer. D'Sicherungen sinn korrigéiert fir op Spannungen iwwer 4,3 V ze bedreiwen. Den externen Reset-Circuit R6 C3 gouf net benotzt. Am Probeprogramm entsprécht d'Senderfrequenz net dem onlizenzéierte Beräich; den 2,4 MHz-Bereich ass limitéiert op Frequenzen 2400.0-2483.5 MHz.

D'Gamme vum E01-ML01DP05 Sender ass 2400-2525 MHz. D'Bandbreedung vun engem Kanal ass 1 MHz, wann Dir d'Geschwindegkeet als "RF24_2MBPS" setzt de spezifizéierte radio.setChannel(120) Kanal an deen nächste gëtt besat, d.h. d'Band wäert 2 MHz sinn.

Source: will.com

Setzt e Commentaire