Hoe kan ik een geschutstoren 290 graden laten draaien

en heeft Arduino er blijkbaar ook een ferme kluif aan.
Je zult toch eerst moeten weten hoe de codering van kanaal 8 vanuit de nautic module in z'n werk gaat, dan kun je misschien iets bedenken om het met een Arduino te scheiden.
 
Er beginnen nu drie dingen door elkaar te lopen
1. een ontvangerkanaal uitlezen en de slag en de snelheid van de aangesloten servo vergroten/vertragen
2. een enkel door een nautic module gecodeerd kanaal voor 8 servo's decoderen.
3. individuele servopulsen uit een ppm stream destilleren

Om de individuele servopulsen uit een ppm stream te destilleren had je al de benodigde code in post #28
 
Er beginnen nu drie dingen door elkaar te lopen
1. een ontvangerkanaal uitlezen en de slag en de snelheid van de aangesloten servo vergroten/vertragen
2. een enkel door een nautic module gecodeerd kanaal voor 8 servo's decoderen.
3. individuele servopulsen uit een ppm stream destilleren
Dat ben ik met je eens, en ik probeer het in onderdeeltjes op te delen, en pas als elk onderdeel afzonderlijk werkt, alles samen te voegen.
Dus laten we het aansturen van de servo nog even links liggen, en ons concentreren op het uitlezen en loggen van een PPM-signaal.
Die code in post 28 werkt dus niet naar wens, want met waarden van 20.000 en meer , die bovendien niet reageren op bewegingen op de zender, kan ik niets.
Vandaar mijn vraag in een vorige post of er in die code niet een parameter moet aangepast worden of toegevoegd op de Arduino op de maat van de zenderpuls te laten uitlezen.
 
Waar haal je de ppm stream vandaan? Van de ontvanger natuurlijk, maar ben je er zeker van dat het een zuivere ppm is?
 
Dat heeft er alleen indirect mee te maken, je weet dan dat de zender een ppm stream uitgeeft, gemoduleerd op 40MHz. De ontvanger kan dat decoderen in individuele kanalen, maar we zoeken hier naar een uitgang die de volledige ppm stream naar de arduino kan sturen.
 
we zoeken hier naar een uitgang die de volledige ppm stream naar de arduino kan sturen.
Ik zag dat op afbeeldingen van moderne ontvangers, naast de individuele kanalen een aparte aansluiting voor PPM, maar mijn ontvanger heeft dat niet.
Het is ook niet nodig, als ik al kanaal 7 of 8 zou kunnen uitlezen is het goed, en dat kan ik perfect met onderstaande code, alleen geeft hij de waarden van de 8 pulsen onder elkaar, zonder die ergens weg te schrijven.
Enkel kanaal 8 is aangesloten op pin 8. Als alle potmeters naar links staan krijg ik allemaal hoge waarden, als ik de potmeters naar rechts draai zie ik elke keer een waarde dalen, en als alle potmeteers naar echts gedraaid zijn, krijg ik 1 hoge waarde en 8 lage waarden.
Als ik die nu zou kunnen wegschrijven in bv een ch1 tot 8 met een ch0 voor die constante, kan ik daar misschien op verder bouwen.
Als ik kanaal 7 (multiswitch) aansluit op pin 9, krijg ik in channel 2 een gelijkaardige reactie.
Het enige waar ik moet op letten bij deze code is dat de delay niet te lang of te kort is, zonder delay krijg ik een patroon van 1 x 2100 en 2 x 940.
Waar deze delay op het printen slaat, zou er dus een delay op het uitlezen moeten staan van minimum 16ms, of schrijf ik nu klinkklare onzin? (vanaf een delay van 15ms of lager krijg ik hetzelfde als zonder delay.)

Test 3 PPM uitlezen.jpg
 
Je verlaat dus mijn punt 3, en gaat naar punt 2, het decoderen van het nautic kanaal 8, ok.

De delay(100) bepaalt de herhaal-frequentie van de loop, dus ongeveer 10x per seconde. Dus kanaal 8 wordt 10x per seconde uitgelezen met een pulseIn().

Jouw ontvanger zal ongeveer 50x per seconde een nieuwe puls naar de Arduino sturen, dus je mist ongeveer 1 op de 5 pulsen. Aangezien je nog niet weet hoe kanaal 8 door de nautic gecodeerd wordt, kun je dat alleen afleiden als je de delay weglaat, zodat alle pulsen uitgelezen worden.

Ik zou voorlopig ook het uitlezen van ch2 inactief maken door er // voor te zetten.
 
De analogWrite() functie om een servo aan te sturen is ook vreemd, of op z'n minst onoverzichtelijk. Bovendien werkt het alleen maar goed op pins 3,9,10 en 11.
Als je wilt leg ik uit waarom ik dat vind, maar voorlopig lijk mij het nog niet aan de orde.
 
Jouw ontvanger zal ongeveer 50x per seconde een nieuwe puls naar de Arduino sturen, dus je mist ongeveer 1 op de 5 pulsen. Aangezien je nog niet weet hoe kanaal 8 door de nautic gecodeerd wordt, kun je dat alleen afleiden als je de delay weglaat, zodat alle pulsen uitgelezen worden.
Zonder delay krijg ik 1x 2100 en 2x 940, vanaf delay 16 ( dus net iets vaker dan 50x per seconde krijg ik weer 1x 2100 en 8x 940 waarvan de laatste reageren op de potmeters.

Ik zou voorlopig ook het uitlezen van ch2 inactief maken door er // voor te zetten.
OK, ik zou die in principe ook kunnen weglaten want ik plan voorlopig dit kanaal uit te lezen met de Beier-soundmodule.

Bovendien werkt het alleen maar goed op pins 3,9,10 en 11.
en 5 :) de pins met een "squiqly" voor, die PWM ondersteunen, had ik begrepen.

De analogWrite() functie om een servo aan te sturen is ook vreemd, of op z'n minst onoverzichtelijk. Bovendien werkt het alleen maar goed op pins 3,9,10 en 11.
Als je wilt leg ik uit waarom ik dat vind, maar voorlopig lijk mij het nog niet aan de orde.
OK, eerst zien het signaal te analyseren en te loggen, de rest komt later wel aan bod.
 
en 5 :) de pins met een "squiqly" voor, die PWM ondersteunen, had ik begrepen.
pin 5 en 6 draaien op 980 Hz PWM, ong. 1 milliseconde periode dus, daar kun je geen bruikbare pulslengte mee maken. De andere PWM-pins op 490 Hz, dus dat zou nog gaan, maar de herhalingsfrequentie is orde grootte 2 milliseconde. Met name analoge servo's krijgen daar de hik van.......

Ok, geen delay() werkt dus niet, maar je hebt een optimum gevonden. Kun je iets afleiden aan de pulswaardes?
 
Ok, geen delay() werkt dus niet......
Ik heb me afgevraagd waarom niet, en ik denk dat ik het weet. Als je channel #2 niet aangesloten hebt, gaat het programma wachten tot de timeout verstreken is, en dat is ruim 40 milliseconden. In die tijd zijn er al een aantal pulsen voorbijgekomen voor channel #1 voorbijgekomen.

Kun je eens proberen hoe het gaat zonder delay() maar met de ch2 pulseIn gedeactiveerd?
 
Back
Top