Kezdje ezen az oldalon
Az önindító bekapcsolásával kapcsolatos információk lekérésének legkényelmesebb módja a PC817 optocsatolóval való opció. Sematikus ábrájaA lapok három egyforma áramkört tartalmaznak, minden 100x100 mm-es ABS műanyag dobozban van elhelyezve. Fotó az optocsatolókról Félvezető szelepes indítóeszközökhöz csatlakoztatva a szivárgó áramuk elegendő a PC817 kinyitásához, és a számláló hamisan aktiválódik. Kizárni egy ilyen helyzetet
A fogadó rész készül oldal 1oldal 2ARDUINO MEGA 2560-hoz csatlakoztatott fejlesztőkártya. Ehhez egy kétsoros csatlakozót használnak a végén. Információmegjelenítő eszközként egy 240x400-as felbontású, rezisztív érintőképernyővel és hőmérséklet-érzékelővel rendelkező képernyőt használnak. HX8352B. Ezenkívül a képernyőpanelen lévő ICSP-csatlakozó eltávolításra került, és a micro SD-nyílás nincs használatban. A helyzet az, hogy a „natív” SD-aljzat nem használható az SPI-busz ütközése miatt. A flash kártyához külön kártyaolvasót használtak, ami egy 3,3 V-os stabilizátort és egy puffer chipet tartalmazott három kimeneti állapottal 74LVS125A. Itt várt rám a gereblye. Három állapotú puffer, de vagy az E01-ML01DP5 vagy a kártyaolvasó működött. A könyvtári megjegyzésekben az SdFat figyelmeztetést látott a más eszközökkel való összeférhetetlenségről. A TXS0108E szintváltóját eltávolítottuk és jumperekre cseréltük, mert Az E01-ML01DP5 tolerálja az 5V-os jeleket - ez nem segített. Oszcilloszkóp segítségével jelvesztést észleltek a MISO vonalon, amikor kártyaolvasót csatlakoztattak. Alapos vizsgálat során kiderült, hogy a 4LVS74A OE 125 csatornáinak engedélyező jeleinek bemenetei egyszerűen egy közös vezetékre voltak forrasztva, és szó sem lehetett harmadik állapotról. A puffer chipet primitív szintátalakítóként használták 5 V-ról 3.3 V-ra, 3,3 KΩ-os ellenállásokkal, amelyek sorba kapcsolták a jelvezetékekkel. Kivéve a MISO vonalat. Kimeneti alsó kapcsolója valószínűleg jeleket vonzott a talajszintre. Miután megállapították, hogy a MISO vonal engedélyező jele a 13-as érintkező, leszakadt a pályáról ésforrasztotta 9LVS74A CS eszköz kiválasztása bemeneti érintkező (125) és a lezáró ellenállás között. Most, ha nincs hozzáférés a memóriakártyához, a MISO puffer le van tiltva, és nem zavarja egy másik eszköz működését.Fejlesztési tábla diagramVevő üzembenA DS3231 szoftveres I2C buszt (TWI) használ az óra csatlakoztatásához.
Arduino IDE program// FONTOS: Az Adafruit_TFTLCD KÖNYVTÁR KONKRÉTAN KELL
// VAGY A TFT PAJZSHOZ, VAGY A KITÖRŐTÁBLÁHOZ KONFIGURÁLVA.
// A BEÁLLÍTÁSHOZ TEKINTSE MEG A VONATKOZÓ MEGJEGYZÉSEKET: Adafruit_TFTLCD.h.
//az Open-Smart Team és a Catalex Team által
//[e-mail védett]
//Bolt:
//
//Demo funkció: Grafika, karakterek megjelenítése
//Arduino IDE: 1.6.5
// Tábla: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo
// Tábla: OPEN-SMART UNO R3 5V / 3.3V, Arduino UNO R3, Arduino Mega2560
//3.2 hüvelykes TFT:
//
//OPEN-SMART UNO R3 5V / 3.3V:
//
#beleértve // Grafikus alapkönyvtár
//#include // Hardver-specifikus könyvtár
#beleértve
MCUFRIEND_kbv tft;
#include "SdFat.h" // Az SdFat könyvtár használata
SdFat SD;
SdFile fájl;
Fájl myFile;
#define SD_CS_PIN SS
#beleértve // Csatlakoztassa a könyvtárat az SPI busszal való működéshez
#beleértve // Csatlakoztassa a beállításfájlt az RF24 könyvtárból
#beleértve // Csatlakoztassa a könyvtárat az nRF24L24+ használatához
RF24 rádió(47, 49);
#beleértve
DS3231 rtc(27, 25);
Idő t;
uint16_t r = 6000;
uint32_t k = 0;
illékony, előjel nélküli hosszú adatok;
úszó leb_1;
úszó leb_2;
úszó leb_3;
úszó leb_4;
uint8_t cső;
int rc = 0;
uint8_t time_sec_prev;
uint8_t time_day_prev;
//**************************************************** ****************/ /
// Ha OPEN-SMART TFT breakout boardot használ //
// Javasoljuk, hogy adjon hozzá 5V-3.3V szintátalakító áramkört.
// Természetesen használhatod az OPEN-SMART UNO Black verziót 5V/3.3V tápkapcsolóval,
// csak át kell kapcsolni 3.3V-ra.
// Az LCD vezérlőtüskéi bármilyen digitális ill
// analóg lábak...de az analóg lábakat fogjuk használni, mivel ez lehetővé teszi számunkra
//—————————————-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO fekete
// 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
// Ember által olvasható nevek hozzárendelése néhány gyakori 16 bites színértékhez:
#define FEKETE 0x0000
#define KÉK 0x001F
#define RED 0xF800
#define ZÖLD 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define SÁRGA 0xFFE0
#define FEHÉR 0xFFFF
#define GREY 0x8C51
#define GRAYD 0x39E7
//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// A pajzs használatakor minden vezérlő és adatvonal rögzített, és
// opcionálisan egyszerűbb deklaráció is használható:
// Adafruit_TFTLCD tft;
uint16_t g_identifier;
String dataString;
//String numfileMonth = "1.txt";
char perv [] = {"2.txt"};
//String *numfileMonth="1.txt" (sizeof (numfileMonth));
//////////////////////////////////////////////////// /////////////////
void setup (void) {
rtc.begin();
// Az idő beállításához törölje a megjegyzéseket a szükséges sorokból
// rtc.setDOW(6); // A hét napja
// rtc.setTime(22, 04, 0); // Idő, 24 órás formátumban.
// rtc.setDate(4, 5, 2019); // Dátum, 29. október 2018
Serial.begin (2000000);
//////// Képernyő inicializálása
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(true);
//////////////////Nevek, berendezések tartozékai, szervezet neve
tft.fillScreen(FEKETE);
tft.setTextColor(FEHÉR);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("FEJLESZTŐK ÉS ÉPÍTÉS");
tft.setCursor(30, 20);
tft.print (utf8rus("Constructor V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
késleltetés (2000);
rádió.begin(); // Munka megkezdése nRF24L01+
radio.setChannel(120); // Adja meg az adatvételi csatornát (0 és 127 között)
radio.setDataRate(RF24_250KBPS); // Adja meg az adatátviteli sebességet (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Adja meg az adó teljesítményét (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Nyisson meg 1 csövet 1 0xAABBCCDD11 adó azonosítójával az adatok fogadásához
// Nyissa meg a 2. csövet 2xAABBCCDD0 adóazonosítóval az adatok fogadásához
radio.startListening(); // Kapcsolja be a vevőt, kezdje el hallgatni a nyitott csöveket
// radio.stopListening();
////////Szolgáltatási információk kimenete
tft.fillScreen(FEKETE);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////Kezdje el az SD-kártya inicializálását
Serial.println("Kezdeti SD-kártya");
tft.println("Kezdeti SD-kártya");
tft.setCursor(8, 10);
////////A kártya inicializálása
if (!SD.begin(SD_CS_PIN)) {
Serial.println("kezdeti sikertelen!");
tft.fillRect(8, 10, 85, 7, PIROS);
tft.setTextColor(FEKETE);
tft.println("Kezdet sikertelen!");
vissza;
}
tft.setTextColor(FEHÉR);
Serial.println("inicializálás kész");
tft.println("Inicializálás kész");
késleltetés (2000);
////////Idő és dátum beolvasása és hozzárendelése változókhoz
t = rtc.getTime();
time_sec_prev = t.sec;
idő_nap_előző = t.dátum;
////////Kényszerítette a dátumot, hogy ne várja meg a dátum változását a megjelenítéshez
tft.setCursor(180, 0); // a kurzor pozíciójának beállítása
tft.fillRect(178, 0, 65, 7, GREY); // az időkimeneti terület törlése
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Kiírja a vezérlőobjektumok nevét
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Csörlők I"));
////////Naplófájl létrehozása és a létrehozási kísérlet eredményének kiadása
tft.setTextSize(1);
tft.setCursor(130, 10); // ha létrejön a 2.txt naplófájl, akkor folytatódik az írás a fájlba
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Else {
myFile = SD.open(perv, FÁJL_ÍRÁS); // ha a 2.txt fájl nem létezik, akkor létrejön
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}
void loop (void) {
////////A COM port figyelőhöz való napló kiadására irányuló kérelem meglétének ellenőrzése
if (Serial.available() > 0) {
if (1 == Serial.read());
////////És ha az „1” elfogadásra kerül, akkor a kimenet
Fájl myFile = SD.open(perv);
// ha elérhető a fájl, írd rá:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
Serial.println("hiba a .txt megnyitásakor");
}
}
////////Olvasási idő
t = rtc.getTime();
tft.setTextColor(FEHÉR);
////////Ha az idő megváltozott, akkor jelenítse meg az új óra állását
if ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // a kurzor pozíciójának beállítása
tft.fillRect(118, 0, 50, 7, GREY); // az időkimeneti terület törlése
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // kimeneti órajelek
time_sec_prev = t.sec;
}
////////Ha a dátum megváltozott, akkor jelenítse meg az új dátumot
if ( idő_nap_előző != t.dátum) {
tft.setCursor(180, 0); // a kurzor pozíciójának beállítása
tft.fillRect(178, 0, 65, 7, GREY); // dátum megjelenítési terület törlése
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // dátumleolvasások megjelenítése
idő_nap_előző = t.dátum;
}
////////Ha elérhető rádióvétel, akkor
if (radio.available(&pipe)) {
////////ellenőrzi, hogy a vételi puffer megtelt-e,
radio.read(&data, sizeof(data));
////////ha rendelkezésre áll a szükséges adócím, akkor
if (pipe == 1) {
////////várakozik a nullák szinkronizáló sorozatára a meghatározásához
//adatblokk eleje
if (adat == 0000) {
rc = 0;
} Else {
rc++;
}
////////Számláló értékek rögzítése és kiszámítása az óra 10. és 100. részében
if (rc == 1) {
leb_1 = adat / 3600.0;
}
if (rc == 2) {
leb_2 = adat / 3600.0;
}
if (rc == 3) {
leb_3 = adat / 3600.0;
}
if (rc == 4) {
leb_4 = adat / 3600.0;
}
}
}
r++;
k++; // csak egy számláló
//////// Adatfrissítés bizonyos gyakorisággal
if ( r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, SZÜRKE);
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;
}
////////Adatok írása a naplóba SD-n 10 percenként.
if ((t.min % 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(FEKETE);
////////Karakterlánc létrehozása .csv formátumban
String dataString = Karakterlánc (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
////////Írjon egy fájlba, és adja ki az írási folyamat eredményeit
myFile = SD.open(perv, FÁJL_ÍRÁS); // ha nincs „2.txt” nevű fájl, akkor az létrejön.
if (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, ZÖLD);
tft.println("SD OK");
Serial.println("SD OK");
késleltetés (900); // késleltetés, egyébként 13 azonos leolvasást rögzít, amíg el nem telik egy másodperc
} Else {
tft.fillRect(198, 8, 42, 10, PIROS);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}Karakter konvertáló program/* Orosz betűtípusok átkódolása UTF-8-ról Windows-1251-re */
Karakterlánc utf8rus (karakterlánc forrása)
{
int i,k;
String target;
előjel nélküli char n;
char m[2] = { '0', ' ' };
k = forrás.length(); i = 0;
míg (i < k) {
n = forrás[i]; i++;
if (n >= 0xC0) {
kapcsoló (n) {
eset 0xD0: {
n = forrás[i]; i++;
if (n == 0x81) { n = 0xA8; szünet; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
break;
}
eset 0xD1: {
n = forrás[i]; i++;
if (n == 0x91) { n = 0xB8; szünet; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
break;
}
}
}
m[0] = n; cél = cél + Karakterlánc(m);
}
visszatérési cél;
}Az Adafruit_GFX könyvtárat használó cirill kimenet karakterátkódoló programja ugyanabba a mappába kerül a főprogrammal. Ezenkívül le kell cserélnie a glcdfont.c fájlt az Adafruit_GFX-ben egy másik betűtípusra.
Összefoglalva elmondom, hogy a rendszer beváltotta a hozzá fűzött reményeket, könnyebbé vált a berendezések üzemidejének nyomon követése. Annak ellenére, hogy mindent kenyérsütőre szerelnek össze, a munkára nincs azonnali panasz. Az első elemek több mint hat hónapja működnek, és túlélték a telet.
Forrás: will.com