Servo controlador basat en Arduino: 6 passos
Servo controlador basat en Arduino: 6 passos
Anonim

Es tracta d’un controlador sèrie simple per a diversos servos basat en l’Arduino. (el meu primer instructable també:))

La major part del treball en això prové d’aconseguir que el programari parli amb l’arduino i de fer un protocol per transmetre les dades. Pel que fa a l’aspecte del maquinari, només he utilitzat dos servos (el servidor estàndard Parallax.) Un Sparkfun Arduino ProtoShield i un Arduino Duemilanove amb ATMEGA328, però la majoria d’aquestes parts es poden substituir per articles similars. Vaig pensar aquest projecte com a part d’un sistema de RC, però configurar la comunicació va trigar molt de temps. Si algú té alguna millora, idees o errors, no dubteu a fer comentaris. EDITAR: Vaig escriure això fa estona, vaig començar a publicar-lo recentment.

Pas 1: coses que potser necessiteu …

Algunes coses que necessitareu per construir això. 1. Taula Arduino (trieu) 2. dos (o un) servos 3. cables de pont 4. Visual Studio 2008 Express - enllaç (opcional) 5. ID Arduino - enllaç Ho sento, fan de Linux i Apple, el meu programa només funciona Windows per ara, però encara podeu enviar comandes serials manualment a l’arduino sense canviar el codi.

Pas 2: connecteu el maquinari

Res de molt complex a aquest pas: connecteu només un servo al pin 9 i l’altre al pin 10.

Pas 3: programa l'Arduino

ara podeu penjar l'esbós a l'arduino.

Aquí teniu un simple desglossament del codi: #include Servo myservo; // crear un objecte servo per controlar un servo Servo myservo1; int incomingByte = 0, datacount = 0, comptador = 0, llest = 0; // per a dades de sèrie de dades de caràcters entrants [10]; const char verify [8] = "ma11hew"; ordre char [3]; void setup () {myservo.attach (9); myservo1.attach (10); Serial.begin (38400); // obre el port sèrie, estableix la velocitat de dades Serial.println ("Hola Arduino aquí!"); // afegit per ajudar a identificar el port sèrie Això només configura el port sèrie i els servos. int i; per a (i = 0; i <180; i ++) {myservo.write (i); retard (15); } myservo.write (5); per a (i = 0; i <180; i ++) {myservo1.write (i); retard (15); } myservo1.write (5); } Moviment d'escombrat simple per verificar que els servos funcionin correctament. bucle buit () {llest = 0; comptador = 0; while (1 == 1) {if (Serial.read ()! = verifica [comptador]) {break; } if (comptador == 6) {demora (20); ordre [0] = Serial.read (); ordre [1] = Serial.read (); // if (Serial.read () == ((ordre [1] * 12)% 8)) // {llest = 1; //} Serial.println ("ordre desada"); } comptador ++; retard (2); } això comprova la memòria intermèdia de sèrie per a la cadena d'autorització correcta i després agafa dos bytes per a l'ordre. la declaració comentada si permet una suma de comprovació improvisada però dificultaria la interfície manual. ready es pot establir a 0, de manera que no s'analitzaran les ordres, com ara en el cas de dades danyades. // cerca ordres if (llest == 1) {if (ordre [0] == 'T') {ordre [0] = 0; Serial.print ("control de l'accelerador al pin 9 a:"); Serial.println (mapa (ordre [1], 32, 126, 2, 180), DEC); myservo.write (mapa (ordre [1], 32, 126, 2, 180)); } if (ordre [0] == 'S') {ordre [0] = 0; Serial.print ("control de l'accelerador al pin 10 a:"); Serial.println (mapa (ordre [1], 32, 126, 2, 180), DEC); myservo1.write (mapa (ordre [1], 32, 126, 2, 180)); }}} la resta del codi és cercar a l'ordre comandes vàlides (T o S.) si coincideix, pren el següent byte i l'envia al servo. més al mapa (ordre [1], 32, 126, 2, 180) més endavant … el codi aquí es pot ampliar per a qualsevol altra cosa que pugueu necessitar (per exemple, llums, motors, IR, etc.) aquest codi hauria de funcionar bé sense modificacions.

Pas 4: Instal·leu el programari

Tinc dues maneres d'instal·lar aquest … nsis installer: descarregueu l'instal·lador d'autoextracció que es mostra a continuació i executeu-lo. Tindreu l'opció d'instal·lar fonts durant la instal·lació. el paquet binari de l’instal·lador instal·la dlls c ++ bàsics perquè es pugui executar en un ordinador sense que tingui instal·lat c ++ visual. Un cop finalitzat l'instal·lador, podeu executar-lo des de l'escriptori o el menú d'inici. zip zip (sense verificar): baixeu-lo i executeu-lo, hauria de funcionar. pot ser. (L'arxiu zip té la mateixa estructura de carpetes creada per l'instal·lador, sense fonts. No tinc cap màquina sense visual studio per provar-lo, de manera que potser no funcioni.)

Pas 5: utilitzeu el programa d'interfície

Per utilitzar el programa, primer seleccioneu la velocitat en bauds definida a l'esbós d'arduino. L'esbós sense modificar té un valor predeterminat a 38400 bauds, però es pot canviar per adaptar-lo a les vostres necessitats per a coses com ara un enllaç de ràdio més lent. nota: els índexs de transmissió superiors a 38400 no han estat molt estables, crec que això es deu al fet que el uart s'omple abans de processar les dades. A continuació, seleccioneu el port COM que voleu utilitzar. el programa per defecte és COM4. Assegureu-vos de canviar-lo o el programa fallarà. Finalment, feu clic a obre. Si tot va bé, el programa obrirà el port sèrie seleccionat a la velocitat de transmissió seleccionada. Si no, el programa probablement es bloquejarà amb una excepció no gestionada. assegureu-vos que el port és correcte i torneu-ho a provar. Utilitzeu els quadres de text per enviar ordres directes a l’arduino. El "mapa (ordre [1], 32, 126, 2, 180)" escala totes les 94 ordres possibles, * espai * a ~, llegibles per l'arduino en ASCII de 2 a 180 per al servo. qualsevol byte inferior a ASCII 32 (espai) o superior a 126 (~) per defecte és 63 (?) Les barres de pista proporcionen una interfície més àmplia per a ordres directes. cada pas envia una ordre de sèrie de manera incremental a l'arduino.

Pas 6: sigueu creatius

Penseu en coses interessants per fer amb això. Algunes idees: 1. Acelerador remot per a un cotxe. 2. Muntatge de càmera 3D 3. rover submarí Diverteix-te !!

Recomanat: