quarta-feira, 4 de setembro de 2019

Usando Python com Arduino - Controlando um LED

O Arduino sempre foi uma plataforma de aprendizado/desenvolvimento poderosa e fácil de usar quando se trata de desenvolvimento de hardware de código aberto. No mundo moderno de hoje, todo hardware é alimentado por uma linguagem de programação de alto nível geral para torná-lo mais eficaz e fácil de usar. Um desses idiomas é o Python. O Python é uma linguagem de programação interpretada, orientada a objetos e de alto nível, com semântica dinâmica com estruturas de dados de alto nível, combinadas com tipagem dinâmica e ligação dinâmica, o que o torna muito atraente para o Desenvolvimento Rápido de Aplicativos.

Combinar o poder do Arduino e do Python
 abrirá portas para muitas possibilidades, já que o python tem uma produtividade aumentada com sua capacidade de interagir com outras plataformas como openCV, Matlab etc. Então, neste tutorial, aprenderemos o como podemos instalar o python em nosso computador e como usá-lo com o Arduino para alternar o LED integrado do Arduino.
controlling onboard led of arduino using python





Então, vamos começar ....

Materiais requisitados:

  1. Arduino Uno (ou qualquer placa Arduino)
  2. Computador com conexão à Internet

Instalando o Python no seu computador:

Obviamente, o primeiro passo neste tutorial seria instalar o Python em nosso computador. As etapas mencionadas abaixo são aplicáveis ​​apenas a usuários de Windows que executam SO de 32 ou 64 bits. O procedimento de instalação para MAC e Linux é diferente.
  1. Clique em 32-bit Python-2.7.9 e isso instalará o Python IDLE de 32 bits no seu computador. Não faça o download da versão de 64 bits ou das versões atualizadas, pois elas não fornecem suporte para as bibliotecas do Arduino. Mesmo se o seu computador estiver operando em 64 bits, você pode usar o próprio Python de 32 bits.
  2. Abra o arquivo exe baixado e siga as instruções. Não altere o diretório em que o python está sendo instalado. Será C: \ Python27 por padrão e deixará como tal.
  3. Enquanto a instalação ocorre, você pode receber um aviso do seu antivírus (se houver) nesse caso, clique em permitir.

É isso aí !, o python é instalado com sucesso em nosso computador. Você pode verificá-lo pesquisando por“Python IDLE”na caixa de pesquisa do Windows e abra-a.
python-idle-in-windows

Quando aberto, você deverá obter a seguinte tela. Essa janela é chamada de Python Shell e vamos chamá-la de “Python shell” a partir de agora.
python shell in windows

Essa tela é chamada de Shell Python. Você pode codificar diretamente aqui e obter a saída na mesma tela ou criar um novo arquivo e escrever o programa lá e verificar o programa Aqui. Mais tarde entraremos nos detalhes da criação de um programa python, por enquanto, vamos verificar se o python está funcionando.
Para fazer isso, basta digitar “print (1 + 1)” e pressione enter. Você deve ver o resultado sendo impresso como mostrado abaixo.
running testing python in windows

Obtendo o PySerial em Python:

O próximo passo é instalar o pyserial.  PySerial é um módulo de API Python usado para ler e gravar dados seriais no Arduino ou em qualquer outro microcontrolador.
Clique em Pyserial Windows para baixar o PySerial. O download resultante será um arquivo exe que pode ser instalado diretamente. Não altere nenhuma configuração durante a instalação. Deixe-o no diretório padrão e nas configurações padrão.

Agora, vamos verificar se o PySerial está instalado corretamente. Para fazer isso, abra o Python Shell novamente e digite
import serialSe a biblioteca foi instalada com sucesso, você não deve receber nenhuma mensagem de erro, como mostra a figura abaixo. Se houver algum erro, publique-o na seção de comentários e tentaremos resolvê-lo.
importing python serial library for communication with arduino

Nosso primeiro programa Arduino Python:

Como dito anteriormente, estaremos controlando o LED integrado da placa Arduino usando o script Python. Vamos começar com o código do Arduino.

Programa para Arduino:
O programa completo para este Tutorial do Arduino python é apresentado no final desta página. Leia mais para saber como funciona.
Dentro da função setup inicializamos a comunicação serial em 9600 baud classifique e declare que usaremos o led embutido como saída e o abaixar durante o início do programa. Também enviamos uma mensagem de boas-vindas ao python via impressão serial, como mostrado abaixo:

void setup() {
  Serial.begin(9600); //initialize serial COM at 9600 baudrate
  pinMode(LED_BUILTIN, OUTPUT); //make the LED pin (13) as output
  digitalWrite (LED_BUILTIN, LOW);
  Serial.println("Hi!, I am Arduino");
}

Dentro da função loop , lemos os dados que está sendo fornecido em série e atribuindo o valor à variável “data”. Agora, com base no valor de esta variável ("dados") alternamos o led incorporado, como mostrado abaixo.

void loop() {
while (Serial.available()){
  data = Serial.read();
}

if (data == '1')
digitalWrite (LED_BUILTIN, HIGH);

else if (data == '0')
digitalWrite (LED_BUILTIN, LOW);
}

Programa para Python:
O programa python completo para este tutorial é fornecido no final desta página. Leia mais para saber como escrever e usar o mesmo.
  1. Abra o seu Python Shell (Python IDLE) e clique em File-> New
  2. Isso abrirá um novo arquivo de texto onde você pode digitar seu programa.
  3. Antes de digitar qualquer coisa, vamos salvar o arquivo, pressionando Ctrl + S. Digite qualquer nome e clique em Salvar. Isso salvará automaticamente seu arquivo em ".py" extensão.
  4. Agora, digite o programa ou cole o código python fornecido no final desta página. A explicação para o mesmo é dada abaixo e, finalmente, execute o programa.

Em nosso programa, o primeiro passo seria importar a biblioteca serial e de tempo. A biblioteca serial, como foi dito anteriormente, será usada para ler e gravar dados seriais, e a biblioteca de tempos será usada para criar atrasos em nosso programa. Essas duas bibliotecas podem ser importadas em nosso programa usando as duas linhas a seguir:

import serial #Serial importado para comunicação serial
import time #Necessário para usar funções de atraso

O próximo passo seria inicializar um objeto serial usando nossa biblioteca serial. Neste programa, nomeamos nosso objeto serial como “ArduinoSerial”. Nesta linha, devemos mencionar o nome da porta COM à qual nosso Arduino está conectado e a qual taxa de transmissão está operando, conforme mostrado abaixo.

ArduinoSerial = serial.Serial('com18',9600)
Nota: É muito importante mencionar o nome da porta COM correta. Pode ser encontrado usando o Gerenciador de dispositivos no seu computador.

Assim que o objeto serial for inicializado, devemos mantenha o programa por dois segundos para que a comunicação serial seja estabelecida. Isso pode ser feito usando a linha abaixo:

time.sleep(2)

Agora podemos ler ou escrever qualquer coisa de/para o nosso Arduino Board.
A seguinte linha irá lerá qualquer coisa vinda do Arduino e a imprimirá na janela do shell

print ArduinoSerial.readline()
Você também pode atribuir o valor a uma variável e usá-lo para cálculos.

A seguinte linha irá gravará o valor do parâmetro no Arduino Board.

ArduinoSerial.write('1')
Esta linha escreverá "1" para o Arduino. Você pode enviar qualquer coisa, de decimais a seqüências de caracteres, usando a mesma linha.

Agora, voltando ao nosso programa, dentro do loop while infinito, temos as seguintes linhas

var = raw_input() #get input do usuário
    print "you entered", var #print a entrada para confirmação
   
    if (var == '1'): #se o valor for 1
        ArduinoSerial.write('1') #envia 1
        print ("LED turned ON")
        time.sleep(1)

    if (var == '0'): #se o valor for 0
        ArduinoSerial.write('0') #envia 0
        print ("LED turned OFF")
        time.sleep(1)
A linha var = raw_input obterá qualquer valor digitado no script Shell e atribuirá esse valor à variável var.

Mais tarde, se o valor for 1, ele imprimirá "1". serialmente para o Arduino e, se 0, ele imprimirá "0" serialmente para o Arduino. O código do nosso programa Arduino (discutido acima) alternará o LED com base no valor recebido.
Depois que o programa completo estiver concluído, seu script deverá se parecer com isso abaixo
python program for controlling LED with arduino
Agora clique em Executar -> Execute o Módulo ou pressione F5, isso poderá solicitar que você salve o programa e o inicie.

Controlando o LED com Python e Arduino:

O trabalho deste projeto é bastante direto. Carregue o programa no seu Arduino e verifique se ele está conectado à mesma porta COM mencionada no programa python. Em seguida, inicie o programa Python como mencionado acima.

Isso iniciará um script de shell python, como mostrado abaixo. A janela à esquerda é a janela do shell mostrando a saída e a janela à direita é o script que mostra o programa.
python program output for controlling LED with arduino
Como você pode ver, a string “Oi !, eu sou Arduino" inserida no programa Arduino é recebida pelo Python e exibida em sua janela de concha.
Quando a janela do shell pede para inserir valores, podemos inserir 0 ou 1. Se enviarmos 1, o LED na placa Arduino acenderá e se enviarmos 0, o LED em nossa placa Arduino se apagará. Mostrando uma conexão bem-sucedida entre o nosso Programa Arduino e o Python.
Existem  dois programas fornecidos abaixo, um para ser carregado e executado no Arduino e o segundo no Python Shell no Windows.

Espero que você tenha entendido o projeto e tenha conseguido fazê-lo funcionar. Caso contrário, poste seu problema no comentário abaixo e teremos prazer em ajudá-lo. Em nosso próximo projeto, aprenderemos o que mais pode ser feito com o Python e o Arduino, explorando profundamente outros módulos python como Vpython, gamepython etc. Até então, fique atento ....

Código: 
Programa para Arduino:
/*
 *Código para piscar um LED usando Python
 */
int data;
void setup() {
  Serial.begin(9600); //inicialize COM serial em 9600 baudrate
  pinMode(LED_BUILTIN, OUTPUT); //faça o pino de LED (13) como saída
  digitalWrite (LED_BUILTIN, LOW);
 
  Serial.println("Oi!, eu sou o Arduino");
}

void loop() {
while (Serial.available()){
  data = Serial.read();
}
if (data == '1')
digitalWrite (LED_BUILTIN, HIGH);
else if (data == '0')
digitalWrite (LED_BUILTIN, LOW);
}

Programa Python para Windows:
#Programa para controlar o LED do Arduino a partir de Python
import serial #Serial imported for Serial communication
import time #Necessário para usar funções de atraso

ArduinoSerial = serial.Serial('com18',9600) #Criar objeto de porta serial chamado arduinoSerialData
time.sleep(2) #aguarde 2 segundos para que a comunicação seja estabelecida
print ArduinoSerial.readline() #leia os dados seriais e imprima-os como linha
print ("Digite 1 para ligar o LED e 0 para desligar o LED")

while 1: #Faça isso para sempre
    var = raw_input() #obter entrada do usuário
    print "you entered", var #imprimir a entrada para confirmação
   
    if (var == '1'): #se o valor for 1
        ArduinoSerial.write('1') #send 1
        print ("LED ligado")
        time.sleep(1)
   
    if (var == '0'): #se o valor for 0
        ArduinoSerial.write('0') #send 0
        print ("LED desligado")
        time.sleep(1)

Nenhum comentário:

Postar um comentário

Peço que use somente caixa baixa, não todo escrito em letra grande.