Nas duas últimas aulas, aula 13 e aula 14, aprendemos o funcionamento de um LED RGB, verificamos que com este podemos obter diversas cores. Hoje, em vez de colocarmos as cores de forma analógica, isto é, indicarmos a luminosidade de cada uma das três cores, vamos utilizar um sensor que faz essa leitura e envia os valores para o nosso LED RGB.
Mas, antes de tudo, é necessário entender o funcionamento deste sensor. Neste exemplo vamos usar o TCS230/TCS3200 Color Sensor Color Recognition Module, ele possui oito pinos, destes vamos utilizar sete.
Pino do Sensor de Cor | Pino do Arduíno |
S0 | GND |
S1 | 5V |
S2 | pino 7 |
S3 | pino 8 |
OUT | pino 4 |
VCC | 5V |
GND | GND |
Para além destas ligações vamos ainda utilizar o circuito elétrico da aula anterior.
A leitura dos valores é feita através dos pinos S2 e S3. Como sabemos, cada uma das cores que vamos obter é formada pelos três LEDs (vermelho, verde e azul). Desta forma torna-se preponderante fazer a leitura do objeto em cada uma destas cores. Para que esta seja possível é necessário definir os pinos S2 e S3 da seguinte forma:
Pino S2 | Pino S3 | Lê a Cor |
LOW | LOW | Vermelho |
LOW | HIGH | Azul |
HIGH | HIGH | Verde |
De ter em atenção que cada uma das cores é lida de forma independente.
O valor obtido desta leitura será entre 0 e 2.048. No entanto, já vi situações em que este valor está situado entre 0 e 102.400, nesta situação é necessário ter atenção ao tipo de variável que vamos definir, pois esta tem de ser do tipo unsigned int visto que se a definirmos como int só vai guardar valores entre 0 e +/- 32.768, o que nesta situação não dá. Assim, o tipo indicado é unsigned int que nos permite guardar valores até 4.294.967.295.
Após a leitura vamos ter de converter o valor num formato entre 0 e 255. Se o valor estiver compreendido entre 0 e 2.048 dividimos esse valor por 8, caso contrário, se o valor estiver compreendido entre 0 e 102.400, dividimos por 400 e retiramos 1, já que a divisão de 102.400 por 400 dá 256.
Encontrado o valor temos de o subtrair a 255 e é neste momento que encontramos a luminosidade da cor.
Entende-se então que quando mais baixo for o valor lido pelo sensor mais alta é a luminosidade do LED e vice-versa.
Depois de entendido o funcionamento do nosso leitor, vamos passar ao código.
Como sempre a primeira coisa a fazer é definir as variáveis. Nesta situação vamos definir para os pinos do LED RGB, para os pinos S2, S3 e OUT do sensor e por último variáveis auxiliares que nos vão ser úteis nos cálculos;
No void setup() damos inicio à porta série, vai ajudar a visualizar alguns valores, e definimos o tipo de pinMode de cada uma das portas;
Agora, no void loop(), vamos ler cada uma das cores (vermelho, verde e azul) e converter esse valor para um valor entre 0 e 255;
Depois de termos as três luminosidades temos que as escrever e até mesmo monitorizá-las;
A partir deste momento o nosso miniprojeto já deve funcionar. No entanto, poderá ser necessário fazer alguns reajustes para que os resultados sejam melhores. Um dos ajustes a fazer, antes de escrever os valores, é verificar qual a cor mais fraca e coloca-la a zero, a mais forte a 255 e a intermédia reduzi-la a metade;
À partida, ainda podemos verificar que as cores azul e verde ainda estão um pouco fortes, poderá ser necessário ainda fazer um reajuste final;
Este mini-projeto já deve impressionar os vossos familiares e amigos.
Espero que tenham gostado da aula de hoje e cá vos espero para a próxima. Obrigado.