Fra manualen, avsnitt "Theory of operation": "if the peak is above this threshold, the measurement is considered valid and the device will calculate the distance. Otherwise, it will report 1cm". Tar du høyde for dette i programmet ditt?
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 1 juli 2018, 09:33:05
av Glattnos
Aha, tack så mycket!
Jag hade missat det. Den rapporterar alltså 1cm om den inte kan få till en mätning. Detta händer från ca 21 meter och längre med min sensor så det är ändå lite konstigt, men jag ska prova med att filtrera bort alla korta pulser så får vi se hur det går.
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 1 juli 2018, 11:16:12
av Glattnos
Nja, nu har jag testat att kolla om pulslängden är under 100us (motsvarande 10cm) och då inte använda värdet alls. Det gjorde faktiskt ingen skillnad på så sätt att när jag mäter på en vägg 20 meter bort så visar den rätt men när jag backar så börjar värdet att "hoppa omkring" överallt.
Jag testade då att bara använda pulslängden om den är mellan 100us och 20 000ms(10cm till 20 meter) och det blir likadant då, vilket borde tyda på att sensorn skickar pulser mellan 100us och 20ms även när distansen inte är mellan 10cm och 20 meter. När jag mäter pwm-signalen med oscilloskopet så är det precis så som pulslängden beter sig också, stabil upp till ca 21-24 meter men sen hoppar den omkring mellan ca 0 och 39ms. Jag har inte någon gång lyckats få en stabil mätning över 24 meter.
Jag har skrivit till robotshop och förklarat problemet. Givaren har så himla bra omdömen överallt att det verkar konstigt om den inte fungerar bättre än min verkar göra.
Är det någon som har förslag på en annan sensor som jag kan testa så länge? Allt annat på båten fungerar och det är lite för tidskrävande att brottas med en givare just nu. Jag vill alltså kunna mäta avståndet till land från båten. Upp till ca 20 meter skulle vara bra och väderskyddad är såklart ett stort plus.
Är ultraljuds-sensor kanske ett bättre alternativ?
Jag har möjlighet att ta emot signalen på en EXT INTERRUPT-pin på microcontrollern så jag kan mäta pulslängd eller ev. bitbanga en I2C. Tror även att jag har ADC-pinnar utdragna till mina AUX-pinnar.
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 1 juli 2018, 12:13:24
av Glattnos
Kan det vara för att det inte är någon kondensator på spänningsmatningen? Dom har inte med det på kopplingen för PWM konstigt nog. Matningen från kortet och mitt labbaggregat är ju rätt stabila(får samma resultat från sensorn oavsett vad jag matar ifrån).
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 4 juli 2018, 09:45:30
av Glattnos
Som test kopplade jag givaren till en Arduino UNO exakt som i manualen och åkte till flygfältet för att hitta öppen yta utan träd och buskar. Jag höll ut givaren igenom bil fönstret så stadigt jag kunde. Såhär ser mätningarna ut när jag börjar 11 meter ifrån en vägg och backar till lite över 40 meter. Man ser att nått händer vid 32 meter(under dessa goda förhållanden gick det lite längre än bara drygt 20 meter). Som jag förstod det från manualen så ska den rapportera 1cm om den är out of range eller inte kan bestämma avståndet. Problemet är ju främst inte distansen utan det är ju att jag vill att givaren rapporterar "out of range" om den inte kan få till en mätning, vilket den inte gör utan skickar ut allt ifrån 1-2 meter till 37-38 meter.
Kom just på ett problem, om givaren rapporterar 1 cm så blir nog det 0 på en Arduino Uno eftersom jag har för mig att microseconds() ökar med 4 var 4:e sekund på en sån, vilket resulterar i 8us istället för 10us på en centimeter och då avrundas det nog till 0(vilket inte skrivs ut av Arduinon) istället för 1. Typiskt...ska jag behöva göra om testet.
Man kan förstås filtrera(mer än jag redan gör) i båt-programmet genom att läsa in ett antal värden och kolla skillnaden mellan högsta och lägsta, vilket ju teoretiskt inte får vara mer än båtens hastighet/mätningens tidsfönster. Är det mer än det så anser man att det är "out of range".
Jag har skickat mätdatan till Robotshop så får vi se vad dom säger.
Problemet du har är att du har ett bakgrundsbrus som är högre än inställd detektionströskel. Så länge din nyttosignal är högre än bakgrundsljuset så får du stabila avstånd. Men när avståndet ökar sjunker nyttosignalen med 1/R^2. Och när signalen blir för svag tar den den starkaste pulsen (troligtvis solljus) som avstånd.
Går det att trimma minimitröskeln?
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 4 juli 2018, 17:01:59
av Glattnos
Du har säkert rätt. Det går att ändra lite olika inställningar via I2C men jag kör den default på PWM. Jag vet inte om värdena kan ändras via I2C och sen sparas så man kan köra PWM med de nya inställningarna. Men ska se om det går att utröna det eller eventuellt testa.
Robotshop är mycket hjälpsamma och skulle kontakta tillverkaren för dom höll med om att det såg konstigt ut.
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 6 juli 2018, 20:33:30
av KLset
Vilket spännande projekt. Har du inte spelat in någon video som du kan lägga upp?
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 7 juli 2018, 15:03:15
av Glattnos
Jag ska se om jag kan ladda upp en film, har dock ingen direkt superintressant film på den men har ett klipp som jag filmade med telefonen
Problemet med lidar-sensorn är löst nu! Tillverkaren trodde att PWM-pulsen blir för lång för att "hinnas med" när det börjar bli uppåt 20-30 meter, dvs. det krockar med sensorns normala operationer och (min gissning) "hackas upp" på nått sätt så att det blir så varierande distanser. Jag har provat sensorn med I2C och då fungerar den bra så nu har jag lött om lite på kortet för att få en till I2C-port. Det funkar bra som det ser ut
Nästa steg nu är att byta kompass-sensor. Jag har skaffat en sånhär: https://www.electrokit.com/produkt/komp ... l-hmc6343/ och hoppas att den ska påverkas mindre av motorns gaspådrag, den verkar ha rätt mycket internt trolleri och påstås vara mindre kännslig för störningar och är även tiltkompenserad.
Den förra sensorn påverkades lite för mycket av motorns gaspådrag för att vara tillräckligt tillförlitlig enligt min bedömning. På bilden syns ett "fram och tillbaka"-mönster som är när båten kört helt själv över en sjö i drygt en timme. Nertill syns det att spåret är "jackigt" och det beror på att kompass-sensorn visar fel. När kompassen visar fel så håller båten upp för lite emot vind och vågor vilket resulterar i att den driver av från linjen för att sedan "hämta upp avdriften". Det blir jackigt när den gör det flera gånger. Jag har testat med aggressivare linje-hållning vilket då kompenserar rätt bra för kompassfelet men en annan effekt man får är att när kompassen visar olika mycket fel beroende på kurs så blir en 90 graders sväng sällan 90 grader, vilket gör att jag bestämt att byta sensor.
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 7 juli 2018, 16:16:58
av KLset
HMC6343 var inte billig! Jag köpte en MPU9250 till mitt helikopterprojekt som har en AK8963 3-axis kompass integrerad i paketet. Den kostade mindre än en tiondel av HMC6343.
HMC är från Honeywell, AK från AKM. Någon som vet om deras kompasser konkurrerar om markanden eller om de har olika nischer?
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 7 juli 2018, 16:45:28
av Glattnos
HMC6343 har ju mjukvara och processor inbyggt som beräknar kursen. "Modulen beräknar och lämnar kompassriktning, nogrann till ett par grader. Den kompenserar för lutning och är kalibrerad för att vara okänslig för magnetiska störningar."
Så jag tänkte att den ger bäst förutsättningar för att komma vidare i projektet. Priset är relativt hutlöst men samtidigt så anser jag det vara värt det om jag för pengarna får kompasskurs med några graders noggrannhet och okänslig för lutning och magnetisk störning. Det skulle kosta mig mycket mer i arbetstid för att programmera det själv Nu vet jag inte om MPU9250 också har detta inbyggt, om den har det så skulle jag naturligtvis ha valt en sån
Dock har jag redan stött på ett problem. Min uC går på 5V och sensorn går på 3.3V. Jag har 3.3V också på kortet men I2C-ledningarn kommer direkt från uC:n (Atmega328PB). Jag hade för mig att man bara kopplar pull-up motstånd till 3.3V och sen funkar det eftersom ingen I2C enhet ska dra någon ledning hög utan bara sänka till låg. MEN...här står det att man måste ha en bi-directional 3.3V <--> 5V converter. Måste man ha converter eller är det bara en rekommendation för att skydda ifall man råkar programmera fel?
Det är mycket glädjande att följa denna tråd och att se att man kan investera i hårdvara för att spara mjukvara! Det har ju ett pris hur man än ser det. Att komma i mål med projektet och tankarna är ofta mycket viktigare om man har möjlighet att lösa det ekonomiska!
Jag är mycket tacksam för all beskrivning i denna tråd! Ser man sambandet finns det en enorm potential i detta och några andra projekt här.
Skulle gärna kunna följa det live!
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 7 juli 2018, 17:41:54
av Glattnos
Lasp: Va bra att det uppskattas
Och här kommer filmen, man ser här när den gör "jacken" pga. kompass-felet.
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 7 juli 2018, 17:58:59
av Borre
Har du två lämpliga mosfet över gör såhär för 3.3-5V.
Re: Programeringsfrågor C++ radiostyrd båt
Postat: 7 juli 2018, 18:50:33
av Glattnos
Tackar Jag ska föra in detta på uppdaterings-listan för nästa kort.