Projeto Final
/********Declaração de todas as librarias********/ #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <dht.h> /*********Definição dos pinos dos componentes**********/ //sensor de gás #define MQ_analog A2 #define MQ_dig 7 // enderço/protocolo do RTC #define DS1307_ADDRESS 0x68 //DHT-11 (sensor de humidade e temperatura) #define dht_dpin A1 //Pino DATA do Sensor ligado na porta Analogica A1 //LDR int ldr_Pin = A0; //LDR no pino analógico 0 int ldr_Valor = 0; //Valor lido do LDR int leitura = 0; int value = 0; //LEDS int led_1 = 3; //Led no pino 2 int led_2 =5; //Led no pino 5 int led_3 = 6; //Led no pino 6 int led_red = 9; int led_green = 10; int led_blue = 11; //Buzzer int buzzer = 8; /*******Declaração das variáveis e constantes*******/ int valor_analog; int valor_dig; const int chipSelect = 4; int a = 0; /*******Inicialização de todos os sensores******/ //LCD LiquidCrystal_I2C lcd(0x3f,2,1,0,4,5,6,7,3, POSITIVE); byte zero = 0x00; //DHT-11 (sensor de humidade e temperatura) dht DHT; //função millis long previousMillis = 0; // Variável de controlo do tempo long serialinterval= 2000; // Tempo em ms do intervalo a ser executado void setup() { Wire.begin();; Serial.begin(9600); lcd.begin(16, 2); // Define o LCD com 16 colunas e 2 linhas // A linha abaixo pode ser comentada/retirada depois de defenir a data e hora SelecionaDataeHora(); pinMode(MQ_dig, INPUT); pinMode(led_1,OUTPUT); pinMode(led_2,OUTPUT); pinMode(led_3,OUTPUT); pinMode(led_red,OUTPUT); pinMode(led_green,OUTPUT); pinMode(led_blue,OUTPUT); pinMode(buzzer,OUTPUT); digitalWrite(buzzer, LOW); digitalWrite(led_red, HIGH); digitalWrite(led_green, HIGH); digitalWrite(led_blue, HIGH); } void loop () { bluetooth (); sensorGAS(); rtc(); ldr(); dHt(); lcd.setCursor(0,1); lcd.print("Hum:"); lcd.print(DHT.humidity); lcd.print("%"); lcd.print(" Temp:"); lcd.print(DHT.temperature); delay(1000); } void SelecionaDataeHora() //Define a data e a hora do DS1307 { byte segundos = 00; //Valores de 0 a 59 byte minutos = 00; //Valores de 0 a 59 byte horas = 15; //Valores de 0 a 23 byte diadasemana = 5; //Valores de 0 a 6 ( 0=Domingo, 1 = Segunda, etc.) byte diadomes = 15; //Valores de 1 a 31 byte mes = 11; //Valores de 1 a 12 byte ano = 18; //Valores de 0 a 99 Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados /*As linhas abaixo escrevem no CI os valores de data e hora que foram colocados nas variaveis acima*/ Wire.write(ConverteParaBCD(segundos)); Wire.write(ConverteParaBCD(minutos)); Wire.write(ConverteParaBCD(horas)); Wire.write(ConverteParaBCD(diadasemana)); Wire.write(ConverteParaBCD(diadomes)); Wire.write(ConverteParaBCD(mes)); Wire.write(ConverteParaBCD(ano)); Wire.write(zero); Wire.endTransmission(); } byte ConverteParaBCD(byte val) { //Converte o número de decimal para BCD return ( (val/10*16) + (val%10) ); } byte ConverteparaDecimal(byte val) { //Converte de BCD para decimal return ( (val/16*10) + (val%16) ); } void sensorGAS () { boolean valor_dig = digitalRead(MQ_dig); if(valor_dig == 0) { Serial.println("GAS DETECTADO !!!"); } else { Serial.print("GAS NÃO DETECTADO !!!"); Serial.println(); } valor_analog = analogRead(MQ_analog); if(valor_analog>=250 & valor_analog<=499) { digitalWrite(buzzer,HIGH); analogWrite(led_red,28); /*utilizamos o comando analogWrite para tornar possível variar a intensidade de cada pino do led de forma a permitir escolher a intensidade da cor a apresentar*/ analogWrite(led_green,198); delay(1000); digitalWrite(led_red,HIGH); digitalWrite(led_green,HIGH); digitalWrite(buzzer,LOW); delay(100); } else { digitalWrite(buzzer,LOW); digitalWrite(led_red,HIGH); } if(valor_analog >=500) { digitalWrite(buzzer,HIGH); digitalWrite(led_red,LOW); delay(1000); digitalWrite(led_red,HIGH); digitalWrite(buzzer,LOW); delay(100); } else { digitalWrite(buzzer,LOW); digitalWrite(led_red,HIGH); } valor_analog = analogRead(MQ_analog); Serial.print("Qualidade do ar: "); Serial.print(valor_analog); Serial.println(); } void rtc () { Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7); int segundos = ConverteparaDecimal(Wire.read()); int minutos = ConverteparaDecimal(Wire.read()); int horas = ConverteparaDecimal(Wire.read() & 0b111111); int diadasemana = ConverteparaDecimal(Wire.read()); int diadomes = ConverteparaDecimal(Wire.read()); int mes = ConverteparaDecimal(Wire.read()); int ano = ConverteparaDecimal(Wire.read()); // Mostra os dados no display lcd.setCursor(0,0); lcd.print("Horas:"); // Acrescenta o 0 (zero) se a hora for menor do que 10 if (horas <10) lcd.print("0"); lcd.print(horas); lcd.print(":"); // Acrescenta o 0 (zero) se minutos for menor do que 10 if (minutos < 10) lcd.print("0"); lcd.print(minutos); lcd.print(":"); if (segundos<10) { lcd.print("0"); } lcd.print(segundos); } void ldr() { if(a ==0) { ///ler o valor do LDR leitura = analogRead(ldr_Pin); value = analogRead(ldr_Pin); value = constrain(value,190,760); value = map(value,190,760,0,255); Serial.print("luminosidade: "); Serial.print(value); analogWrite(led_1, value); analogWrite(led_3, value); } } void dHt() { DHT.read11(dht_dpin); //Lê as informações do sensor Serial.println(); Serial.print("Hum:"); Serial.print(DHT.humidity); Serial.print("%"); Serial.print(" Temp:"); Serial.print(DHT.temperature); Serial.println(" º "); Serial.println (""); } void bluetooth() { if(Serial.available()) { /*utilizamos a função millis para tornar possível a apresentação dos dados dos diversos sensores no smartphone em intervalos de tempo maiores*/ unsigned long currentMillis = millis(); //Tempo atual em ms if (currentMillis - previousMillis > serialinterval) { previousMillis = currentMillis; // Salva o tempo atual Serial.print("Luminosidade: "); Serial.println(ldr_Valor); Serial.print("Humidade: "); Serial.println(DHT.humidity); Serial.print("Temperatura: "); Serial.println(DHT.temperature); } char caracter = Serial.read(); switch (caracter) { case '1': digitalWrite(led_1, HIGH); delay(1000); break; case '2': digitalWrite(led_2, HIGH); delay(1000); break; case '3': digitalWrite(led_3, HIGH); delay(1000); break; case '4': digitalWrite(led_1, LOW); delay(1000); break; case '5': digitalWrite(led_2, LOW); delay(1000); break; case '6': digitalWrite(led_3, LOW); delay(1000); break; case 'a': a = 1; digitalWrite(led_1, HIGH); digitalWrite(led_2, HIGH); digitalWrite(led_3, HIGH); break; case 's': digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); digitalWrite(led_3, LOW) ; a = 0; break; } } }
Lista de Material:
Todos os produtos foram adquiridos na loja de eletrónica e robótica ElectroFun: www.electrofun.pt.
Outros produtos que possam ser úteis:
Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.
Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.
Não se esqueçam de fazer like na nossa Página no Facebook.
Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto? “
SUBSCREVA A NOSSA NEWSLETTER PARA NÃO PERDER O PRÓXIMO ARTIGO!