O projeto Arduíno foi criado para prover facilidade no desenvolvimento de projetos microcontrolados e certamente um dos grandes responsáveis por essa facilidade é o shield.
Shields" é o nome dado às placas de expansão de hardware que encaixam na placa Arduíno principal. Através dos Shields podemos adicionar novos elementos ao nosso projeto sem a necessidade de grandes conhecimentos em eletrônica. Os circuitos contidos nos diversos shields existente contém uma eletrônica que adiciona funções que a placa principal não possui. Nessa postagem iremos apresentar o Multi function Shield da figura 1.
 |
Figura 1. Multi function Shield |
No caso do Multi function Shield, temos os seguintes componentes instalados:
Unit | PIN # |
Buzzer (autofalante/beeper) | 3 (digital On/Off) |
4 LEDs | 10, 11, 12, 13 |
3 botões + reset button | A1, A2, A3 |
Potenciômetro (10 kOhm) | A0 |
4 Displays de 7-sementos e driven 74HC595 | Latch 4, Clock 7, Data 8 |
Socket para sensor IR (controle remoto) | 2 |
Socket para sensor LM35 ou DS18B20 | A4 |
Pinos para Bluethooth | GND, +5v, 0, 1 (rx/tx) |
Pinos livres (pwm) | 5, 6, 9, A5 |
Buzzer
O primeiro componente que iremos testar no shield é o buzzer. Usado para emitir sons de alerta, o buzzer pode ser configurado para tocar melodias idem ao video que pode ser acessado clicando no link abaixo:
Para testar o buzzer do Multi function Shield vamos utilizar o código abaixo:
int portSpeak(3); //porta ligada no speaker
//melodia
int melodia[] = {660,660,660,510,660,770,380,510,380,320,440,480,450,430,380,660,760,860,700,760,660,520,580,480,510,380,320,440,480,450,430,380,660,760,860,700,760,660,520,580,480,500,760,720,680,620,650,380,430,500,430,500,570,500,760,720,680,620,650,1020,1020,1020,380,500,760,720,680,620,650,380,430,500,430,500,570,585,550,500,380,500,500,500,500,760,720,680,620,650,380,430,500,430,500,570,500,760,720,680,620,650,1020,1020,1020,380,500,760,720,680,620,650,380,430,500,430,500,570,585,550,500,380,500,500,500,500,500,500,500,580,660,500,430,380,500,500,500,500,580,660,870,760,500,500,500,500,580,660,500,430,380,660,660,660,510,660,770,380};
//duraçao de cada nota
int duracaodasnotas[] = {100,100,100,100,100,100,100,100,100,100,100,80,100,100,100,80,50,100,80,50,80,80,80,80,100,100,100,100,80,100,100,100,80,50,100,80,50,80,80,80,80,100,100,100,100,150,150,100,100,100,100,100,100,100,100,100,100,150,200,80,80,80,100,100,100,100,100,150,150,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,150,150,100,100,100,100,100,100,100,100,100,100,150,200,80,80,80,100,100,100,100,100,150,150,100,100,100,100,100,100,100,100,100,100,100,100,100,60,80,60,80,80,80,80,80,80,60,80,60,80,80,80,80,80,60,80,60,80,80,80,80,80,80,100,100,100,100,100,100,100};
void setup() {
//for para tocar as 156 notas começando no 0 ate 156 ++ incrementado
for (int nota = 0; nota < 156; nota++) {
int duracaodanota = duracaodasnotas[nota];
tone(portSpeak, melodia[nota],duracaodanota);
//pausa depois das notas
int pausadepoisdasnotas[] ={150,300,300,100,300,550,575,450,400,500,300,330,150,300,200,200,150,300,150,350,300,150,150,500,450,400,500,300,330,150,300,200,200,150,300,150,350,300,150,150,500,300,100,150,150,300,300,150,150,300,150,100,220,300,100,150,150,300,300,300,150,300,300,300,100,150,150,300,300,150,150,300,150,100,420,450,420,360,300,300,150,300,300,100,150,150,300,300,150,150,300,150,100,220,300,100,150,150,300,300,300,150,300,300,300,100,150,150,300,300,150,150,300,150,100,420,450,420,360,300,300,150,300,150,300,350,150,350,150,300,150,600,150,300,350,150,150,550,325,600,150,300,350,150,350,150,300,150,600,150,300,300,100,300,550,575};
delay(pausadepoisdasnotas[nota]);}
noTone(portSpeak);
}
void loop() {
}
Leds
Conforme já mencionado, no Multi function Shield os leds estão ligados aos pinos 10, 11, 12 e 13 do Arduíno. No código abaixo iremos piscar todos os leds ao mesmo tempo.
int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}
void loop()
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(1000);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay (1000);
}
Botões
Os botões no Multi function Shield foram implementados de maneira onde quando pressionado, a entrada do Arduíno que o botão estão ligado recebera o sinal HIGH. No programa abaixo temos um exemplo onde usamos dois botões para acender e apagar os leds do shield.
#define Bt1 A1 //Botão 1 do shield configurado no pino A1
#define Bt2 A2 //Botão 1 do shield configurado no pino A1
int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}
void loop()
{
if(!digitalRead(Bt1)) //se o valor de botão 1 for 0 liga leds
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
}
if(!digitalRead(Bt2)) //se o valor de botão 1 for 0 desliga leds
{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}
}
Potenciômetro
Potenciômetro é resistor com resistência variável. Será utilizado para enviar um sinal analógico ao Arduíno. Na figura 2 temos alguns exemplos de potenciômetros.
 |
Figura 2. Exemplos de potenciômetros. |
Por permitir variar a resistência, segundo a lei de OHM teremos uma modulação da tensão, logo o potenciômetro deve ser ligado a porta analógica do Arduíno. No caso do kit Multi function Shield o potenciômetro está ligado a porta analógica A0. Abaixo segue como medir o valor na entrada A0 que será modulada pelo potenciometro e enviar o valor para a porta serial.
#define Pot1 0
void setup()
{
Serial.begin(9600);
}
void loop()
{
int PotValue;
PotValue = analogRead(Pot1);
Serial.print("Potenciomentro: ");
Serial.println(PotValue);
}
Display de 7 segmentos
Displays de sete segmentos são usados em eletrônica para de exibir uma informação alfanumérica (binário, decimal ou hexadecimal). devido a simplicidade e fácil configuração seu uso é muito popular.
 |
Figura 3. Display de 7 segmentos - Facilidade para representar números. |
Como o próprio nome já diz, um display de sete segmentos é composto de sete elementos (LEDs), os quais podem ser ligados ou desligados individualmente. Na figura 4 podemos observar que no display de 7 segmentos temos um anodo comum e o catodo de cada LED receberá um nome (A, B, C,...), assim para formação dos dígitos, basta seguir a "tabela do decodificador" mostrada na figura 4.
 |
Figura 4. Configuração do display de 7 segmentos. |
O Multi function Shield possui um registrador de descolamento onde os valores e o display que será utilizado é controlado por codificação em hexadecimal. Os código abaixo irá mostrar os numero 0 1 2 3 no display.
int LED[]= {13,12,11,10};
/* Configurações do registador de deslocamento */
#define LATCH_DIO 4
#define CLK_DIO 7
#define DATA_DIO 8
/* Mapa de Segmentos dos números de 0 to 9 */
const byte SEGMENT_MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
/* Byte maps to select digit 1 to 4 */
const byte SEGMENT_SELECT[] = {0xF1,0xF2,0xF4,0xF8};
void setup ()
{
/* Set DIO pins to outputs */
pinMode(LATCH_DIO,OUTPUT);
pinMode(CLK_DIO,OUTPUT);
pinMode(DATA_DIO,OUTPUT);
}
void loop()
{
/* O comando WriteNumberToSegment indicando qual numero deve ser escrito e o segmento */
WriteNumberToSegment(0 , 0);
WriteNumberToSegment(1 , 1);
WriteNumberToSegment(2 , 2);
WriteNumberToSegment(3 , 3);
}
/* Função que controlará os displays */
void WriteNumberToSegment(byte Segment, byte Value)
{
digitalWrite(LATCH_DIO,LOW);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );
digitalWrite(LATCH_DIO,HIGH);
}
Desafios:
Desafio 1 - Faça um programa que conte de 0 a 9 com intervalo de 1 segundo, uso estrutura de repetição FOR.
Desafio 2 - Receba uma centena via serial e exiba a centena no display
Não esqueça do like do video e de curtir nossa pagina no facebook no link abaixo: