1 - Ligado ao pino 5 (PWM) do Arduino
2 - Ligado ao pino 6 (PWM) do Arduino
3 - VCC
4 - VCC
5 - Desconectado
6 - Desconectado
7 - VCC
8 - Ground
Código-Fonte:
/*
IBT-2 Motor Control Board driven by Arduino.
Speed and direction controlled by a potentiometer attached to analog input 0.
One side pin of the potentiometer (either one) to ground; the other side pin to +5V
Connection to the IBT-2 board:
IBT-2 pin 1 (RPWM) to Arduino pin 5(PWM)
IBT-2 pin 2 (LPWM) to Arduino pin 6(PWM)
IBT-2 pins 3 (R_EN), 4 (L_EN), 7 (VCC) to Arduino 5V pin
IBT-2 pin 8 (GND) to Arduino GND
IBT-2 pins 5 (R_IS) and 6 (L_IS) not connected
*/
int SENSOR_PIN = A0; // center pin of the potentiometer
int RPWM_Output = 5; // Arduino PWM output pin 5; connect to IBT-2 pin 1 (RPWM)
int LPWM_Output = 6; // Arduino PWM output pin 6; connect to IBT-2 pin 2 (LPWM)
void setup() {
pinMode(RPWM_Output, OUTPUT);
pinMode(LPWM_Output, OUTPUT);
}
void loop() {
int sensorValue = analogRead(SENSOR_PIN);
// sensor value is in the range 0 to 1023
// the lower half of it we use for reverse rotation; the upper half for forward rotation
if (sensorValue < 512)
{
// reverse rotation
int reversePWM = -(sensorValue - 511) / 2;
analogWrite(LPWM_Output, 0);
analogWrite(RPWM_Output, reversePWM);
} else {
// forward rotation
int forwardPWM = (sensorValue - 512) / 2;
analogWrite(LPWM_Output, forwardPWM);
analogWrite(RPWM_Output, 0);
}
}
Os botões devem ser ligados conforme imagem abaixo, de forma que um dos terminais de cada um dos botões estejam em um linha e o outro terminal em uma coluna.
Montagem do circuito na PCB Atenção!! O teclado que eu utilizei, foi retirado de um ponto eletrônico portátil que não estava mais sendo usado. Não sei se ele tem a mesma construção de outros teclados, principalmente destes vendidos para ser utilizado com o Arduino, portanto, talvez sejam necessárias algumas alterações, para rodar com outros teclados. Inicialmente a placa foi feita sem o capacitor representado no circuito acima, mas durante os testes percebi que ainda haviam oscilações que retornavam leituras com valores errados. Pra tentar minimizar as leituras erradas inclui o capacitor de 100nF.
Para testar a placa primeiramente rodei o código abaixo para identificar o valor lido em cada uma das teclas. Ao executar é verificada uma oscilação entre leituras de um mesmo botão, não sendo possível identificar o valor correto para cada botão. Código 01
Para tentar chegar em um valor mais aproximado do real, rodeio o código abaixo, no qual faço a leitura 200 vezes, e depois faço a média de todos esses valores, chegando então em um valor que dá um retorno com menos variações. código 02:
void setup() {
Serial.begin(9600);
}
void loop() {
const int LEITURAS = 200;
long soma = 0;
long media = 0;
int leitura = analogRead(A5);
for (int i=0;i < LEITURAS; i++){ soma += leitura; }
media = soma / LEITURAS;
Serial.println(media);
delay(100);
}
Abaixo está o código que foi mostrado no vídeo. Mas quem for tentar reproduzir, é necessário fazer vários testes, já que eventualmente é possível que falhas ocorram, portanto, essa solução ainda não é 100% confiável, mas ainda sim serve como base para algumas aplicações.
void setup() {
Serial.begin(9600);
}
char getTecla(){
const int LEITURAS = 300;
long soma = 0;
long media = 0;
int maior = 0;
int menor = 1023;
for (int i = 0; i < LEITURAS; i++) {
int leitura = analogRead(A5); //PINO ANALOGICO A5. MUDAR AQUI
if (leitura <= 368) { soma=0; break; }
menor = (menor > leitura) ? leitura : menor;
maior = (maior < leitura) ? leitura : maior;
soma += leitura;
if ((maior-menor) >= 4){ soma=0; break; }
}
media = soma / LEITURAS;
char c = ' ';
if (media <= 1023 && media >= 971) {c = '1'; }
if (media <= 970 && media >= 886) {c = '2'; }
if (media <= 885 && media >= 814) {c = '3'; }
if (media <= 813 && media >= 739) {c = 'A'; }
if (media <= 738 && media >= 673) {c = '4'; }
if (media <= 672 && media >= 631) {c = '5'; }
if (media <= 630 && media >= 595) {c = '6'; }
if (media <= 594 && media >= 552) {c = 'B'; }
if (media <= 551 && media >= 513) {c = '7'; }
if (media <= 512 && media >= 489) {c = '8'; }
if (media <= 488 && media >= 466) {c = '9'; }
if (media <= 465 && media >= 438) {c = 'C'; }
if (media <= 437 && media >= 413) {c = '*'; }
if (media <= 412 && media >= 398) {c = '0'; }
if (media <= 397 && media >= 383) {c = '#'; }
if (media <= 382 && media >= 369) {c = 'D'; }
//somente para testes, retirar ao ser usado
if (c != ' '){
Serial.print(media);
Serial.print(" - ");
Serial.print(maior);
Serial.print(" - ");
Serial.print(menor);
Serial.print(" - ");
Serial.print(maior-menor);
Serial.print(" - ");
}
return c;
}
void loop() {
char c = getTecla();
if (c != ' '){
Serial.println(c);
delay(150);
}
}
Nesse vídeo mostro um exemplo de como criar um banco de dados simples com o Arduino, utilizando Ethernet Shield com SD Card, utilizando a biblioteca EDB (Extended Database Library).
os arquivos html são salvos no cartão de memória. Os dados são retornados para o browser através de javascript no formato JSON.
Depois de instalada a biblioteca acima, é preciso corrigir um bug que existe no código-fonte da biblioteca. abra o arquivo EDB.cpp e modifique a seguinte função, incluindo a linha sinalizada pelo +: