1/ Az Arduino használható-e ipari környezetben? Ha igen, milyen védelemmel kell ellátni?
A környezetben erős az elektroszmog.
2/ Egy tucat kontaktus állapotát kell figyelni egy Arduinoval és ezeket egy másik Arduino kimenetein kell megjeleníteni. A távolság 600 m. Használható-e az RS 485 kommunikáció?
Eljutottam odáig, hogy kommunikál már az arduinoval és az arduinon fut egy TCP/IP szerver amire telnettel tudok bejelentkezni. A probléma, hogy ahogyan nézem nem tudom vizsgálni a bevitt paramétereket ugyanis a serial kimeneten értelmetlen kérdőjelek sora jelenik meg mintha karakter kódolás probléma lenne. De rendben feladom most szereztem egy USB TTL konvertert amivel elvileg már tudom magát az ESP - t programozni. Viszont itt adódik a kérdés, hogy hogyan tudok még egy GPIO - ot hozzá rakni mert RGB ledszalagot szeretnék vele irányítani. Néztem Youtube - on, hogyan vezetik ki az IC lábait de sajnos nekem ahhoz nincs kézügyességem, hogy olyan pici lábra rátudjak forrasztani :( Esetleg van rá más módszer?
Köszi a segítséget, így már bejjebb vagyok kicsivel. Még nem tudom melyik megoldás lesz nekem az igazi, a rendszer ötlete van még csak meg, meg pár alkatrész. Ha lesz valami akkor szólók még! :-)
Nem tudtam, hogy vannak 12c library-k külön, azt hittem, hogy az a vásárolt ezközökben benne van, nem kell külön hozzá.
Ha +-25V-os jelet akarsz mérni, akkor két egyszerűbb lehetőséged van: vagy aktív vagy passzív eszközt kell illeszteni hozzá. A passzív az egy ellenállásosztó ahogy írtad, az aktív az egy erősítő fokozat ahol az erősítési fokozat erősítése egynél kisebb, azaz pl 0.2, egy műveleti erősítővel egyszerűen megvalósítható. Ez utóbbinál pl megoldható az is, hogy logaritmikus karakterisztikájú erősítést használsz, aminek következtében a kisebb jeleket jobban a nagyobbakat meg kevésbé erősíti/csökkenti. persze ezt később szoftverből korrigálni kell. Kérdés mekkora felbontás és pontosság kell. de ha jó a lineáris alapból, akkor ezzel se kell molyolni.
A feszosztó egyszerűbb, de figyelembe kell venni a terhelési viszonyokat - azaz amire rácsatlakozol mint bemenet, annak milyen a kimeneti impedanciája, ehhez illik illeszteni. Ez nem mindig tud megvalósulni passzív illesztéssel (ne terheljen be túlzottan a feszosztó a másik kimenetére, mert ez komoly galibát tud okozna, akár frekvenciafüggő viselkedést is).
Ha a 25V-nál nagyobb jeleket vágni szeretnék, akkora legegyszerűbb egy zener diódás határoló/limiter, Aztán persze van ennél komolyabb megoldás is, de kérdés mi a cél.
Még nem foglaloztam ezzel, de szeretnék! Gondom van az adatok gyors mentésével, valamint nem értem pontosan hogyan lehet megoldani azt, hogy ha pl 5V-nál nagyobb feszültséget szeretnék mérni vele, akkor azt hogyan lehet? Feszosztóval? Akkor meg az lesz a gond, hogy ha túl kicsi a bemenet, akkor azt túl kicsire osztja. Hogyan lehet megoldani, hogy nagy feszültség tartományban legyen jó ez az ezköz. Tudnál ebben segíteni nekem?
Kb. -25V-->+25V tartományban kellene mérnem, azonban olyan is lehet, hogy ABS|25V|-nál nagyobb jelek is lehetnek, de azok nem mérési körülmények között érnék az AD konvertert, gondolom oda valami védelem kellene, de nem tudom az milyen, hogyan lehet csinálni. Ötlet?
Én is inkább azt ajánlanám, hogy az esp-t programozd. Ugyanúgy tudod arduinoban. Ha kevés a port, akkor könnyen tudod bővíteni, de ki lehet vezetni az ic lábait is a 02-ről. De vegyél egy másik modult, amiben minden ki van vezetve, és megspórolod az uno-t, a 02 neg jó lesz másra. Legalábbis én nem vacakolnék illesztésekkel, meg tx/rx-el, ha nem muszáj...
Mi a helyzet a 3.3V-al? Mert a wifi modul arról megy, és az rx-tx-hez is azt illik használni. Egyébként a legegyszerűbb ha veszel hozzá egy "tokot", ami megoldja a feszültség átalakítást kiválóan. Egyébként én már próbálkoztam vele, nekem pl. az volt a gond, hogy az arduino nem bírta ellátni árammal, és ez elég sok hibát okozott. Így én végül direkt esp8266-ot programozom inkább. Arduinon keresztül csak AT parancsokat tudsz használni, azokat direktbe is küldheted neki és akkor nem kell a lib-ekkel vacakolni.
sevseg.refreshDisplay(); // Must run repeatedly; don't use blocking code (ex: delay()) in the loop() function or this won't work right
(Már ha a te kódodban a output() ezt jelntette. Remélem igem!)
Az lehet a gond, hogy a Te példaprogramjaidban használt sevseg.h nem egyezik meg amit letöltöttél. Nem gond, csak ki kell cserélni pár dolgot. Szerintem csak verzió probléma, semmi több.
A fordító csinálhat olyat, hogy elsőnek a függvényeket nézni, majd utána aloop-ot, ezért lehet nem azzal kezdte elsőnek.
Ha megy ezzel, akkor javaslom, hogy ha csinálsz egy biztonsági mentést majd a kódodról, akkor a sevseg library-d is tedd ,ellé, hogy később is menjen.
A setNumber bejött, most viszont a void smartDelay-ben levő PrintOutput-ra írja hogy has no member in sevseg. Az ino-ban pirossal van írva a hibaüzenet tárgya.
Ami azért érdekes,mert a void loop-ban is van egy sevseg.PrintOutput és azon átsiklott.
Te érted ezt? Csatolom az eddigiek figyelembe vételével átírt ino-t:
#include "SevSeg.h" #include "TinyGPS++.h"
//Instance aanmaken voor GPS en Display SevSeg sevseg; TinyGPSPlus gps;
void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (Serial.available()) gps.encode(Serial.read()); sevseg.PrintOutput(); } while (millis() - start < ms); }
void printFloat(float val, bool valid, int len, int prec) { if (!valid) { while (len-- > 1) displayNumber(0000); Serial.print('*'); Serial.print(' '); } else { Serial.print(val, prec); int vi = abs((int)val); int flen = prec + (val < 0.0 ? 2 : 1); // . and - //flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; flen += vi >= 10 ? 2 : 1; for (int i=flen; i<len; ++i) Serial.print(' '); displayNumber(val); } smartDelay(0); }
//Turn on a digit for a short amount of time switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); break; case 2: digitalWrite(digit2, DIGIT_ON); break; // case 3: // digitalWrite(digit3, DIGIT_ON); // break; // case 4: // digitalWrite(digit4, DIGIT_ON); // break; }
//Turn on the right segments for this digit lightNumber(toDisplay % 10); toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS); //Display this digit for a fraction of a second (between 1us and 5000us, 500 is pretty good)
//Turn off all segments lightNumber(10); // // //Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); // digitalWrite(digit3, DIGIT_OFF); // digitalWrite(digit4, DIGIT_OFF); }
while( (millis() - beginTime) < 10) ; //Wait for 20ms to pass before we paint the display again }
//Given a number, turns on those segments //If number == 10, then turn off number void lightNumber(int numberToDisplay) {
Tudnál egy linket küldeni, amiben az a SevSeg.h-van, amit használsz?
Off:
Ami még lehet gond, hogy a változó neve megegyezik a seveg-el. (Lehet nem akkora gond, de más nyelveken azért okozhat problémát) A változód neve megegyezik a típussal, objektom nevével. Szerintem nem annyira jó ez, de lehet tévedek. Ha így van akkor bocsánat!
Szeretnék érdeklődni, hogy valaki használ e közületek ESP8266 wifi modult Arduino Uno - val? Keresek hozzá ugyanis egy megfelelő könyvtárat, hogy az Arduino egy mint webszerver (vagy telnet szerver) működjön a wifi modul pedig csak a kapcsolatért feleljen. Találtam jó pár példát de akárhogy kötögetem TX,RX kimeneteket nem tudok kommunikálni vele. Már elértem azt, hogy csatlakozni tudjon a hálózatomhoz de tovább semmilyen választ nem ad nekem.
Sok példa van, hogy közvetlen a modulra írják meg a webszervert és arduino nélkül használják de sajnos az én feladatomhoz túl kevés a GPIO - oja (3db viszont az ESP8266-02 amit végül szeretnék használni annak még kevesebb van)
Tablet,mobil nem játszik a mérete miatt. Nem akarom teljesen felrobbantani a műszerfalat, csak a km/órát cserélném le. Továbbá az említett készülékek fényereje nappali fényben nem igazán kielégítő. A forrás első változatának alapjait értem nagyjából. A probéma csak annyi,hogy a szerzője szerint sem műxik. A javított változat a SevSeg bevezetésével jóval egyszerűbbé teszi az ino megírását, viszont bonyolítja is a helyzetet az egyszerű földi halandó számára. Ugyanis "láthatatlan" dolgokra támaszkodik, amik a SevSeg-ben vannak "eldugva".( pl NewNum, printOut ).
Szóval a gondom még mindíg az, mi lehet az adott ino-ban a gond, amiért nem ismeri fel a NewNum-ot az ellenőrzés a SevSeg-ben?
Magamról anyit: az Arduinoval valóban most kezdek foglalkozni, amúgy 20-25 éve foglalkozom elektronikával. Építettem már erősítót, órát, karácsonyfa villogót stb. Nem kit-ből, a nyákot is magam tervezem,maratom, beültetem.Az Arduinoban az tetszett meg,hogy szinte bármire lehet használni. Ezért gondoltam, jó lesz sebességmérőnek is. A neten talált alkalmazás nem tűnik bonyolultnak, három egységből áll (Arduino+GPSmodul+LEDkijelző). Szerintem nem nagy kunszt. A fogyasztás nem érdekes, a robogó akkuja bírja(robbanó motoros, nem elektromos). A pontosság, ha tíz százalékon belül van akkor megfelelő,hisz az autóm gyári kmórája is csal annyit. A kerékpárok sebességmérője valóban alternatíva lehetne,csakhogy azok LCD kijelzősek én meg ragaszkodom a LED-hez. Amúgy már kész a kapcsolás,összeszereltem az eszközt, már csak az agya hiányzik.
Tehát a kérdésem még az eredeti: mi lehet a probléma a NewNummal az általam átírt ino-ban?
Először is! Szerintem csináld nyugodtan, én is szeretek nagyban indítani, aztán a buktatók leküzdése közben vésődnek be legjobban a dolgok. Aki az alapokkal szüttyög, az lehet, hogy megunja, mire valami értelmeset kezdene építeni. A legfontosabb a lelkesedés, meg hogy legyen mindig kihívás. Az más kérdés, hogy tényleg nem szerencsés egy robogón csak erre hagyatkozni, én biztosan tennék rá egy kapcsolót, meg egy ledet. Alapból kerékfordulat alapján számolná a sebességet, ha megtalálta a műholdakat, akkor a led jelezné, hogy átkapcsolható GPS-re, ha akarod. A forrás egyébként könnyen értelmezhető, egyszerű, én annyit azért átírnék rajta, hogy amíg nincs vétel, addíg nem 0000, hanem ---- legyen a kijelzőn.
Még bulibb lenne egy tabletet (vagy kisebb kijelzős mobilt) "felheggeszteni" valahogyan kulturált vízhatlan tokban. Egy spéci kernellel a töltés kordában tartható, és akkor van térképed, köridő mérés, gyorsulásmérés... még sorolhatnám, de az már nem arduino téma.
Egyszerűbb dolgok már mennek? LED villogatás, nyomógomb lekérdezés, soros kommunikáció számítógéppel? (Software serial? USB TTL?)
Ezekkel szükséges megismernedni, mert:
1. Ha még nem tudsz programozni, akkor megtanulod az alapokat. (Nem írtad, hogy milyen szinten vagy.)
2. Megérted a mikrokontrolleres fejlesztés alapjait.
3. A fentebb írtak segítségével fogsz tudni HIBÁT KERESNI a sebességmérő fejlesztése során.
Kérdés egy lépéssel hátrébb lépve:
Minek ez neked? Ha ez az új hobbid, és meg akarsz tanulni mikrokontrollerrel dolgozni, akkor jó. Csak kezdj valami egyszerűbbel.
Ha csak az elromlott sebességmérőt akarod kiváltani, akkor szerintem ne vacakolj a műholdas rendszerrel. Nehézkes, sokat fogyaszt, és pontatlan. Kizárólag sebességmérésre a legjobb valamilyen kerékfordulatszám mérő eszköz. Érdemes például egy biciklis sebességmérőből kiindulni. Kezdőként tök jó projekt számolni az impulzusokat, abból és a kerék kerületéből pedig a sebességet. Átlátható, gyors, pontos, keveset fogyaszt.
Most ismerkedek az arduinoval, ezért lehet ökörségeket is fogok kérdezni.
Tény: tönkrement a robogóm sebességmérője, ezt szeretném kiváltani egy GPS alapú digitális sbességmérővel amit Arduino vezérel. Találtam a neten kapcsolást meg hozzávaló ködot is, Holland nyelven :-(
Annyit ki tudtam venni hogy ez négy digitre készült, de nekem csak kettőre van szükségem. Megpróbáltam átírni, de nem sikerült. Az Arduino Libraries-ba feltöltöttem a TyniGPS és a SevSeg mappát is.
A loopban problémázik az ellenőrzés a NewNum-mal. Szerinte nincs ilyen a sevseg-ben. Olyan létezik,hogy az általam Github-ról letöltött SevSeg-ben nincs NewNum? Olyat próbáltam,hogy a NewNum-os sort töröltem az ino-ból,de akkor meg a következő sorban problémázott az ellenőrzés a PrintOutput-tal. Tovább nem jutottam. Tudnátok segíteni?
void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (Serial.available()) gps.encode(Serial.read()); sevseg.PrintOutput(); } while (millis() - start < ms); }
void printFloat(float val, bool valid, int len, int prec) { if (!valid) { while (len-- > 1) displayNumber(0000); Serial.print('*'); Serial.print(' '); } else { Serial.print(val, prec); int vi = abs((int)val); int flen = prec + (val < 0.0 ? 2 : 1); // . and - //flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; flen += vi >= 10 ? 2 : 1; for (int i=flen; i<len; ++i) Serial.print(' '); displayNumber(val); } smartDelay(0); }
//Turn on a digit for a short amount of time switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); break; case 2: digitalWrite(digit2, DIGIT_ON); break; // case 3: // digitalWrite(digit3, DIGIT_ON); // break; // case 4: // digitalWrite(digit4, DIGIT_ON); // break; }
//Turn on the right segments for this digit lightNumber(toDisplay % 10); toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS); //Display this digit for a fraction of a second (between 1us and 5000us, 500 is pretty good)
//Turn off all segments lightNumber(10); // // //Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); // digitalWrite(digit3, DIGIT_OFF); // digitalWrite(digit4, DIGIT_OFF); }
while( (millis() - beginTime) < 10) ; //Wait for 20ms to pass before we paint the display again }
//Given a number, turns on those segments //If number == 10, then turn off number void lightNumber(int numberToDisplay) {
Egyébként sikerült ma estefelé összehoznom a Wiegand-os Olvasót gyakorlatban is az Arduinoval és a rokonságban létező összes transzponerrel feltöltenem. Viszont volt két apróság - ami kicsit megizzasztott.
Az egyik, hogy -talán védelmi szempontból- kártyaolvasás után egy bizonyos ideig nem hajlandó új jelet küldeni az Arduino felé az RFID reader. Pontosan nem mértem, de szerintem legalább egy perc. Biztos, hogy a reader az oka, mert olyankor nem is változik a led szine és nem csipog - amellett, hogy nem küld jelet. Viszont, ha resetelem az Arduino-t akkor nincs ilyen gond, így csináltam egy PIN-RESET átkötést.
A másik érdekesség, hogy -miután lehúztam róla az USB kábelt és átengedtem tisztán a 12V tápellátásnak- nem vezérelte a relépanelt. Viszont ha visszadugtam csak az Arduino-ra (és nem volt csatlakoztatva a laptopra a másik fele), akkor minden ment tökéletesen. Olyan, mintha valami áramköröket ilyenkor összezárna. Biztos megvan a logikus magyarázata, de ehhez még túlságosan zöldfülű vagyok..
Jajj - munkahelyi ártalom, hogy ilyeneket írok :)).. Mármint, hogy kicsit túl voltam pörögve a munkahelyemen a napi rutinom mellett az RFID téma miatt s írtam a hülyeséget.
Annyira mondjuk nem nyúltam félre, mert van endoszkópom is meg oszcilloszkópom is - legyen rá bizonyíték a youtube archivum ;)!
Endoszkópot korrózió felmérésre szoktam inkább használni - annak több értelme van, mint áramot mérni vele :) ..
Hát ha 125KHz cuccod van, az érdekelhet, mert szerintem lesz még pár RFID-s dolog a látókörömben. Én is gondolkodtam a Wiegand reader kibelezésén és átkötésén, de tegnap szétszedtem és akkor láttam, hogy kínai létére tényleg vízálló, mert ki van öntve az egész bele - hiába lebontható a külső burka.