segunda-feira, 18 de dezembro de 2017

ParlaTimer (Parte 1)

Só os inexperientes são capazes de dar discursos longos, longos e longos. Enquanto o palestrante/apresentador/professor fica se "achando" o douto em letras, proferindo os mais eruditos provérbios.

Para a platéia é um momento de horror da língua materna, é chato,  chato e chato. O discurso que tinha algum valor, passa a ser literalmente uma M!

Falta da menina da plaquinha! Sim aquela que levanta a plaquinha da contagem regressiva. Dizendo o momento de acabar o discurso. Um bom palestrante também dispensa a menina da plaquinha, pois ele sabe o tempo necessário para passar a sua mensagem sem ser chato!

ParlaTimer

O que é? Simplesmente um timer de discurso. Quem profere palestras, sabe a importância desse recurso. Ele cronometra o tempo necessário para fazer sua explicação. 

Vamos especificar rapidamente o timer:
- Tem que ter sinalização visual: Semáforo. Verde significa dentro do tempo ótimo da palestra; Amarelo, tempo em risco de exceder; Vermelho, tempo excedido.
- Sinalização sonora: Por meio de alguns beeps, indicar o andamento do tempo
- Display: É opcional, mas mostra o tempo restante em numeros ou alguma informação importante para o palestrante se for necessário.
- Bluetooth: Meio de comunicação com o ParlaTimer.

Sim. O ParlaTimer não tem botões. Pelo menos nessa versão. O motivo é que com o bluetooth, iremos usar um aplicativo desenvolvido para este propósito. Isso facilita um monte o desenvolvimento do firmware do ParlaTimer...

Ah! Não precisa nem dizer: é baseado no Arduino. Então se pegarmos os artigos anteriores, já vai saber por onde ando: Arduino + BlueTooth  + Android!

O circuito

O design é de um shield normal do arduino. Os leds e o buzzer serão excitados por uma interface de potência: ULN2003A. O display um desses I2C mini (OLED 0.98) que cabe numa placa simples e para a interface do bluetooth o HC-06 (O mesmo do artigo anterior).

O circuito tem um adicional. No ULN2007, eu disponibilizei uma interface para que possa excitar uma fita de leds ou similar fora da placa. Isso dá uma facilidade para quem for implementar e quiser fazer um semáforo, ou com alguma modificação no firmware excitar LED RGB. (A saída de leds estão em porta com PWM).

Justamente nessa etapa, temos a opção de fazer uma seleção da voltagem de alimentação desse estágio. Podemos excitar os leds com tensão vindo do tradicional +5V do Arduino ou do Vin do mesmo.

Lembre-se que se optar por colocar o jumper na posição de 5V, não abuse da corrente. Ou poderá estragar o regulador do Arduino. Na posição Vin, respeite o limitador de corrente do Arduino ou o suprimento da fonte. (Tem Arduino [alguns xing-ling] que costuma nao ter limitador, então Vin está liberado).


Montagem

Não é o bicho. Comece soldando pelos resistores. Há buzzers que necessitam de resistores, há outros que não.

Tem uma trick! Não solde o ULN2003 no lado dos LED's. Para facilitar o roteamento do PCI e evitar vias (os primeiros protótipos foram feitos em casa, e fazer dupla face em casa sem furo metalizado não é fácil).

Solde o ULN no verso da placa, e por fim, a barra de pinos e os leds! Nos portos do Display e do Bluetooth, solde um barra de pinos fêmea. 
Ah! Esqueci de falar... se estiver interessado. Entre em contato. Tenho placa para vender...

O Firmware

Agora, nesse artigo, vou postar um código de TESTE! Sim ele somente pisca os leds e buzzer Como fizemos no programa anterior. Fácil de entender. Por enquanto usando a serial normal. Mas a interação com o bluetooth será via SoftSerial.

// #include 
#define R_LED 9 
#define Y_LED 10 
#define G_LED 11 
#define BZ 8

// SoftwareSerial mySerial(2, 3); // RX, TX 

void setup() { 
 pinMode(R_LED, OUTPUT);
 pinMode(Y_LED, OUTPUT);
 pinMode(G_LED, OUTPUT);
 pinMode(BZ, OUTPUT);
 Serial.begin(9600); 


char c;

void loop() // run over and over 
{
 if(Serial.available()>0) c=Serial.read(); 
 if(c==0) return; 
 if(c=='R') digitalWrite(R_LED, HIGH); 
 if(c=='r') digitalWrite(R_LED, LOW); 
 if(c=='Y') digitalWrite(Y_LED, HIGH); 
 if(c=='y') digitalWrite(Y_LED, LOW); 
 if(c=='G') digitalWrite(G_LED, HIGH); 
 if(c=='g') digitalWrite(G_LED, LOW); 
 if(c=='B') { 
  digitalWrite(BZ, HIGH); delay(500); digitalWrite(BZ, LOW); } 
 if(c=='b') { 
  digitalWrite(BZ, HIGH); delay(100); digitalWrite(BZ, LOW); } 
 c=0; 
}

Testando 1, 2, 3...

Compile o firmware acima e transfira para o Arduino. Desconecte o Arduino, coloque o shield, ligue o Arduino na USB e pronto.

Com um terminal serial, conecte na porta serial que o Arduino é mapeado no computador e mande os comandos R, Y, G, B ou r, y, g, b; Os leds Vermelho (R, r), Amarelo (Y, y) e Verdge (G,g) irão acender (maiúscula) ou apagar (minúscula); O Buzzer (B,b) irá fazer um beep longo ou curto.

Certim? Semana que vem tem mais, a Parte 2. Melhorando o protocolo e Adicionando o Bluetooth+Display!