Het Elektor forum gaat sluiten. Zie ook deze link. Vanaf vrijdag 15 maart is het niet langer mogelijk om in te loggen op het forum. Wel blijft de inhoud van het forum nog zichtbaar tot het einde van de maand maart. Per 1 april gaat het forum definitief uit de lucht.

GPS voor modeltreinen

Ontwerpen en programmeren

Postby anneo » Fri Aug 26, 2011 12:00 am

Met blijdschap maar tot mijn schande moet ik mededelen...
Laat Jan dan toch goed zitten en ik maar moeilijk doen
Het zit m in de begrippen tijdstip,tijdsduur en tijdsverschil.
De tijd om van zender naar micros te komen Ri en Rd omdat het begin onbepaald is erbij levert stralen van cirkels op die onbekend zijn.Maar door één van de Ri nul te stellen wordt dat de referentie en de andere Ri tijdsverschillen,die we wel kennen.De verandering van de "kwaliteit" van de Ri drong pas laat tot me door.
Laat ik het 's anders uitleggen,wie weet ben ik niet de enige die het er moeilijk mee heeft .
Stel de tijd van de zender naar de dichtsbij gelegen micro = T
Dan komt de piep bij de anderen na T+t1 en T+t2.Die t1 en t2 zijn bekend.Dan zit de zender op cirkels met straal=T rond de eerste micro en met stralen T+t1 en T+t2 rond de anderen.
Dat levert drie vergelijkingen van cirkels met onbekenden T,x en y.
Die moeten opgelost en daar is worteltrekken bij nodig,lastig.
Anne
anneo
 
Posts: 1339
Joined: Thu Jan 02, 2014 10:36 am

Postby tymenyel » Sat Aug 27, 2011 12:00 am

Aan Anne,

Ik had dat al eerder bedacht aleen had ik t1 A genoemd en t2 B. de rest van de formule's zijn inderdaad vergelijkingen van circels. Het verschil in de formule's is dat Jan drie micros op de X-as heeft en ik had er ook eentje op de Y-as.

Aan Jan Lichtenbelt

Nog even over het worteltrekken met de formule
a=(x/a+a)/2
en een seed berekenen (van een paar opmerkingen terug)

ik gebruik die formule voor 80bit fixed point met de komma op 40bit en ben ik met 5 stappen klaar. Ik programmer wel in assembly waardoor ik meer grip op de variabelen heb dan met C mogelijk is.
Met de halveringsmethode moet ik 80 stappen doen. Ik heb ook nog het risico met vermenigvuldigen dat ik een overflow en daardoor een onbruikbaar getal krijg. Daarom gebruik ik een andere formule. Ook met Newton-Raphson had ik dat probleem.

Ik wil de formule ook in 3D toepassen, dat lukt niet met drie micros op een rij. Ik ga nog even door met zoeken.

Groeten, Martijn.
tymenyel
 
Posts: 203
Joined: Thu Jan 02, 2014 3:27 pm

Postby jan.lichtenbelt » Sat Aug 27, 2011 12:00 am

Beste Martijn,

Sorry, ik had niet goed gekeken naar jouw oplossing voor worteltrekken. Ik heb er nu beter naar gekeken en de oplossing is, als ik het goed heb, is het de Babylonian method http://en.wikipedia.org/wiki/Methods_of_computing_square_roots.
Ik heb het geprobeerd met Excel en inderdaad geeft deze methode zeer snel goede oplossingen. Mijn halverings methode, is meer een algemene methode om een nulpunt van een functie te vinden, dus niet specifiek voor worteltrekken.

Over de 3D ultrasone GPS oplossing zal ik ook nadenken. Een leuk probleem.

Groetjes

Jan
jan.lichtenbelt
 
Posts: 195
Joined: Thu Jan 02, 2014 3:28 pm

Postby jan.lichtenbelt » Sat Aug 27, 2011 12:00 am

Beste mensen,

De 3D oplossing is een eenvoudige uitbreiding van de 2D oplossing (zie elders).
Je hebt nu naast de ontvangers op (0,0,0), (X2,0,0) en (2X2,0,0) een extra ontvanger nodig op (0,0,Z2).
De (X,Y,Z) coördinaten van de zender worden gevonden m.b.v. onderstaande formules:

De formules worden eenvoudig als je 3 ontvangers op een rijtje zet, op gelijke afstanden, dus met coördinaten: (0,0,0) (X2,0,0) en (2*X2,0,0).
Een 4-de ontvanger wordt geplaatst op (0,0,Z2)
Wisten we de begintijd van de puls van de zender dan was de afstand tot de ontvangers respectievelijk R1, R2, R3 en R4. Vier cirkels trekken van elke ontvanger levert de trein op het knooppunt van deze cirkels.
Echter omdat we de begintijd van de puls niet weten, zullen we alleen de tijdsverschillen van de drie ontvangers kunnen meten. We kunnen het ook anders zeggen: de afstand van de zender tot elke ontvanger
is R1+dR, R2+dR, R3+dR en R4+dR
De vergelijking voor een cirkel is voor ontvanger 1 op (0,0,0):
X^2+Y^2+Z^2= (R1 + dR)^2 [1]
ontvanger 2 op (X2,0,0):
(X-X2)^2+Y^2+Z^2=(R2 + dR)^2 [2]
ontvanger 3 op (2X2,0,0):
(X-2X2)^2+Y^2+Z^2=(R3 + dR)^2 [3]
ontvanger 4 op (0,0,Z2):
X^2+Y^2+(Z-Z2)^2= (R4 + dR)^2 [4]

Nu moeten we elimineren tot we dR overhouden en wel als volgt:
Uit [1] - [2] volgt:
X= [X2^2 + (R1+dR)^2 - (R2+dR)^2] / ( 2*X2) [5]
Uit [1] - [3] volgt:
X= [4 X2^2 + (R1+dR)^2 - (R3+dR)^2] / ( 4*X2) [6]

En tenslotte X uit [5] = [6] volgt.
dR= 1/2 * (2*X2^2 - R1^2 + 2 R2^2 - R3^2) / ( R1 - 2R2 + R3) [7]

Voor de ontvanger die de puls het eerst ziet wordt Ri =0 gekozen. Of anders gezegd, de afstand van de zender tot die ontvanger is dan dR.

Als ontvanger 1 de puls het eerst ziet dan is
dR= 1/2 * (2 X2^2 + 2 R2^2 - R3^2) / ( R3 - 2R2 ) [7a]
idem voor ontvanger 2:
dR= 1/2 * (2*X2^2 - R1^2 - R3^2) / ( R1 + R3) [7b]
idem voor ontvanger 3:
dR= 1/2 * (2*X2^2 - R1^2 + 2 R2^2 ) / ( R1 - 2R2 ) [7c]

Nu is dR dus bekend en X kan berekend worden uit [5] of [6].

Uit [1] - [4] volgt:
Z= [Z2^2 + (R1+dR)^2 - (R4+dR)^2] / ( 2*Z2) [8]

Y wordt tenslotte berekend uit [1], [2] of [3], waarbij dus worteltrekken nodig is.

De zender is gevonden op (X,Y,Z)!!!


Jan Lichtenbelt

dd 30-8-2011 een kleine tekstuele aanpassing (volgorde Y en Z berekening verwisseld) aangebracht
jan.lichtenbelt
 
Posts: 195
Joined: Thu Jan 02, 2014 3:28 pm

Postby anneo » Mon Aug 29, 2011 12:00 am

Awel Jan,da's hard gewerkt
Die manier met dR enzo,is zeker om het algemeen te houden zodat je pas op t laatst een van de Ri op nul kunt zetten
Het zijn bij 3D wel bollen,geen cirkels
Als ik het goed begrijp zit het zo.
De x en y bollen snijden in een cirkel loodrecht op de x-as.Waarna de z-bol er twee keer door gesneden wordt,geeft twee oplossingen.Komt door plus en min vierkantswortel(denk ik toch).
Voor het vervolg kan dit wel nuttig zijn,
Anne
Attachments
MurataUS.pdf
(1.36 MiB) Downloaded 56 times
anneo
 
Posts: 1339
Joined: Thu Jan 02, 2014 10:36 am

Postby jan.lichtenbelt » Tue Aug 30, 2011 12:00 am

Beste Anne,

Bij 3D gaat het inderdaad om bollen. De zender zendt een puls uit in alle richtingen en na een tijdje t is deze puls op een afstand t*v gekomen. Met v de geluidssnelheid. Dit is inderdaad op een bol.
Stel de zender staat in de oorsprong (0,0,0) dan is de vergelijking van de bol na t sec.: X^2+Y^2+Z^2=(t*v)^2. Staat de zender op een willekeurige plaats (X2,Y2,Z2), dan is de vergelijking:
(X-X2)^2+(Y-Y2)^2+(Z-Z2)^2=(t*v)^2.
Als je even voor het gemak de geluidssnelheid bekend veronderstelt, dan kan je in principe de plaats van de zender vinden (3D) m.b.v. 3 ontvangers op willekeurige plaatsen. De vergelijkingen worden lastig oplosbaar en dat is niet wenselijk (zo niet onmogelijk) voor een microcontroller. Mijn keuze van de 3 ontvangers in één vlak maakt dat er eenvoudige oplossingen uitrollen, die in een microcontroller op te lossen zijn. En met 3 ontvangers zijn 3 parameters te bepalen, nl de coördinaten van de zender (X,Y,Z).

Tenslotte blijkt de geluidssnelheid nogal temperatuur afhankelijk te zijn. Als je een kamer hebt, die nagenoeg altijd dezelfde temperatuur heeft, dan kan je met 3 ontvangers volstaan. Wil je de geluidssnelheid toch bepalen, dan heb je de vierde (2X2,0,0) ontvanger nodig. Deze opstelling is dus algemener.

Je vraagt over het teken. De vergelijking voor de bol is X^2+Y^2+Z^2=(R4+dR)^2 hieruit volgt:
Y^2= (R4+dR)^2-X^2-Z^2 en na worteltrekken:
Y= +/- wortel[(R4+dR)^2-X^2-Z^2]
dus er zijn 2 oplossingen (X,Y,Z) en (X,-Y,Z). Je kan dat voorstellen dat 2 treinen op een bepaalde afstand van het vlak waar de ontvangers staan opgesteld aan beide zijden van dat vlak precies dezelfde afstand hebben tot de ontvangers en dus dezelfde tijdsvertragingen gemeten zullen worden. Maar in praktijk zal je de ontvangers aan één kant van de kamer plaatsen, zodat alleen de + oplossing van belang is. (Sorry, dit is moeilijk uitleggen in woorden)

Ik zit nog te kijken naar de gevoeligheden voor fouten. B.v. als de ontvanger voor bepaling van Z relatief laag is opgesteld en de trein bevindt zich daar ver verwijderd van dan zal de fout in Z groot zijn.

Bedankt voor de betere datasheet van de MA40 zender en ontvanger. Je ziet dat je als je de 2D opstelling gebruikt het vermogen van de zender en de ontvanger niet optimaal zijn (bij 90 graden zijn ze zelfs minimaal). Dus een 3D opstelling zal altijd de voorkeur hebben.
Ik zal de elektrische oplossingen nog bestuderen.

Groetjes

Jan Lichtenbelt
jan.lichtenbelt
 
Posts: 195
Joined: Thu Jan 02, 2014 3:28 pm

Postby anneo » Sun Sep 18, 2011 12:00 am

Na lang zoeken,vergelijken,puzzelen en peinzen iets bij elkaar gehangen wat een aanzet kan zijn om 's wat uit te proberen.
Bekijk het en dan hoor ik wel wat er van gedacht wordt.
Anne

.txt vervangen,vergeten dat je (bij wijze van spreken)tot slot de rommel moet opruimen en een 0F moest F0 zijn.
Attachments
PLBP-tiny2313-BEZIG--.txt
(5.51 KiB) Downloaded 51 times
CA.7.JPG
CD.JPG
anneo
 
Posts: 1339
Joined: Thu Jan 02, 2014 10:36 am

Postby jan.lichtenbelt » Tue Sep 20, 2011 12:00 am

Beste Anne,

Leuk dat je er mee door bent gegaan. Ik had wat panne met andere elektronika, die eerst opgelost moet worden.

Maar heb je het al in praktijk geprobeerd? Ik zal je ontwerp eens goed bekijken. Alleen ik ken ATtiny niet laat staat de programmeertaal. Ik werk meer met microchips.

Maar bedankt voor al je werk.

Groetjes

Jan
jan.lichtenbelt
 
Posts: 195
Joined: Thu Jan 02, 2014 3:28 pm

Postby anneo » Wed Sep 21, 2011 12:00 am

Nee,uitproberen zit er niet echt in,vanuit bed
tIs een AVR omdat Martijn vertelde dat ie daarvoor allerhande rekenroutines had uitgezocht.
Ik heb alleen pratische ervaring met de Z80.
Die "kromme" instructies van een PIC,gaat wel maar "daar houdt tie niet van"
Hoewel de AVR ook zn vervelende kanten heeft,sommige instructies doen het niet voor alle registers/poorten.
Zo kwam ik tot de ontdekking,na het prog door de assembler gedraaid te hebben,dat er iets niet ging.
Op het eind komt er SBIC MCUSR,1 om de volgende instructie over te slaan als bit1 van poort MCUSR op nul staat.
Gaat niet,poort moet kleiner dan 32 zijn,is hier niet.Dus te veranderen in
IN Wp,MCUSR en dan SBRC,1 .Dat laatste is hetzelfde voor registers en doet het alleen voor die groter dan 15
Wp is register 25 en dus gaat het zo.(gebruik Wp als Werkpaard,zoiets als W bij de PIC of A van de Z80)
Anne
anneo
 
Posts: 1339
Joined: Thu Jan 02, 2014 10:36 am

Postby laurens wilde » Fri Jun 01, 2012 12:00 am

Ten eerste een knap stukje werk.

Mogelijk een andere invalshoek gebuik maken van een Wii controler, heb deze gebruikt voor een eigen bouw touch screen.
Deze heeft een zeer gevoelige IR camera en uit te lezen met een pc via bluetooth.
Indien je de locs voorziet van een IR led zijn deze prima te tracken.

stof to na denken Nieuw project

Laurens
laurens wilde
 
Posts: 5
Joined: Thu Jan 02, 2014 3:38 pm

PreviousNext

Return to Microcontrollers

Who is online

Users browsing this forum: google [bot] and 1 guest