Ha ez RF24 - NRF24L01+ akkor az már önmagában csomagokat küldő, CRC-zett, akár még ACK-zott is protokollt használ. Még automatikus újrapróbálkozást is tud.
Ez elég robusztus, ráadásul 250kbps - 1/2 mbps sebességet tud, ami szintén elég jó.
Nekem a tippjeim: 1. rossz felparaméterezés (bár nem valószínű) 2. vevő oldalon hibás kezelés, esetleg puffer betellik??
Másrészt érdemes arra is gondolni majd a jövőben, hogy a millis() túlcsordul, bár ez csak 49 nap után történik meg, lehet, hogy itt felesleges ezt kezelni. (Utolsó szavak.)
Egyszerre tudom most is monitorozni putty nélkül a két eszközt. Az adót olvassa a serial monitor, a vevőre pedig egy LCD kijelzőt kötöttem, és ott jeleníti meg a kapott adatokat (ha kap).
A serial.print köröket már lefutottam, mindhárom ciklusban kiírja adó oldalon a megfelelő értékeket, tehát a ciklus lefut a feltételek teljesülése esetén, a paraméterek pedig megfelelők.
A rádió nagyon megbízhatatlan csatorna. Azt feltételezed, hogy mindig, minden byte a megfelelő helyen érkezik. Pedig a két eszköz nincs szinkronizálva.
Szerintem nem jó ötlet folyamatosan küldeni az adatokat. Ha lemarad egy-egy byte, azt honnan tudja a vevő?
Először készíts belőle adatcsomagokat (packet).
Adj hozzá headert, footert, esetleg CRC-t.
A vevő oldal pedig keresse ki a stream-ből a csomagot, dekódolja, és utána adjon értéket a tömb elemeinek.
Ha kétirányú a rádiód:
Utána legyen mindig nyugtázás. Amíg nem jött a másik féltől nyugtázás, addig ne küldje a következő csomagot.
Röviden: A rádiós library annyit tesz, hogy a kapott adatokat ráülteti a fizikai rétegre. Nem ellenőriz, nem szinkronizál, stb. Ezeket neked kell megoldanod.
Nem volt időm alaposan átrágni magam rajta. Első körben a Serial.print a megoldáshoz vezető első kulcs a változók kiírásával. A kódfejtésben mondjuk némi segítség lenne a void.Setup().
Persze mindez az adó és a vevő oldalon is (szívás, mert ugye két futó terminálképernyő kell hozzá, és nem tudom, hogy ez megvalósítható-e, soha nem próbáltam).
Egy mozgásérzékelőt kötöttem egy Nano-ra, s a kapott adatokat RF24 rádióval átlőni egy másik RF24-gyel felszerelt Uno-ra. A következő kódom van adó oldalon:
Az a gondom vele, hogy a mozgást simán átlövi, és annak megfelelően a vevő rendesen megkapja az adatokat. Tehát az első if lefut. A második és harmadik feltétel is lefut, de ott a rádió már nem küld jelet. A Nano-n látom felvillanni a 13. kimenethez csatlakozó ledet, ami jelzi, hogy rádiókommunikáció van. A vevő mégis csak az első feltétel teljesülése esetén fogadja az adatokat. A vevő lényes kódja:
done = radio.read( joystick, sizeof(joystick) );
Ugyanazt a tömböt használom, a tömb minden eleme mindig integer, mégsem kapom meg a két másodpercenkénti bejelentkező jelet. A bejelentkezést néha akkor kapom meg véletlenszerűen, ha megmozgatom a szenzort, s akkor több csomag között esetleg megy egy bejelentkezés is. Van valakinek esetleg ötlete? Próbáljak más libraryt a rádiókhoz?
Tippem szerint (nem mértem) táp-gond lesz. A 3 ultrahang plusz ez a negyedik opto már határra húzhatja a Nano-t. Bár a specifikációk szerint összesen nincs ki 100 mA, de jobb kétszer mérni. Feszültséget és áramokat is mérj, külön-külön és egybe is.
Plusz nem lenne nagyon hátrány egy Fritzing rajz sem a bekötésről.
Nem vagyok guru, de nem is értem a problémát. Az ultrahangos szenzorokkal nem távolságot mérsz? Akkor miért kell ez a cucc? Vagy ezzel elmozdulást akarsz érzékelni? A specifikáció egyébként 10 uF-ot javasol, és az eszköz közelében.
Arduino nano-ra van rákötve 3 ultrahangos szenzor, amik jól is működnek, míg rá nem csatlakoztatom ezt:
http://www.sharpsma.com/webfm_send/1487 Ekkor ugyanis elkezdek hibás értékeket kapni az ultrahangos szenzorok felől. 100 nF -os kondit kötöttem az 5V és a GND közé. Mi lehet a hiba?
Az arduinohoz, zenét lejátszani, csak az mp3 shield, el lehet? Mármint azt valahogy nem lehet megoldani, hogy egy mp3 fájlt, küldjek ki az arduinora, az meg továbbítsa, egy hangszóróra?
Sziasztok, keresek egy illetőt aki segítene nekünk, először is néhány kérdés megválaszolásával. Aki úgy érzi elég toppon van az elektronikában és az arduino világában, írjon erre az emailcímre: zlapser@gmail.com.
Röviden kis motorok vezérléséről lenne szó majd, remélem lesz pár érdeklődő aki segítene.
Utánanéztem, van egyszerűbb megoldás is. A legtöbb terminál program tudja ezt, bár ez nem kényemes. De találtam egy Gobetwino nevű programot, az többek között ezt is tudja, valószínűleg azt fogom használni.
Az Arduino alapja egy Processing nevű szoftver. Valamivel komplexebb, mint az Arduino IDE, de alapvetően hasonló elveken működik. Ebben lehet olyan szoftvert írni, amelyik ezt meg tudja csinálni (mondjuk kell hozzá már némi programozási ismeret). Van rá pár egyéb szoftver is.
Azzal kell vigyázni, hogy:
1. a baud rate a mintavételezést is befolyásolja sajnos,
2. ha magas baud rate-tel dolgozol, akkor kegyetlen nagy lesz a redundanciád (ami lehet jó is), illetve hatalmas fájlok fognak keletkezni nagyon gyorsan.
Elvileg ezzel a felállással, ha elég stabil a géped, elég komplex telemetriát lehet csinálni, ha a grafikai részt leprogramozod, akár F1-szinten is. Riasztásokkal, szélsőértékekkel, ilyen-olyan mérési adatokkal. Sőt, a számításigényesebb műveletekre (pl. PID-szabályozás) simán lehet a gépet használni és csak az analóg/digitális vezérlőjelet visszaküldeni. ez esetben az arduino csak egy sima A/D konverterként működik (a D/A konverzióhoz az UNO kevés, ilyen emlékeim szerint csak a Due-n van, már külön D/A konverter és valódi analóg kimenet).
De van pár megoldás erre az arduino.cc oldal tudástárában (kommunikáció PC-vel rész alatt).
Én is kérdeznék: hogy lehet azt Win 7 alatt megoldani, hogy a terminálra küldött adatokat egy file-be mentsük. Mondjuk a turbinán mért hőmérséklet értékeket szeretném naplózni.
Üdv a fórumnak! Nemrég vettem egy Arduino Uno-t, elkezdtem az ismerkedést vele. A célom egy ECU építése egy gázturbinához, amit szintén én építek. (Akit érdekel, megnézheti a Gázturbina építés topikot.) Először csak mérném a turbina paramétereit, (hőmérsékletek, nyomások, furdulatszám) utána vezérelném is a cuccot. Nem tudom hogy egy UNO elég lesz-e, majd elválik.