9 - Trabalho

9 - Trabalho

 9 – TRABALHO

 Vamos trabalhar.... Vamos carregar um caminhão de areia:

Serão muitas horas de trabalho, certo?

Mas, se forem sacos de areia, será mais rápido, porém o esforço será muito maior!

Então podemos entender que trabalho é uma função do esforço (energia) e do tempo gasto na tarefa. Para realizar o mesmo trabalho podemos diminuir o tempo e aumentar a energia gasta... E vice-versa! Não vamos entrar nos mistérios da Física.... É doloroso demais para nossos objetivos.

Muitas vezes nossa "máquina" realiza um trabalho, gasta energia, e leva um tempo para isso (será este o motivo de se usar tanto "delay" na programação dela?)

Como já vimos, o Arduino tem 20 pinos (portas) que podem ser usadas para saída (OUTPUT) ou entrada (INPUT). Mas tudo é digital, ou seja, ou sai toda energia ou não sai nada.

Se pretendemos controlar o brilho de uma lâmpada, por exemplo, teremos que diminuir a quantidade de energia neste tempo... Mas a energia tem sempre o máximo de 5 Volts. É digital! Zero ou tudo!

E se pudermos dividir a saída (modular o pulso)?

Neste caso a "média" da energia entregue seria menor, controlando a luminosidade (trabalho) da lâmpada...

O Arduino tem seis pinos chamados PWM que podem fazer isso. Modular a saída "imitando" uma energia analógica (parcial, ou variável).

Estes pinos são os de número 3, 5, 6, 9, 10 e 11.

Tais saídas podem ser "divididas" em 255 frações, de 0 a 255. E podemos dizer quantas destas frações devem sair de cada vez.

Pronto... Controlamos a quantidade de esforço que ele libera para nossa máquina!

Como "lição de casa", procure o significado de PWM na internet.

 

FAZENDO UMA "MÁQUINA" DE LUMINOSIDADE VARIÁVEL

Antes de continuar você precisa fazer uma montagem para nossos estudos. Consiste de um LED e um resistor de 120 ohms (para limitar a corrente de saída do Arduino, pois o "coitadinho" só fornece 40 miliamperes (em caso de dúvida reveja o capítulo 3 – Eletricidade e Magnetismo).

Usaremos o pino 11 que é uma das saídas PWM... Mas podemos usar qualquer outro PWM!

... E vamos iniciar um novo programa e chamá-lo de "potencia-v01" (Chique, né? Versão 01, pois iremos mudar aos poucos).

No setup informamos ao Arduino que iremos usar o pino 11 como saída.

No loop informaremos que a saída será a fração de 250 (dos 255 possíveis).

Depois mudamos a saída para a metade e comparamos a diferença de brilho.

 

void setup(){ //**********************************************************

pinMode(11,OUTPUT); //pino 11 como saida para o LED

}

 

void loop(){ //***********************************************************

digitalWrite(11,250); //libera 250 partes das 255 modulaveis

digitalWrite(11,124); //libera 124 partes das 250 modulaveis

}

Se você fez a montagem da "máquina" e carregou o programa viu que nada aconteceu...

Não fique bravo... Ainda temos mais algumas coisas para aprender.

TEMPO DE RETENÇÃO

Existe uma diferença de tempo entre a imagem que chega aos nossos olhos e o cérebro identificar a coisa.

O fenômeno da persistência retiniana foi pela primeira vez contrariado pela teoria da Gestalt, que o interpreta como um trabalho do cérebro, que associa imagens distintas, podendo criar assim a ilusão do movimento....

... Um filme de celulóide é rodado a 24 fotogramas por segundo. Hoje o vídeo digital (ou DV, digital video) é gravado a 25 (Europa) ou 29.97 q/s (cerca de 30 quadros por segundo - EUA).

https://pt.wikipedia.org

Então precisamos um tempo para ver o efeito de "escurecimento" da luz do LED. Este tempo deve ser de 30 quadros em 1000 milisegundos , ou 33 milisegundos por quadro.

digitalWrite(11,250); //libera 250 partes das 255 modulaveis

delay(30);

digitalWrite(11,124); //libera 124 partes das 250 modulaveis

delay(30);

Pronto... Agora você refez tudo, carregou e .... NADA! Não funcionou!

Coloque-se no lugar do Arduino. Ele foi informado que deve fornecer uma saída DIGITAL...

digitalWrite(11, 124));

Foi o que ele fez. Liberou tudo... Talvez devesse ser informado que a saída era modulada, parcial, analógica... Uma sutil diferença no comando!

analogWrite(11,250); //libera 250 partes das 255 moduláveis

delay(40);

analogWrite(11,124); //libera 124 partes das 250 moduláveis

delay(40);

Acrescente um "charminho": vamos "apagar" o LED e aguardar 2 segundos antes de reiniciar o ciclo...

digitalWrite(11,LOW); // não precisa ser analógico pois estamos cortando a corrente do pino

delay(2000);

mas, se quiser, pode escrever analogWrite(11,0); Agora o programa ficou assim:

 

/*

* Controlando a potência de saida

* por Carlos Pires

* em 23/10/2017

*/

void setup(){ //**********************************************************

pinMode(11,OUTPUT); //pino 11 como saida para o LED

} //fim do setup

 

void loop(){ //***********************************************************

analogWrite(11,250); //libera 250 partes das 255 modulaveis

delay(40);

analogWrite(11,124); //libera 124 partes das 250 modulaveis

delay(40);

digitalWrite(11,LOW); // não precisa ser analógico pois estamos cortando a corrente do pino

delay(2000);

} //fim do loop

Tente agora! (E não esqueça de salvar caso funcione).

Tente mudar os valores do PWM, como 150 para o brilho forte e 5 para o brilho fraco. Altere o tempo de delay...

Até estou tentado a lhe propor uma lição de casa onde você varie a saída de 5 a 250 de um em um...Mas seria maldade propor que escreva 500 linhas de programa...

Mas, existe uma maneira de variar o loop e ver o LED ir do "apagado" ao "brilho máximo" lentamente... Imagine que seria comandar o Arduino desta maneira:

para (a "potência" variar de 250 a 5, diminuindo um para cada ciclo)

{ analogWrite(11, potência); delay(30); }

 

INSTRUÇÃO "for"

Primeiro criamos uma variável chamada potencia (não esqueça de apresentá-la antes do setup) que irá variar de 5 a 250. Agora traduzimos a frase anterior para a linguagem C++ do Arduino:

/*

* Controlando a potência de saida

* por Carlos Pires

* em 23/10/2017

*/

int unsigned potencia; //variavel inteira e positiva (unsigned)

void setup() //**********************************************************

{

pinMode(11,OUTPUT); //pino 11 como saida para o LED

} //encerra o setup

 

void loop() //***********************************************************

{

for (potencia=250; potencia>5; potencia--)

{ //inicia as instruções do "for"

analogWrite(11,potencia);

delay(30);

} //encerra as instruções do "for"

analogWrite(11,0); //apaga o LED

delay(2000); //espera 2 segundos antes de reiniciar o ciclo

} //encerra o loop

onde: instrução: for ( condicoes da instrucao; ) { instrucoes do for }

potencia = 250: início do valor da variavel potencia

poência > 5: limite do valor

potencia --: decrescimo de uma unidade a cada ciclo

Teste novamente. Experimente mudar os valores. Salve como " potencia_v02" (segunda versão).

Deve ter observado que, a partir do "brilho" 150, é mais difícil perceber a variação da luminosidade. Isso ocorre pois a sensibilidades de nossos sentidos não cresce numa escala aritmética, e sim logarítmica. Este é o caso da Escala Richter dos terremotos ou da intensidade sonora, ou ainda para a intensidade luminosa das estrelas. (O exemplo abaixo não está na mesma escala destas medidas).

Pode iniciar o valor da "potencia = 150" por exemplo, já que o excesso não será percebido.

Lembre-se disso quando fizer a "máquina" agir sobre nossos sentidos

Para controlar um motor é a mesma coisa. Porém tem que agir sobre a ponte "H", formada por transistores ou outro tipo de drive de potência.

O exemplo mais simples é o uso de um único transistor.

O diodo de proteção serve para evitar a queima do transistor de uma "corrente reversa" gerada pelo campo magnético do motor.

Uma ponte "H" pode reverter o sentido do giro do motor, como já vimos.

Pesquise quais componentes e como construir o circuito eletrônico.