Neste post vou falar de um shield bem interessante para você que é iniciante, estudante ou simplesmente quer aprender mais sobre placas Arduino sem montar complicados circuitos eletrônicos ou depender de outros componentes: o Shield Arduino Multifunções com Sensores e I/O´s, que na imagem abaixo está encaixado em uma placa Arduino Uno.
Como o próprio nome diz, esse shield tem incorporado uma série de sensores e portas para você fazer projetos básicos, sendo uma excelente opção para aprendizado de programação nessa placa microcontrolada.
O Shield Arduino Multifunções
Na imagem abaixo temos a disposição dos sensores e I/O´s no Shield Arduino Multifunções. Os conectores em amarelo permitem acesso à 2 portas digitais (D7 e D8), uma porta analógica (A3), interface serial e interface I2C:
E temos uma série de sensores e componentes de uso comum. Note que na placa já temos a marcação de quais pinos são utilizados para cada sensor, botão ou led. Para facilitar, na lista abaixo coloquei entre parênteses a porta utilizada por cada componente:
- Sensor de temperatura e umidade DHT11 (porta D4)
- Sensor de temperatura LM35 (A2)
- Buzzer Passivo (D5)
- Sensor de Luz LDR (A1)
- Receptor IR (D6)
- Led RGB (D9, D10 e D11)
- Potenciômetro (A0)
- 2 botões customizáveis (D2 e D3)
- 2 leds de uso geral (D12 e D13)
Vamos agora combinar esses componentes para criar 5 projetos básicos com o Shield Arduino Multifunções.
Projeto 1 – Use Botões, led e Buzzer
O primeiro projeto é bem básico e nele você vai utilizar os botões SW1 e SW2, no lado esquerdo do shield, para acionar os leds azul e vermelho, e ao mesmo tempo fazer com que o buzzer emita um som. Neste programa não é utilizada nenhuma biblioteca, já que apenas efetuamos a escrita e leitura das portas digitais dos botões (portas digitais D2 e D3), dos leds (D12 e D13) e do buzzer (D5).
//Programa: Shield Arduino Multifuncoes //Objetivo: Uso de botoes, led e buzzer //Autor: Arduino e Cia //Definicao dos pinos #define Pino_SW1 2 #define Pino_SW2 3 #define Pino_Led_Azul 13 #define Pino_Led_Vermelho 12 #define Pino_Buzzer 5 //Armazena valor botoes int valor_SW1, valor_SW2; void setup() { //Pinos led e buzzer como saida pinMode(Pino_Led_Azul , OUTPUT); pinMode(Pino_Led_Vermelho , OUTPUT); pinMode(Pino_Buzzer, OUTPUT); //Pinos botoes SW1 e SW2 como entrada pinMode(Pino_SW1, INPUT); pinMode(Pino_SW2, INPUT); } void loop() { //Verifica se o botao SW1 foi acionado valor_SW1 = digitalRead(Pino_SW1); if (valor_SW1 == 0) { //Acende o led azul digitalWrite(Pino_Led_Azul, HIGH); //Aciona o buzzer tone(Pino_Buzzer, 50,30); } else { //Desliga o led azul e o buzzer digitalWrite(Pino_Led_Azul, LOW); noTone(Pino_Buzzer); } //Verifica se o botao SW2 foi acionado valor_SW2 = digitalRead(Pino_SW2); if (valor_SW2 == 0) { //Acende o led vermelho digitalWrite(Pino_Led_Vermelho, HIGH); //Aciona o buzzer tone(Pino_Buzzer, 900,50); } else { //Desliga o led azul e o buzzer digitalWrite(Pino_Led_Vermelho, LOW); noTone(Pino_Buzzer); } }
Altere o valor da frequência do som emitido pelo buzzer nas linhas 35 e 51 do programa. Você pode ter mais informações sobre como emitir som no Arduino acessando o post Sons no Arduino usando buzzer.
Projeto 2 – Usando o potenciômetro
Este projeto também vai usar os dois leds, mas controlados por um potenciômetro que está ligado na porta analógica A0 do Arduino. Os leds piscam alternadamente e quanto mais você girar o potenciômetro para a direita, mais lentamente eles vão piscar.
//Programa: Shield Arduino Multifuncoes //Objetivo: Potenciometro com leds //Autor: Arduino e Cia //Definicao dos pinos #define Pino_Led_Azul 13 #define Pino_Led_Vermelho 12 #define Pino_Pot A0 //Armazena valor lido do potenciometro int valor_pot; void setup() { //Pinos led e buzzer como saida pinMode(Pino_Led_Azul , OUTPUT); pinMode(Pino_Led_Vermelho , OUTPUT); //Pino potenciometro como entrada pinMode(Pino_Pot, INPUT); } void loop() { //Le o valor do potenciometro valor_pot = analogRead(Pino_Pot); valor_pot = map(valor_pot, 0, 1024, 100, 500); //Pisca o led de acordo com o valor lido digitalWrite(Pino_Led_Azul, HIGH); digitalWrite(Pino_Led_Vermelho, LOW); delay(valor_pot); digitalWrite(Pino_Led_Azul, LOW); digitalWrite(Pino_Led_Vermelho, HIGH); delay(valor_pot); }
Este programa utiliza o comando MAP (linha 26), que “converte” o valor lido da porta analógica A0 (entre 0 e 1024) em um valor entre 100 e 500, que é o valor que será usado para determinar o tempo (comando DELAY) que os leds ficarão acesos. Lembrando que esse tempo é em milissegundos (ms), ok?
Projeto 3 – Sensor de luminosidade LDR
O LDR (Light Dependent Resistor, ou Resistor Dependente de Luz) é um sensor de luminosidade que já mostramos no post Controle de Luz utilizando LDR, e é um componente que varia sua resistência conforme a intensidade da luz sobre o sensor. O programa abaixo faz a leitura da porta onde está ligado o LDR (porta analógica A1), e conforme aumentamos a intensidade da luz sobre o sensor, a luz do led RGB vai se apagando.
//Programa: Shield Arduino Multifuncoes //Objetivo: LDR e led RGB //Autor: Arduino e Cia //Pino cor verde led RGB int pinoled = 10; //Pino ligado ao LDR int pino_LDR = A1; //Armazena valor lido do LDR, entre 0 e 1023 int valor_LDR = 0; //Valor de luminosidade do led float luminosidade = 0; void setup() { //Inicializa a serial Serial.begin(9600); //Define o pino do led como saída pinMode(pinoled, OUTPUT); //Define o pino do LDR como entrada pinMode(pino_LDR, INPUT); } void loop() { // Le o valor do pino do LDR valor_LDR = analogRead(pino_LDR); // Converte o valor lido luminosidade = map(valor_LDR, 0, 1023, 255, 0); //Monstra no serial monitor o valor lido Serial.print("Valor lido do LDR : "); Serial.print(valor_LDR); // Acende o led com luminosidade variável analogWrite(pinoled, luminosidade); }
O LDR é um componente de baixo custo e muito simples de usar, e com ele você pode acender as luzes da sua casa ao anoitecer, criar sistemas de alarme, sistemas de regulagem de luminosidade, etc.
Projeto 4 – Sensor de temperatura com led RGB
Neste 4o. exemplo vamos mostrar o uso do Sensor de temperatura LM35, e de acordo com a temperatura lida vamos acender o led RGB nas cores vermelho (quando a temperatura estiver acima de 28 graus), verde (temperatura menor do que 25 graus) ou azul (temperatura entre 25 e 28 graus).
//Programa: Shield Arduino Multifuncoes //Objetivo: Sensor de temperatura LM35 e Led RGB //Autor: Arduino e Cia //Pino conectado ao LM35 int pin = A2; // Variavel que armazena a temperatura int tempc = 0; // Array para precisão na medição do LM35 int samples[8]; void setup() { Serial.begin(9600); //Pino cor verde do led RGB pinMode(10, OUTPUT); //Pino cor vermelha do led RGB pinMode(9, OUTPUT); //Pino cor azul do led RGB pinMode(11, OUTPUT); } void loop() { // Loop que faz a leitura da temperatura 8 vezes for (int i = 0; i <= 7; i++) { samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0; //A cada leitura, incrementa o valor da variavel tempc tempc = tempc + samples[i]; delay(100); } // Divide a variavel tempc por 8, para obter precisão na medição tempc = tempc / 8.0; //Se a temperatura estiver abaixo de 25, acende o led verde if (tempc < 25) { digitalWrite(10, HIGH); digitalWrite(11, LOW); digitalWrite(9, LOW); } //Se a temperatura estiver acima de 28, acende o led vermelho if (tempc > 28) { digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, LOW); } //Se a temperatura estiver acima de 25 e abaixo de 28, //acende o led azul if ((tempc > 25) && (tempc < 28)) { digitalWrite(11, HIGH); digitalWrite(10, LOW); digitalWrite(9, LOW); } //As linhas abaixo enviam para o monitor serial //o valor da temperatura em Celsius Serial.print("Temperatura: "); Serial.print(tempc, DEC); Serial.println(" Cels."); tempc = 0; delay(1000); // Aguarda 1 segundo e reinicia o processo }
Neste exemplo você pode acompanhar o valor da temperatura abrindo o serial monitor da IDE do Arduino. Este programa foi baseado no post LM35 – Sensor de Temperatura., e adaptado para utilizar os pinos do led RGB (9, 10 e 11) do Shield Arduino Multifunções.
Projeto 5 – Sensor de temperatura DHT11 no Shield Arduino Multifunções
Neste projeto vamos efetuar a leitura do sensor de temperatura DHT11, mostrar esses valores no serial monitor e acionar o buzzer se a temperatura estiver acima de 25 graus. Nesse programa, você vai utilizar a biblioteca DHT Sensor Library da Adafruit, e você pode instalar à partir da própria IDE do Arduino. Acesse o menu Sketch => Incluir Biblioteca => Gerenciar Bibliotecas. Procure pela biblioteca DHT11 e clique em Instalar:
O valor da temperatura que aciona o buzzer pode ser modificado alterando a linha 40 do programa de acordo com a sua necessidade.
//Programa: Shield Arduino Multifuncoes //Objetivo: Sensor de temperatura DHT11 e Buzzer //Autor: Arduino e Cia #include "DHT.h" //Pino conectado ao DHT11 #define DHTPIN 4 //Variavel que armazena a temp do DHT11 float tempc_DHT11 = 0; //Variavel que armazena a umidade do DHT11 float hum_DHT11 = 0; //Definicoes do sensor DHT11 DHT dht(DHTPIN, DHT11); void setup() { Serial.begin(9600); //Inicializa o DHT11 dht.begin(); } void loop() { //Leitura da temperatura do DHT11 tempc_DHT11 = dht.readTemperature(); //Leitura da umidade do DHT11 hum_DHT11 = dht.readHumidity(); //As linhas abaixo enviam para o monitor serial //o valor da temperatura em Celsius Serial.print("DHT11: "); Serial.print(tempc_DHT11, 0); Serial.print(" Cels. Umid: "); Serial.print(hum_DHT11, 0); Serial.print(" %"); if (tempc_DHT11 >= 25) { tone(5, 900); Serial.print(" Alarme!!"); } else { noTone(5); } Serial.println(); delay(2000); }
Abra o serial monitor para verificar os valores de temperatura e umidade do DHT11, e também avisos sobre o acionamento do buzzer:
Esses foram apenas alguns exemplos de utilização do Shield Arduino Multifunções. Experimente combinar as funções e sensores do shield da sua própria maneira, criando novos projetos. Verifique também o post Controle Remoto IR no Arduino, adaptando-o para utilizar o receptor IR deste shield.