Stap 3: Arduino en PC programmering
Op de Arduino zullen we een seriële interface waarmee de PC om te controleren van de motoren. Ook zullen we een PWM servo drive systeem de juiste signalen af aan de Vex motoren en ervoor te zorgen dat ze gaan in de juiste richting als de juiste waarden gegeven. Ik voegde ook sommige eenvoudige LED knippert, voornamelijk voor status indicatie maar ook omdat het ziet er cool.
Op de PC zullen we openen de seriële poort en verzenden van frames van gegevens die het programma van de Arduino zal begrijpen. De PC moet ook komen met motor waarden. Een gemakkelijke manier om dit te doen is het gebruik van een USB-gamepad of joystick, ik ben met behulp van een Xbox 360-controller. Een andere optie is het gebruik van een computer in het netwerk (een netbook of een kleine mini ITX board) op de robot zelf te rijden draadloos. Met een netbook kunt u zelfs de ingebouwde webcam stream terug een videovoer en uw robot op afstand rijden. Ik gebruikte het linuxsysteem sockets om netwerk programmeren voor mijn setup. Een programma (de "joystick-server") wordt uitgevoerd op een afzonderlijke PC met een controller aangesloten op het, en een ander programma (de "client") wordt uitgevoerd op de netbook aangesloten op de Arduino. Dit verbindt de twee computers en joystick informatie verzendt naar de netbook, die vervolgens verstuurt seriële pakketten naar de Arduino die de robot drijft.
Om te verbinden met de Arduino met behulp van een Linux-PC (in C++) moet u de seriële poort op de juiste baudrate voor het eerst opent en vervolgens de waarden met behulp van een protocol dat u ook op de Arduino de code gebruikt hebt verzenden. De indeling van mijn seriële is eenvoudig en doeltreffend. Ik gebruik 4 bytes per "frame" te sturen de twee motor snelheden (elk is een enkele byte). De eerste en laatste bytes zijn hard-gecodeerde waarden die worden gebruikt om te voorkomen dat de Arduino de verkeerde byte te sturen naar de PWM-code en het veroorzaken van de motoren te gek. Dit is het primaire doel van de RGB LED, knippert het rood wanneer het seriële frame onvolledig was. De 4 bytes zijn als volgt:
255 (hard gecodeerde "start" byte),,, 200 (hard gecodeerde "end" byte)
Betrouwbare ontvangst van de gegevens, zorg ervoor dat je genoeg vertraging tussen programma lussen. Als u uw PC code te snel uitvoert, het zullen overspoelen de poort en de Arduino kan beginnen te laten vallen of zelfs verkeerd lezen bytes. Zelfs als het niet informatie dalen kan het ook van de Arduino seriële poort buffer overflow.
Voor de Vex motoren gebruikte ik de Arduino Servo-bibliotheek. Aangezien Vex motoren gewoon continu draaimotoren zijn, gebruiken ze de exacte dezelfde signalering die gebruikmaken van de servo's. Het is echter in plaats van 90 graden wordt het middelpunt, het stop punt waar de motor doet niet draaien. Verlaging van de "hoek" zorgt ervoor dat de motor te starten spinnen in één richting, terwijl het verhogen van de hoek maakt het in de andere richting draaien. Hoe verder weg van het middelpunt dat je bent, zal hoe sneller de motor draaien. Terwijl het gaat niet om het even wat breken als u waarden groter dan 180 graden naar de motoren, zou ik adviseren de waarden van 0 tot 180 graden (die in dit geval zijn de stappen van de snelheid) beperken. Omdat ik meer controle wilde en minder uit het besturingselement robot rijden, ik heb een software 'speed limit' toegevoegd aan mijn programma waarmee de snelheid te verhogen boven de 30 "graden" in beide richtingen niet (bereik is 90 +/-30). Ik ben van plan over het toevoegen van een seriële poort commando dat de snelheid te beperken verandert, zodat de computer de limiet op het vliegen verwijderen kunt als u wilt gaan snel (ik heb getest in kleine kamers dus ik wil niet dat het te versnellen en crash in de muur, vooral met een netbook daarop).
Voor meer informatie de bijgevoegde code aan het eind van dit Instructable te downloaden.