Sida 1 av 1
Metod för att detektera olika "individer"
Postat: 27 februari 2015, 12:58:27
av vix85
Hej!
Jag har tänkt dra igång ett projekt som ska fungera som ett spel som går ut på att man kopplar på brickor på varandra, och då tänkte jag att man ska kunna detektera vad det är för bricka som kopplats på med hjälp av en mikroprocessor som sitter på ett masterkort, och helst i vilket läge som brickan kopplats på. Det kanske rör sig om 20-30 olika brickor som ska användas. Man behöver t.ex. kunna detektera att från masterkortet så sitter det 5st olika brickor i serie efter varandra.
Kravet är att varje bricka ska vara så billig som möjligt, helst med en eller fåtal komponenter under 10kr (antingen ytmonterat eller hålmonterat). Maxavståndet från masterkortet till brickorna kommer förmodligen vara 1-2 meter.
Jag har funderat på följande lösningar som kan vara i en bricka, men är osäker på om de är genomförbara.
- Använda en mikroprocessor i varje bricka med unik adress och unikt ID. (Vilken buss lämpar sig, UART? Vilken processor är billigast o effektivtast för ändamålet? Jag är mest van vid Atmega328 men kanske STM Arm 8 bitars har billiga varianter?)
- Använda EEPROM med UART interface (verkar vara ovanliga, och kanske dyrare?)
- Använda EEPROM med I2C/SPI interface (Kan det finnas problem att hantera I2C eller SPI enheter på det avståndet och hur många kan man koppla på?, med SPI går det ju t.ex. åt många pinnar)
- Olika motståndsvärden på varje bricka, och med hjälp av AD omvandlare mäta och få fram information om vilken bricka som kopplats på. (kan bli svårt att avgöra positioneringen på dom?)
- Andra ideer? Skapa egen logik kanske?
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 13:05:05
av Nerre
Hur många "platser" finns på varje bricka dit andra brickor kan kopplas?
Kan brickor anslutas precis hur som helst eller har varje bricka en identifierbar "ingång" och flera separata "utgångar"?
Jag tänker mig att Master-brickan frågar anslutna brickor "Hej, vem är du och vilka är kopplade till dig", den anslutna brickan frågar i sin tur de brickor som "hänger" på den och returnerar ID till Mastern vartefter de kommer in. Krävs nån form av multiplexning av anslutningarna antar jag.
Det blir dock en rekursiv lösning då och det kan ju finnas risk för loopar om de kan vara kopplade hur som helst. Men om det bara går att koppla som träd så är det ju lugnt.
Läser jag igen så låter det som de bara kan hängas i serie med varandra, varje bricka har bara två anslutningar?
Hur snabbt måste det gå? Hur störningssäkert ska det vara?
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 13:11:10
av Icecap
Kopplas brickorna ihop eller placeras de på färdiga platser?
Om det är färdiga platser är 1-Wire® nog ganska bra till detta. Kanske DS28E05?
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 15:12:37
av vix85
För att förtydliga vad jag menar så sätts varje bricka i serie med varandra fysiskt, dock skulle dom elektriskt kunna bli ihopkopplade parallellt på samma ledare om det blir enklast att göra så beroende på lösning.
Jag har tänkt att brickorna kan ha lite olika anslutningar i kontakterna för att begränsa lite vilka som kan anslutas till varandra, en bricka kan ha 1-5st anslutningar.
Dom kan anslutas till varandra i ett "rutnät" vilket jag antar försvårar identifieringen hur dom är ihopkopplade. Jag tänkte att det inte finns några färdiga positioner som dom kopplas in i, men om det inte går att lösa på annat sätt så är jag öppen för den iden också.
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 15:31:28
av Icecap
Det gäller alltså om att kunde detektera hur en "serie" ser ut? Om vi nu antar att de har fortlöpande nummer (1, 2, 3, 4, 5...) ska det då kunde kollas om de är kopplad som 1, 2, 3, 4, 5 eller 1, 2, 4, 5, 3?
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 16:10:16
av vix85
Ja precis man vill kunna kolla i vilken ordning dom sitter. En serie av brickor ska även kunna kopplas ihop med en annan serie av brickor, så det bildas ett rutnät/matris där man behöver kunna detektera hur varje bricka är ansluten.
Så frågan är om masterkortet kan få reda på alla brickors positioner "på egen hand" eller om man måste ha mer logik i varje bricka som tar reda på sina anslutna grannbrickor (t.ex med en mikroprocessor i varje bricka?)
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 16:18:28
av vix85
Nerre skrev:Hur många "platser" finns på varje bricka dit andra brickor kan kopplas?
Kan brickor anslutas precis hur som helst eller har varje bricka en identifierbar "ingång" och flera separata "utgångar"?
Jag tänker mig att Master-brickan frågar anslutna brickor "Hej, vem är du och vilka är kopplade till dig", den anslutna brickan frågar i sin tur de brickor som "hänger" på den och returnerar ID till Mastern vartefter de kommer in. Krävs nån form av multiplexning av anslutningarna antar jag.
Det blir dock en rekursiv lösning då och det kan ju finnas risk för loopar om de kan vara kopplade hur som helst. Men om det bara går att koppla som träd så är det ju lugnt.
Läser jag igen så låter det som de bara kan hängas i serie med varandra, varje bricka har bara två anslutningar?
Hur snabbt måste det gå? Hur störningssäkert ska det vara?
Glömde svara på prestandafrågorna, under 10s måste man iaf kunna detektera en ny påkopplad bricka, och det får inte bli felaktig tolkning av brickan (en checksumma är nog lämplig om alla sitter elektriskt parallellt) eller utebliven detektering när en bricka kopplas på.
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 17:42:34
av MagnusK
Annars kan man kanske göra som i Boggle Flash spelet, där man ska sätta moduler med bokstäver så de bildar ord.
Vad jag förstått av dessa länkar så använder det IR kommunikation emellan.
Men du ville ha flera kopplingsmöjligheter? Borde ju iof gå att ordna med detta också.
http://www.worldofboardgames.com/boggle_flash
En person i länken nedan har tagit foton på hur Boogle FLash ser ut innuti.
http://electronics.stackexchange.com/qu ... ity-and-id
På ett annat ställe så står det att det använder NFC (Near field communication).
Kom på en sak nu, blir väl lite dyrt men skulle man inte kunna använda sig av de här knappcellerna (kommer inte ihåg namnet på dom)
med 64-bitars id-kod i sig och läsare?
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 20:17:26
av Nerre
Kopplar du dem parallellt kommer du aldrig kunna få fram i vilken ordning se sitter, vill du kunna få fram ordningen måste du "kaskadkoppla".
Men kan de kopplas i en matris så kommer ju den teknik jag beskrev att ge "loopar" som på nåt sätt måste detekteras. Om vissa anslutningar kan vara både "ingång" och "utgång" blir det betydligt svårare.
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 20:32:11
av Icecap
I och med att det kan bli fråga om ringbildning blir det hela en del klurigare. Själva elektroniken ska gå att lösa men kommunikationen kan bli mycket intressant.
Jag tycker att det borde ske på ett sätt som definierar om "nästa bricka" sitter rakt på eller på höger eller vänster sida. På det vis kan avfrågningen skapa en matris över placering, typ och adress.
Och ett system med några små µC kan nog fungera, kommunikationen kan då ske vid att ha en enda kommunikationslina som används som halv duplex.
Om man tänker lite som Dallas' 1-Wire bus och där en bricka ha en "ingång" och var sin utgång på de resterande sidor, då kan det bli rimligt enkelt.
Master Frågar: "Ingen adress, Vem är du och vilka av dina portar används?"
Slav Svarar: " Jag är #xx och rakt fram samt vänster är anslutna."
F: "#xx, jag vill ha adress på enheten rakt fram"
osv.
På det vis kan man skapa en tabell/matris med adress, typ och placering i minnet på mastern och sedan kan man jobba därifrån.
Man kan såklart även göra så att om en bricka ansluts skickar den ut en "Hej master, jag är #xx och är av typ yy". Detta meddelande måste ju gå genom alla brickor det finns mellan brickan o mastern och de lägger på deras info om deras nummer samt position de fick meddelande ifrån.
På detta vis behöver man inte att polla skiten men kan få en snabb uppdatering.
Ett meddelande på detta vis som byggs på eftersom kommer, efter 10 extra led, att fylla runt 50 bytes eller så. Med 300 baud (mycket långsamt) tar det runt 1,5 sek att föra över informationen från siste bricka till mastern.
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 22:30:02
av robbie
Det billigaste är väl olika motståndsvärden och AD-omvandlare och låta en mikroprocessor sköta minneshanteringen av vart resp. bricka ligger.
Re: Metod för att detektera olika "individer"
Postat: 27 februari 2015, 22:57:05
av vix85
Tack för era tips.
Om man kör motståndsvärden är det då möjligt att detektera deras position med ad? Verkar klurigt.
Funderade också på en microcontroller i varje bricka som känner av när nya brickor kopplas på o meddelar mastern detta, gäller o fundera igenom eventuella kollisioner bara om flera brickor känner av samtidigt att en ny bricka placeras emellan dom.
Re: Metod för att detektera olika "individer"
Postat: 28 februari 2015, 08:31:21
av Nerre
Just av den sista anledningen tror jag att en lösning med polling är vettigast, kollisionshantering är bökigare och även med en låg hastighet som 2400 bps så lär du klara av att detektera ett gäng brickor på några sekunder.