Sommario:

Servo controller seriale basato su Arduino: 6 passaggi
Servo controller seriale basato su Arduino: 6 passaggi

Video: Servo controller seriale basato su Arduino: 6 passaggi

Video: Servo controller seriale basato su Arduino: 6 passaggi
Video: Servomotore SG90: cos'è, come funziona, come si programma Arduino UNO 2024, Novembre
Anonim
Servo controller seriale basato su Arduino
Servo controller seriale basato su Arduino
Servo controller seriale basato su Arduino
Servo controller seriale basato su Arduino

Questo è un semplice controller seriale per più servi basato su Arduino. (anche il mio primo istruttore:))

La maggior parte del lavoro è venuto dal far parlare il software con l'arduino e creare un protocollo per il passaggio dei dati. Per quanto riguarda l'aspetto hardware, tutto ciò che ho usato sono stati due servi (servo standard Parallax qui.) Uno Sparkfun Arduino ProtoShield e un Arduino Duemilanove con ATMEGA328, ma la maggior parte di queste parti può essere sostituita con oggetti simili. Ho pensato a questo progetto come parte di un sistema RC, ma impostare la comunicazione ha richiesto molto tempo. Se qualcuno ha miglioramenti, idee o bug, non esitate a commentare. EDIT: l'ho scritto un po' di tempo fa, ho appena avuto modo di pubblicarlo di recente.

Passaggio 1: cose di cui potresti aver bisogno…

Cose di cui potresti aver bisogno…
Cose di cui potresti aver bisogno…
Cose di cui potresti aver bisogno…
Cose di cui potresti aver bisogno…

Alcune cose ti serviranno per costruirlo. 1. Scheda Arduino (scegli tu) 2. due (o uno) servo 3. cavi dei ponticelli 4. Visual Studio 2008 Express -- link (opzionale) 5. Arduino IDE -- link Mi dispiace fan di Linux e Apple, il mio programma funziona solo su Windows per ora, ma puoi comunque inviare manualmente comandi seriali ad arduino senza modificare il codice.

Passaggio 2: collegare l'hardware

Connetti l'hardware
Connetti l'hardware

Niente di molto complesso in questo passaggio. Basta collegare un servo al pin 9 e l'altro al pin 10.

Passaggio 3: programma Arduino

Programma l'Arduino
Programma l'Arduino

ora puoi caricare lo schizzo su arduino.

Ecco una semplice suddivisione del codice: #include Servo myservo; // crea un oggetto servo per controllare un servo Servo myservo1; int incomingByte = 0, datacount = 0, contatore = 0, pronto = 0; // per i dati seriali in entrata char data[10]; const char verificare[8] = "ma11hew"; char comando[3]; void setup() { myservo.attach(9); mioservo1.attach(10); Serial.begin(38400); // apre la porta seriale, imposta la velocità dei dati Serial.println("Hi Arduino Here!"); // aggiunto per aiutare a identificare la porta seriale Questo imposta solo la porta seriale ei servi. int io; for(i = 0; i<180;i++) { mioservo.write(i); ritardo(15); } mioservo.write(5); for(i = 0; i<180;i++) { mioservo1.write(i); ritardo(15); } mioservo1.write(5); } Semplice movimento ampio per verificare che i servi funzionino correttamente. void loop() { pronto = 0; contatore = 0; while (1==1) { if (Serial.read() != verifica[contatore]) { break; } if(contatore == 6) { ritardo(20); comando[0] = Serial.read(); comando[1] = Serial.read(); //if (Serial.read() == ((command[1] * 12) % 8)) // { ready = 1; //} Serial.println("comando salvato"); } contatore ++; ritardo(2); } questo controlla il buffer seriale per la stringa di autorizzazione corretta quindi prende due byte per il comando. l'istruzione if commentata consente un checksum improvvisato ma renderebbe difficile l'interfacciamento manuale. ready può essere impostato su 0 in modo che i comandi non vengano analizzati come nel caso di dati corrotti. //cerca tra i comandi if (pronto == 1) { if (comando[0] == 'T') { comando[0] = 0; Serial.print("controllo acceleratore sul pin 9 su: "); Serial.println(map(command[1], 32, 126, 2, 180), DEC); myservo.write(map(command[1], 32, 126, 2, 180)); } if (comando[0] == 'S') { comando[0] = 0; Serial.print("controllo acceleratore sul pin 10 su: "); Serial.println(map(command[1], 32, 126, 2, 180), DEC); myservo1.write(map(comando[1], 32, 126, 2, 180)); } } } il resto del codice è cercare command per comandi validi (T o S.) se uno dei due corrisponde prende il byte successivo e lo invia al servo. più sulla mappa (comando[1], 32, 126, 2, 180) più tardi … il codice qui è espandibile per qualsiasi altra cosa di cui potresti aver bisogno (ad es. Luci, motori, IR, ecc.) Questo codice dovrebbe funzionare bene senza modifiche.

Passaggio 4: installazione del software

Installa il software
Installa il software

Ho due modi per installare questo… programma di installazione nsis: Scarica il programma di installazione autoestraente di seguito ed eseguilo. Avrai la possibilità di installare i sorgenti durante l'installazione. il pacchetto binario di installazione installa le dll core di c++ in modo che possa essere eseguito su un computer senza visual c++ già installato. Una volta terminato il programma di installazione, puoi eseguirlo dal desktop o dal menu di avvio. zip way (non verificato): scarica ed esegui, dovrebbe funzionare. può essere. (L'archivio zip ha la stessa struttura di cartelle creata dal programma di installazione, senza fonti. Non ho una macchina senza Visual Studio su cui testarlo, quindi potrebbe non funzionare.)

Passaggio 5: utilizzare il programma di interfaccia

Usa il programma di interfaccia
Usa il programma di interfaccia
Usa il programma di interfaccia
Usa il programma di interfaccia

Per utilizzare il programma selezionare prima il baud rate definito nello sketch di arduino. Lo schizzo non modificato ha un valore predefinito di 38400 baud ma può essere modificato in base alle proprie esigenze per cose come un collegamento radio più lento. nota: baud rate superiori a 38400 non sono stati molto stabili, penso che questo sia dovuto al fatto che l'uart si riempie prima che i dati possano essere elaborati. Quindi, seleziona la porta COM da utilizzare. il programma predefinito è COM4, assicurati di cambiarlo o il programma si bloccherà. Infine, fai clic su Apri. Se tutto è andato bene il programma aprirà la porta seriale selezionata al baud rate selezionato. In caso contrario, il programma probabilmente andrà in crash con un'eccezione non gestita. assicurati che la porta sia corretta e riprova. Usa le caselle di testo per inviare comandi diretti ad arduino. Il "map(command[1], 32, 126, 2, 180)" scala tutti i 94 comandi possibili, da *spazio* a ~, leggibili dall'arduino in ASCII da 2 a 180 per il servo. qualsiasi byte inferiore a ASCII 32 (spazio) o superiore a 126 (~) il valore predefinito è 63 (?) Le barre di traccia forniscono un'interfaccia più semplice per i comandi diretti. ogni passaggio invia un comando seriale all'arduino in modo incrementale.

Passaggio 6: diventa creativo

Diventa creativo!
Diventa creativo!
Diventa creativo!
Diventa creativo!

Pensa a cose fantastiche da fare con questo. Alcune idee: 1. Acceleratore a distanza per un'auto. 2. Supporto per fotocamera 3D 3. Rover subacqueo Buon divertimento!!

Consigliato: