Índice:

Servodriver-Board com Python-GUI e Arduino: 5 etapas
Servodriver-Board com Python-GUI e Arduino: 5 etapas

Vídeo: Servodriver-Board com Python-GUI e Arduino: 5 etapas

Vídeo: Servodriver-Board com Python-GUI e Arduino: 5 etapas
Vídeo: Gesture-Controlled Servo with Python and Arduino #electronics #arduinotraining 2024, Novembro
Anonim
Servodriver-Board com Python-GUI e Arduino
Servodriver-Board com Python-GUI e Arduino

Ao fazer protótipos ou construir modelos de aviões, muitas vezes você se depara com o problema de verificar o curso do servo ou colocá-los na posição intermediária.

No caso de você não querer construir todo o seu sistema RC ou testar, o quão longe você pode empurrar o servo ou onde está a posição intermediária, então esta placa é para você! Ele permite que você mova o servo para posições especificadas ou viajemos de um lado para o outro.

Funciona surpreendentemente bem, mesmo com 6 servos que correm de uma posição para outra no loop.

Além disso, é um bom projeto para aprender sobre a comunicação entre Python-GUI e Arduino usando Serial.

Etapa 1: O que você precisa …

Para este projeto, você precisará do seguinte:

Hardware

  • Arduino nano com cabo. Eu usei um clone, e o código Python realmente espera um chip CH340 de um clone
  • Uma placa de prototipagem. 7x5cm é o suficiente
  • Alguns cabeçalhos e pinos de 2, 54 mm
  • 1-6 servos
  • Fonte de alimentação para os servos (usei uma bateria com 4 baterias)

Programas

  • Python 3:
  • Um driver USB para os chips CH340: basta pesquisar no Google os drivers para os drivers CH340
  • Arduino IDE:

Etapa 2: soldando a placa

Soldando a placa
Soldando a placa

A soldagem é realmente direta de acordo com Fritzing na foto. Apenas certifique-se de que você pode conectar os servos facilmente às linhas de 3 pinos.

  • As linhas de 3 pinos são conectadas aos pinos digitais 3, 5, 6, 9, 10 e 11 do Arduino nano.
  • O fio vermelho é conectado ao pino de 5 V do Arduino
  • O fio preto é conectado ao pino GND do Arduino
  • O par de pinos abaixo das fileiras de 3 pinos destina-se a conectar uma fonte de alimentação de receptor RC típica, você pode adicionar conectores como desejar, como terminais de aparafusar, conectores XT, JST ou … ou …

Pessoalmente, gosto de linhas de cabeçalhos femininos para colocar o Arduino, mas isso é com você.

Observe que os conectores fêmeas em curto são um jumper, que permite fornecer o servo usando a fonte de 5 V do Arduino para fins de teste. Se você forçar demais, o Arduino irá reiniciar e perder o ritmo certo. Eles DEVEM ser removidos antes de conectar outra fonte de alimentação.

Etapa 3: Configurando o Arduino

Instale o IDE do Arduino e atualize o Arduino nano com o esboço em anexo.

Etapa 4: Configurando Python

Configurando Python
Configurando Python

Instale o Python 3 após baixá-lo. Certifique-se de marcar a opção para criar uma variável "PATH".

Você precisa instalar mais dois pacotes usando pip. Para isso, pressione a tecla "Windows", digite "cmd" e pressione "enter". No prompt de comando, digite os seguintes comandos:

  • pip install serial
  • piip install pyserial
  • pip install tkinter

Como você pode ver, eu preciso dos módulos seriais além do pyserial, o que provavelmente não é o mais eficiente, já que o pyserial deve substituir o serial. Mesmo assim funciona e estou apenas começando a aprender;).

Abra o Python-Script no IDE e execute-o ou execute-o diretamente do terminal.

No menu suspenso, você pode escolher entre dois modos, "Go Straight" e "Ping Pong":

  • Vá direto: insira uma posição servo em microssegundos na primeira coluna e clique em "Iniciar" para fazer o servo se mover para a posição especificada.
  • Ping Pong: Insira um limite inferior e um limite superior na segunda e terceira colunas. Essas são as posições inferior e superior, entre as quais o servo vai e volta. Na coluna "Tempo de Ping Pong" você pode especificar um tempo em milissegundos que o servo irá esperar quando atingir a posição superior ou inferior. Pressione "Iniciar" e o servo começará a se mover para trás e para frente, pressione "Parar" e o servo irá parar.

Etapa 5: onde a mágica acontece

Por último, mas não menos importante, quero apontar alguns dos detalhes do código para aqueles que desejam entrar um pouco na comunicação serial entre Python e Arduino.

Agora, o que acontece no programa Python?

Em primeiro lugar, o programa verifica o que está anexado às portas COM nesta linha e salva em uma lista:

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

Em seguida, ele percorre a lista até encontrar um famoso chip CH340, salva-o e estabelece uma conexão serial após o loop for. Observe que o loop for é interrompido assim que o primeiro CH340 é encontrado.

for p in self. COMPortsList: if "CH340" in p [1]: # Procurando um clone do Arduino self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

A conexão serial é estabelecida com a porta COM com uma taxa de transmissão de 57600.

E o que o código do Arduino faz? Bem, como o Arduino tem apenas uma porta COM, a conexão serial é apenas uma linha:

Serial.begin (57600);

Agora, podemos usar as duas portas para nos comunicarmos. Nesse caso, apenas mensagens do Python para o Arduino. As mensagens são enviadas aqui do Python. A conexão serial transmite bytes como padrão. Essa também é a maneira mais rápida de enviar dados e, pelo que eu sei, ainda é bastante difundida. Portanto, os ints para o número do servo (para que o Arduino saiba qual servo mover) e a posição em microssegundos são transformados em um byte.

Command = struct.pack ('> B', self. Place) # A variável int "self. Place" é transformada em um byte

self. Ser.write (Command) # Escrevendo o byte no Serial-Port Command = int (self. ServoPos.get ()) // 10 # Lendo a entrada do campo e transformando int Command = struct.pack (' > B ', Comando) # Transformando o int em um byte self. Ser.write (Command) # Escrevendo o byte na Porta Serial

Além disso, a análise de dados leva tempo (por exemplo, interpretar quatro bytes "1", "2", "3" e "0" como o int 1230, não como quatro caracteres diferentes) e é melhor fazer isso não no Arduino.

No lado do Arduino, as informações enviadas são coletadas da seguinte forma:

if (Serial.available ()> 1) {// Se os dados seriais estiverem disponíveis, o loop será inserido c = Serial.read (); // O primeiro byte (número de servo) é salvo em uma variável Micros = Serial.read (); // A posição do servo é salva aqui Micros = Micros * 10; }

Recomendado: