Servo's worden niet goed aangestuurd

Goedendag,

Ik ben nieuw in arduino land en heb een probleemp(je). Ik wil een pratende schedel maken die in drie richtingen kan bewegen. Tevens kan de kaak ook op en neer. verder zit er een DFPlayer in voor de muziek/zang om de kaak op en neer te laten gaan. Ik heb in heeeeeeel veel tutorials en forums stukjes code gebuikt, omdat ik geen ervaring heb met programeren (is wel de bedoeling dat dat beter gaat worden).
De DFPlayer heb ik nu eindelijk aan de praat, maar de bewegingen erbij dat wil niet lukken. Ik ben nu al dagen bezig en begin wat moedeloos te worden. Dus vandaar mijn vraag hier op het forum. Ik hoop dat jullie mij weer op het goede spoor kunnen zetten.

Als ik het stuk van de tilt,nod en shake servo appart in een sketch (https://forum.arduino.cc/index.php?topic=223286.0) probeer lukt het maar in deze sketch lukt het niet. ik heb zelf het idee dat op de een of andere manier ik de routines niet goed aanroep.

Sorry de code is te lang voor in een post.

Schedel_Karel_V08.ino (15.3 KB)

Hallo Sunny,

Voordat we verder gaan eerst een vraagje. Wat voor voedingsbron gebruik je voor dit project? Als het een 9 volt batterij is dan zou ik als eerste deze vervangen door ofwel een goede degelijke voeding, of als het niet anders kan, het is niet de bedoeling om je op kosten te jagen, probeer het eens met 6 x 1.5 volt batterijen. Als dit allemaal in orde is, dan kunnen we verder gaan zoeken.

Mvg,

Mike

Hoi Mike,

Als eerste bedankt voor je reactie.

Als antwoord op je vraag. Ik gebruik een 4A 5VDC voeding. De servo's worden apart van de arduino gevoed en de GND zit aan elkaar.

Ik hoop dat je me verder op weg kan helpen.

Groet Marcel

Ik heb nagenoeg alle delay() verwijderd maar nogsteeds last van "zenuwachtige" servo's. Ik hoop dat iemand mij kan helpen.

in de loop staat telkens attach servos en dat moet maar een keer in de setup staan om mee te beginnen.

shooter: in de loop staat telkens attach servos en dat moet maar een keer in de setup staan om mee te beginnen.

Maar is het niet beter voor de servo's om ze uit te zetten (detach) als je ze niet gebruikt??

Ik zou het gewoon eens proberen.

Heb ik geprobeerd, maar helaas er is meer aan de hand. Ik ben druk bezig om programma op te schonen.

Er is inderdaad meer aan de hand. Er is teveel dat elkaar in de weg zit. Normaal gesproken zijn er sensoren via de I2C bus en wordt een hardware timer gebruikt als iets een vaste puls nodig heeft. Helaas wordt soms iets met speciale timing in software gemaakt, en daar kan het mis gaan. Je hebt zelfs drie dingen die iets met timing doen in software: SoftwareSerial, Servo, ultrasoon sensor.

Welk Arduino board gebruik je ?

De SoftwareSerial claimt bijna de hele Arduino. Zodra je SoftwareSerial gebruikt kun je misschien nog een ledje laten knipperen. De SoftwareSerial zet de interrupts soms uit.

De Servo motoren worden aangestuurd vanuit een interrupt. In de interrupt routine krijgen alle servo motoren een puls.

De code voor de ultrasoon sensoren gebruikt een korte delay van 10 µs. Als er een lange interrupt routine bezig is, dan krijgt je een verkeerde afstand.

Een goedkope servo motor blijft soms nerveus trillen, terwijl er op de ingang een mooie constante puls staat. Een betere servo motor heeft dat niet.

Sommige servo motoren gaan in standby als er geen puls meer op de ingang staat. Er zijn niet veel servo motoren die dat doen, en het moet vermeld staan in de datasheet. Het doen van steeds een detach() en attach() zie ik in sommige voorbeelden, maar dat is in 99% van de gevallen volgens mij onzin. Een goedkope servo motor zal even bewegen als de puls weer aangeboden wordt.

Heb je een goede 5V voeding ? of een goedkope die niet gecertificeerd is voor Europa ? Hoe is het aangesloten ? Een kleine servo motor heeft al pieken van 0.5 A nodig (soms meer). Als je een dun draadje voor de GND hebt, dan kan het Arduino board beïnvloed worden door de stroompiek van de servo motor.

Conclusie: Terug naar het begin, en doe het stap voor stap. Begin eens met één servo motor en maak een kleine sketch om te testen. Kijk of die servo motor normaal beweegt en in rust is als hij niet hoeft te bewegen. Doe eenmalig een attach() in setup(). Voeg daar dan de ultrasoon sensor toe. Werkt de servo motor dan nog hetzelfde ?

Voor de MP3 module is het misschien nodig om een Leonardo board of een Arduino Mega 2560 te gaan gebruiken, zodat je de SoftwareSerial niet nodig hebt. Je kunt proberen of het met SoftwareSerial toch een beetje werkt (ik denk het niet), of eventueel zou je een alternatief kunnen proberen zoals de AltSoftSerial: https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html. Ik weet niet of die dezelfde timer gebruikt als de Servo library, dat heb ik nog niet bekeken.