AULA 6 - Microcontroladores - Engenharia: mudanças entre as edições
imported>Fargoud |
imported>Fargoud |
||
| Linha 200: | Linha 200: | ||
* 1 micro motor de 5V | * 1 micro motor de 5V | ||
Um micromotor CC de 5V normalmente utiliza correntes da ordem de | Um micromotor CC de 5V normalmente utiliza correntes da ordem de 70mA, a vazio e até 170mA, com carga plena. | ||
O arduino, porém, só consegue fornecer até 40mA por pino digital. | |||
[[imagem: MIC2micromotor5V.png|center]] | [[imagem: MIC2micromotor5V.png|center]] | ||
Edição das 19h43min de 28 de agosto de 2018
MATERIAIS
Por aluno:
- 1 placa Arduino Uno
- cabo de comunicação/alimentação USB
- 1 computador PC com software Arduino IDE instalado
- 1 proto shield para montagens
- 1 potenciômetro de 10kΩ;
- 1 led vermelho;
- 1 resistor de 200 Ω
- 3 resistores de 1kΩ
- 1 led RGB;
- 1 diodo 1N4148
- 1 diodo 1N4001
- 1 motor CC de 5V;
- 1 transistor TIP120 ou um transistor BC548 e um BD137;
- 1 bateria de 9V para o motor;
- cabos fêmea-macho
METODOLOGIA
- Exposição dialogada dos conteúdos disponíveis, em projetor multimídia.
- Navegação assistida em outros sites e portais, de conteúdos relacionados.
- Montagens práticas e desenvolvimento em computador de aplicativos.
- Testes de verificação e validação.
Sinal PWM – Pulse Width Modulation
(Modulação por Largura de Pulso)
PWM (Pulse Width Modulation – Modulação por Largura de Pulso) é uma técnica para obter resultados analógicos por meios digitais.
Essa técnica consiste na geração de uma onda quadrada em uma frequência muito alta em que pode ser controlada a porcentagem do tempo em que a onda permanece em nível lógico alto.
Esse tempo é chamado de Duty Cycle (Ciclo de trabalho) e sua alteração provoca mudança no valor médio da onda, indo desde 0V (0% de Duty Cycle) a 5V (100% de Duty Cycle) no caso do Arduino.
O Arduino UNO possui 6 (seis) portas PWM, 3, 5, 6, 9, 10 e 11.
O sinal PWM pode variar de 0 a 255 e para ativá-lo basta usar a seguinte instrução em uma das portas PWM:
analogWrite(pin, sinal_pwm);
Note que as portas PWM são todas digitais, porém o sinal é modulado “como se fosse” um sinal analógico.
Ciclo de Trabalho – Duty-Cicle
O sinal PWM possui um ciclo de trabalho que determina com que frequência o sinal muda do nível lógico HIGH para o nível lógico LOW e vice versa.
No Arduino a frequência do PWM pode ser definida entre 32Hz até 62kHz.
Duty cicle = (100% * largura do pulso) / período
O valor do Duty Cycle usado pelo Arduino é um inteiro armazenado em 8 bits, de forma que seu valor vai de 0 (0%) a 255 (100%).
Usos do PWM
Geração de tensão analógica de 0 a 5V:
Para um sinal PWM de valor 200 temos:
Se 255 é 100%, 200 é aproximadamente 78,4%. Como a tensão máx de saída do Arduino é 5V a tensão média do sinal PWM será:
Vmédio = Vmax*Duty Cycle(%) Vmédio=5*78,4% Vmédio=3,92V
Acionamento analógico de atuadores:
Controlando a intensidade de um led
Neste exemplo, a intensidade de um led de alto brilho, que depende da tensão sobre o LED, será alterada com sinal PWM
Controlando a cor de um led RGB
Fonte: LED RGB com arduino
O led RGB, que na verdade são 3 leds (um vermelho, um verde e um azul) no mesmo encapsulamento, tem a seguinte pinagem:
O led pode ser catodo comum, ou anodo comum.
O esquema de montagem é:
Fotografia:
E o código:
const int redPin = 6;
const int greenPin = 5;
const int bluePin = 3;
void setup()
{
pinMode(redPin,OUTPUT);
pinMode(greenPin,OUTPUT);
pinMode(bluePin,OUTPUT);
}
void loop()
{
delay(1000);
primaryColors(1,0,0); // Red
delay(2000);
primaryColors(0,1,0); // Green
delay(2000);
primaryColors(0,0,1); // Blue
delay(2000);
primaryColors(1,1,0); // Yellow
delay(2000);
primaryColors(1,0,1); // Magenta
delay(2000);
primaryColors(0,1,1); // Cyan
delay(2000);
primaryColors(1,1,1); // White
delay(2000);
RGBFading();
}
void primaryColors(int redValue, int greenValue, int blueValue)
{
digitalWrite(redPin, redValue);
digitalWrite(greenPin, greenValue);
digitalWrite(bluePin, blueValue);
}
void RGBFading()
{
int x;
int redBrightness;
int greenBrightness;
int blueBrightness;
for (x = 0; x < 768; x++)
{
if (x <= 255)
{
redBrightness = 255 - x;
greenBrightness = x;
blueBrightness = 0;
}
else if (x <= 511)
{
redBrightness = 0;
greenBrightness = 255 - (x - 256);
blueBrightness = (x - 256);
}
else
{
redBrightness = (x - 512);
greenBrightness = 0;
blueBrightness = 255 - (x - 512);
}
analogWrite(redPin, redBrightness);
analogWrite(bluePin, blueBrightness);
analogWrite(greenPin, greenBrightness);
delay(10);
}
}
Controle de velocidade de motor CC de 5V, sem fonte externa:
Regulador de velocidade simples para motores CC de 5V:
Componentes:
- Arduino
- protoboard e fios
- 1 resistência de 222Ω
- 1 transistor TIP120
!!!!! - 1 diodo 1N4148

- 1 potenciômetro de 10 KΩ
- 1 micro motor de 5V
Um micromotor CC de 5V normalmente utiliza correntes da ordem de 70mA, a vazio e até 170mA, com carga plena.
O arduino, porém, só consegue fornecer até 40mA por pino digital.
Assim, é necessário uma configuração de transistores, montados como amplificador, para elevar a corrente de alimentação do motor.
* Na verdade, foram utilizados um BC548 e BD137, ligados pelo emissor do primeiro na base do segundo, e pelos coletores (Darlington).
O potênciometro envia a informação da velocidade para o pino analógico 0. Na indisponibilidade dos transistores Darlington da Texas, fizemos:
As pinagens destes transistores são:
link para o vídeo: Acionando motor 5V com Arduino
Código:
int potPin = 0; // Pino analógico 0 conectado no potênciometro
int transistorPin = 9; // Base do transistor conectada ao arduino pelo pino digital 9
int potValue = 0; // Valor lido no potênciometro
/*** FUNÇÃO setup() ***/
void setup() { // Seta o transistor (pino 9) como saída
pinMode(transistorPin, OUTPUT);
}
/*** FUNÇÃO loop() ***/
void loop() {
potValue = analogRead(potPin) / 4; // lê o potênciometro, converte a leitura para valor entre 0 e 255
//para usar na saída PWM
analogWrite(transistorPin, potValue); //potValue altera a alimentação do motor através do transistor
}
Para indicar a faixa de velocidade do motor, com algumas modificações no circuito e no código, pode-se acionar também um bargraph:
Código 2:
int potPin = 0; // Pino analógico 0 conectado no potênciometro
int transistorPin = 11; // Base do transistor conectada ao arduino pelo pino digital 9
int potValue = 0; // Valor lido no potênciometro
int LED1 = 3, LED2 = 5, LED3 = 6, LED4 = 9;
/*** FUNÇÃO setup() ***/
void setup() { // Seta o transistor (pino 9) como saída
pinMode(transistorPin, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
}
/*** FUNÇÃO loop() ***/
void loop() {
potValue = analogRead(potPin) / 4; // lê o potênciometro, converte a leitura para valor entre 0 e 255
//para usar na saída PWM
analogWrite(transistorPin, potValue); //potValue altera a alimentação do motor através do transistor
if(potValue<254){ //acende só o primeiro led do bargraph
analogWrite(LED1,254);
analogWrite(LED2,0);
analogWrite(LED3,0);
analogWrite(LED4,0);
}
if(potValue>254 and potValue<511){ //acende dois leds do bargraph
analogWrite(LED2,254);
analogWrite(LED3,0);
analogWrite(LED4,0);
}
if(potValue>511 and potValue<765){ //acende três leds do bargraph
analogWrite(LED3,254);
analogWrite(LED4,0);
}
if(potValue>765){ //acende todos os leds do bargraph
analogWrite(LED4,254);
}
}
Controle de velocidade de motor CC de 12V, com bargraph:
Regulador de velocidade simples para motores CC de 12V:
Componentes:
- Arduino
- protoboard e fios
- 4 leds
- 4 resistências de 220ohm
- 1 resistência de 1 K
- 1 transistor TIP122
- 1 diodo 1N4001
- 1 capacitor de 1 microF
- 1 potenciômetro de 10 K
- 1 motor de 12v
- 1 fonte de 12v
link para o vídeo: Acionando motores de 12V com arduino
Código:
/*variáveis globais */
int led1=6;
int led2=9;
int led3=10;
int led4=11;
int trimpot=5;
int motor=3;
/* Função setup() de inicialização */
void setup(){
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(trimpot,INPUT);
}
/* Função loop() */
void loop(){
int value = analogRead(trimpot); //lê valor de velocidade no potenciômetro
analogWrite(motor,value/4); //envia sinal PWM para motor pelo pino 3
if(value<254){ //acende só o primeiro led do bargraph
analogWrite(led1,value);
analogWrite(led2,0);
analogWrite(led3,0);
analogWrite(led4,0);
}
if(value>254 and value<511){ //acende dois leds do bargraph
analogWrite(led2,254);
analogWrite(led3,0);
analogWrite(led4,0);
}
if(value>511 and value<765){ //acende três leds do bargraph
analogWrite(led3,254);
analogWrite(led4,0);
}
if(value>765){ //acende todos os leds do bargraph
analogWrite(led4,254);
}
}
| Leitura e escrita nas portas analógicas | AULA 6 - PWM e acionamento motores | Programação C >> |
|---|















