Ir para conteúdo
View in the app

A better way to browse. Learn more.

EletrônicaBR.com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Navegação Limpa e Sem Anúncios! (Cadastre-se)

O melhor fórum técnico do mundo está de cara nova e de portas abertas! Estamos de cara nova e com ferramentas ainda mais poderosas para a sua bancada. Faça o seu cadastro de forma rápida e simples para acessar o maior e mais atualizado acervo de Esquemas Elétricos, BIOS e Firmwares da internet.

Aqui, o conhecimento vale muito: através do nosso sistema de créditos, membros participativos ganham acesso totalmente gratuito aos downloads. Venha trocar experiências com os melhores especialistas do mercado!

👉 Técnico sem o EletrônicaBR não é um técnico completo!

 

Featured Replies

Postado

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
    }
  }


        

 

Editado: por Everton Aljonas
Detalhamento de informações

  • Everton Aljonas alterou o título para Projeto Incubadora CO2
  • 1 ano depois...
Postado
void relay1() {
    barramento.requestTemperatures(); // Solicita a leitura dos sensores de temperatura
    float temp1 = barramento.getTempC(sensor1); // Lê a temperatura atual do sensor

    // Condição de acionamento do relé
    if (temp1 < T_SET) { // Se a temperatura atual for menor que a temperatura de setpoint
        reles.SetRelay(1, SERIAL_RELAY_ON, 1); // Liga o relé 1
    } else { // Se a temperatura atual for maior ou igual ao setpoint
        reles.SetRelay(1, SERIAL_RELAY_OFF, 1); // Desliga o relé 1
    }
}

 

tenta ver se funciona, tem rele que e ativado com 0v ....

Participe agora da conversa!

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, faça login para postar com sua conta.

Visitante
Responder

Account

Navigation

Pesquisar

Pesquisar

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.