Arduino kijelző 8x8 csatlakozási rajz.

Mátrix kijelző - egy 8x8 LED-es mátrixból és egy MAX7219 chipen alapuló vezérlőpanelből álló eszköz a minimálisan szükséges csővezetékekkel. A fotón már látszik a kész készülék, de ebben a formában postán érkezett hozzám, így muszáj volt elővennem egy forrasztópákát és mindent a megfelelő módon forrasztani.

Az Arduino Nano kártyához való alapvető csatlakozás a kapcsolási rajzon látható.

Amint az ábrán látható, minden egyszerű, csak csatlakoztatnia kell mindkét tábla érintkezőit vezetékekkel a következő sorrendben:

Arduino NanoMátrix 8x8
PIN 12PIN DIN
PIN 11PIN CLK
PIN 10PIN CS
PIN 5VPIN 5V
PIN GNDPIN GND

Tehát végre itt az ideje dolgozni a kóddal, és a LED-mátrix futtatásához le kell töltenie és telepítenie kell a LedControl könyvtárat. A könyvtár támogatja a MAXIM 7221 és 7219 mikroáramköröket, a LED mátrix a MAX7219-et használja meghajtóként, erre van szükségünk. Szerintem kezdjük egy kis vázlattal, amely bemutatja ennek a könyvtárnak az alapvető funkcióit. A vázlatban a setRow() függvény a LED-ek be- és kikapcsolására szolgál. A setRow() függvény meghívásának szintaxisa a következő:

matrix.setRow(0, sor, col, halmaz);

Ahol mátrix- osztály objektum LedControl

0 - az eszköz címe az SPI buszon, ebben az esetben csak egy eszköz van, és a számozás a nulla címről kezdődik

sor- sor (lehetséges értékek 0 és 7 között)

col- oszlop (lehetséges értékek 0 és 7 között)

készlet- beállítási érték ( igaz- bekapcsolni, hamis- kikapcsol)

matrix.setRow(0; 1; 4; igaz)

Kapcsolja be a LED-et a mátrixon, amely az 1. sorban és a 4. oszlopban található.

Egy másik példa:

int x = 1;

int y = 4;

matrix.setRow(0, x, y, igaz);

matrix.setRow(0, x, y, false);

Ugyanez csak a változók használatával, majd a világító LED adott koordinátákon történő kikapcsolásával. Tehát a vázlatban számos animációt játszanak le a setRow () funkció segítségével.

#include "LedControl.h" //A LedControl osztály létrehozásának szintaxisa (dataPin,clockPin,csPin,numDevices) //Ahol a LedControl az osztály egyik objektuma //dataPin az Arduino kártya tűje, amelyhez a DIN érintkező be connect //clockPin az a tű az Arduino kártyán, amelyhez a CLK érintkező csatlakozik //csPin - az Arduino kártya tűje, amelyhez a CS érintkező csatlakozik //numDevices - a buszon lévő eszközök száma / /Egy csatlakoztatott eszközzel esetünkben a mátrix osztály objektumának létrehozása LedControl mátrix = LedControl(12, 11 , 10, 1); //Késleltetési idő a LED be-/kikapcsolásához a mátrixon const int delayValue = 100; //Funkció prototípusok //Sekvenciális be/ki void PointSerialSet(); //Kígyó jobbról balra void PointRigthToLeft(); //Kígyó alulról felfelé void PointDownToUp(); //Kígyó balról jobbra void PointLeftToRigth(); //Kígyó fentről lefelé void PointUpToDown(); //Effektus - fading impulzus void PointFading(); //Effektus - impulzus void PointPulse(); //Effektus - növekvő impulzus void PointClimbing(); //A spirál megcsavarásának hatása void belsejében PointToSpiralIn(); //A spirál kifelé forgatásának hatása void PointToSpiralOut(); void setup() ( // Eszköz 0 címmel wake up alapértelmezés szerint matrix.shutdown(0, false); //A Led mátrix fényerejének beállítása 8-ra //A lehetséges értékek 0 és 15 között vannak matrix.setIntensity( 0, 8) ; //Clear display matrix.clearDisplay(0); ) void loop() ( //A függvények egyenkénti hívása PointSerialSet(); PointRigthToLeft(); PointDownToUp(); PointLeftToRigth(); PointUpToDown(); PointFading (); PointPulse() ; PointClimbing(); PointToSpiralIn(); PointToSpiralOut(); ) //Funkciótestek void PointSerialSet() ( //A setLed(cím, sor, col, set) függvény használata //Szekvenciális bekapcsolás sorok for(int i = 0; i< 8; i ++) { for(int j = 0; j < 8; j ++) { //Включить светодиод matrix.setLed(0, i, j, true); delay(delayValue); //Выключить светодиод matrix.setLed(0, i, j, false); } } } void PointRigthToLeft() { //Используем функцию setLed(address, row, col, set) //Змейка справа - налево for(int i = 7; i >= 0; i --) ( for(int j = 7, n = 0; j >= 0, n< 8; j --, n ++) { if((i % 2) >0) ( matrix.setLed(0, j, i, true); késleltetés(késleltetési érték); matrix.setLed(0, j, i, false); ) else ( matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); ) ) ) ) void PointDownToUp() ( //Használja a setLed(cím, sor, col, set) függvényt //Snake alulról felfelé (int i = 7; i >= 0; i --) ( for(int j = 7, n = 0; j >= 0, n< 8; j --, n ++) { if((i % 2) >0) ( matrix.setLed(0, i, n, true); delay(delayValue); matrix.setLed(0, i, n, false); ) else ( matrix.setLed(0, i, j, true); delay(delayValue); matrix.setLed(0, i, j, false); ) ) ) ) void PointLeftToRigth() ( //Használja a setLed(address, row, col, set) függvényt //Kígyó balról jobbra (int i = 0 i< 8; i ++) { for(int j = 7, n = 0; j >= 0, n< 8; j --, n ++) { if((i % 2) >0) ( matrix.setLed(0, j, i, true); késleltetés(késleltetési érték); matrix.setLed(0, j, i, false); ) else ( matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); ) ) ) ) void PointUpToDown() ( //Használja a setLed(cím, sor, col, set) függvényt //Snake fentről lefelé (int i = 0 i< 8; i ++) { for(int j = 7, n = 0; j >= 0, n< 8; j --, n ++) { if((i % 2) >0) ( matrix.setLed(0, i, n, true); delay(delayValue); matrix.setLed(0, i, n, false); ) else ( matrix.setLed(0, i, j, true); delay(delayValue); matrix.setLed(0, i, j, false); ) ) ) ) void PointFading() ( //Használja a setLed(cím, sor, col, set) függvényt //Fading hatás int upValue = 0 ; int downValue = 7; for(int i = 0; i< 8; i ++) { if(i % 2) { for(int n = downValue; n >= upValue; n --) ( matrix.setLed(0, n, i, true); késleltetés(késleltetési érték); matrix.setLed(0, n, i, false); ) downValue --; ) else ( for(int j = upValue; j< downValue + 1; j ++) { matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); } upValue ++; } } } void PointClimbing() { //Используем функцию setLed(address, row, col, set) //Эффект затухания int upValue = 4; int downValue = 4; for(int i = 0; i < 8; i ++) { if(i % 2) { for(int n = downValue; n >= upValue; n --) ( matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); ) downValue ++; ) else ( for(int j = upValue; j< downValue + 1; j ++) { matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); } upValue --; } } } void PointPulse() { //Используем функцию setLed(address, row, col, set) //Эффект пульса for(int i = 0; i < 8; i ++) { if(i == 4) { for(int climb = i; climb >= 0; mászás --) ( matrix.setLed(0, emelkedés, i, igaz); delay(delayValue / 4); matrix.setLed(0, emelkedés, i, false); ) for(int fade = 1; fade< 8; fade ++) { matrix.setLed(0, fade, i, true); delay(delayValue / 4); matrix.setLed(0, fade, i, false); } } else { matrix.setLed(0, 4, i, true); delay(delayValue); matrix.setLed(0, 4, i, false); } } } void PointToSpiralIn() { //Используем функцию setLed(address, row, col, set) //Эффект спирали внутрь int lengthX = 8; // Ширина матрицы int lengthY = 8; // Высота матрицы int pointX = 0; int pointY = 0; int dir = 0; // Направление (0 - вправо, 1 - вниз, 2 - влево, 3 - вверх) int offset = 0; // Смещение // Перебираем всю матрицу for (int i = 0; i < lengthX * lengthY; i++) { matrix.setLed(0, pointY, pointX, true); delay(delayValue); matrix.setLed(0, pointY, pointX, false); if(dir == 0) { pointX ++; if(pointX >= hosszX - 1 - eltolás) ( dir = 1; ) folytatás; ) if(ir == 1) ( pointY ++; if(pointY ><= offset) { dir = 3; } continue; } if(dir == 3) { pointY --; if(pointY <= offset + 1) { dir = 0; offset ++; pointY = offset; } continue; } } } void PointToSpiralOut() { //Используем функцию setLed(address, row, col, set) //Эффект спирали внаружу int lengthX = 8; // Ширина матрицы int lengthY = 8; // Высота матрицы int pointX = 3; //начать с этих координат int pointY = 3; //начать с этих координат int dir = 0; // Направление (0 - вправо, 1 - вниз, 2 - влево, 3 - вверх) int offset = 3; // Смещение // Перебираем всю матрицу for (int i = 0; i < lengthX * lengthY; i++) { matrix.setLed(0, pointY, pointX, true); delay(delayValue); matrix.setLed(0, pointY, pointX, false); if(dir == 0) { pointX ++; if(pointX >= hosszX - 1 - eltolás) ( dir = 1; ) folytatás; ) if(ir == 1) ( pontY ++; if(Y pont >= hosszY - 1 - eltolás) ( irány = 2; ) folytatás; ) if(ir == 2) ( pontX --; if(pontX<= offset - 1) { dir = 3; } continue; } if(dir == 3) { pointY --; if(pointY <= offset - 1) { dir = 0; offset --; pointY = offset; } continue; } } }

Videó a vázlatról:


A megjegyzések működéséhez engedélyezze a javascriptet.

Az előző órákon műszaknyilvántartás segítségével tanultunk. Ez egy kicsit nehezebbnek bizonyult, mint közvetlenül az általános célú csapokból. A probléma, amelyet ezután meg kellett oldanunk, az Arduino vezérlőn lévő vezérelt kimenetek korlátozott száma volt. Kutatásunk csúcspontját a dinamikus indikáció alkalmazása jelentette. Itt az ideje, hogy egy kicsit tovább bonyolítsuk a feladatot: megtanulunk dolgozni a LED-mátrixszal.

1. Mátrix indikátor

Mint már tudjuk, a szegmensjelzők, legyenek azok skálák vagy számok, különálló LED-ekből állnak, amelyek össze vannak kapcsolva. Például egy LED-csoporthoz minden katód csatlakoztatva lehet. Az ilyen indikátor utószóval rendelkezik "közös katóddal", egyébként - "közös anóddal". És mi lesz, ha a LED-eket nem szám vagy skála, hanem rács formájában helyezzük el? Ez elég grafikus jelző lesz. Vagyis olyat, amelyen nem csak számot, hanem valamilyen képet is megjeleníthet. Az ilyen rácsot mátrixindikátornak, a LED-ek esetében LED-mátrixnak nevezzük. A mátrix indikátor felbontása a vízszintes és függőleges pontok száma. Például a leggyakoribb indikátorok felbontása 8×8 pixel. Ha nagyobb felbontású LED-mátrixra van szükség, akkor egyszerűen több 8x8-as jelzőből áll. Hogyan kell ezt megtenni, azt később meglátjuk. Addig is nézzük meg, hogyan csatlakozik a mátrixon belül mind a 64 LED. Természetesen lehetséges lenne, mint egy hétszegmenses jelző esetében, az összes LED-et közös katóddal vagy anóddal összekötni. Ebben az esetben vagy 64 vezérlőtűre vagy 8 műszakregiszterre lenne szükségünk. Mindkét lehetőség nagyon pazarló. Helyesebb megoldás, ha a LED-eket 8 darabból álló csoportokba egyesítjük közös katóddal. Legyenek ezek a mátrix oszlopai. Ezután ezekben az oszlopokban a párhuzamos LED-eket ismét 8 darabból álló csoportokba egyesítik, már közös anóddal. A következő sémát kapod:
Tegyük fel, hogy a feladat az R6C3 LED megvilágítása. Ehhez magas jelszintet kell alkalmazni az R6 érintkezőre, és a C3 érintkezőt a földre kell kötnünk. Anélkül, hogy kikapcsolnánk ezt a pontot, próbáljunk meg egy másikat gyújtani - R3C7. Csatlakoztassa a pozitív tápcsatlakozót az R3-hoz és a földeléshez a C7-hez. De ebben az esetben az R6 és R3 sorok nem kettõben, hanem négy helyen metszik egymást a C3 és C7 oszlopokkal! Következésképpen nem két, hanem négy pont fog világítani. Probléma! Nyilván ugyanez segíthet. Ha nagyon gyorsan felváltva kapcsoljuk be az R6C3 és R3C7 pontokat, akkor kihasználhatjuk a látás fennmaradását - a gyorsan változó képek egészének értelmezésének képességét.

2. LED mátrix és eltolás regiszterek

Leckénkben a legegyszerűbb 8 × 8-as piros LED mátrixot kapcsoljuk az Arduino Uno-hoz. A pin számozás a bal alsó sarokból kezdődik. Ugyanakkor az 1-16 lábak számozását semmilyen logika nem köti össze a C és R oszlopok és sorok számozásával.
A dinamikus jelzés leckére összpontosítva próbáljunk meg 8 bites shift regisztereket használni a mátrix indikátor vezérlési sémában. Az egyik regisztert az oszlopokért felelős indikátorkimenetekhez kötjük, a másodikat a sorkimenetekhez. kördiagramm
Fontos megjegyzés #1. Szükséges, hogy ebben az áramkörben az ellenállások az első műszakregiszterből származó vonalakon legyenek. Ez a műszakregiszter felelős az oszlopokért. Ezzel a kapcsolattal minden ellenállás csak egy LED-hez állítja be az áramot a dinamikus algoritmus minden lépésében. Ezért minden LED egyenletesen világít. Fontos megjegyzés #2. A fenti diagram csak tájékoztató jellegű. Helyesebb lenne egy további teljesítmény mikroáramkört beépíteni a második regiszter és a mátrix közötti résbe, például az ULN2003 tranzisztor szerelvényt.

3. Program

Hogy még szórakoztatóbb legyen, próbáljunk meg egy smiley-t kiemelni az indikátoron. Mint már említettük, a kép mátrixon való megjelenítéséhez dinamikus jelzést fogunk használni. Mégpedig soronként kiemeljük képünket. Először megvilágítjuk a szükséges oszlopokat a legfelső sorban, majd a másodikban, a harmadikban, és így tovább mind a 8 sorban. Az első műszakregiszter az oszlopokért, a második pedig a sorokért lesz felelős. Ezért egy karakterlánc kimenete két egymást követő írásból áll majd a regiszterbe: először a karakterlánc kódját adjuk át, majd a karakterláncban lévő pontok kódját. Ebben a programban a digitalWrite funkció gyorsított változatát is használni fogjuk. Erre azért van szükség, hogy a dinamikus jelzési folyamat nagyon gyorsan lezajlik. Ellenkező esetben a mátrix észrevehető villogását fogjuk látni. Forrás const byte data_pin = PD2; const bájt st_pin = PD3; const byte sh_pin = PD4; unsigned long tm, next_flick; const unsigned int to_flick = 500; bájtsor = 0; const byte data = ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b001); void latchOn()( digitalWriteFast(st_pin, HIGH); digitalWriteFast(st_pin, LOW); ) void fill(byte d)( for(char i=0; i<8; i++){ digitalWriteFast(sh_pin, LOW); digitalWriteFast(data_pin, d & (1<next_flick)( next_flick = tm + to_flick; line++; if(sor == 8) line = 0; // sor kód átadása fill(~(1<<(7-line))); // зажигаем точки в строке № line fill(data); // открываем защелку latchOn(); } } Основная часть этой программы, включая переменные data_pin, sh_pin, st_pin, next_flick, to_flickés funkciója tölt már ismertek a ról és a ról szóló leckékből. sor adat képünk nyolc sorát tárolja. A memória megtakarítása érdekében minden egyes pontkombinációt bináris formában rögzítettünk. Funkció rácsatlakozik kinyitja a regiszter reteszét. Ezt csak mindkét műszakregiszter kitöltése után szabad megtenni. A program Arduino-ra való betöltése után egy smiley jelenik meg a kijelzőn.

4. Animáció a LED-mátrixon

Most pedig úgy véglegesítjük a programot, hogy az indikátoron fél másodpercenként változik a kép. Ehhez emlékezzünk még egyszer. const byte data_pin = PD2; const bájt st_pin = PD3; const byte sh_pin = PD4; unsigned long tm, next_flick, next_switch; const unsigned int to_flick = 500; const unsigned long to_switch = 500000; bájtsor = 0; bájt keret = 0; const byte data = ( ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b00111100 ), ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10000001, 0b10111101, 0b01000010, 0b00111100 )); void latchOn()( digitalWriteFast(st_pin, HIGH); digitalWriteFast(st_pin, LOW); ) void fill(byte d)( for(char i=0; i<8; i++){ digitalWriteFast(sh_pin, LOW); digitalWriteFast(data_pin, d & (1<next_flick)( next_flick = tm + to_flick; sor++; if(sor == 8) sor = 0; fill(~(1<<(7-line))); fill(data); latchOn(); } tm = micros(); if(tm >next_switch)( next_switch = tm + to_switch; frame = !frame; ) ) Betöltjük az Arduino programot és megfigyeljük az eredményt.

5. LED mátrix skálázás

A 8×8 LED-es mátrix két szám vagy egy egyszerű karakter megjelenítésére alkalmas. Ha valamilyen többé-kevésbé hasznos képet akarunk megjeleníteni az indikátoron, akkor a mátrixokat kombinálni kell. Ez új eltolási regiszterek hozzáadásával történik mind függőlegesen, mind vízszintesen. Megjegyzendő, hogy az Arduino Uno vezérlő sebessége a shift regiszterekkel együtt csak egy 16 × 16-os kijelzőhöz elegendő. A LED-kijelző méretének további növelése észrevehető villogást eredményez.

Feladatok

  • Hipnózis. Programozza a vezérlőt úgy, hogy a LED-mátrixon 1 másodperces periódussal koncentrikus körök jelenjenek meg folyamatosan növekvő sugarú körökkel.
  • Kígyó játék. Valósíts meg egy olyan jól ismert játékot, mint a kígyó egy 8×8-as LED-mátrixon. Négy gombot kell hozzáadni az áramkörhöz a mozgás irányának szabályozásához, valamint egy berregőt, amely jelzi az almaevés eseményét (vagy bármit, amit a kígyó eszik...).
  • Elektronikus szint. Adjon hozzá egy gyorsulásmérőt az áramkörhöz. Írjon programot, amely a LED-mátrixon megjelenít egy pontot, amelynek koordinátái a teljes eszköz dőlésétől függenek. Például, ha az eszköz a talajjal párhuzamosan van rögzítve (a gravitációs vektorra merőlegesen), akkor a pont a középpontban van. Ha az elektronikus vízszintezőt balra döntjük, a pont arányosan jobbra tolódik el.

Következtetés

A mátrixvezérlő áramkör összeállítása után sokakban felmerülhet a kérdés: "Nos, 30 év alatt nem talált valaki egyszerűbb módszert a mátrixszal való munkavégzéshez?" Tulajdonképpen rájöttek. Vannak speciális mikroáramkörök a különböző típusú kijelzőkkel való munkavégzéshez, beleértve a LED-mátrixszal való munkát is. A következő leckék egyikében megtanuljuk, hogyan kell vezérelni a jelzőt a MAX7219 chip segítségével. Ez a módszer lehetővé teszi számunkra, hogy több mátrixot egyszerűen kombináljunk egyetlen nagy kijelzővel, anélkül, hogy az elektromos áramkört jelentősen bonyolítanánk.

Két évvel ezelőtt, amikor először elindítottam a multikoptereket, kellett készítenem egy kis . Mivel a quadrocoptert tisztán autonómként tervezték, ettől a távirányítótól mindössze a drón vezérlésére volt szükség a tesztelés és a hangolás során.

A távirányító elvileg sikeresen megbirkózott a rá rendelt összes feladattal. . De voltak komoly hiányosságok is.

  1. Az elemek nem fértek a tokba, ezért elektromos ragasztószalaggal kellett a házra ragasztani :)
  2. A paraméterezést négy potenciométeren végeztük, amelyekről kiderült, hogy nagyon érzékenyek a hőmérsékletre. A teremben felállítasz néhány értéket, kimész az utcára – és ezek már különböznek, elvitorlázva.
  3. A távirányítóban használt Arduino Nano összesen 8 analóg bemenettel rendelkezik. Négyet a hangoló potenciométerek foglaltak el. Egy potenciométer gázként szolgált. Két bemenet egy joystickhoz volt csatlakoztatva. Csak egy kilépés maradt szabadon, és sokkal több paramétert kell beállítani.
  4. Az egyetlen joystick egyáltalán nem pilóta volt. A gázt potenciométerrel szabályozni is elég nyomasztó volt.
  5. A távirányító pedig nem adott ki hangot, ami néha rendkívül hasznos.

Mindezen hiányosságok kiküszöbölése érdekében úgy döntöttem, hogy radikálisan újrakészítem a távirányítót. Hardver és szoftver egyaránt. Íme, mit akartam csinálni:

  • Készítsen egy nagy tokot, hogy belerakhasson mindent, amit csak szeretne (beleértve az elemeket is), és amit csak szeretne később.
  • Valahogy a beállításokkal oldd meg a problémát, ne a potenciométerek számának növelésével. Ezenkívül adjuk hozzá a paraméterek mentésének lehetőségét a konzolon.
  • Készítsen két joystickot, mint a normál pilótakonzolokon. Nos, tedd a joysticket ortodoxra.

Új épület

Az ötlet rendkívül egyszerű és hatékony. Kivágunk két lapot plexiből vagy más vékony anyagból, és rácsokkal összekötjük. A tok teljes tartalma a felső vagy az alsó lemezhez van rögzítve.

Vezérlők és menük

Egy csomó paraméter vezérléséhez vagy el kell helyeznie egy csomó potenciométert a távirányítón, és hozzá kell adnia egy ADC-t, vagy az összes beállítást a menüben kell elvégeznie. Mint mondtam, a potenciométerekkel történő hangolás nem mindig jó ötlet, de ezt sem szabad megtagadni. Így úgy döntöttek, hogy négy potenciométert hagynak a távirányítóban, és adnak hozzá egy teljes menüt.

A gombok általában a menüben való navigálásra és a paraméterek módosítására szolgálnak. Balra, jobbra, fel, le. De gombok helyett kódolót akartam használni. Ezt az ötletet egy 3D nyomtatóvezérlőtől kaptam.


Természetesen a menü kiegészítése miatt a távirányító kódja többször is feldagadt. Kezdésként csak három menüpontot adtam hozzá: "Telemetria", "Paraméterek" és "Paraméterek tárolása". Az első ablak legfeljebb nyolc különböző jelzőt jelenít meg. Eddig csak hármat használok: akkumulátort, iránytűt és magasságot.

A második ablakban hat paraméter érhető el: PID-szabályozó együtthatók az X/Y,Z tengelyekhez és a gyorsulásmérő korrekciós szögei.

A harmadik elem lehetővé teszi a paraméterek EEPROM-ba mentését.

Joystickok

Sokáig nem gondolkodtam a pilóta joystick kiválasztásán. Történt, hogy az első Turnigy 9XR joystickot egy quadcopter üzletágban dolgozó kollégától kaptam - Alekszandr Vasziljevtől, a hírhedt alex-exe.ru webhely tulajdonosától. A másodikat közvetlenül a Hobbykingtől rendeltem.


Az első joystick mindkét koordinátában rugós volt – az elfordulás és a dőlésszög szabályozására. A másodikat ugyanígy vettem, aztán joystick-lé alakítottam a tolóerő és a forgás szabályozására.

Étel

A régi távirányítóban egy egyszerű LM7805 feszültségszabályozót használtam, amihez egy csomó 8 db AA elemet tápláltam. Borzasztóan nem hatékony lehetőség, amelyben 7 volt ment a szabályozó fűtésére. 8 elem - mert csak ilyen rekesz volt kéznél, és LM7805 -, mert akkoriban ez az opció tűnt számomra a legegyszerűbbnek, és ami a legfontosabb, a leggyorsabbnak.

Most úgy döntöttem, hogy bölcsebb leszek, és egy meglehetősen hatékony szabályozót helyezek az LM2596S-re. És 8 db AA elem helyett egy rekeszt tettem be két LiIon 18650 elemnek.


Eredmény

Mindezt összeadva egy ilyen készüléket kaptunk. Belső nézet.


Itt van zárt fedéllel.


Egy potenciométeren nincs elég sapka, a joystickon pedig nincs elegendő sapka.

Végül egy videó arról, hogyan konfigurálhatók a beállítások a menüben.


Eredmény

Fizikailag a távirányító össze van szerelve. Most azzal foglalkozom, hogy véglegesítem a távirányító és a quadrocopter kódját, hogy helyreállítsam korábbi erős barátságukat.

A távirányító beállítása során hiányosságokat állapítottak meg. Először is a távirányító alsó sarkai támaszkodnak a kezekre: (Valószínűleg kicsit áttervezöm a lemezeket, lesimítom a sarkokat. Másodszor, még egy 16x4-es kijelző sem elég a szép telemetriás kimenethez - csökkenteni kell a paraméterneveket két betűre.A készülék következő verziójában pont kijelzőt , vagy azonnal TFT mátrixot telepítek.

Ez a cikk azoknak készült, akik csupasz 8x8 mátrixot és 74hc595 váltóregisztert vásároltak, és nem tudják, hogyan kell mindezt összekapcsolni.

Sokáig keresgéltem az interneten a fenti komponensek csatlakoztatására vonatkozó utasítások után, de vagy nem az én regisztereimhez, vagy nem működő vázlatokhoz találtam, ezért úgy döntöttem, hogy még mindig kézzel és fejjel kell dolgoznom, hogy örömet okozzak magamnak. 8 * 8 képpel.

Miután megtaláltam az interneten a mátrix- és váltóregiszterek adatlapjait, megrajzoltam a következő diagramot:

Mindkét mikroáramkör 12. lába (reteszelőtű), a portok mentésére gyakori, mert nincs értelme a regisztereket különböző időpontokban reteszelni. A mátrix érintkezők (anódok) egy része 220 ohm névleges értékű áramkorlátozó ellenállásokon keresztül csatlakozik. Minden más a séma szerint rendkívül egyszerű. Minden esetre képek a mátrix kivágásával.

A képeket soronként kell majd megjeleníteni (egyébként hasonló mátrixokkal nincs mód), kis késleltetéssel (az emberi szem gyakorlatilag nem tesz különbséget az 1 ms-os késleltetés között).

Megpróbáltam mindent elmagyarázni a vázlatban. A táblára feltöltéskor a kijelzőn megjelennek a számok, amiket az arduino port monitorjára küldünk.(Lásd a videót)

Fotó a kész eszközről (cikkcakk a képernyőn, a vázlaton a képe a képtömbben van eltárolva)

A jövőben megpróbálok valami érdekeset csinálni ezen a kijelzőn.