Inhoudsopgave:

Arduino-gebaseerde seriële servocontroller - Ajarnpa
Arduino-gebaseerde seriële servocontroller - Ajarnpa

Video: Arduino-gebaseerde seriële servocontroller - Ajarnpa

Video: Arduino-gebaseerde seriële servocontroller - Ajarnpa
Video: Multiple Servo Motor Control with Joystick and Arduino 2024, November
Anonim
Op Arduino gebaseerde seriële servocontroller
Op Arduino gebaseerde seriële servocontroller
Op Arduino gebaseerde seriële servocontroller
Op Arduino gebaseerde seriële servocontroller

Dit is een eenvoudige seriële controller voor meerdere servo's op basis van de Arduino. (mijn eerste instructable ook:))

Het meeste werk hierin kwam van het krijgen van de software om met de Arduino te praten en het maken van een protocol voor de gegevens die moeten worden doorgegeven. Wat betreft het hardware-aspect, ik gebruikte alleen twee servo's (parallax-standaardservo hier.) Een Sparkfun Arduino ProtoShield en een Arduino Duemilanove met ATMEGA328, maar de meeste van deze onderdelen kunnen worden vervangen door vergelijkbare items. Ik bedacht dit project als onderdeel van een RC-systeem, maar het opzetten van de communicatie kostte veel tijd. Als iemand verbeteringen, ideeën of bugs heeft, aarzel dan niet om commentaar te geven. EDIT: Ik heb dit een tijdje geleden geschreven, ik heb het onlangs gepubliceerd.

Stap 1: Dingen die je misschien nodig hebt…

Dingen die je misschien nodig hebt…
Dingen die je misschien nodig hebt…
Dingen die je misschien nodig hebt…
Dingen die je misschien nodig hebt…

Sommige dingen heb je nodig om dit te bouwen. 1. Arduino-bord (je kiest) 2. twee (of één) servo's 3. jumperdraden 4. Visual Studio 2008 Express -- link (optioneel) 5. Arduino IDE -- link Sorry Linux en Apple fans, mijn programma draait alleen op Windows voor nu, maar je kunt nog steeds handmatig seriële opdrachten naar de Arduino sturen zonder de code te wijzigen.

Stap 2: Sluit de hardware aan

Sluit de hardware aan
Sluit de hardware aan

Niets erg ingewikkelds aan deze stap. Sluit gewoon een servo aan op pin 9 en de andere op pin 10.

Stap 3: Programmeer de Arduino

Programmeer de Arduino
Programmeer de Arduino

nu kun je de schets uploaden naar de arduino.

Hier is een eenvoudige uitsplitsing van de code: #include Servo myservo; // maak een servo-object om een servo Servo myservo1 te besturen; int inkomendeByte = 0, datacount = 0, teller = 0, gereed = 0; // voor inkomende seriële data char data [10]; const char verifiëren [8] = "ma11hew"; char-opdracht [3]; void setup() { myservo.attach(9); mijnservo1.attach(10); Serieel.begin(38400); // opent seriële poort, stelt datasnelheid in Serial.println ("Hi Arduino Here!"); // toegevoegd om de seriële poort te helpen identificeren Dit stelt alleen de seriële poort en servo's in. int ik; for(i = 0; i<180;i++) { myservo.write(i); vertraging (15); } mijnservo.write(5); for(i = 0; i<180;i++) { myservo1.write(i); vertraging (15); } mijnservo1.write(5); } Eenvoudige veegbeweging om te controleren of de servo's correct werken. void loop() { klaar = 0; teller = 0; while (1==1) { if (Serial.read() != verifieer [teller]) { break; } if (teller == 6) { vertraging (20); command[0] = Serieel.lezen(); command[1] = Serieel.lezen(); //if (Serial.read() == ((command [1] * 12) % 8)) // {ready = 1; //} Serial.println ("opgeslagen opdracht"); } teller ++; vertraging(2); } dit controleert de seriële buffer op de juiste autorisatiereeks en pakt vervolgens twee bytes voor de opdracht. de becommentarieerde if-instructie maakt een geïmproviseerde controlesom mogelijk, maar zou handmatige interfacing moeilijk maken. ready kan worden ingesteld op 0, zodat opdrachten niet worden geparseerd, zoals in het geval van beschadigde gegevens. // doorzoek opdrachten if (ready == 1) { if (command [0] == 'T') { command[0] = 0; Serial.print ("gashendel op pin 9 naar: "); Serial.println(map(opdracht [1], 32, 126, 2, 180), DEC); myservo.write(map(opdracht [1], 32, 126, 2, 180)); } if (opdracht [0] == 'S') { opdracht [0] = 0; Serial.print("gashendel op pin 10 naar: "); Serial.println(map(opdracht [1], 32, 126, 2, 180), DEC); myservo1.write(map(opdracht[1], 32, 126, 2, 180)); } } } de rest van de code is om commando te zoeken naar geldige commando's (T of S.) als een van beide overeenkomt, neemt het de volgende byte en stuurt het naar de servo. meer op de kaart (commando [1], 32, 126, 2, 180) later … de code hier is uitbreidbaar voor alles wat je nodig hebt (bijv. Verlichting, motoren, IR, enz.) Deze code zou prima moeten werken zonder wijzigingen.

Stap 4: Software installeren

Installeer de software
Installeer de software

Ik heb twee manieren om dit te installeren… nsis-installatieprogramma: Download het onderstaande zelfuitpakkende installatieprogramma en voer het uit. Tijdens de installatie heb je de mogelijkheid om bronnen te installeren. het binaire pakket van het installatieprogramma installeert core c++ dll's zodat het op een computer kan worden uitgevoerd zonder dat visual c++ al is geïnstalleerd. Zodra het installatieprogramma is voltooid, kunt u het uitvoeren vanaf het bureaublad of het startmenu. zip-way (niet-geverifieerd): downloaden en uitvoeren, het zou moeten werken. kan zijn. (Het zip-archief heeft dezelfde mappenstructuur die door het installatieprogramma is gemaakt, zonder bronnen. Ik heb geen machine zonder visuele studio om het op te testen, dus het kan zijn dat het niet werkt.)

Stap 5: Gebruik het interfaceprogramma

Gebruik het interfaceprogramma
Gebruik het interfaceprogramma
Gebruik het interfaceprogramma
Gebruik het interfaceprogramma

Om het programma te gebruiken, selecteert u eerst de baudrate die is gedefinieerd in de Arduino-schets. De ongewijzigde schets is standaard ingesteld op 38400 baud, maar kan worden gewijzigd om aan uw behoeften te voldoen voor zaken als een langzamere radioverbinding. opmerking: baudrates hoger dan 38400 zijn niet erg stabiel geweest, ik denk dat dit komt omdat de uart vol raakt voordat de gegevens kunnen worden verwerkt. Selecteer vervolgens de COM-poort die u wilt gebruiken. het programma is standaard ingesteld op COM4, zorg ervoor dat u dit wijzigt, anders crasht het programma. Klik ten slotte op openen. Als alles goed is gegaan, zal het programma de geselecteerde seriële poort openen met de geselecteerde baudrate. Als dit niet het geval is, zal het programma waarschijnlijk crashen met een onverwerkte uitzondering. controleer of de poort correct is en probeer het opnieuw. Gebruik de tekstvakken om directe opdrachten naar de Arduino te sturen. De "map(command[1], 32, 126, 2, 180)" schaalt alle 94 mogelijke commando's, *spatie* tot ~, leesbaar door de arduino in ASCII tot 2 tot en met 180 voor de servo. elke byte kleiner dan ASCII 32 (spatie) of hoger dan 126 (~) is standaard 63 (?) De trackbars bieden een eenvoudigere interface voor directe opdrachten. elke stap stuurt stapsgewijs een serieel commando naar de arduino.

Stap 6: wees creatief

Wees creatief!
Wees creatief!
Wees creatief!
Wees creatief!

Bedenk leuke dingen om hiermee te maken. Enkele ideeën: 1. Gashendel op afstand voor een auto. 2. 3D-camerabevestiging 3. onderwaterrover Veel plezier!

Aanbevolen: