Amint írtam, fordított logikával mennek ki a grafikai információk. A kezdő nagy konstans mátrixban kell binárisan msb-ből lsb-t és minden lsb-ből msb-t csinálni, nyilván minden helyiértékkel. vagyis 00000001-ből lesz 10000000, 00000010-ból 01000000 stb. 255 ilyen kombináció van és praktikusan nem működik a keresés-csere. És mivel most hex van kódolva minden, egy darabig kell hozzá számolgatni, hogy kijöjjön... :-/
Kezdőkészlet tök felesleges. Ha van konkrét cél, érdemes egyből arra lőni. Ha tényleg semmid nincs, akkor azért különösen az elején nehéz dolgod lesz, mert míg nekem megfelelő műszerezettséggel kb. 10 perc lenne kideríteni, hogy egyáltalán működhet-e a cucc, neked adott esetben ez napokba telhet (ha sikerül egyáltalán). De nézzük a minimált: -- Arduino kártya, mindegy melyik. Nekem az egyszerűbb kezelhetőség miatt inkább a NANO jött be annak idején, de nincs jelentősége, A gyártó lényegében mindegy, itthon is kapni normális klónokat -- ebből én eleve kettőt javaslok,
-- breadboard (próbapanel, lyukpanel), nagy 2-3 darab, és 1-2 kicsi,
-- jumper kábelek, minden létező kombinációban (apa-apa, anya-apa, anya-anya), lehetőleg a hosszabbak,
-- breadboard belső kábelek (csupaszolt végű merev kábelek méretre vágva és meghajtogatva),
-- 330 ohmos, 1 kiloohmos, 4,7 kiloohmos és 10 kiloohmos ellenállások, ezekből ilyen 20-30 darab típusonként,
-- tetszőleges színű, de lehetőleg nem fehér ledek, teszteléshez az 5 mm-es matt bőven megteszi,
-- egy tetszőleges RGB led, mindegy, milyen (közös anód vagy közös katód), -- esetleg valami kijelző, 2x20, esetleg 4x20 alfanumerikus, vagy valami egyszerű grafikus oled. I2c buszos egyszerűbb, -- meg a szenzorok, de én nem négyet vennék egy féléből, hanem vennék vagy 4-6 félét (teljesen eltérőeket), és letesztelném mindegyiket, aztán a top 2-ből venném meg a kívánt mennyiséget,
-- én vennék egy tök alap multimétert, illetve ha komolyan gondolod, valami tök alap tápot, ez utóbbi lesz a legdrágább az egészben, de ez is csak pár tízezres nagyságrend).
Ez így a műszerek nélkül szerintem kb. 30 ezer forintból kijön.
Ezt a 4 portos micsodát felejtsd el, inkább adok egy MPC23016-ot. Már ha van (kellene legyen).
U.i.: lehet, hogy lesz garázsvásár egy megszűnt műhelyben, ott azért szemmel láthatót lehetne spórolni.
Egyenlőre én is csak tapogatózom. Rég szemezgetek arduinos cucokkal, szeretek kisérletezgetni, de eddig még nem jutottam el odáig , hogy beszerezek ilyesmit.
Úgy döntöttem bele vágok. Most má csak az a kérdésem lenne, hogy ez a két modul mellé pontossan mire van még szükségem.
Kb nagyvonalakban ez lenne a terv, persze mék két érzékelővel.
Gondolkodom egy kezdő készleten, szerintetek jó lenne az nekem? Mi a helyzet a clónokkal, jók? Hogy tudom őket felismerni? A laka szine jelent valamit?(zöldes az eredeti, kék a klón?)
Megnéztem ezt a kódot és... No. Van benne hiba és logikátlanság gazdagon.
Mindamellett, hogy semmit sem tudunk a kijelzőről (ilyen kóddal nem találtam semmit), marad az, hogy vaktában, a kód alapján tapogatózva tippelek. Ha igaz, amire a kódból következtetni lehet, hogy egy PCF8558 meghajtó IC-vel van dolgounk, akkor -- kép híján -- én csak arra tudok gondolni, hogy MSB/LSB csere van. Vagyis a grafikus tartalmat sorok tekintetében jó, de oszlopok tekintetében fordított sorrendben küldöd ki. Ezért látszik minden tükörfordítottnak.
A kód elején van pár definíció, de nincsenek használatban. Ezekből ki lenetne használni valamit direkt írással. Legalábbis az adatlapból az derül ki, hogy van egy regiszter, amivel az írás, pontosabban a címzés módszertanát lehet állítani, de erre nem vennék mérget.
Sok-sok valószínűleg érthetetlen szakmai bizbasz lesz most itt, de nézz kicsit utána, ha gondolod. De enélkül is értelmezhetőre próbálom írni.
Pár éve volt egy projektem, amiben volt egy ehhez kísértetiesen hasonló feladat. De ennyire nem szaladok előre.
A legfontosabb problémára Alpári Gnác már nagyon helyesen rávilágított. A kérdés az, hogy bárhogy is átlöki-e a schmitt-triggert a lehulló mag vagy sem. Ezt kizárólag teszteléssel lehet ellenőrizni. Alap javaslataim: a bemenő és a kimenő sugár legyen teljesen leárnyékolva egymástól. Valahogy így. Maga a mag is lehetőleg egy teljesen zárt részben csusszanjon végig ne túlságosan nagy sebességgel. Rengeteg fog múlni a mag méretén és sebességén. Ennél számottevően nagyobb volt az érzékelendő tárgy az én projektemben, és ott is gond volt az érzékelhetőséggel az időtengelyen.
Az érzékelés úgy fog zajlani, hogy a közelségérzékelő hangolásával (erre való a kis potméter) be lehet állítani, hogy milyen értéknél billenjen át passzív állapotból aktív állapotba a schmitt-trigger. Nem tartom kizártnak, hogy működni fog, de nagyon nem mindegy, hogy hogyan oldod meg a fényutakat. Én leginkább egy V-alakú megoldást csinálnék, ahol a V alján van egy kis jó fényvisszaverő tulajdonságú rész, ami előtt a mag elhalad, és a V két szára viszont matt, tehát kevés fényt ver vissza. Ideális esetben az elhaladó mag a fényút jelentős részét kitakarja, így jelentősebb csökkenést idéz elő az érzékelő kimenetén (ami aztán beindítja a triggert).
Szkóp és némi gépészkedés praktikus lesz hozzá.
Nézzük az időtengelyt. Ehhez tudni kellene, hogy a vetőgép normálisan egyszerre vagy ütemesen engedi-e le a magokat, illetve azt is, hogy ez a működése befolyásolható-e valahogy. Nekünk ugyanis jobb lenne, ha nem egyszerre kellene figyelni, hanem valami belátható, de nem végtelenül hosszú eltéréssel. Ez mondjuk 0,2 mp eltérésnél már bőven elég. Ugyanakkor minél nagyobb esélye van annak, hogy egyszerre érkezik két érzékelendő mag, annál nehezebb megoldani a dolgot (egy bizonyos ponton felül az Arduino önmagában már nem is lesz rá alkalmas). Bár konkrét időket még nem tudunk, az nagyon valószínű, hogy valamilyen megszakításra lesz szükség. Ennek a lényege az, hogy nem konkrétan a bemenet állapotát kérdezzük le (ez az Arduino keretrendszerben normális szintaktikával és az Arduino "kódolási konvenció" mentén fájdalmasan sok idő, valószínűleg a többszöröse annak, mint amennyi ideig a mag az érzékelő előtt halad), hanem a kódtól függetlenül egy kitüntetett bemenet állapotváltozását figyeljük. Ha változik az állapot, akkor vizsgálgatjuk nagyon gyorsan, hogy mi is történt. A gond itt jelentős, az Arduino legtöbb paneljén kettő darab interrupt pin van, ami nyilván 4 bemenethez édeskevés. Felfelé lehet lépni, a Mega2560 már jobb e tekintetben (6 pin), vagy például a Nano Every, de az, hm. Szóval már más liga és nem nagyon fogsz kínai klónt találni belőle. Ha a pénz e tekintetben nem gond, akkor én azt mondanám, hogy vagy nem Arduino keretrendszerben csinálnám meg, hanem pl. egy STM Nucleo kártyával (az összes láb interruptolható nagyon kevés kivétellel). Ha marad az Arduino, akkor két út van. Vagy a Mega, vagy az, hogy az érzékelők (pontosabban a schmitt-trigger kimenete) és az MCU közé raksz valamit, ami figyel. Ilyen lehet pl. az MPC23016 vagy az MPC26S16. Én korábban ezzel dolgoztam, bár nem azzal a logikával, ami ide jó lenne. Meg kell nézni, hogy tudja-e, amit tudnia kell, de most sem agyam, sem időm nincs végignézni az adatlapot. A lényeg az, hogy felparaméterezhető úgy, hogy 4 lábat figyeljen és ha bármelyiken jön jelzés, akkor egyből küld egy interrupt jelet, amit az Arduino egy lábon figyel, és ha megjön, akkor soron kívül lekérdezheti, hogy mi történt, és beavatkozhat, hogy onnantól mást vagy máshogy figyeljen. Alapvetően filléres alkatrész és elfogadhatóan van implementálva az Arduino keretrendszerbe.
Végül a hardverek. A négy csatornás cucc az négy darab egy csatornás cucc összerakva úgy, hogy nem egy darab egy csatornás schmitt-trigger van, hanem egy tokban négy. Semmi előnye. Plusz nem találtam róla dokumentációt, nem tudni, hogy milyen IC van rajta (sok mindent nem determinál mondjuk). Az első linken küldött kapu szerintem működhet, valamivel jobb, mint a másik, de köré kell építeni eléggé. Hátránya, hogy fix benne az érzékenység, nem tudsz játszani vele, mint a másiknál (mondjuk cserébe valószínűleg sokkal érzékenyebb). De igazából az egész azon áll vagy bukik, hogy találsz-e olyan érzékelőt, amelyik 100 százalék megbízhatósággal érzékeli az áthaladó magot. A többi kódolás és pár alkatrész kérdése.
Lényegében egy ültető gépre szeretnék érzékelőt, ami figyeli hogy hullik e a mag. 4 soros, azért kellene 4 érzékelő. Ha áthalad mag, akkor villanyon fel egy led, esetleg még ha bizonyos időn belül nem történik semmi, akkor világítson egy piros led. De ez má csak hab lenne a tortán
Nem látom jól a feliratokat. És a kapcs.rajzot sem ismerem.De feltételezem ,hogy az optocsatoló dióda oldalán van egy 300-500 ohmos áramkorlátozó ellenállás.
Ha a bemenetre +5V kerül akkor a LED világit. A vevő oldalon a tranzisztor kinyit és a kimeneten 0 szint jelenik meg. A kimeneti oldalra nem kell a pár kilós ellenállás.
A müködtető programnál a négy optocsatoló kimenetet kell figyelni. A négy kimenetet 4 digitális választott D0 - D13 csatlakozóbol lehet választani. A négy csatlakozót
pinMode(13,INPUT) kell megadni.Ha kéred szivesen megirom a program kódot ,ha részletesen leirod mit is szeretnél csinálni.
Képről és ennyiből elég nehéz adekvát választ adni, de alapvetően igen, lehet. De legalább egy adatlapot vagy linket küldenél, akkor nem a képről kellene barchobázni.
//fill 30bytes with b after that incr doesnt work, wire.h hs 32 data buf void fill30(byte x, byte y, byte b) { int i; Wire.beginTransmission(LCD_ADR); Wire.write( y<<5|NORMAL_MODE ); Wire.write(x); for(i=0; i<I2C_BUFFER; i++) Wire.write(b); Wire.endTransmission(); }
void CharOut(int x, int y, byte c) { // font starts from 32 int i=0; Wire.beginTransmission(LCD_ADR); Wire.write( y<<5|NORMAL_MODE ); Wire.write(x); for(i=0; i<5; i++) { uint8_t b= System5x7[(c-32)*5+i]; Wire.write( b ); } Wire.endTransmission(); }
void TextOut(int x, int y, const char* str) { int i; for(i=0; str[i]; i++) CharOut(x+i*5, y, (byte)str[i]); }
unsigned long timeb, frame_time; unsigned long timea;
void loop() { char buf[16];
timeb= millis(); cls();
TextOut(8,11,"RPM ="); TextOut(35,11,"1250"); TextOut(55,11," [f/sec]"); int fps= 1000.0 / (float)( millis() - timeb ); sprintf(0,1,buf); TextOut(0,3,buf); // fehér háttér // TextOut(0,1,buf); // fekete háttér delay(1000); }
----------------------------------
Sajnos nem az igazi. Az RPM satöbbi balró jobbra minegy tükörböl lenne látható . Azt hiszem a kijelzőnek van saját karakterkészlete is.
// TextOut(0,1,buf) esetén megjelenik tű-éles karakterekkel a felső sorban pár szimbólum. Mint sejthető ez egy mobil telóban élte előző életét.
Hali mindenki. Szeretnék összedobni egy projektet. Nézegetem a fotoelektromos infrás érzékelőket. Egyenlőre csak az érdrkelne, lehetne e 4 darab ilyen modult egy vezérlőre csatlakoztatni:
Ez lenne a modul. van hozzá 4 infra érzékelő, de nekem nem ilyen kellene , hanem ilyen:
Csinálj egy tesztet úgy, hogy nem 3, hanem csak 2 számjegyet paraméterezel fel a setupban a kijelzőhöz, és ugyanezzel a kóddal íratod ki a 11-et. Ha felülvonás 11 lesz belőle, akkor az hardver, ha 71, akkor a könyvtár szar.
Most az jutott eszembe, hogy mi van, ha a nyomorék könyvtár az utolsó multiplex végén nem húz le mindent alaphelyzetbe, hanem csak az utolsó digit utolsó szegmensét hagyja aktívra. Jó nagy hülyeség lenne, de el tudom képzelni.
De vannak fizikai törvényszerűségek is, meg műszaki keretek is. Hiába kántálod, hogy 100 ohm-mal nem világított olyan szépen, ha közben kinyírtad az egyik frontendet valamelyik lábon.
Akkor ezt most hagyd futni pár óráig, akár napig, hogy tényleg nem esett-e áldozatul valamelyik hardver elem a kísérletezésnek.
(Nekem éppen egy hete ment egy nixie órám panelszinten készre szerelve, majd hirtelen elkezdett ghostingolni. Kiderült, hogy elcsesztem a NYÁK-tervet és kialakult valami kapacitás, ami már elég, hogy olyan számok is világítsanak, amiknek nem kéne. Új NYÁK-terv, most jön Kínából...)
Sajnos a Vin-en lévő tápfeszt emelheted a végtelenségig, mindenképpen csak és kizárólag 5V-ot tud kapni az Arduino-tól a LED.
Csak azt éred el, amit sikerült is, hogy kisütöd a lapkádat.
Ugyanis a Vin bemenet egy feszültségszabályzó IC-re csatlakozik, aminek a kimenete mindenképpen 5V lesz. Ez a feszültségszabályzó ráadásul lineáris, vagyis az Vin és az 5V közötti feszültségből és a kivett áramerősségből adódó teljesítményt elfűti, mert nem tud vele mást csinálni. Nem arra van kitalálva.
Nálad ez a teljesítmény 500-600 mW lehet, ami szemre nem tűnik soknak, de a lapkádon lévő IC-nél vagy 20-szor nagyobb 7805-öt is megizzasztja.
Továbbá a LED-et nem feszültséggel, hanem áramerősséggel vezéreljük. Ez teljesen alap elektronikai elv.
A LED-nek van egy nyitófeszültsége, mivel hogy egy dióda.
Ha ezt eléri a rákapcsolt feszültség, akkor kinyit és innentől nem emelkedik számottevően a rajta eső feszültség, csak egyre több áram folyik át rajta.
Aztán megfut és egy lavina effektus kíséretében elhalálozik.
A te LED-ednek 20 mA kellene a teljes fényerőhöz, azért javasoltunk 100 ohmot, hogy legalább 10 mA/pin-ben maradj benne, a közös katódokon így is 70 mA fog folyni, ami a specifikáció szerinti maximum közel háromszorosa! Nyilván nem lesz a fényerő teljes, de legalább egy darabig lehet vele tesztelgetni, mert nem öli meg instant az Arduino IC-t. Ezt is leírtuk többször is...
A LED amúgy melegszik, nem is kicsit, csak mivel pici, ezt nem olyan könnyű észlelni. A kínai lámpák, a kommersz LCD TV-k éppen azért olyan rövid életűek, mert túlhajtják a LED-eket, több áramot kergetnek át rajtuk, mint szabadna, ettől persze valamivel nagyobb fényerőt produkálnak és még nem is hűtik őket megfelelően.
Most itt húzni kellene egy vonalat.
- Fogni egy biztosan működő Arduino boardot és egy olyan 7-szegmenses kijelzőt, ami tápegységről, 5V-ról egy 1k-s ellenállással az anódjain mutat valami életjelet.
- Feltölteni a használni kívánt könyvtár példaprogramjait, szépen sorban (már én unom magamat, annyiszor írtam le)
- Ha azt csinálja, amit várunk tőle, akkor sorban bevezetni a sallangokat. A szenzort, a reset gombot, meg ami még kell. Minden lépés után mindig újra és újra ellenőrizni, hogy a program továbbra is rendben van-e.
- Ha minden úgy működik, ahogy szeretnénk, akkor elővenni a használni kívánt kijelzőt és megnézni a specifikációját (ez lényegében megtörtént), kipróbálni asztalon, műszerrel, milyen paraméterekkel működik megfelelően.
- Ha azt látjuk, hogy ennek a kijelzőnek a megfelelő működéshez szignifikánsan több áramra van szüksége, mint amit az Arduino board produkálni képes, mert nagyon nem arról van szó, hogy a kijelző "bírja-e a 4V-ot" meg hogy "az kell neki, nem ellenállás", akkor keresni a meghajtáshoz szükséges megoldást.
Nagyon nem kell keresgélni, mert már többen, többször leírtuk, hogy mi kell hozzá: darlington mező az anódokhoz és PNP tranzisztor, vagy P-FET a katódokhoz.
- A kapcsoló áramköröket külön-külön megtervezni, deszkamodellben összerakni és kipróbálni akár a végső kijelzővel, szimulált kapcsolójelekkel.
- Végül az egészet összeintegrálni, kipróbálni, a közbeni elkötéseket, félretervezéseket kijavítani.
A neten található kapcsolások, programok jelentős része olyan, mint a netes ételreceptek, amiket egyszer valaki leírt, azóta százan átvették, lefordították, de egyikük sem főzte meg soha. Vannak olyanok, amik még elvi szinten sem tudnak működni, mégis kidobja a gugli, ez a műfaj ilyen.