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:
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.
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.
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.