Sommario:

Semplice piattaforma robotica Arduino!: 5 passaggi
Semplice piattaforma robotica Arduino!: 5 passaggi

Video: Semplice piattaforma robotica Arduino!: 5 passaggi

Video: Semplice piattaforma robotica Arduino!: 5 passaggi
Video: Come ho costruito un BRACCIO ROBOTICO con ARDUINO e INTERFACCIA TOUCH - Come Funziona, Come è Fatto 2024, Luglio
Anonim
Semplice piattaforma robotica Arduino!
Semplice piattaforma robotica Arduino!
Semplice piattaforma robotica Arduino!
Semplice piattaforma robotica Arduino!

Ho appena ricevuto un Arduino dopo aver giocato con alcuni microcontrollori AVR durante le riunioni del team di robotica. Mi piaceva l'idea di un chip programmabile davvero economico che potesse eseguire praticamente qualsiasi cosa da una semplice interfaccia per computer, quindi ho preso un Arduino perché ha già una bella scheda e un'interfaccia USB. Per il mio primo progetto Arduino, ho dissotterrato un kit Vex Robotics che avevo in giro da alcune gare che ho fatto al liceo. Ho sempre voluto realizzare una piattaforma robotica guidata da un computer, ma il microcontrollore Vex richiede un cavo di programmazione che non avevo. Ho deciso di usare il mio nuovo Arduino (e forse in seguito un chip AVR nudo se lo faccio funzionare) per guidare la piattaforma. Alla fine voglio prendere un netbook e poi posso guidare il robot usando il WiFi e vedere la sua webcam da remoto.

Sono riuscito a ottenere un protocollo seriale decente e un semplice esempio che guida il robot utilizzando un controller Xbox 360 collegato a un PC Linux.

Passaggio 1: cosa può fare…

Cosa può fare…
Cosa può fare…
Cosa può fare…
Cosa può fare…

Arduino è una piattaforma molto versatile. Il mio obiettivo di base era solo quello di fare in modo che Arduino interfacciasse due motori Vex al PC, ma avevo molti pin di input/output rimanenti e ho deciso di aggiungere alcune cose extra. In questo momento ho un LED RGB per lo stato della porta seriale (verde se i pacchetti sono buoni, rosso se sono cattivi) e una ventola del PC guidata da un transistor. Posso anche aggiungere interruttori e sensori, ma non ne ho ancora messo nessuno sopra. La cosa migliore è che puoi aggiungere quello che vuoi a un robot Arduino. Ci vuole solo un po' di codice di interfaccia per controllare cose extra e ottenere input al computer.

Passaggio 2: parti

Parti
Parti
Parti
Parti
Parti
Parti

Per il mio robot, ho usato alcune parti diverse. La maggior parte delle parti provenivano da cose vecchie che avevo in giro per il mio seminterrato.1) Arduino Duemilanove con ATMega328 Questo è l'Arduino più nuovo, e da quando l'ho ricevuto pochi giorni fa ho quello più nuovo. Tuttavia, il codice è abbastanza piccolo da adattarsi facilmente a qualsiasi Arduino. Probabilmente potrebbe anche adattarsi a un ATTiny (se costruisco un controller per robot a parte Arduino, l'ATTiny 2313 sembra una buona scelta, è più piccolo ed economico ma ha ancora molte uscite e un'interfaccia UART seriale)2) Vex Robotics PlatformI qualche anno fa ho ricevuto un kit Vex per costruire un robot radiocomandato per raccogliere roba per una competizione di scuola superiore. Ho costruito la base base "square bot" che ha 4 ruote azionate da due motori. Potresti sostituire altre basi robot se hai qualche altra piattaforma che vuoi guidare. La cosa importante da notare è che i motori Vex sono essenzialmente servi a rotazione continua, usano la modulazione dell'ampiezza dell'impulso per segnalare quanto velocemente e in quale direzione girare. I motori Vex sono belli perché hanno un'ampia gamma di tensioni operative, da qualche parte tra 5 e 15 volt. Sto usando 12V perché avevo una batteria da 12V. Per la maggior parte dei servi standard per hobby, avrai bisogno di una tensione più bassa (spesso 6 volt).3) BatteriaUn robot è inutile senza un alimentatore. Per i test utilizzo un adattatore da parete standard da 9 V di RadioShack, ma per il funzionamento senza fili ho trovato una batteria NiMH da 12 V in un antico laptop. Anche se non ha una carica sufficiente per far funzionare il laptop, guida bene il mio robot Vex. Può anche alimentare Arduino utilizzando il pin di ingresso Vin sul connettore di alimentazione, Arduino regolerà il 12V fino a 5 e lo emetterà anche dal pin di uscita 5V sul connettore di alimentazione.4) Breadboard di base Attualmente sto usando una breadboard per cablare tutto. Alla fine otterrò una scheda di prototipazione più bella e salderò su alcune connessioni più permanenti, ma per ora la breadboard rende facile cambiare le cose. La mia breadboard è la "breadboard base" di SparkFun, solo una breadboard su una piastra metallica con 3 terminali.5) Convertitore RS232-TTL basato su MAX232Se vuoi guidare il tuo robot utilizzando una connessione alla porta seriale RS-232 (al contrario di quella in USB) è possibile utilizzare un convertitore RS232-TTL. Sto usando un MAX232 perché ne avevo alcuni in giro e l'ho saldato su un piccolo pezzo di scheda di prototipazione con i condensatori necessari. Ho bisogno di RS-232 perché il mio vecchio laptop ha solo una porta USB e la sto usando per un controller di gioco per guidare il robot.6) Parti extra come desiderato Per un facile debug del protocollo seriale, ho inserito un LED RGB su di esso (ne ho preso uno con il mio ordine Arduino perché suonavano bene). La luce lampeggia in rosso, verde, blu in sequenza quando Arduino si avvia per mostrare che il robot si è riavviato e poi si illumina in verde quando è stato ricevuto un pacchetto motore, blu quando è stato ricevuto un pacchetto ventola e rosso quando un pacchetto difettoso o sconosciuto pacchetto è stato ricevuto. Per pilotare la ventola ho usato un transistor NPN standard (gli stessi che ho dimostrato nel mio ultimo Instructable) e un resistore tra il transistor e l'Arduino (il transistor assorbiva troppa corrente e scaldava l'Arduino, quindi ho messo un limitatore resistore per fermarlo).

Passaggio 3: programmazione Arduino e PC

Arduino e Programmazione PC
Arduino e Programmazione PC

Per programmare Arduino, avrai ovviamente bisogno del software Arduino e di un cavo USB. Puoi anche programmare Arduino usando una porta seriale e un convertitore di livello TTL se il tuo PC ha una porta seriale. Nota che l'interfaccia seriale USB non comunicherà con il processore ATMega di Arduino se c'è un convertitore di livello collegato ai pin seriali di Arduino (pin 0 e 1) quindi scollegalo prima di usare USB. Sull'Arduino avremo bisogno di un'interfaccia seriale che permetta il PC per il controllo dei motori. Avremo anche bisogno di un sistema di servoazionamento PWM per inviare i segnali corretti ai motori Vex e assicurarci che vadano nella direzione corretta quando vengono forniti i valori giusti. Ho anche aggiunto alcuni semplici LED lampeggianti, principalmente per l'indicazione dello stato ma anche perché sembra bello. Sul PC dovremo aprire la porta seriale e inviare frame di dati che il programma Arduino capirà. Il PC deve anche fornire i valori del motore. Un modo semplice per farlo è utilizzare un game pad o un joystick USB, sto usando un controller Xbox 360. Un'altra opzione è quella di utilizzare un computer in rete (un netbook o una piccola scheda mini ITX) sul robot stesso per guidare in modalità wireless. Con un netbook, puoi persino utilizzare la webcam integrata per riprodurre in streaming un feed video e guidare il tuo robot da remoto. Ho usato il sistema socket Linux per fare la programmazione di rete per la mia configurazione. Un programma (il "joystick server") viene eseguito su un PC separato a cui è collegato un controller e un altro programma (il "client") viene eseguito sul netbook collegato ad Arduino. Questo collega i due computer e invia le informazioni del joystick al netbook, che quindi invia i pacchetti seriali all'Arduino che guida il robot. Per connettersi all'Arduino utilizzando un PC Linux (in C++) è necessario prima aprire la porta seriale al corretto baud rate e quindi inviare i valori utilizzando un protocollo che hai utilizzato anche sul codice di Arduino. Il mio formato seriale è semplice ed efficace. Uso 4 byte per "frame" per inviare le due velocità del motore (ognuna è un singolo byte). Il primo e l'ultimo byte sono valori codificati che vengono utilizzati per impedire ad Arduino di inviare il byte sbagliato al codice PWM e far impazzire i motori. Questo è lo scopo principale del LED RGB, lampeggia in rosso quando il frame seriale era incompleto. I 4 byte sono i seguenti:255 (byte "di inizio" codificato),,, 200 (byte "di fine" codificato) Per garantire una ricezione affidabile dei dati, assicurarsi di inserire un ritardo sufficiente tra i cicli di programma. Se esegui il codice del tuo PC troppo velocemente, inonderà la porta e Arduino potrebbe iniziare a perdere o persino leggere male i byte. Anche se non rilascia informazioni, può anche traboccare il buffer della porta seriale di Arduino. Per i motori Vex, ho usato la libreria Arduino Servo. Poiché i motori Vex sono solo motori a rotazione continua, utilizzano esattamente la stessa segnalazione utilizzata dai servi. Tuttavia, invece di 90 gradi come punto centrale, è il punto di arresto in cui il motore non gira. L'abbassamento dell'"angolo" fa sì che il motore inizi a girare in una direzione, mentre l'aumento dell'angolo lo fa girare nell'altra direzione. Più lontano dal punto centrale sei, più veloce sarà il motore. Anche se non si romperà nulla se invii valori superiori a 180 gradi ai motori, consiglierei di limitare i valori da 0 a 180 gradi (che in questo caso sono incrementi di velocità). Poiché volevo più controllo e meno guida robot fuori controllo, ho aggiunto un "limite di velocità" software al mio programma che non consente alla velocità di aumentare oltre i 30 "gradi" in entrambe le direzioni (l'intervallo è 90 +/- 30). Ho intenzione di aggiungere un comando per la porta seriale che cambia il limite di velocità, in modo che il computer possa rimuovere il limite al volo se vuoi andare veloce (ho provato in stanze piccole quindi non voglio che acceleri e schiantarsi contro il muro, specialmente con un netbook sopra). Per ulteriori informazioni, scaricare il codice allegato alla fine di questo Instructable.

Passaggio 4: aggiungi un netbook per esplorare mondi sconosciuti a distanza

Aggiungi un netbook per esplorare mondi sconosciuti a distanza
Aggiungi un netbook per esplorare mondi sconosciuti a distanza
Aggiungi un netbook per esplorare mondi sconosciuti a distanza
Aggiungi un netbook per esplorare mondi sconosciuti a distanza

Con un PC completo a bordo del tuo robot Arduino, puoi guidare il tuo robot fin dove il tuo WiFi può raggiungere senza cavi per limitare il robot a un'area. Un buon candidato per questo lavoro è un netbook, perché i netbook sono piccoli, leggeri, hanno una batteria integrata, hanno il WiFi e la maggior parte ha anche webcam integrate che possono essere utilizzate per trasmettere la vista del robot in un luogo sicuro dove si può controllarlo. Inoltre, se il tuo netbook è dotato di un servizio a banda larga mobile, la tua portata è praticamente illimitata. Con batterie sufficienti puoi guidare il tuo robot fino alla pizzeria locale e fare un ordine tramite la webcam (non consigliato, i robot di solito non sono ammessi nelle pizzerie, anche se sono persone che probabilmente cercheranno di rubare il robot e forse anche la pizza). Potrebbe anche essere un buon modo per esplorare le profondità oscure del tuo seminterrato comodamente dalla tua sedia da ufficio, anche se l'aggiunta di alcuni fari può essere molto utile in questo caso.

Ci sono molti modi per farlo funzionare, molti sono probabilmente molto più semplici del mio, anche se non ho familiarità con l'elaborazione o i linguaggi basati su script, quindi ho scelto di usare Linux e C++ per creare un collegamento di controllo wireless tra la mia stazione base (ovvero vecchio ThinkPad) e il mio nuovo netbook Lenovo IdeaPad collegato alla base dell'unità Arduino. Entrambi i PC eseguono Ubuntu. Il mio ThinkPad è collegato alla LAN della mia scuola e il mio IdeaPad è connesso al mio punto di accesso WiFi che è anche connesso alla LAN della scuola (non sono riuscito a ottenere un flusso video affidabile dal WiFi della scuola poiché tutti gli altri lo stanno usando, quindi ho impostato il mio router per fornire una buona connessione). Una buona connessione è particolarmente importante nel mio caso poiché non ho implementato alcun controllo degli errori o timeout. Se la connessione di rete si interrompe improvvisamente, il robot continua a funzionare finché non si schianta contro qualcosa o lo corro e lo fermo. Questo è il fattore principale alla base della mia decisione di rallentare la trasmissione sia riducendo i motori che implementando un limite di velocità software.

Passaggio 5: ottenere un feed video

Dopo che il tuo esploratore robotico può guidare in modalità wireless, probabilmente vorrai avere un feed video dal netbook in modo da poter dire dove si trova il tuo robot. Se stai usando Ubuntu (o anche se non lo sei!) Ti consiglio di usare VLC Media Player per lo streaming. Se non l'hai installato, ti stai davvero perdendo qualcosa, quindi installalo usando il comando "sudo apt-get install vlc", cerca VLC nell'Ubuntu Software Center (solo 9.10) o scarica l'installer su videolan. org se sei su Windows. Avrai bisogno di VLC in esecuzione su entrambi i PC. VLC è in grado di trasmettere e riprodurre flussi su una rete. Sul netbook (PC robot) prima assicurati che la tua webcam (integrata o collegata tramite USB) funzioni facendo clic su Apri dispositivo di acquisizione e provando Video per Linux 2 (alcuni dispositivi meno recenti potrebbero richiedere Video per Linux anziché la nuova versione 2). Dovresti vedere la visuale della videocamera sullo schermo del netbook. Per eseguire lo streaming, seleziona Streaming dal menu File, quindi seleziona la scheda Dispositivo di acquisizione nella parte superiore della finestra che appare. Ricorda che Ubuntu (e molte altre distribuzioni Linux) ti permettono di tenere premuto Alt per fare clic e trascinare finestre troppo grandi per il tuo schermo (particolarmente utile sui netbook più vecchi, anche se anche il mio IdeaPad ha una strana risoluzione 1024x576 senza motivo apparente). Per ridurre il ritardo, fai clic su "Mostra più opzioni" e riduci il valore della cache. L'importo che puoi abbassare a volte dipende dal dispositivo, diventa instabile se lo abbassi troppo. A 300 ms potresti avere un leggero ritardo, ma non è poi così grave.

Quindi, fai clic su Stream per andare al menu successivo. Fare clic su Avanti, quindi selezionare e aggiungere HTTP come nuova destinazione. Ora imposta la transcodifica per ridurre le dimensioni del flusso. Ho creato un profilo personalizzato che utilizza M-JPEG a 60 kb/se 8 fps. Questo perché l'utilizzo di un codec avanzato come MPEG o Theora consumerà enormi quantità di tempo CPU sul processore Atom di un netbook e questo può portare all'interruzione del feed video senza una ragione apparente. MJPEG è un semplice codec facile da usare a bassi bitrate. Dopo aver avviato lo streaming, apri VLC sull'altro PC, apri un flusso di rete, seleziona HTTP, quindi digita l'indirizzo IP del tuo netbook (locale o Internet a seconda di come ti stai connettendo) seguito da ":8080". Devi specificare la porta per qualche strano motivo, altrimenti ti dà errori. Se disponi di una connessione decente, dovresti vedere il feed della tua webcam sull'altro PC, ma avrà un leggero ritardo (circa un secondo). Non so esattamente perché si verifica questo ritardo, ma non riesco a capire come eliminarlo. Ora apri l'app di controllo e inizia a guidare il tuo robot netbook. Scopri come funziona il ritardo durante la guida in modo da non sbattere contro nulla. Se funziona, il tuo robot netbook è finito.

Consigliato: