Neste post vamos ver o controle PWM de 10 LEDs com Python e Arduino, vamos fazer uma IDE usando a biblioteca Tkinter do Python.
No vídeo abaixo vocês podem conferir a montagem do circuito e funcionamento:
Materiais utilizados
Para o nosso projeto vamos utilizar os seguintes componentes eletrônicos:
* 10 – LEDs;
* 10 – Resistores de 270 Ω;
* 2 – Resistores 10 k;
* 1 – Transistor MOSFET 2N7002;
* 1 – Arduino UNO.
Código do Arduino
Abaixo é apresentado o código utilizado no Arduino.
/*
Wantronics
Projeto: Controle PWM de 10 LEDs com Python e Arduino
01 / 10 / 2023
CLP Duino Nano Wantronics
*/
#define out1 13
#define out2 12
#define out3 11
#define out4 10
#define out5 9
#define out6 8
#define out7 7
#define out8 6
#define out9 5
#define out10 4
#define pwm 3
int i = 0;
int column[10] = {out1, out2, out3, out4, out5, out6, out7, out8, out9, out10};
void limpaColumn() {
for (i = 0; i < 10; i++) {
digitalWrite(column[i], LOW);
}
}
void bargraph(int LED) {
for (i = 0; i < LED; i++) {
digitalWrite(column[i], HIGH);
}
}
void setup() {
pinMode (out1, OUTPUT);
pinMode (out2, OUTPUT);
pinMode (out3, OUTPUT);
pinMode (out4, OUTPUT);
pinMode (out5, OUTPUT);
pinMode (out6, OUTPUT);
pinMode (out7, OUTPUT);
pinMode (out8, OUTPUT);
pinMode (out9, OUTPUT);
pinMode (out10, OUTPUT);
pinMode (pwm, OUTPUT);
Serial.begin (9600);
}
void loop() {
while (Serial.available() == 0) {}
String serialUSB = Serial.readString();
serialUSB.trim();
if (serialUSB == "0") {
limpaColumn();
}
if (serialUSB == "1") {
limpaColumn();
bargraph(1);
}
if (serialUSB == "2") {
limpaColumn();
bargraph(2);
}
if (serialUSB == "3") {
limpaColumn();
bargraph(3);
}
if (serialUSB == "4") {
limpaColumn();
bargraph(4);
}
if (serialUSB == "5") {
limpaColumn();
bargraph(5);
}
if (serialUSB == "6") {
limpaColumn();
bargraph(6);
}
if (serialUSB == "7") {
limpaColumn();
bargraph(7);
}
if (serialUSB == "8") {
limpaColumn();
bargraph(8);
}
if (serialUSB == "9") {
limpaColumn();
bargraph(9);
}
if (serialUSB == "A") {
limpaColumn();
bargraph(10);
}
//Pwm control
if (serialUSB == "B") {
analogWrite(pwm, 0);
}
if (serialUSB == "C") {
analogWrite(pwm, 25);
}
if (serialUSB == "D") {
analogWrite(pwm, 50);
}
if (serialUSB == "E") {
analogWrite(pwm, 75);
}
if (serialUSB == "F") {
analogWrite(pwm, 100);
}
if (serialUSB == "G") {
analogWrite(pwm, 125);
}
if (serialUSB == "H") {
analogWrite(pwm, 150);
}
if (serialUSB == "I") {
analogWrite(pwm, 175);
}
if (serialUSB == "J") {
analogWrite(pwm, 200);
}
if (serialUSB == "K") {
analogWrite(pwm, 225);
}
if (serialUSB == "L") {
analogWrite(pwm, 255);
}
}
Código Python para IDE
Abaixo é apresentado o código 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 ligaLeds(*args):
if ledScale.get() == 0:
x = str(0)
ser.write(x.encode())
elif ledScale.get() == 1:
x = str(1)
ser.write(x.encode())
elif ledScale.get() == 2:
x = str(2)
ser.write(x.encode())
elif ledScale.get() == 3:
x = str(3)
ser.write(x.encode())
elif ledScale.get() == 4:
x = str(4)
ser.write(x.encode())
elif ledScale.get() == 5:
x = str(5)
ser.write(x.encode())
elif ledScale.get() == 6:
x = str(6)
ser.write(x.encode())
elif ledScale.get() == 7:
x = str(7)
ser.write(x.encode())
elif ledScale.get() == 8:
x = str(8)
ser.write(x.encode())
elif ledScale.get() == 9:
x = str(9)
ser.write(x.encode())
elif ledScale.get() == 10:
ser.write('A'.encode())
def pwm(*args):
if pwmScale.get() == 0:
ser.write('B'.encode())
elif pwmScale.get() == 10:
ser.write('C'.encode())
elif pwmScale.get() == 20:
ser.write('D'.encode())
elif pwmScale.get() == 30:
ser.write('E'.encode())
elif pwmScale.get() == 40:
ser.write('F'.encode())
elif pwmScale.get() == 50:
ser.write('G'.encode())
elif pwmScale.get() == 60:
ser.write('H'.encode())
elif pwmScale.get() == 70:
ser.write('I'.encode())
elif pwmScale.get() == 80:
ser.write('J'.encode())
elif pwmScale.get() == 90:
ser.write('K'.encode())
elif pwmScale.get() == 100:
ser.write('L'.encode())
ledLabel = Label(text = "LEDs").pack()
ledScale = Scale(root,
from_ = 0,
to = 10,
length = 800,
width = 200,
orient = HORIZONTAL,
command = ligaLeds)
myScaleA.pack()
ledLabel = Label(text = "PWM").pack()
pwmScale = Scale(root,
from_ = 0,
to = 100,
length = 800,
width = 200,
orient = HORIZONTAL,
resolution = 10,
command = pwm)
myScaleB.pack()
root.mainloop()
Diagrama esquemático
Abaixo é mostrado o diagrama esquemático do circuito utilizado. A alimentação foi feita pela porta USB do notebook.
Conclusão
Evoluímos o nosso projeto de controle com Python e Arduino, agora podemos controlar mais LEDs e com dois scrolls. Agora além de controlar a intensidade luminosa também podemos controlar a quantidade de LEDs que devem ser ligados. O projeto pode ser melhorado ainda mais, como por exemplo, trocar o acionamento dos LEDs de scrolls para botões. Tudo vai depender do que se precisa para cada aplicação.
E neste post vimos o controle PWM de 10 LEDs com Python e Arduino, até o próximo post.