Neseniai eBay nusipirkau keletą radijo ryšio modulių nRF24L01. Jų kaina šiuo metu juokinga – mažiau nei 1$ už vnt. Tai mažo galingumo (iki 1mW) 2,4 GHz dažnio moduliai. Ryšys dvikryptis, t.y. ir siųstuvas, ir imtuvas viename. Lengva pajungti prie Arduino, yra keletas bibliotekų tam. Pabandžiau panaudoti juos balansuojančio roboto valdymui.
Prie kontrolerio jie pasijungia per SPI. Kaip Arduino panaudojau atmega8 su vidiniu 8MHz generatoriumi. Įrašiau atitinkamą bootloader‘į. Nereikia čia nei stabilumo, nei didesnio greičio. Bendravimui su moduliais aš panaudojau Mirf biblioteką. Yra keli pavyzdžiai ir kurių matosi, kad viskas labai paprasta. Vienintelis nepatogumas, kad dar reikia ir 3,3V. Galėtų ant pačio modulio būti stabilizatorius. Deja, jo nėra. Kad valdymas būtų patogus, pasijungiau analoginį džoistiką.
Džoistiko valdymo svirtį galima paspausti, suveikia jungiklis, kurį panaudojau papildomai komandai perduoti. Aš naudoju „return to home“ įjungimui. Dar įdėjau porą šviesos diodų. Vienas iš jų rodo, kad įjungtas režimas grįžti atgal, kitas pradeda mirksėti kai baigiasi akumuliatorius. Jie užsidega tik tada, kai gauna atitinkamą komandą iš roboto. Ryšys dvikryptis. Perduodant informaciją nereikia galvoti, ar ji bus priimta teisingai, tuo rūpinasi pati biblioteka. Tereikia pasirinkti kokiu kanalu veiks, kokiu greičiu, adresą (priims tik tas modulis, kurio adresas bus toks pat), ir nurodyti kiek baitų bus perduodama.
Veikia puikiai, tiesa atstumas nedidelis, bandymai rodo, kad apie 10 metrų. Toliau ryšys jau pradeda trūkinėt. Gaunasi visai neblogas, paprastas ir pigus valdymas, kurį galima naudoti bet kam valdyti nedideliu atstumu.
Na o palyginimui nRF24L01 ir HC-05. Kokie abiejų pliusai ir minusai?
Bluetooth – kai reikia ryšio su kompiuteriu, telefonu, planšete. Tokiu atveju su bluetooth daug paprasčiau, nes vienam gale jis jau yra. O šitie moduliai puikiai tinka kai reikia padaryt ryšį tarp dviejų mikrokontrolerių.
sveiki, norejau paklausti gal galite pasidalinti savo programos kodu, pats bandau kurti ale pulteli su WIFI moduliais ir norisi kodo pwz, o gal ir visa koda pritaikyciau. aciu
Ne, viso kodo nedėsiu. Bet jei yra kokių klausimų, kas nors neveikia, galėčiau pagelbėt (jei tai bus mano sugebėjimų ribose).
preblema yra tame kad vienas nrf24l01 prijungtas prie arduino nano, irasau pati paprasciausia koda kad siustu duomenis pvz ADC reiksme. nepavyksta issiusti, grazina FALSE reiksme o kitas arduino mega nieko nepavyksta gauti, daug pavyzdziu isbandziau, neveikia, nebesugalvoju ka daryt. buvau rades kad 3,3v maitinimas per silpnas tai pagal rekomandacijas uzkabinau po 10uF kondika, bet niekas nepadeda. gal tau kokiu pacioje pradzioje buvo betu sujungiant tuos du nrf24l01 kad eitu valdyti
pultas toks https://drive.google.com/file/d/0B7l6SxJ3dkyCNkJlbElvdzVsQ00/view?usp=sharing
Jei naudojama Mirf…
Setup:
Mirf.cePin = 16; // prie ko pajungta
Mirf.csnPin = 10;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)“1234″); // adresas
Mirf.payload = 3; // kelis baitus perdavinejam
Mirf.channel = 90; // koks nors kanalas
Mirf.config();
Mirf.configRegister(RF_SETUP,0x06); // Set 1MHz data rate – this increases the range slightly
Mirf.configRegister(EN_AA, 0x00); //Disable auto-acknowledge
Išsiuntimas:
Mirf.setTADDR((byte *)“1234″); // adresas
Mirf.send((byte *)&txdata); // txdata – keletas perduodamų baitų
while(Mirf.isSending()); // būtina palaukt kol perduos
Gavimas:
if(Mirf.dataReady()){
Mirf.getData(rxdata); // gaunam kelis baitus
}
bandziau ir su MIRF biblioteka tavo pateikta varianta, nieko nenusiuncia. kazkur kazka esu priveles. siaip bandau naudoti RF24 library
viskas veikia, tiesiog pries siunciant reik duomenis sudeti i masyva, o nusiuntus, vel pasiimi is masyvo ir viskas puikiai veikia, nors pvz ir be masyvo veikia. istrink mano pasikartojancius komentarus.
Taip, žinoma į masyvą, jei perduodama keletas baitų.
O kiek tie moduliukai kainuoja, o tarkim jei noriu padaryt su 5 relem valdyma pulteliu per wifi gal imanoma rast koki jau padaryta projekta, nes nelabai programuot moku o noretusi kazka tokio padaryt ;)
Tai juk parašyta kiek kainuoja… :) O tokių kaip tu nori pilnas ebay…
sveikas dar karta, duomenis is pulteliu nusiuncia, robotukas viska gauna nera problemu, bet bandant pasidaryt kad pultelis ir siustu ir kartu ir gautu duomenis, man su pulteliu nepavyksta gauti, tiksliau su if(Mirf.dataReady()){Mirf.getData(&a);} gaunu duomenis kuriuos issiuncia i pulteli robotas, bet man reik kad juo rodytu realiu laiku. darau su while(!Mirf.dataReady()){} Mirf.getData(&a); ir tiesiog negauna jokiu duomenu. jei uzkomentuoju issiuntima i robota, tada gauna pultelis duomenis tavrkingai, bet kartu siusti ir gauti nesugeba, tiesiog pultelis nuluzsta. robotuke to nera jis pasiima duomenis apdoroja ir grazina man i pulteli tvarkingai. robote yra arduino mega, pultelis su arduino nano, kur ieskoti problemu, gal tiesiog arduino nano per silnas?
while(!Mirf.dataReady()){Serial.println(„loading…“);} ir kai nano luzsta visalaik sukasi ciklas. negauna tipo duomenu, nors su if karrt nuo karto atsinaujina duomenys, kas kelias sekundes.
Kas pas tave yra „a“? Masyvas? Pabandyk Mirf.getData(a); Bet šiaip sunku suprast kame gali būti reikalas… Per mažai info…