Secretária Eletrônica com Arduino

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:

(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:

sf

Esquema 2

WTD020SD-schematic2

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.usinainfo.com.br/module/csblog/detailpost/159-81-modulo-relogio-tempo-real-compacto-para-arduino-e-display-lcd-16×2.html

http://www.nadielcomercio.com.br/blog/2014/06/21/modulo-som-mp3-voz-wtv020sd/

http://labdegaragem.com/profiles/blogs/tutorial-usando-a-eeprom-do-arduino-para-armazenar-dados-de-forma

Att. Leonardo Dalla Porta

Esse post foi publicado em Sem categoria. Bookmark o link permanente.

Uma resposta para Secretária Eletrônica com Arduino

  1. 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

    Curtir

Deixe um comentário