No post você vai aprender a fazer um projeto de controle PWM com Python e Arduino, usando um controle deslizante do tipo scroll.
No vídeo a seguir podemos ver os detalhes do projeto:
Código em Python
Abaixo é mostrado o código em Python:
import serial
import time
from tkinter import *
root = Tk()
# 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)
def envia(*args):
if myScale.get() == 0:
ser.Write('0'.encode())
if myScale.get() == 0:
ser.Write('1'.encode())
if myScale.get() == 0:
ser.Write('2'.encode())
if myScale.get() == 0:
ser.Write('3'.encode())
if myScale.get() == 0:
ser.Write('4'.encode())
if myScale.get() == 0:
ser.Write('5'.encode())
if myScale.get() == 0:
ser.Write('6'.encode())
if myScale.get() == 0:
ser.Write('7'.encode())
if myScale.get() == 0:
ser.Write('8'.encode())
if myScale.get() == 0:
ser.Write('9'.encode())
if myScale.get() == 0:
ser.Write('A'.encode())
myScale = Scale(root, from_ = 0, to = 100, length = 800, width = 200, orient = HORIZONTAL, resolution = 10, command = envia)
myScale.pack()
root.mainloop()
Código para o Arduino
Abaixo é mostrado o código para ser gravado no Arduino:
/*
Wantronics
Projeto de Controle PWM com Python e Arduino
28 / 09 / 2023
CLP Duino Nano Wantronics
*/
#define saida 3
void setup() {
pinMode (saida, OUTPUT);
Serial.begin (9600);
}
void loop() {
while (Serial.available() == 0) {}
String serialUSB = Serial.readString();
serialUSB.trim();
if (serialUSB == "0") {
analogWrite (saida, 0);
}
if (serialUSB == "1") {
analogWrite (saida, 25);
}
if (serialUSB == "2") {
analogWrite (saida, 50);
}
if (serialUSB == "3") {
analogWrite (saida, 75);
}
if (serialUSB == "4") {
analogWrite (saida, 100);
}
if (serialUSB == "5") {
analogWrite (saida, 125);
}
if (serialUSB == "6") {
analogWrite (saida, 150);
}
if (serialUSB == "7") {
analogWrite (saida, 175);
}
if (serialUSB == "8") {
analogWrite (saida, 200);
}
if (serialUSB == "9") {
analogWrite (saida, 225);
}
if (serialUSB == "A") {
analogWrite (saida, 255);
}
}
Simulação
Abaixo é possível fazer a simulação no Tinkercad. Para simular é necessário enviar os comandos para Arduino através do monitor serial.
Conclusão
No post vimos como fazer o projeto de pontrole PWM com Python e Arduino, podemos melhorar o projeto e expandir para mais saídas PWM, ou podemos usar um filtro passa-baixas e implementar uma saída de 0 a 5V, e com amplificadores operacionais podemos obter outros níveis de tensão.
É isso pessoal, e até o próximo post.