Tabla de contenido:

Servodriver-Board con Python-GUI y Arduino: 5 pasos
Servodriver-Board con Python-GUI y Arduino: 5 pasos

Video: Servodriver-Board con Python-GUI y Arduino: 5 pasos

Video: Servodriver-Board con Python-GUI y Arduino: 5 pasos
Video: Driving a Servo-motor from a #Python🐍Tkinter GUI via pyFirmata + #Arduino + #Firmata protocol 2024, Noviembre
Anonim
Servodriver-Board con Python-GUI y Arduino
Servodriver-Board con Python-GUI y Arduino

Al hacer prototipos o construir modelos de aviones, a menudo se encuentra con el problema de que debe verificar el recorrido del servo o configurar los servos en la posición media.

En caso de que no desee construir todo su sistema RC o probar, qué tan lejos puede empujar el servo o dónde está la posición media, ¡entonces esta placa es para usted! Le permite mover el servo a posiciones específicas o viajar de un lado a otro.

Funciona sorprendentemente bien, incluso con 6 servos que corren de una posición a otra en el bucle.

Además, es un buen proyecto para aprender sobre la comunicación entre Python-GUI y Arduino usando Serial.

Paso 1: lo que necesita …

Para este proyecto, necesitará lo siguiente:

Hardware

  • Arduino nano con cable. Usé un clon, y el código Python realmente espera un chip CH340 de un clon
  • Una placa de creación de prototipos. 7x5cm es suficiente
  • Algunos encabezados y pines de 2, 54 mm
  • 1-6 servos
  • Fuente de alimentación para los servos (usé un paquete de baterías con 4 baterías)

Software

  • Python 3:
  • Un controlador USB para los chips CH340: solo google para los controladores para los controladores CH340
  • IDE de Arduino:

Paso 2: Soldar la placa

Soldar la placa
Soldar la placa

La soldadura es realmente sencilla según Fritzing en la imagen. Solo asegúrese de que puede conectar los servos fácilmente a las filas de 3 pines.

  • Las filas de 3 pines están conectadas a los pines digitales 3, 5, 6, 9, 10 y 11 del Arduino nano.
  • El cable rojo está conectado al pin de 5 V del Arduino
  • El cable negro está conectado al pin GND del Arduino
  • El par de pines debajo de las filas de 3 pines están destinados a conectar una fuente de alimentación de receptor RC típica, puede agregar conectores como desee, como terminales atornillados, conectores XT, JST o … o …

Personalmente, me gustan las filas de encabezados femeninos para colocar el Arduino, pero eso depende de ti.

Tenga en cuenta que los encabezados hembra en corto son un puente que le permite suministrar el servo utilizando la fuente de 5 V del Arduino para fines de prueba. Si lo esfuerzas demasiado, el Arduino se reiniciará y perderá el ritmo correcto. DEBEN retirarse antes de conectar otra fuente de alimentación.

Paso 3: Configuración del Arduino

Instale el IDE de Arduino y actualice el Arduino nano con el boceto adjunto.

Paso 4: Configurar Python

Configurar Python
Configurar Python

Instale Python 3 después de descargarlo. Asegúrese de marcar la opción para crear una variable "PATH".

Necesita instalar dos paquetes más usando pip. Para eso, presione la tecla "Windows", escriba "cmd" y presione "enter". En el símbolo del sistema, escriba los siguientes comandos:

  • pip instalar serie
  • piip instalar pyserial
  • pip instalar tkinter

Como puede ver, necesito los módulos serial y pyserial, que probablemente no sea el más eficiente, ya que pyserial debería reemplazar a serial. Sin embargo, funciona y estoy empezando a aprender;).

Abra Python-Script en el IDE y ejecútelo, o ejecútelo directamente desde la terminal.

En el menú desplegable, puede elegir entre dos modos, "Ir recto" y "Ping Pong":

  • Ir recto: ingrese una posición de servo en microsegundos en la primera columna y presione "Inicio" para hacer que el servo se mueva a la posición especificada.
  • Ping Pong: Ingrese un límite inferior y un límite superior en la segunda y tercera columna. Esa es la posición inferior y superior, entre las cuales el servo irá hacia atrás y hacia adelante. En la columna "Ping Pong Time" puede especificar un tiempo en milisegundos, que el servo esperará cuando haya alcanzado la posición superior o inferior. Presiona "Start" y el servo comenzará a moverse hacia atrás y adelante, presiona "Stop" y el servo se detendrá.

Paso 5: Donde sucede la magia

Por último, pero no menos importante, quiero señalar algunos de los detalles en el código para aquellos que quieran entrar en un poco de comunicación en serie entre Python y Arduino.

Ahora, ¿qué sucede en el programa Python?

En primer lugar, el programa comprueba lo que se adjunta a los puertos COM en esta línea y lo guarda en una lista:

self. COMPortsList = lista (serial.tools.list_ports.comports ())

Luego recorre la lista hasta que encuentra un chip CH340 notorio, lo guarda y luego establece una conexión en serie después del bucle for. Tenga en cuenta que el bucle for se rompe tan pronto como se encuentra el primer CH340.

para p en self. COMPortsList: if "CH340" en p [1]: # Buscando un clon de Arduino self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

La conexión en serie se establece con el puerto COM con una velocidad en baudios de 57600.

¿Y qué hace el código Arduino? Bueno, dado que Arduino tiene solo un puerto COM, la conexión en serie es solo una línea:

Serial.begin (57600);

Ahora, podemos usar ambos puertos para comunicarnos. En este mismo caso, solo mensajes de Python a Arduino. Los mensajes se envían aquí desde Python. La conexión en serie transmite bytes de forma predeterminada. Esa es también la forma más rápida de enviar datos y, hasta donde yo sé, también está bastante extendida. Entonces, las entradas para el número del servo (para que Arduino sepa qué servo mover) y la posición en microsegundos se convierten en un byte.

Command = struct.pack ('> B', self. Place) # La variable int "self. Place" se convierte en un byte

self. Ser.write (Command) # Escribiendo el byte en el puerto serial Command = int (self. ServoPos.get ()) // 10 # Leyendo la entrada del campo y entregando int Command = struct.pack (' > B ', Command) # Convirtiendo el int en un byte self. Ser.write (Command) # Escribiendo el byte en el puerto serie

Además, analizar los datos lleva tiempo (por ejemplo, interpretar cuatro bytes "1", "2", "3" y "0" como int 1230, no como cuatro caracteres diferentes) y es mejor hacerlo no en Arduino.

En el lado de Arduino, la información enviada se recoge de la siguiente manera:

if (Serial.available ()> 1) {// Si hay datos seriales disponibles, entonces se ingresa el ciclo c = Serial.read (); // El primer byte (número de servo) se guarda en una variable Micros = Serial.read (); // La posición del servo se guarda aquí Micros = Micros * 10; }

Recomendado: