Projeto de Controle PWM com Python e Arduino

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.