Sommario:
- Passaggio 1: cosa ti serve…
- Passaggio 2: saldatura della scheda
- Passaggio 3: configurazione di Arduino
- Passaggio 4: configurazione di Python
- Passaggio 5: dove avviene la magia
Video: Scheda Servodriver con GUI Python e Arduino: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Quando si realizzano prototipi o si costruiscono modellini di aeroplani, spesso si riscontra il problema che è necessario controllare la corsa dei servi o impostare i servi in posizione centrale.
Nel caso in cui non desideri costruire l'intero sistema RC o testare, quanto lontano puoi spingere il servo o dove si trova la posizione centrale, allora questa scheda è per te! Ti permette di spostare il servo in posizioni specificate o di viaggiare avanti e indietro.
Funziona sorprendentemente bene, anche con 6 servi che corrono da una posizione all'altra nel loop.
Inoltre, è un bel progetto per conoscere la comunicazione tra Python-GUI e Arduino usando Serial.
Passaggio 1: cosa ti serve…
Per questo progetto, avrai bisogno di quanto segue:
Hardware
- Arduino nano con cavo. Ho usato un clone e il codice Python in realtà si aspetta un chip CH340 di un clone
- Una scheda di prototipazione. 7x5 cm sono sufficienti
- Alcune intestazioni e pin da 2, 54 mm
- 1-6 servi
- Alimentazione per i servi (ho usato un pacco batterie con 4 batterie)
Software
- Python 3:
- Un driver USB per i chip CH340: basta cercare su Google i driver per i driver CH340
- Arduino IDE:
Passaggio 2: saldatura della scheda
La saldatura è in realtà semplice secondo Fritzing nell'immagine. Assicurati solo di poter collegare facilmente i servi alle file a 3 pin.
- Le file a 3 pin sono collegate ai pin digitali 3, 5, 6, 9, 10 e 11 di Arduino nano.
- Il filo rosso è collegato al pin 5V dell'Arduino
- Il filo nero è collegato al pin GND di Arduino
- La coppia di pin sotto le file a 3 pin è pensata per collegare un tipico alimentatore per ricevitore RC, puoi aggiungere connettori come preferisci, come terminali a vite, connettori XT, JST o… o…
Personalmente, mi piacciono le file di intestazioni femminili in cui inserire Arduino, ma dipende da te.
Si prega di notare che le intestazioni femminili in cortocircuito sono un ponticello, che consente di fornire il servo utilizzando la sorgente 5V dell'Arduino a scopo di test. Se lo sforzi troppo, Arduino si ripristinerà e perderà il ritmo giusto. DEVONO essere rimossi, prima di collegare un altro alimentatore.
Passaggio 3: configurazione di Arduino
Installa l'IDE di Arduino e esegui il flashing di Arduino nano con lo schizzo allegato.
Passaggio 4: configurazione di Python
Installa Python 3 dopo averlo scaricato. Assicurati di selezionare l'opzione per creare una variabile "PATH".
Devi installare altri due pacchetti usando pip. Per questo, premi il tasto "Windows", digita "cmd" e premi "invio". Nel prompt dei comandi digita i seguenti comandi:
- pip install serial
- piip install pyserial
- pip install tkinter
Come puoi vedere, ho bisogno dei moduli serial e pyserial, che molto probabilmente non è il più efficiente, poiché pyserial dovrebbe sostituire serial. Tuttavia funziona e sto appena iniziando a imparare;).
Apri lo script Python nell'IDE ed eseguilo, oppure eseguilo direttamente dal terminale.
Nel menu a tendina, puoi scegliere tra due modalità, "Go Straight" e "Ping Pong":
- Vai dritto: inserisci una posizione del servo in microsecondi nella prima colonna e premi "Start" per far muovere il servo nella posizione specificata.
- Ping Pong: inserisci un limite inferiore e uno superiore nella seconda e nella terza colonna. Quella è la posizione inferiore e superiore, tra le quali il servo andrà avanti e indietro. Nella colonna "Ping Pong Time" è possibile specificare un tempo in millisecondi, che il servo attenderà quando avrà raggiunto la posizione superiore o inferiore. Premi "Start" e il servo inizierà a muoversi avanti e indietro, premi "Stop" e il servo si fermerà.
Passaggio 5: dove avviene la magia
Ultimo ma non meno importante, voglio sottolineare alcuni dettagli nel codice per coloro che vogliono entrare un po' nella comunicazione seriale tra Python e Arduino.
Ora, cosa succede nel programma Python?
Prima di tutto, il programma controlla cosa è collegato alle porte COM in questa riga e lo salva in un elenco:
self. COMPortsList = list(serial.tools.list_ports.comports())
Quindi scorre l'elenco finché non trova un famigerato chip CH340, lo salva e quindi stabilisce una connessione seriale dopo il ciclo for. Notare che il ciclo for si interrompe non appena viene trovato il primo CH340.
for p in self. COMPortsList: if "CH340" in p[1]: # Alla ricerca di un clone Arduino self. COMPort = p[0] break else: pass self. Ser = serial. Serial(self. COMPort, 57600)
La connessione seriale viene stabilita con la porta COM con un baudrate di 57600.
E cosa fa il codice Arduino? Bene, poiché Arduino ha una sola porta COM, la connessione seriale è solo una linea:
Serial.begin(57600);
Ora possiamo usare entrambe le porte per comunicare. In questo caso, solo messaggi da Python ad Arduino. I messaggi vengono inviati qui da Python. La connessione seriale trasmette byte come impostazione predefinita. Questo è anche il modo più veloce per inviare dati e, per quanto ne so, è anche abbastanza diffuso. Quindi gli int per il numero del servo (quindi Arduino sa quale servo muovere) e la posizione in microsecondi vengono trasformati in un byte.
Command = struct.pack('>B', self. Place) # La variabile intera "self. Place" viene trasformata in un byte
self. Ser.write(Command) # Scrive il byte sulla porta seriale Command = int(self. ServoPos.get())//10 # Legge l'input dal campo e consegna int Command = struct.pack(' >B', Command) # Trasforma l'int in un byte self. Ser.write(Command) # Scrive il byte sulla porta seriale
Inoltre, l'analisi dei dati richiede tempo (ad esempio interpretare quattro byte "1", "2", "3" e "0" come int 1230, non come quattro caratteri diversi) ed è meglio farlo non su Arduino.
Sul lato Arduino, le informazioni inviate vengono raccolte come segue:
if(Serial.available()>1){ // Se sono disponibili dati seriali, viene inserito il ciclo c = Serial.read(); // Il primo byte (numero di servo) viene salvato in una variabile Micros = Serial.read(); // La posizione del servo viene salvata qui Micros = Micros * 10; }
Consigliato:
Lettore audio con Arduino con scheda Micro SD: 7 passaggi (con immagini)
Lettore audio che utilizza Arduino con scheda Micro SD: ISCRIVITI al mio canale per ulteriori progetti …………….. Molte persone vogliono interfacciare la scheda SD con arduino o desideri un output audio tramite arduino. Quindi ecco il modo più semplice ed economico per interfacciare la scheda SD con arduino. puoi noi
Radio FM con Inviot U1, una scheda compatibile con Arduino: 3 passaggi
Radio FM utilizzando Inviot U1, una scheda compatibile con Arduino: TEA5767 è facile da usare con un arduino. Sto usando un modulo di TEA5767 e una scheda InvIoT U1 di InvIoT.com
Come programmare una scheda AVR utilizzando una scheda Arduino: 6 passaggi
Come programmare una scheda AVR utilizzando una scheda Arduino: hai una scheda microcontrollore AVR in giro? È complicato programmarlo? Bene, sei nel posto giusto. Qui, ti mostrerò come programmare una scheda microcontrollore Atmega8a utilizzando una scheda Arduino Uno come programmatore. Quindi senza ulteriori
Come utilizzare la scheda radio FM Si4703 con RDS - Tutorial Arduino: 5 passaggi (con immagini)
Come utilizzare la scheda radio FM Si4703 con RDS - Tutorial Arduino: questa è una scheda di valutazione per il chip sintonizzatore FM Si4703 di Silicon Laboratories. Oltre ad essere una semplice radio FM, Si4703 è anche in grado di rilevare ed elaborare informazioni sia Radio Data Service (RDS) che Radio Broadcast Data Service (RBDS)
UDuino: scheda di sviluppo compatibile con Arduino a bassissimo costo: 7 passaggi (con immagini)
UDuino: scheda di sviluppo compatibile con Arduino a bassissimo costo: le schede Arduino sono ottime per la prototipazione. Tuttavia, diventano piuttosto costosi quando si hanno più progetti simultanei o sono necessarie molte schede controller per un progetto più ampio. Ci sono alcune ottime alternative più economiche (Boarduino, Freeduino) ma