Everton Aljonas
Membros-
Posts Por Dia
0 -
Posts
7 -
Registrado em
-
Última visita
-
Créditos EBR
0 [ Doar ]
Tipo de Conteúdo
Fórum
Downloads
Blogs
Galeria
Assinaturas
Calendário
Tudo que Everton Aljonas publicou
-
Saudações pessoal. Estou desenvolvendo aos poucos um software para controlar uma incubadora. Minha ideia é setar uma temperatura (menu 2), e na tela inicial (menu 1), mostrar a temperatura e o CO2 (que não esta sendo trabalhado no momento), e futuramente novas funções serão adicionadas como Overtemp, Temperatura da porta, etc. Consigo ver a variação de temperatura, porém o rele nao desliga quando atinge a temperatura de setpoint que programei. Programa todo abaixo. Utilizado um shield LCD com teclado + modulo rele serial (4 reles) + sensor DS18B20 /*-----------------------------------------------------------------------------------------------------------------*/ #include <LiquidCrystal.h> //Biblioteca para o display LCD #include <DallasTemperature.h> //Biblioteca Dallas #include <OneWire.h> //protocolo de Barramento da Dallas - Pode adicionar varios sensores a um mesmo pino #include <SerialRelay.h> //Biblioteca Modulo Serial de Reles #include <EEPROM.h> // --- Mapeamento de Hardware --- OneWire pino(11); //Define o pino que receberá a informação DallasTemperature barramento(&pino); //Objeto que define o barramento dos sensores DeviceAddress sensor1; //Define Sensor 1 // --- Protótipo das Funções Auxiliares --- void keyboardRead(); //Função para modificar o menu atual void dispMenu(); //Função para mostrar o menu atual void INICIO(); //Funçao do menu1, temperatura e co2 void relay1(); //função do rele 1 void TEMP(); //função do menu 2, setpoint de tempetura. // --- Variáveis Globais --- char menu = 0x01; //Variável para selecionar o menu int adc_value = 0x00; //armazena o valor digital do conversor AD boolean RIGHT = 0x00, butt01 = 0x00, //botão e flag Right UP = 0x00, butt02 = 0x00, //botão e flag Up DOWN = 0x00, butt03 = 0x00, //botão e flag Down LEFT = 0x00, butt04 = 0x00, //botão e flag Left SELECT = 0x00, butt05 = 0x00; //botão e flag Select float temp1,T_SET=25; const int NUMERO_MODULOS = 1; //determina a quantidade de modulos conectados (maximo de 10) SerialRelay reles (13, 12, NUMERO_MODULOS); //definicao da pinagem de data e clock do modulo, e da quantidade de modulos // --- Hardware do LCD --- LiquidCrystal disp(8, //RS no digital 8 9, //EN no digital 9 4, //D4 no digital 4 5, //D5 no digital 5 6, //D6 no digital 6 7); //D7 no digital 7 // --- Configurações Iniciais --- void setup() { disp.begin(16,2); //Inicializa LCD 16 x 2 barramento.begin(); barramento.getAddress(sensor1,0); disp.setCursor(3,0); disp.print("TECHNOLAB");//mensagem na primeira linha disp.setCursor(3,1); disp.print("SOLUCOES");//mensagem segunda linha delay (5000); disp.clear(); } //end setup // --- Loop Infinito --- void loop() { keyboardRead(); dispMenu(); relay1(); if(SELECT == 0X01) //tecla SELECT pressionada? { //sim SELECT =0x00; //limpa flag da tecla }//end if select if(RIGHT == 0x01) //tecla right pressionada? { //sim... RIGHT = 0x00; //limpa flag da tecla delay(500); disp.clear(); //Posiciona cursor na coluna 1, linha 2 menu++; //Imprime mensagem if(menu > 0x02) menu = 0x01; } //end if right if(UP == 0x01) //tecla up pressionada? { //sim... UP = 0x00; //limpa flag da tecla delay (500); T_SET++; EEPROM[1] = T_SET; } //end if up if(DOWN == 0x01) //tecla down pressionada? { //sim... DOWN = 0x00; //limpa flag da tecla delay (500); T_SET--; EEPROM[1] = T_SET; } //end if down if(LEFT == 0x01) //tecla left pressionada? { //sim... LEFT = 0x00; //limpa flag da tecla delay(500); disp.clear(); //Imprime mensagem menu--; if(menu < 0x01) menu = 0x02; } //end IF left } // --- Desenvolvimento das Funções Auxiliares --- void keyboardRead() //Modifica o menu atual { adc_value = analogRead(A0); //Variável para leitura recebe valor AD de A0 // --- Testa se os botões foram pressionados --- // Se foi pressionado, seta a respectiva flag if (adc_value < 50) butt01 = 0x01; else if (adc_value > 103 && adc_value < 200) butt02 = 0x01; else if (adc_value > 250 && adc_value < 380) butt03 = 0x01; else if (adc_value > 450 && adc_value < 550) butt04 = 0x01; else if (adc_value > 600 && adc_value <780) butt05 = 0x01; // --- Testa se os botões foram liberados --- // if (adc_value > 50 && butt01) //Botão right solto e flag butt01 setada? { //Sim... butt01 = 0x00; //Limpa flag butt01 RIGHT = 0x01; //Seta flag right } //end right if (adc_value > 200 && butt02) //Botão up solto e flag butt02 setada? { //Sim... butt02 = 0x00; //Limpa flag butt02 UP = 0x01; //Seta flag up } //end up if (adc_value > 380 && butt03) //Botão down solto e flag butt03 setada? { //Sim... butt03 = 0x00; //Limpa flag butt03 DOWN = 0x01; //Seta flag down } //end down if (adc_value > 550 && butt04) //Botão left solto e flag butt04 setada? { //Sim... butt04 = 0x00; //Limpa flag butt04 LEFT = 0x01; //Seta flag left } //end left if (adc_value > 780 && butt05) //Botão left solto e flag butt04 setada? { //Sim... butt05 = 0x00; //Limpa flag butt04 SELECT = 0x01; //Seta flag left } //end SELECT } //end keyboardRead /*---------------------------------------------------------------------------------------------*/ void dispMenu() //Mostra o menu atual { switch(menu) //Controle da variável menu { case 0x01: //Caso 1 INICIO(); //Chama a tela inciail que mostra nivel de CO2 e temperatura atual break; //break case 0x02: //Caso 2 TEMP(); //Chama a função de setpoint de temperatura break; }} /*-----------------------------------------------------------------------------------------------------*/ void INICIO() //TELA INICIAL (MENU1) { barramento.requestTemperatures();// realiza leitura do sensor de temperatura float temp1 = barramento.getTempC(sensor1); delay(1000); disp.setCursor(0,0); disp.print("TEMP:");//mensagem na primeira linha disp.print(temp1);//valor lido no sensor de temperatura interno disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius disp.setCursor(0,1); disp.print("CO2: ");//Mensagem segunda linha // disp.print(valorCO2);// valor lido no sensor de CO2 disp.write(B00100101);//SIMBOLO DE % } //end telaInicial /*---------------------------------------------------------------------------------------------*/ void TEMP() //SETPOINT TEMPERATURA(menu2) { disp.setCursor(2,0); disp.print("TEMPERATURA");//mensagem na primeira linha disp.setCursor(5,1); disp.print(T_SET);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius if(EEPROM[0] !=25){ EEPROM[0]= 25; EEPROM[1]= T_SET; } else { T_SET = EEPROM[1]; } } void relay1() { //condicao de acionamento if (T_SET > temp1){ //se a temperatura do sensor 1 for menor que a temperatura de setpoint reles.SetRelay(1, SERIAL_RELAY_ON, 1); //liga o rele 1 } while (T_SET <= temp1) { //se a temperatura do sensor 1 for maior que a temperatura de setpoint reles.SetRelay(1, SERIAL_RELAY_OFF, 1); //desliga o rele 1 } }
-
Boa noite pessoal, recentemente encontrei um aplicativo de celular chamado Blynk. Ele monta interfaces como um aplicativo de celular e consegue se comunicar com o Arduíno de varias formas. Eu estou tentando fazer uma troca de mensagens no LCD do Blynk. Onde voce pressiona um botão e avança a tela e se você pressiona outra botão retorna a tela. Não sei se devo criar varios DEVICES e depois entrelaçá-los ou se há alguma forma de mudar as mensagens apenas usando um DEVICE. Se algum de vocês já utilizou este aplicativo e sua biblioteca no arduino, poderiam me dar sugestões?
-
@nagkiller Consegui fazer funcionar, retirei a biblioteca do LM35 e fiz tudo atraves de analogRead. Adicionei algumas variaveis, e li todos os sensores novamente para fazer o calculo de média. Sua informação de não incrementar a informação me deu a ideia, e agradeço por isso. Segue abaixo o novo codigo caso queira dar uma olhada. No circuito eletrico nao alterei nada. // --- Bibliotecas Auxiliares --- #include <LiquidCrystal.h> //Biblioteca para o display LCD // --- Mapeamento de Hardware --- #define butUp 8 //Botão para selecionar proxima tela no digital 8 #define butDown 9 //Botão para selecionar tela anterior no digital 9 #define sensor1 A0 #define sensor2 A1 #define sensor3 A2 #define sensor4 A3 #define sensor5 A4 // --- Protótipo das Funções Auxiliares --- void changeMenu(); //Função para modificar o menu atual void dispMenu(); //Função para mostrar o menu atual void telaInicial(); //Funçao da tela inicial, temperatura media void telaS1(); //Função do menu1, temperatura do sensor 1 void telaS2(); //Função do menu2, temperatura do sensor 2 void telaS3(); //Função do menu3, temperatura do sensor 3 void telaS4(); //Função do menu4, temperatura do sensor 4 void telaS5(); //Função do menu5, temperatura do Sensor 5 // --- Variáveis Globais --- char menu = 0x01; //Variável para selecionar o menu boolean t_butUp, t_butDown; //Flags para armazenar o estado dos botoes float temp1 ; //lê valor do Sensor 1 float temp2 ; //lê valor do Sensor 2 float temp3 ; //lê valor do Sensor 3 float temp4 ; //lê valor do Sensor 4 float temp5 ; //lê valor do Sensor 5 float tempM, tempMC; float temp1c, temp2c, temp3c, temp4c, temp5c; // --- Hardware do LCD --- LiquidCrystal disp(7, //RS no digital 7 6, //EN no digital 6 5, //D4 no digital 5 4, //D5 no digital 4 3, //D6 no digital 3 2); //D7 no digital 2 // --- Configurações Iniciais --- void setup() { disp.begin(16,2); //Inicializa LCD 16 x 2 for(char i=8; i<10; i++) pinMode(i, INPUT_PULLUP); //Entrada para os botões (digitais 8 e 9) com pull-ups internos t_butUp = 0x00; //limpa flag do botão Up t_butDown = 0x00; //limpa flag do botão Down } //end setup // --- Loop Infinito --- void loop() { changeMenu(); dispMenu(); } //end loop // --- Desenvolvimento das Funções Auxiliares --- void changeMenu() //Modifica o menu atual { if(!digitalRead(butUp)) t_butUp = 0x01; //Botão Up pressionado? Seta flag if(!digitalRead(butDown)) t_butDown = 0x01; //Botão Down pressionado? Seta flag if(digitalRead(butUp) && t_butUp) //Botão Up solto e flag setada? { //Sim... t_butUp = 0x00; //Limpa flag disp.clear(); //Limpa display menu++; //Incrementa menu if(menu > 0x06) menu = 0x01; //Se menu maior que 6, volta a ser 1 } //end butUp if(digitalRead(butDown) && t_butDown) //Botão Down solto e flag setada? { //Sim... t_butDown = 0x00; //Limpa flag disp.clear(); //Limpa display menu--; //Decrementa menu if(menu < 0x01) menu = 0x06; //Se menu menor que 1, volta a ser 6 } //end butDown } //end changeMenu void dispMenu() //Mostra o menu atual { switch(menu) //Controle da variável menu { case 0x01: //Caso 1 telaInicial(); //Chama a função de temperatura media break; //break case 0x02: //Caso 2 telaS1(); //Chama a função de temperatura do Sensor 1 break; //break case 0x03: //Caso 3 telaS2(); //Chama função de temperatura do Sensor 2 break; //break case 0x04: //Caso 4 telaS3(); //Chama função de temperatura do Sensor 3 break; //break case 0x05: //Caso 5 telaS4(); //Chama função de temperatura do Sensor 4 break; //break case 0x06: //Caso 6 telaS5(); //Chama função de temperatura do Sensor 5 break; //break } //end switch menu } //end dispMenu void telaInicial() //Temperatura Media (menu1) { temp1 = analogRead(sensor1); temp2 = analogRead(sensor2); temp3 = analogRead(sensor3); temp4 = analogRead(sensor4); temp5 = analogRead(sensor5); float tempM; tempM = (temp1 + temp2 + temp3 + temp4 + temp5); float tempMC = ((tempM/5)/1024)*500; disp.setCursor(2,0); disp.print("TEMPERATURA");//mensagem na primeira linha disp.setCursor(4,1); disp.print(tempMC);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } //end telaInicial void telaS1() //Temperatura Sensor 1 (menu2) { float temp1; temp1 = analogRead(sensor1); float temp1c = (temp1/1024)*500; disp.setCursor(0,0); disp.print(" SENSOR 1 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temp1c);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } void telaS2() //Temperatura Sensor 2 (menu3) { float temp2; temp2 = analogRead(sensor2); float temp2c = (temp2/1024)*500; disp.setCursor(0,0); disp.print(" SENSOR 2 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temp2c);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } void telaS3() //Temperatura Sensor 3 (menu4) { float temp3; temp3 = analogRead(sensor3); float temp3c = (temp3/1024)*500; disp.setCursor(0,0); disp.print(" SENSOR 3 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temp3c);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } void telaS4() //Temperatura Sensor 4 (menu5) { float temp4; temp4 = analogRead(sensor4); float temp4c = (temp4/1024)*500; disp.setCursor(0,0); disp.print(" SENSOR 4 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temp4c);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } void telaS5() //Temperatura Sensor 5 (menu6) { float temp5; temp5 = analogRead(sensor5); float temp5c = (temp5/1024)*500; disp.setCursor(0,0); disp.print(" SENSOR 5 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temp5c);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius }
-
@nagkiller Pronto, ja adicionei as informações. Obrigado pela observação
-
@zazulak Se puder encerrar este post, criei um novo com as tags que me passou. Para que não fique postagem ambígua.
- 2 respostas
-
- termometro
- arduino
-
(mais 2)
Tags:
-
Boa noite pessoal, estou fazendo um projeto para conclusao de curso. O meu problema é o seguinte: Tenho que mostrar na tela inicial a temperatura média de 5 sensores, porém o valor fica zerado. Enquanto que nas telas onde mostra cada sensor individualmente tudo está ok. Tenho simulado atraves do Proteus, já que ainda não tenho em mãos os componentes. Acredito que este problema possa ser do próprio Proteus, mas caso não seja, peço que me ajudem analisando o codigo que desenvolvi. Agradeço, desde já. Link da Biblioteca do LM35 https://github.com/wagner-rambo/arquivos/blob/master/arduino164_WR_files.rar // --- Bibliotecas Auxiliares --- #include <LiquidCrystal.h> //Biblioteca para o display LCD #include <lm35.h> // --- Mapeamento de Hardware --- #define butUp 8 //Botão para selecionar proxima tela no digital 8 #define butDown 9 //Botão para selecionar tela anterior no digital 9 lm_t sensor1(A0); lm_t sensor2(A1); lm_t sensor3(A2); lm_t sensor4(A3); lm_t sensor5(A4); // --- Protótipo das Funções Auxiliares --- void changeMenu(); //Função para modificar o menu atual void dispMenu(); //Função para mostrar o menu atual void telaInicial(); //Funçao da tela inicial, temperatura media void telaS1(); //Função do menu1, temperatura do sensor 1 void telaS2(); //Função do menu2, temperatura do sensor 2 void telaS3(); //Função do menu3, temperatura do sensor 3 void telaS4(); //Função do menu4, temperatura do sensor 4 void telaS5(); //Função do menu5, temperatura do Sensor 5 // --- Variáveis Globais --- char menu = 0x01; //Variável para selecionar o menu boolean t_butUp, t_butDown; //Flags para armazenar o estado dos botoes float temperatura1 ; //lê valor do Sensor 1 float temperatura2 ; //lê valor do Sensor 2 float temperatura3 ; //lê valor do Sensor 3 float temperatura4 ; //lê valor do Sensor 4 float temperatura5 ; //lê valor do Sensor 5 float temperatura ; // --- Hardware do LCD --- LiquidCrystal disp(7, //RS no digital 7 6, //EN no digital 6 5, //D4 no digital 5 4, //D5 no digital 4 3, //D6 no digital 3 2); //D7 no digital 2 // --- Configurações Iniciais --- void setup() { disp.begin(16,2); //Inicializa LCD 16 x 2 for(char i=8; i<10; i++) pinMode(i, INPUT_PULLUP); //Entrada para os botões (digitais 8 e 9) com pull-ups internos t_butUp = 0x00; //limpa flag do botão Up t_butDown = 0x00; //limpa flag do botão Down temperatura = (temperatura1+temperatura2+temperatura3+temperatura4+temperatura5)/5; //Temperatura Média } //end setup // --- Loop Infinito --- void loop() { changeMenu(); dispMenu(); } //end loop // --- Desenvolvimento das Funções Auxiliares --- void changeMenu() //Modifica o menu atual { if(!digitalRead(butUp)) t_butUp = 0x01; //Botão Up pressionado? Seta flag if(!digitalRead(butDown)) t_butDown = 0x01; //Botão Down pressionado? Seta flag if(digitalRead(butUp) && t_butUp) //Botão Up solto e flag setada? { //Sim... t_butUp = 0x00; //Limpa flag disp.clear(); //Limpa display menu++; //Incrementa menu if(menu > 0x06) menu = 0x01; //Se menu maior que 6, volta a ser 1 } //end butUp if(digitalRead(butDown) && t_butDown) //Botão Down solto e flag setada? { //Sim... t_butDown = 0x00; //Limpa flag disp.clear(); //Limpa display menu--; //Decrementa menu if(menu < 0x01) menu = 0x06; //Se menu menor que 1, volta a ser 6 } //end butDown } //end changeMenu void dispMenu() //Mostra o menu atual { switch(menu) //Controle da variável menu { case 0x01: //Caso 1 telaInicial(); //Chama a função de temperatura media break; //break case 0x02: //Caso 2 telaS1(); //Chama a função de temperatura do Sensor 1 break; //break case 0x03: //Caso 3 telaS2(); //Chama função de temperatura do Sensor 2 break; //break case 0x04: //Caso 4 telaS3(); //Chama função de temperatura do Sensor 3 break; //break case 0x05: //Caso 5 telaS4(); //Chama função de temperatura do Sensor 4 break; //break case 0x06: //Caso 6 telaS5(); //Chama função de temperatura do Sensor 5 break; //break } //end switch menu } //end dispMenu void telaInicial() //Temperatura Media (menu1) { float temperatura; temperatura = ((temperatura1 + temperatura2 + temperatura3 + temperatura4 + temperatura 5)/5); disp.setCursor(2,0); disp.print("TEMPERATURA");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temperatura);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } //end telaInicial void telaS1() //Temperatura Sensor 1 (menu2) { float temperatura1; temperatura1 = sensor1.t_celsius(); disp.setCursor(0,0); disp.print(" SENSOR 1 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temperatura1);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } void telaS2() //Temperatura Sensor 2 (menu3) { float temperatura2; temperatura2 = sensor2.t_celsius(); disp.setCursor(0,0); disp.print(" SENSOR 2 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temperatura2);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } void telaS3() //Temperatura Sensor 3 (menu4) { float temperatura3; temperatura3 = sensor3.t_celsius(); disp.setCursor(0,0); disp.print(" SENSOR 3 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temperatura3);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } void telaS4() //Temperatura Sensor 4 (menu5) { float temperatura4; temperatura4 = sensor4.t_celsius(); disp.setCursor(0,0); disp.print(" SENSOR 4 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temperatura4);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius } void telaS5() //Temperatura Sensor 5 (menu6) { float temperatura5; temperatura5 = sensor5.t_celsius(); disp.setCursor(0,0); disp.print(" SENSOR 5 ");//mensagem na primeira linha disp.setCursor(4,1); disp.print(temperatura5);//Mostra a temperatura media na segunda linha disp.write(B11011111);//SIMBOLO DE GRAUS disp.print("C"); //Celsius }
-
Boa tarde pessoal, estou fazendo um projeto para conclusao de curso. O problema é algo simples, creio eu, porém passei horas tentando resolver e nao consegui. A ideia é que na tela inicial apareça sempre a temperatura média dos 5 sensores, e cada vez que voce clica no botão up ou down, troca a informação na tela, mostrando as temperaturas individuais de cada um dos sensores. Consegui fazer a troca de informações na tela e mostrar o valor medido por cada sensor, porém não to conseguindo fazer o valor médio. Estou simulando no proteus, e nessa primeira tela aparece a temperatura, porem o valor fica zerado, enquanto nas outras telas aparecem normalmente os valores. Em anexo estão as linhas de codigo do arduino, até a parte que estaria o problema, as outras funções auxiliares funcionam (sensores 1 a 5). Quem puder me ajudar agradeço desde já
- 2 respostas
-
- termometro
- arduino
-
(mais 2)
Tags:
SOBRE O ELETRÔNICABR
Técnico sem o EletrônicaBR não é um técnico completo! Leia Mais...