Sommario:

Scheda Servodriver con GUI Python e Arduino: 5 passaggi
Scheda Servodriver con GUI Python e Arduino: 5 passaggi

Video: Scheda Servodriver con GUI Python e Arduino: 5 passaggi

Video: Scheda Servodriver con GUI Python e Arduino: 5 passaggi
Video: Gesture-Controlled Servo with Python and Arduino #electronics #arduinotraining 2024, Luglio
Anonim
Servodriver-Board con Python-GUI e Arduino
Servodriver-Board con Python-GUI e Arduino

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

Saldare la scheda
Saldare la 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

Configurare Python
Configurare 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: