IR-kommunikation mellan FOX Board och Lego Infrared Sensor

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
rms
Inlägg: 5
Blev medlem: 2 april 2008, 15:09:15
Ort: Göteborg

IR-kommunikation mellan FOX Board och Lego Infrared Sensor

Inlägg av rms »

Hej!

Håller på med en "intelligent" trafikkorsning i ett projekt i skolan. Vi bygger trafikkorsningen med hjälp av ett FOX Board (http://www.acmesystems.it/?id=4) och bilarna vi ska kommunicera med är Lego NXT-robotar. Vi har tänkt upptäcka bilar som kommer till korsningen med hjälp av IR (möjligen genom att bilarna identifierar sig själva), och även meddela bilarna över IR om det är rött eller grönt.

Bilarna har en HiTechnic Infrared Link Sensor (http://shop.lego.com/Product/?p=MS1046) som vi hoppas kunna kommunicera med. Problemet är att IR är väldigt nytt för oss och det har varit svårt att hitta resurser för hjälp, speciellt när man inte riktigt vet var man ska börja.

Vi har beställt Everlight TM3201/TR2 transceivers
(http://www.elfa.se/elfa-bin/setpage.pl? ... k=7516.htm) men efteråt funnit att IR-sensorn på Legoroboten inte verkar kunna kommunicera med IrDA (http://bricxcc.sourceforge.net/nqc/doc/ ... l#irlaptop). Vad är skillnaden?

Så vi behöver någon som kan tipsa om IR-mottagare/sändare som vi kan använda på FOX Boarden för att kommunicera med bilens IR, eller iallafall som fungerar på FOX Boarden, så kanske vi kan lösa kommunikationen med bilen genom att använda samma IR-mottagare/sändare där. (FOX Board pinout: http://www.acmesystems.it/?fv=top&id=18)

Det var själva hårdvarubiten. När allt är kopplat sen, är det bara att läsa av input/output linesen eller behöver man någon drivrutin etc? Hur vet man när ett kommando/meddelande börjar och slutar t.ex.? FOX Boarden kör Linux och vi programmerar i C.

Tack på förhand,
Mattias
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Hmm på min tid fanns det inga sådana här tuffa legobitar... men jag har i alla fall lekt med både Lego och FOX Board.
Första frågan vilken frekvens & vilket protokoll som används av MS1046? Och det var inte lätt att hitta...
http://news.lugnet.com/org/it/itlug/?n=6621&t=f&v=a
http://www.tau.ac.il/~stoledo/lego/AVR-ir/

Vet inte om de länkarna ger nått? I övrigt borde det vara en vanlig IR-mottagare på 36-38kHz som används, skulle gå att koppla till FOX Board's serieport med en Lirc-mottagare (http://www.lirc.org).

Edit: Välkommen till forumet!
rms
Inlägg: 5
Blev medlem: 2 april 2008, 15:09:15
Ort: Göteborg

Inlägg av rms »

Tack för det snabba svaret!

Du har helt rätt, Lego IR-mottagaren/sändaren är på 38kHz. Protokollet verkar däremot svårare att få tag på. Lego har släppt IR-protokollet till sin Power Functions IR (http://www.brickjournal.com/news/2008/1 ... pen-source) och kanske är det något liknande till MS1046:an. Även för föregångaren till NXT, RCX, finns protokollet specifierat (http://www.generation5.org/content/2001/rob08.asp). Men hittar inget för just NXT (MS1046:an).

Lirc ser väldigt intressant ut. Har du själv kompilerat det till FOX Boarden nån gång? Försökte idag kompilera det på min egna dator enligt instruktionerna på lirc.org och sedan skicka över till FOX Boarden, men det gick inte så bra. Jag antar att man behöver kompilera med Phrozen SDK:n från Axis, hur nu det skulle gå till. Får försöka mer imorgon. Annars, skulle det här kunna hjälpa oss (http://www.acmesystems.it/?id=35)?

Om man inte skulle få igång detta, skulle man (som en nödlösning) kunna skicka 1or (IR-dioden lyser alltså) hela tiden ifall det är rött, och inget alls ifall det är grönt? Eller det går bara att skicka pulser?
Isåfall ungefär likadant på bilen; att den hela tiden lyser och att man vid trafikkorsningen läser av en 1a som att en bil är på väg? Skulle man kunna koppla IR-sändaren och IR-mottagaren på FOX Boarden till varsin vanlig IO-port då eller det ska fortfarande vara på serial-porten? Eller det är inte så lätt?
Senast redigerad av rms 3 april 2008, 22:01:02, redigerad totalt 2 gånger.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Ja, du måste göra en korskompilering om du ska göra det på PC:n. En PC-binär blir inte körbar på Foxen.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Det borde ju gå att koppla till I/O-n också, om man har en 3.3-volts mottagare. Men det stora problemet blir protokollet!
En 3.3volts mottagare är en bra början, sen är det protokollanalys som gäller.

Om jag inte minns fel måste en IR-diod pulsas, annars blir räckvidden dålig.
rms
Inlägg: 5
Blev medlem: 2 april 2008, 15:09:15
Ort: Göteborg

Inlägg av rms »

Har testat lite med "fjärrkontrolls"-metoden nu och precis som du säger blir räckvidden dålig när vi inte pulsar, eller vi tror att det är anledningen iallafall. Vi har skrotat att försöka använda ett protokoll så länge, så det enda vi behöver kunna göra är att skicka och ta emot 1or (bilen för att berätta att den kommer, trafikkorsningen för att berätta att det är rött). T.ex. om trafikkorsningen får in en 1a så vet den alltså att en bil är på väg.


Vi har testat med mottagare ELIRM8601S (http://www.elfa.se/elfa-bin/setpage.pl? ... 021467.htm) och diod LD271 (http://www.elfa.se/elfa-bin/setpage.pl? ... 019225.htm).

Våglängden är inte samma på båda, 940nm på mottagaren och 950nm på dioden, men visst borde väl det fungera hyfsat ändå? Eller skulle en diod IR333 (http://www.elfa.se/elfa-bin/setpage.pl? ... _75_225_43) fungera mycket bättre? IR-länken vi ska använda med bilen sen är på 940nm. 38kHz.


Vi har kopplat mottagaren direkt på FOX Boarden: Vout till en input-line, Vcc till en +5V Vcc och GND till GND. Inga motstånd alltså (som visas i databladet under "Application Circuit"). Skulle det hjälpa mot räckviddsproblemet, eller av vilken anledning _borde_ vi ha motstånd?

Dioden är kopplad så att katoden är kopplad till GND och anoden till en output-line på FOX Boarden, vilket väl borde vara rätt?


Inputlinen för mottagaren visar 1 när man inte riktar dioden mot den, och det hoppar mellan 0 och 1 när man gör det, varför? Har dioden nån sorts pulsering inbyggd eller är det mottagaren som pausar mellan mottagningarna? I vår kod som skickar sätter vi diodens output-line till 1 och sen rör vi inte den mer. Skulle vi kunna lösa pulseringen i programmeringen ungefär såhär (pseudo-kod):

Kod: Markera allt

While (1) {
  Sätt diodens output-line till 1.
  Vänta några mikrosekunder.
  Sätt diodens output-line till 0.
  Vänta några mikrosekunder.
}
Eller hur ska man göra? Har läst om Pulse Width Modulation och att det finns speciell hårdvara för att få rätt längd på pulserna, men det är tyvärr inget vi har tillgång till. Vår mottagare vill t.ex. ha pulser på mellan 400-800 mikrosekunder enligt databladet.


Vad kan det annars vara som är fel? För lite ström? Räckvidden när vi testar nu är bara några få centimeter och mottagarens räckvidd ska ju vara 8m, vet inte hur det är med dioden.


Om någon vill se vår testkod i C så säg till!


Tack på förhand!
rms
Inlägg: 5
Blev medlem: 2 april 2008, 15:09:15
Ort: Göteborg

Inlägg av rms »

Har testat pulsa enligt pseudo-koden ovan och det blir inte bättre (inte längre räckvidd). Använder usleep(600) för att vänta 600 mikrosekunder, men den funktionen kanske iofs inte är så exakt som behövs...?

Eller kan det vara att den får för lite ström? Hittade det här idag: "PB and all the other GPIO have a limit of 4mA source and sink." (http://www.acmesystems.it/?id=17 under "Electrical characteristics" till höger). Dioden verkar vilja ha 130mA enligt databladet?
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

verkar vilja ha

Det är förmodligen maxström för dioden.

Du bestämmer vilken ström den arbetar med. Hur är den inkopplad?

Dock så verkar ju 4mA en aning lite jämfört med maxström isåfall. Sätt en transisor (plus lämplig resistor) på utgången för att driva dioden. Då är det inga problem att få tillräckligt med ström.
rms
Inlägg: 5
Blev medlem: 2 april 2008, 15:09:15
Ort: Göteborg

Inlägg av rms »

Tackar!

Skrev hur den är kopplad i inlägget ovanför: "Dioden är kopplad så att katoden är kopplad till GND och anoden till en output-line på FOX Boarden, vilket väl borde vara rätt?"


Men våglängdsskillnaden 940nm mot 950nm ska alltså inte spela någon större roll? Räckvidden är som sagt endast ungefär 5 cm.


Någon som har en idé på hur man skulle lösa pulseringen, om det nu kan vara det som är problemet...?
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Har du kopplat dioden direkt till utgången utan motstånd emellan så är det ren tur att den inte pajat. Eller rättare sagt tack vare att utgången kanske inte klarar av att ge mer än 4mA. Alla lysdioder skall strömkopplas, d.v.s med motstånd om du driver med konstant spänning som på en utgång. Fixa en drivtransistor och ett motstånd så går det säkert bättre.
Skriv svar