Barra de Progresso Com Python e Arduino

Barra de Progresso Com Python e Arduino

Neste post vamos ver como fazer uma barra de progresso com Python e Arduino, os valores serão da nossa IDE serão atualizados de acordo com os valores recebidos pela USB.

No vídeo a seguir são mostrados os detalhes dos dois códigos utilizados em nosso projeto:

https://youtu.be/3eOqbDxQRcg

Circuito

Para montagem do nosso circuito vamos precisar dos seguintes materiais:
* 1 Arduino Uno
* Cabos para Ligações;
* 1 Potenciômetro de 5k

Na figura abaixo é mostrado a montagem do nosso circuito.

Montagem do Potenciômetro no canal A0 do conversor AD do Arduino Uno

Código Arduino

Abaixo é apresentado o código que foi utilizado no Arduino.

float AD = 0;
int valor = 0;
 
void setup()
{
  Serial.begin(9600);
}
 
void loop()
{
  AD = analogRead(A0);
  AD = (AD / 1023) * 100;
  valor = AD;
  
  Serial.println (valor);
}

Primeiramente fazemos a leitura do valor da tensão que está presente no canal A0 do Arduino e o valor é armazenado na variável AD. Depois o valor é convertido para porcentagem, que continua como um tipo float. Para convertemos o valor para inteiro, foi criado uma variável do tipo inteiro chamado de valor, que recebe o valor da variável AD, que depois é enviado pela USB.

Código Python

Abaixo é mostrado o código em Python utilizado em nosso projeto:

import serial
from tkinter import *
from tkinter.ttk import *
import time

# COM4 deve ser modificado manulmente de acordo com a porta onde o Arduino está conectado
ser = serial.Serial('COM4',
                    baudrate = 9600,
                    bytesize = serial.EIGHTBITS,
                    parity = serial.PARITY_NONE,
                    stopbits = serial.STOPBITS_ONE,
                    timeout = 1,
                    xonxoff = 0,
                    rtscts = 0)
ser.setDTR(False)
time.sleep(1)
ser.flushInput()
ser.setDTR(True)


class TEXTO(Frame): # Classe responsável por criar o objeto Texto, que atualiza o valor recebido pela serial
    def __init__(self,master = None):
        Frame.__init__(self, master)
        self.master = master
        self.label = Label(text = "")
        self.label.place(x = 200, y = 50)
        self.update_window()

    def update_window(self):
        ser.flushInput()
        line = ser.readline()
        valor = line.decode()
        val = str(valor)
        self.label.configure(text = val)
        self.after(100, self.update_window)


class BARRA(Frame): # Classe responsável por criar o objeto Barra
    def __init__(self,master = None):
        Frame.__init__(self, master)
        self.master = master
        self.barra = Progressbar(root, orient = HORIZONTAL, length = 100, mode = 'determinate')
        self.barra.place(x = 100, y = 50)
        self.update_window2()

    def update_window2(self):
        ser.flushInput()
        line = ser.readline()
        valor = line.decode()
        val = int(valor)
        self.barra.configure(value = val)
        self.after(100, self.update_window2)

root = Tk()
root.title ("Wantronics")
root.geometry("300x150")


texto = TEXTO(root) # Cria um objeto para chamado app para exibir o valor lido pela serial
barra = BARRA(root) # Cria um objeto do tipo barra, para mostrar graficamente o valor da serial


root.mainloop()

No código são cridas duas classes para que sejam criados dois objetos, um responsável por exibir o valor na forma de texto e outro para exibir o valor na forma de barra.

Na figura a seguir é mostrado a IDE.

IDE criada em Python

Conclusão

Neste post vimos como fazer uma barra de progresso com Python e Arduino, criando um recurso visual muito legal para leitura de sensores que podem estar conectados a um Arduino e onde desejamos ter uma visão geral das leituras no computador.

Abaixo é mostrado outro vídeo com o mesmo circuito em funcionamento.

Isso é tudo pessoal, e até o próximo post.