Fala galera!!
Bom, estamos trazendo uma novidade, fiquei umas três semanas trabalhando nesse projeto, realizando pesquisas e testando, foram queimados alguns componentes por ligação indevida (momento em que faltou café), mas tranquilo, soldas e ressoldas, não ficou perfeito, mas está funcionando 90% vou estar disponibilizando novas versões para as correções de bugs, “vamo que vamo”, eis o vídeo:
Produtos utilizados:
- 1- Arduino Robotale
- 1- Kit Proto shield
- 1- Display LCD 16×2
- 1- Conversor I2C
- 1- Alto falante pequeno
- 1- Fonte alimentação
- 1- Módulo reprodutor MP3
- 1- Relé 5V
- Fios
- Paciência
(Todos produtos seguem com link para compra do produto e/ou informações sobre o respectivo link).
Seguimos com o primeiro esquema, devido a grande quantidade de coisas fiz em varias partes (alias economizei tempo), este é o primeiro:
Esquema 2
A seguir podemos visualizar o código na Versão 1.1, ja na versão 1.0 tive diversos imprevistos, como bugs e falhas.
Esta versão aqui apresentada não há nenhum comentário, devido a extensão do projeto, preferi esquecer os comentários, até pra poder trabalhar com um código mais “limpo”. O código conta com aproximadas 588 Linhas, sim foi um trabalho difícil, mas pude fazer com calma, e deixar funcionando, lembrando que podem haver bugs desta versão.
[codelanguage=”csharp”]
/*********************************
***Autor: Leonardo Dalla Porta****
***********31/01/2014*************
**********Versão: 1.1*************
*************Atenção**************
***O Codigo esta livre para uso,**
*desde que seja mantida sua fonte*
********e seu autor.**************
********Faça um bom uso***********
********Att. LDPEletronics********
*********************************/
#include
#include
#include
#include “RTClib.h”
#include
#include
#include
const byte ROWS = 4;
const byte COLS = 4;
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
char hexaKeys[ROWS][COLS] =
{
{
‘1’,’2′,’3′,’A’ }
,
{
‘4’,’5′,’6′,’B’ }
,
{
‘7’,’8′,’9′,’C’ }
,
{
‘*’,’0′,’#’,’D’ }
};
byte rowPins[ROWS] = {
3, 2, 6, 0};
byte colPins[COLS] = {
12, 11, 5, 4};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
byte value;
int address = 1;
byte audioReuniao = 5;
byte audioFeriado = 6;
byte audioOutro1 = 7;
byte audioOutro2 = 8;
byte audioOutro3 = 9;
byte audioOutro4 = 10;
byte audio;
int ano;
byte mes;
byte dia;
int hora;
byte minuto;
byte segundo;
char menu;
char menu2;
int resetPin = 7;
int clockPin = 8;
int dataPin = 9;
int busyPin = 10;
char Menu;
int val = 0;
int var = 0;
RTC_DS1307 rtc;
char customKey;
int pin = A0;
unsigned long duration;
#define isBissexto(a) (a%4==0 || a%100!=0 || a%400==0)
RTC_DS1307 RTC;
Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
void setup()
{
Wire.begin();
RTC.begin();
Serial.begin(9600);
lcd.begin(16, 2);
wtv020sd16p.reset();
pinMode(13, OUTPUT);
pinMode(pin, INPUT);
// Serial.begin(9600);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home ();
lcd.setCursor(0,0);
lcd.print(” LDPEletronics”);
lcd.setCursor(0,1);
lcd.print(” (55)99278689″);
delay(4000);
lcd.clear();
// rtc.adjust(DateTime(__DATE__, __TIME__));
}
void loop()
{
LoopTwo();
imprimeDataHoraSerial();
DateTime now = RTC.now();
// Sincronizando variaveis
ano = now.year();
mes = now.month();
dia = now.day();
hora = now.hour();
minuto = now.minute();
segundo = now.second();
Serial.println(hora);
/////////////////////////Hora trabalho/////////////////////////////////
if(((hora>0)&&(hora<=7)&&(minuto=11) && (hora<=13)&&(minuto=18)&& (hora=2)
{
digitalWrite(13, HIGH);
value = EEPROM.read(address);
wtv020sd16p.asyncPlayVoice(value);
delay(20000);
digitalWrite(13, LOW);
wtv020sd16p.stopVoice();
wtv020sd16p.reset();
var=0;
lcd.clear();
}
else
{
wtv020sd16p.stopVoice();
//wtv020sd16p.reset();
digitalWrite(13, LOW);
}
}
}
void LoopTwo()
{
char customKey = customKeypad.getKey();
if(customKey=='D')
{
menu='D';
lcd.clear();
}
if(customKey=='C')
{
menu='C';
}
if(customKey=='B')
{
menu='B';
lcd.clear();
lcd.print("Aguardando");
lcd.setCursor(0,1);
lcd.print("Opçao");
}
//////////////////////Menu para escolha do audio//////////////////////////////////
while(menu=='C')
{
lcd.setCursor(0,0);
lcd.print("Pressione o Nmr. ");
lcd.setCursor(0,1);
lcd.print(" de seu Audio");
customKey = customKeypad.getKey();
while(customKey=='1')
{
customKey = customKeypad.getKey();
EEPROM.write(1, 1);
wtv020sd16p.asyncPlayVoice(1);
}
while(customKey=='2')
{
customKey = customKeypad.getKey();
EEPROM.write(1, 2);
wtv020sd16p.asyncPlayVoice(2);
}
while(customKey=='3')
{
customKey = customKeypad.getKey();
EEPROM.write(1, 3);
wtv020sd16p.asyncPlayVoice(3);
}
while(customKey=='4')
{
customKey = customKeypad.getKey();
EEPROM.write(1, 4);
wtv020sd16p.asyncPlayVoice(4);
}
while(customKey=='5')
{
customKey = customKeypad.getKey();
EEPROM.write(1, 5);
wtv020sd16p.asyncPlayVoice(5);
}
while(customKey=='6')
{
customKey = customKeypad.getKey();
EEPROM.write(1, 6);
wtv020sd16p.asyncPlayVoice(6);
}
while(customKey=='A')
{
lcd.clear();
wtv020sd16p.stopVoice();
wtv020sd16p.reset();
menu='E';
customKey='E';
delay(1000);
}
}
////////////////////////////////Menu Configura Hora//////////////////////////////////
while(menu=='D')
{
imprimeDataHoraSerial();
lcd.setCursor(11, 0);
lcd.print("Conf.");
lcd.setCursor(12,1);
lcd.print("H&D");
DateTime now = RTC.now();
// Sincronizando variaveis
ano = now.year();
mes = now.month();
dia = now.day();
hora = now.hour();
minuto = now.minute();
segundo = now.second();
customKey = customKeypad.getKey();
boolean isAjustado = false;
if(customKey=='A')
{
menu='E';
lcd.clear();
}
if(customKey=='1')
{
if (hora < 24) hora++;
else hora = 00;
delay(100);
isAjustado = true;
// lcd.clear();
imprimeDataHoraSerial();
}
if (customKey=='2')
{
if (minuto < 60) minuto++;
else minuto = 00;
delay(100);
isAjustado = true;
}
if (customKey=='3')
{
// Para o dia tem que verificar o mes e se o ano eh bissexto
if (dia < 31 && (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)) dia++;
else if (dia < 30 && (mes == 4 || mes == 6 || mes == 9 || mes == 11)) dia++;
else if (dia < 28 && mes == 2 && !isBissexto(ano)) dia++;
else if (dia < 29 && mes == 2 && isBissexto(ano)) dia++;
else dia = 1;
delay(100);
isAjustado = true;
// lcd.clear();
imprimeDataHoraSerial();
}
if (customKey=='4')
{
if (mes 1700) ano–;
delay(100);
isAjustado = true;
// lcd.clear();
imprimeDataHoraSerial();
}
if (isAjustado)
{
RTC.adjust(DateTime(ano, mes, dia, hora, minuto, segundo));
}
}
////////////////////////////Menu Reuniao///////////////////////////////////////////
while(menu=='B')
{
customKey = customKeypad.getKey();
if(customKey=='1')
{
Menu=1;
lcd.clear();
}
if(customKey=='2')
{
Menu=2;
lcd.clear();
}
if(customKey=='3')
{
Menu=3;
lcd.clear();
}
if(customKey=='4')
{
Menu=4;
lcd.clear();
}
if(customKey=='5')
{
Menu=5;
lcd.clear();
}
if(customKey=='6')
{
Menu=6;
lcd.clear();
}
while(Menu==1)
{
audio==audioReuniao;
lcd.setCursor(0,0);
lcd.print(” Modo Reuniao”);
lcd.setCursor(4,1);
lcd.print(“Ativado!”);
LoopDetector();
}
while(Menu==2)
{
audio==audioFeriado;
lcd.setCursor(0,0);
lcd.print(” Modo Feriado”);
lcd.setCursor(4,1);
lcd.print(“Ativado!”);
LoopDetector();
}
while(Menu==3)
{
audio==audioOutro1;
lcd.setCursor(0,0);
lcd.print(” Modo Outro 1″);
lcd.setCursor(4,1);
lcd.print(“Ativado!”);
LoopDetector();
}
while(Menu==4)
{
audio==audioOutro2;
lcd.setCursor(0,0);
lcd.print(” Modo Outro 2″);
lcd.setCursor(4,1);
lcd.print(“Ativado!”);
LoopDetector();
}
while(Menu==5)
{
audio==audioOutro3;
lcd.setCursor(0,0);
lcd.print(” Modo Outro 3″);
lcd.setCursor(4,1);
lcd.print(“Ativado!”);
LoopDetector();
}
while(Menu==6)
{
audio==audioOutro4;
lcd.setCursor(0,0);
lcd.print(” Modo Outro 4″);
lcd.setCursor(4,1);
lcd.print(“Ativado!”);
LoopDetector();
}
}
}
void LoopDetector()
{
val = digitalRead(pin); // ler o valor de entrada
if (val == HIGH)
{
lcd.setCursor(0,0);
lcd.print(“Pulso Detectado”);
delay(4000);
var++;
}
if(var>=2)
{
digitalWrite(13, HIGH);
// value = EEPROM.read(address);
wtv020sd16p.asyncPlayVoice(audio);
delay(20000);
digitalWrite(13, LOW);
wtv020sd16p.stopVoice();
wtv020sd16p.reset();
menu=’B’;
var=0;
lcd.clear();
}
else
{
wtv020sd16p.stopVoice();
digitalWrite(13, LOW);
}
customKey = customKeypad.getKey();
if(customKey==’A’)
{
menu=’E’;
Menu=0;
lcd.clear();
}
}
void imprimeDataHoraSerial()
{
DateTime now = RTC.now();
lcd.setCursor(0,0);
lcd.print(now.year(), DEC);
lcd.setCursor(4,0);
lcd.print(‘/’);
lcd.setCursor(5,0);
lcd.print(” “);
lcd.setCursor(5,0);
lcd.print(now.month(), DEC);
lcd.setCursor(7,0);
lcd.print(‘/’);
lcd.setCursor(8,0);
lcd.print(” “);
lcd.setCursor(8,0);
lcd.print(now.day(), DEC);
lcd.setCursor(0,1);
lcd.print(” “);
lcd.setCursor(0,1);
lcd.print(now.hour(), DEC);
lcd.setCursor(2,1);
lcd.print(‘:’);
lcd.setCursor(3,1);
lcd.print(” “);
lcd.setCursor(3,1);
lcd.print(now.minute(), DEC);
lcd.setCursor(5,1);
lcd.print(‘:’);
lcd.setCursor(6,1);
lcd.print(” “);
lcd.setCursor(6,1);
lcd.print(now.second(), DEC);
}
[/code]
Para download e esquema de como conectar o teclado ao arduino visite:
http://playground.arduino.cc/Main/KeypadTutorial
Download Biblioteca LiquidCristalI2C:
http://playground.arduino.cc/Code/LCDi2c
Download biblioteca do modulo MP3:
http://www.4shared.com/zip/oz8UnqA6ba/Wtv020sd16p.html
Fonte(S):
http://www.nadielcomercio.com.br/blog/2014/06/21/modulo-som-mp3-voz-wtv020sd/
Att. Leonardo Dalla Porta
Olá! Muito Bom seu projeto! Foi a melhor utilização e a mais criativa para este módulo wtv020 que eu já vi; Parabéns; Obrigado por citar a Nossa fonte; Gostei de seu blog ; estou com o meu parado por falta de tempo … Entre em contato por email para trocarmos algumas ideias. Abraços
CurtirCurtir