//Programa para o Audiotermômetro Versão 3.0 //Sensor de temperatura digital DS18B20 com resoução de 9 bits: 0,5 oC. //Frequência de leitura da temperatura: 12 leituras por minuto. //Data: 17/08/2017 - Programa de Mestrado Profissional em Ensino de Física //Instituto de Física - UFRJ #include #include #include #include #include #include #include int8_t current_track = 0; int freq = 5000; //define o período entre medidas em unidades de ms. int CelS = 0; float tempC; // Porta de entrada (pino) de sinal do DS18B20 #define ONE_WIRE_BUS 5 // Define uma instância do oneWire para comunicação com o sensor OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress sensor1 = { 0x28, 0xA0, 0x9D, 0x5F, 0x06, 0x00, 0x00, 0x8A }; //código de 64 bits, em notação hexadecimal, do sensor DS18B20. Atenção: atualize esse //código para o sensor DS18B20 em uso. Se você não sabe o codigo do sensor em uso, leia //as instruções no "DS18B20_codigo.txt". SdFat sd; SFEMP3Shield MP3player; /** * Os arquivos com as temperaturas individuais são denominados trackxxx.mp3. * O sufixo xxx é dado por int(2*temperatura + 20). O arquivo track000.mp3 * corresponde a temperatura de -10 oC e o arquivo track240.mp3 a 110 oC. * O sufixo tem 3 algarismos. Se necessário completa-se com 0 à  esquerda. * O arquivo track241.mp3 alerta sobre uma medida fora da faixa. */ LiquidCrystal lcd(14, 15, 16, 17, 18, 19); // O LCD é ligado nas portas analógicas 14:A0, 15:A1, 16:A2, 17:A3, 18:A4 e 19:A5 void setup() { Serial.begin(115200); // Inicializa a comunicação serial em 115200 bps. sensors.begin(); sensors.setResolution(sensor1,9); //Estabelece a resolução do sensor1 como 9 bits. lcd.begin(16, 2); // inicializa o LCD de 2 linhas e 16 colunas. if(!sd.begin(9, SPI_HALF_SPEED)) sd.initErrorHalt(); if (!sd.chdir("/")) sd.errorHalt("sd.chdir"); MP3player.begin(); } void loop() { // Lê a temperatura com o sensor DS18B20 sensors.requestTemperatures(); float tempC = sensors.getTempC(sensor1); Serial.print(tempC,1); CelS = int(2*tempC + 20); Serial.print(" "); Serial.println(CelS); lcd.clear(); // Imprime a primeira inha do LCD com a temperatura. lcd.setCursor(0,0); lcd.print("Temp.: "); lcd.write(223); //Simbolo grau lcd.print("C"); lcd.setCursor(7,0); lcd.print(tempC); // Imprime a segunda linha do LCD com o arquivo de áudio executado. lcd.setCursor(0,1); lcd.print ("track .mp3"); lcd.setCursor (6,1); lcd.print(CelS); // Verifica se a temperatura está dentro da faixa estabelecida. // Executa o arquivo de áudio selecionado: // fala a temperatura Celsius ou emite alerta de FORA DA FAIXA. if(CelS<-10 || CelS>110){ current_track = 241;} else {current_track = CelS;} MP3player.stopTrack(); MP3player.playTrack(current_track); delay(5000); //espera 5s para nova leitura: 12 leituras/minuto. }