Introduction: Arduino Tutorial - Digital Vs PWM Output

Picture of Arduino Tutorial - Digital Vs PWM Output

Neste tutorial iremos demonstrar quais as principais diferenças entre as saídas de sinal digital e as saídas PWM "Pulse With Modulation". Para realçar essas diferenças, iremos mostrar com apenas uma montagem, que utiliza 3 LED, onde serão carregados dois códigos diferentes, pois podemos utilizar os mesmo pinos do Arduino para funções diferentes.

Em ambos casos, os códigos utilização os pinos 9, 10 e 11, mas estes no primeiro código têm a função de saídas digitais, ou seja, tipo ON/OFF, fazendo piscar alternadamente os LED da montagem, no segundo código os mesmos pinos têm a função de PWM, alterando a luminosidade dos LED alternadamente.

Caso queiram saber mais sobre estas e outras funções do Arduíno UNO, vejam as especificações detalhadas na página oficial do Arduíno "https://store.arduino.cc/arduino-uno-rev3".

Também vos deixamos os LINKS dos tutoriais anteriores, onde são explicados estes dois tipos de saídas mais pormenorizadamente:

Arduino Tutorial - Digital Output - LED

https://www.instructables.com/id/Arduino-Tutorial-Digital-Output-LED/

Arduino Tutorial - PWM Output - LED - Monitor Serial

https://www.instructables.com/id/Ardu%C3%ADno-Tutorial-PWM-Output-LED-Monitor-Serial/

Step 1: Montagem

Esta é mais uma montagem muito simples que utiliza 3 LED de cores diferentes, para podermos verificar e identificar mais facilmente os possíveis erros na montagem, também utilizamos uma Breadboard, de forma a organizar melhor as ligações entre os vários componentes electrónicos.

Material necessário:

  • 1x Arduíno UNO;
  • 1x Cabo USB;
  • 1x BreadBoard;
  • 3x LED (Vermelho / Verde / Azul);
  • 3x Resistência 1KΩ.

Relembro que os LED só funcionam se directamente polarizados ficando assim os pinos positivos ligados aos pinos escolhidos do Arduino e os pinos negativos ligados a GND (Ver imagens acima). Alem a sua polarização não esquecer também de ligar os LED em serie com uma resistência eléctrica de 1KΩ, evitando assim que estes se danifiquem quando forem ligarmos.

Step 2: Código

Picture of Código

Com a montagem terminada, carregamos os códigos na placa do Arduino, no entanto vou realçar a utilização das função "AnalogWrite" e "DigitalWrite", que têm a finalidade de configurar os pinos, como saídas PWM ou digitais (tipo ON/OFF).

Alem destas duas funções é utilizada também a função "For", sendo esta responsável pela selecção dos pinos que ligam ou desligam os LED.

//Enquanto for menor que 12, executa o código abaixo;
//Depois incrementa +1 ao valor da variável Pino.
for (Pino; Pino < 12; Pino ++) {

	//Colocar aqui o restante código.

}

ou

//Enquanto for menor ou igual que 9, executa o código abaixo;
//Depois Subtrai -1 ao valor da variável Pino.
for (Pino; Pino >= 9; Pino --) {

	//Colocar aqui o restante código.

}

Código para a função com pinos em sinal digital (tipo ON/OFF):

int Tempo = 100;	//Variável para o tempo de atraso.
int Pino;	//Variável para selecção do pino.

//Correr a função SETUP apenas uma vez após ser pressionado Reset:
void setup(){
	//Coloca na variável.
	Pino = 9;
	//Enquanto a variável Pino, for menor que 12, executa o código abaixo;
	//Depois incrementa +1 ao valor da variável Pino.
	for (Pino; Pino < 12; Pino ++){
		//Definição do tipo de pino (Saída ou entrada):
		pinMode(Pino, OUTPUT);
	}
}
//Correr a função LOOP repetidamente:
void loop(){
	//Coloca na variável.
	Pino = 9;
	
	//Enquanto a variável Pino, for menor que 12, executa o código abaixo;
	//Depois incrementa +1 ao valor da variável Pino:
	for (Pino; Pino < 12; Pino ++){
		//Liga o LED (HIGH é nível alto):
		digitalWrite(Pino, HIGH);
		//Atraso para o próximo passo:
		delay(Tempo);
	}

	//Enquanto a variável Pino, for maior ou igual a 9, executa o código abaixo;
 	//Depois subtrai -1 ao valor da variável Pino:
	for (Pino; Pino >= 9; Pino --) {
		//Desliga o LED (LOW é nível baixo):
		digitalWrite(Pino, LOW);
		//Atraso para o próximo passo:
		delay(Tempo);
	}
}

A função "While" é responsável pela alteração do valor de brilho dos LED, variando esse valor entre 0 e 255. isto significa em PWM (Ver gráfico acima):

  • 255 = 100%
  • 204 = 80%
  • ≈128 = 50%
  • 51 = 20%
  • 0 = 0%
//Enquanto a variável Brilho for maior que 0, executa o código baixo:
while (Brilho > 0){

	//Colocar aqui o restante código.

}

Código para a função com os pinos em PWM, alterando o brilho dos LED:

int Tempo = 100;       //Variável para o tempo de atraso.
int Pino;              //Variável para selecção do pino.
int Brilho;            //Variável para a definição do brilho dos LED.

//Correr a função SETUP apenas uma vez após ser pressionado Reset:
void setup(){
	//Coloca na variável.
	Pino = 9;
	//Enquanto a variável Pino, for menor que 12, executa o código abaixo;
 	//Depois incrementa +1 ao valor da variável Pino:
	for (Pino; Pino < 12; Pino ++){
		//Definição do tipo de pino (Saída ou entrada):
		pinMode(Pino, OUTPUT);
	}
}
//Correr a função LOOP repetidamente:
void loop(){
	//Coloca na variável. 
	Pino = 9;
	
	//Enquanto a variável Pino, for menor que 12, executa o código abaixo;
 	//Depois incrementa +1 ao valor da variável Pino:
	for (Pino; Pino < 12; Pino ++){
		//Coloca na variável.
		Brilho = 0;
		//Enquanto a variável Brilho for menor que 255 executa o código abaixo:
		while (Brilho < 255 ){
			//Coloca no LED o brilho igual à variável:
			analogWrite(Pino, Brilho);
			//Atraso para o próximo passo:
			delay(Tempo);
			//Incrementa +1 ao valor da variável.
			Brilho ++;
		}
	}

	//Enquanto a variável Pino, for maior ou igual a 9, executa o código abaixo;
 	//Depois subtrai -1 ao valor da variável Pino:
	for (Pino; Pino >= 9; Pino --){
		// Coloca na variável.
		Brilho = 255;
		//Enquanto a variável Brilho for maior que 0, executa o código abaixo:
		while (Brilho > 0){
			//Liga o LED com o brilho igual a variável:
			analogWrite (Pino, Brilho);
			//Atraso para o próximo passo:
			delay(Tempo);
			//Subtrai -1 ao valor da variável.
			Brilho --;
		}
	}
}

Caso queiram saber mais ou tenham dúvidas sobre estas e outras referências do código, vejam a sua explicação detalhada no site oficial do Arduino, através deste Link "https://www.arduino.cc/en/Reference/HomePage".

Procurem os nossos tutoriais acerca do Arduino, onde explicamos diversas montagens e o funcionamento dos seus componentes, já agora visitem o nosso canal no Youtube, Facebook ou Twitter.

Abraço e bons projectos.

Comments

About This Instructable

181views

8favorites

License:

Bio: Este é um canal para homemakers e DIY onde vai encontrar tutoriais úteis acerca de Electrónica, Arduíno, Robótica e Impressão 3D. Estes têm explicações simples ... More »
More by Crazy Taz Projects:Arduino Tutorial - LDC - MenuArduino Tutorial - Clock - LCDArduino Tutorial - Alarm - Flow Sensor - Monitor Serial
Add instructable to: