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 A1int 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.
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.
Figura 2. Exemplos de potenciômetros.
#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
Nenhum comentário:
Postar um comentário