Programeringsfrågor C++ radiostyrd båt

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
tingo
Inlägg: 285
Blev medlem: 17 maj 2017, 17:55:40
Ort: Oslo, Norge

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg av tingo »

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?
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg 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.
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg 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.
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg 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).
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg 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.

Kod: Markera allt

1168
1164
1155
1171
1171
1164
1167
1179
1168
1175
1174
1172
1174
1178
1179
1177
1174
1183
1178
1185
1187
1192
1193
1185
1189
1190
1195
1195
1203
1202
1210
1196
1208
1209
1210
1209
1211
1216
1213
1219
1210
1228
1225
1222
1233
1223
1230
1233
1233
1235
1230
1233
1236
1242
1238
1240
1237
1249
1251
1249
1250
1263
1261
1263
1260
1268
1272
1272
1260
1270
1277
1273
1274
1277
1277
1286
1292
1292
1292
1304
1293
1297
1301
1295
1307
1305
1320
1310
1314
1318
1318
1324
1326
1329
1333
1326
1331
1341
1348
1340
1350
1351
1353
1356
1361
1364
1356
1367
1375
1366
1366
1377
1383
1386
1390
1387
1392
1396
1395
1397
1399
1407
1410
1418
1420
1427
1426
1427
1439
1438
1435
1444
1450
1460
1450
1454
1470
1470
1459
1470
1477
1483
1491
1494
1489
1494
1503
1504
1495
1517
1527
1533
1535
1530
1539
1544
1544
1550
1560
1554
1570
1573
1584
1579
1589
1582
1593
1601
1608
1607
1607
1618
1622
1633
1625
1627
1641
1640
1641
1647
1656
1659
1660
1663
1669
1672
1679
1678
1692
1687
1697
1693
1700
1711
1712
1710
1718
1719
1739
1736
1750
1748
1748
1758
1752
1766
1760
1760
1786
1783
1786
1782
1794
1793
1810
1818
1822
1829
1834
1827
1840
1844
1842
1859
1864
1861
1875
1884
1881
1910
1896
1906
1921
1919
1910
1937
1944
1955
1963
1972
1967
1983
1971
1983
1997
1999
2018
2010
2025
2029
2039
2054
2060
2047
2069
2075
2084
2084
2106
2103
2113
2120
2128
2129
2141
2140
2143
2164
2167
2174
2191
2187
2204
2208
2221
2213
2226
2235
2245
2259
2248
2246
2272
2274
2291
2285
2295
2299
2297
2335
2324
2318
2318
2339
2348
2356
2361
2351
2378
2376
2388
2399
2389
2399
2404
2412
2434
2431
2421
2429
2439
2458
2468
2472
2474
2477
2477
2485
2498
2505
2520
2511
2513
2539
2544
2528
2552
2551
2579
2554
2581
2568
2581
2587
2592
2618
2613
2615
2620
2622
2651
2645
2653
2652
2665
2673
2686
2679
2694
2694
2694
2692
2712
2718
2714
2729
2741
2756
2733
2765
2763
2775
2769
2806
2791
2826
2790
2814
2816
2823
2830
2830
2843
2856
2869
2862
2875
2901
2897
2889
2885
2894
2905
2912
2924
2927
2956
2938
2948
2936
2960
2985
2975
2989
2999
2995
3024
3010
3021
3029
3027
3051
3044
3059
3047
3060
3088
3074
3095
3076
3091
3106
3099
3111
3135
3148
3129
3163
3148
3167
3182
3147
3176
3225
3901
3223
3850
98
3244
3226
3243
3228
3256
3255
3281
3877
3280
102
99
103
2912
3312
3320
3323
3364
3345
3326
3348
3366
3365
155
3427
3408
117
3404
239
3448
3389
3486
3509
3847
103
83
3521
3499
3895
249
3506
3878
93
3525
3534
3544
3599
3594
3580
3587
3873
1663
161
3632
1074
3659
3644
3669
3760
3857
3710
3721
3713
141
125
189
82
238
3715
101
83
3840
3731
1192
3846
3864
2810
3851
3821
3841
1192
1569
3871
3846
3885
126
3850
2084
3857
98
1170
1983
317
3905
3888
184
82
3938
3907
3928
3857
3971
3866
106
3844
1971
1431
1334
3995
3536
3976
118
3843
3217
3532
89
83
69
93
156
542
2356
92
102
102
93
122
102
152
86
1767
3846
2862
148
151
2809
3859
179
3896
2372
142
3886
165
164
1383
233
3413
203
3879
244
84
3867
3855
253
1518
136
3849
195
3806
3891
3841
3862
3861
103
277
3873
168
353
3857
3865
335
1331
290
82
1908
3856
3842
3904
102
3893
99
1185
1226
90
3862
105
84
133
3849
2033
876
3887
90
433
1908
1664
163
3901
471
3867
3889
496
90
235
479
113
3851
567
921
535
533
3881
141
548
539
558
122
576
151
2713
574
86
2014
3872
3854
585
157
1687
145
3839
103
3848
3845
3854
583
116
3890
3897
666
615
3871
641
650
3855
3856
122
110
133
156
676
3870
89
2896
656
692
697
77
3838
158
161
1098
1168
153
3815
775
742
156
3838
773
3865
3862
2328
3101
1960
290
3887
2027
83
1461
3509
103
3900
850
167
89
883
3902
3874
3868
843
151
3860
2150
3866
81
61
3840
935
3904
3852
3846
624
3837
3860
90
3891
3894
3864
1071
1917
81
3878
128
708
2714
276
92
3852
3883
3842
3844
3657
222
1112
3854
90
3776
97
684
3906
2863
1117
3891
1094
179
110
159
3859
1204
3876
1975
1182
76
3849
1234
3860
1188
3848
93
150
1254
1265
3886
190
117
102
1700
78
3888
3704
3847
117
304
1220
1264
158
1301
3890
163
92
580
90
128
3844
1273
3873
3848
116
1277
3857
3859
125
3869
3862
3849
42
122
824
257
3840
173
155
1018
103
3878
3877
1979
140
2502
3851
94
2554
802
151
799
3857
3846
94
1381
141
102
3144
3918
82
1377
3869
3865
98
95
158
3846
3853
1337
3477
132
3846
117
3864
1698
136
179
191
778
3871
3863
144
3842
469
2687
130
3856
3873
617
3885
3839
3903
177
3849
2823
76
70
95
3855
3820
3887
3884
3878
3844
3844
3881
3857
144
2153
3859
100
3860
3494
144
3843
3869
154
3894
3862
137
3862
563
1521
3857
3871
2539
3878
3836
3844
2942
145
3920
170
123
3864
1942
118
760
3846
1325
1992
3888
126
3864
1772
3498
3874
3865
3859
3862
1617
1189
92
3547
1432
3865
84
99
3833
3848
3861
3839
2014
3839
1471
95
3844
177
3844
140
151
3867
162
3846
3887
3865
120
3864
2415
3837
130
3476
1991
3240
76
3865
3888
380
2014
3861
333
95
882
1176
519
101
1198
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Andax
Inlägg: 4373
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg av Andax »

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?
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg 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.
Användarvisningsbild
KLset
Inlägg: 207
Blev medlem: 31 augusti 2014, 17:36:19
Ort: Uppsala

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg av KLset »

Vilket spännande projekt. Har du inte spelat in någon video som du kan lägga upp?
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg 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.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
KLset
Inlägg: 207
Blev medlem: 31 augusti 2014, 17:36:19
Ort: Uppsala

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg 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?
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg 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 :oops:

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?

Edit: Länk till Hook-up guide för HMC6343 https://learn.sparkfun.com/tutorials/hm ... -guide/all
Senast redigerad av Glattnos 7 juli 2018, 17:37:33, redigerad totalt 1 gång.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg av Lennart Aspenryd »

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!
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg 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.
Borre
Inlägg: 4564
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg av Borre »

Har du två lämpliga mosfet över gör såhär för 3.3-5V.
Bild
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Programeringsfrågor C++ radiostyrd båt

Inlägg av Glattnos »

Tackar :) Jag ska föra in detta på uppdaterings-listan för nästa kort.
Skriv svar