Menu

Aula 008 - Enviando dados ao monitor serial

Objetivo: Agora vamos ler a varaível temperatura, mostrar no LCD e compará-la com com set pointe ajustável e se esta for maior o motor deverá ser ligado.




Usaremos como sensor o LM 45 um sinal de 0 a 1VDC, com uma resolução de 10mV/graus Celcius e o arduino nos fornecerá um sinal digital de 10 bits (0 a 206) que converteremos de 0 a 100 °C para exibirmos no LCD e no serial do PC.

O Set point poderá ser ajustado através do potenciômetro e seu valor exibido no LCD e Serial.

O código...

//-------------------------------------------------------------//
//  Projeto Desenvolvedores 4.0  - Desenvolvimento com Arduino
//  Programa/hardware: 008 - Enviando dados ao monitor Serial
//  Autor:Clodoaldo Silva
//  Revisão: 27Abr2020
//---------------------------------------------------------------

//inclui a biblioteca do LCD
#include <LiquidCrystal.h>
//http://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

//DEFINIÇÕES DO HARDWARE DE DESENVOLVIMENTO
//Entradas digitais
#define S1 A0    //Nomeia o pino A0 (analógico) como (digital)
#define S2 A1    //indem
#define S3 A2    //indem
#define S4 A3    //indem

//Entradas analógicas
#define Sinal_01 A4   //Preparado p/ receber sinais analógico  
#define Sinal_02 A5   //indem  

//Saídas Digitais
#define LED_vermelho 10    //define do pino 10 como saída
#define LED_amarelo 9    //define do pino 9 como saída
#define LED_verde 8    //define do pino 8 como saída
#define Lampada 7   //define do pino 7 como saída
#define Motor 6   //define do pino 6 como saída

//DEFINIÇÕES E TIPOS DE VARIÁVEIS

float Valor_AD1 = 0;  // Valor lido no pino A4
float Set = 0;      // variável trabalhada p/ ler tensão

float Valor_AD2 = 0;  // Valor lido no pino A5
float Temp = 0;      // variável trabalhada p/ ler temperatura


//DEFINE PINOS PARA LCD JÁ NA BIBLIOTECA
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/*
   Respectivamente
   LCD RS pin to digital pin 12
   LCD Enable pin to digital pin 11
   LCD R/W pin to ground
   LCD D4 pin to digital pin 5
   LCD D5 pin to digital pin 4
   LCD D6 pin to digital pin 3
   LCD D7 pin to digital pin 3
*/
void setup()
{
  // Inicializa o LCD com 20 colunas e 4 linhas
  lcd.begin(20, 4);
  Serial.begin(9600);

  //Configurando os pinos definidos como saídas.
  pinMode(LED_vermelho, OUTPUT);
  pinMode(LED_amarelo, OUTPUT);
  pinMode(LED_verde, OUTPUT);
  pinMode(Lampada, OUTPUT);
  pinMode(Motor, OUTPUT);

  //Configurando os pinos definidos como entradas.
  //Sinais discretos - 4 Entradas
  pinMode(S1, INPUT);
  pinMode(S2, INPUT);
  pinMode(S3, INPUT);
  pinMode(S4, INPUT);

  //Sinais analógicos - 2 Entradas
  pinMode(Sinal_01, INPUT);
  pinMode(Sinal_02, INPUT);
}
//-------------------------------------------
void loop()
{
  //Leitura da variável temperatura
  Valor_AD2 = analogRead(Sinal_02); // Lê o pino analógico
  //e armazena na variável Valor_AD

  Temp = Valor_AD2 * 0.48543689320388349514563106796117; //Multiplica o valor AD

  //Dados para o LCD
  lcd.setCursor(0, 0);            // Posiciona
  lcd.print("Arduino: Temperatura"); // Escreve no LCD
  lcd.setCursor(0, 1);
  lcd.print("Temperatura: " );
  lcd.print(Temp);               // Imprime a variável Vol no LCD
  lcd.print(" C" );                // Escreve a unidade

  //Dados para o PC local
  Serial.print("Temperatura = "); //imprime os valores de Temperatura na serial
  Serial.println(Temp); //imprime os valores de Temperatura na serial

  //Leitura da variável Set point
  Valor_AD1 = analogRead(Sinal_01);
  Set = Valor_AD1 * 0.09765625; //Multiplica o valor AD

  //Dados para o LCD
  lcd.setCursor(0, 2);
  lcd.print("Set Point = " );
  lcd.print(Set);               // Imprime a variável no LCD
  lcd.print(" C" );                // Escreve a unidade

  //Dados para o PC local
  Serial.print("Set point = ");
  Serial.println(Set); //imprime os valores do Set point na serial

  //Aciona o motor e apresenta o status Coloca no LCD
  if (Temp > Set)               // Se a temperatura for maior que o Set point
  {
    digitalWrite(Motor, HIGH);    // Liga motor
    lcd.setCursor(0, 3);
    lcd.print("Motor = Ligado  : " );
    
    Serial.println("Motor Ligado"); //imprime os valores do Set point na serial
  }
  else
  {
    digitalWrite(Motor, LOW);
    lcd.setCursor(0, 3);
    lcd.print("Motor = Desligado  : " );
    Serial.println("Motor Desligado"); //imprime os valores do Set point na serial
  }
}

Até a próxima...
"A persistência é o caminho do êxito."

Charles Chaplin.

www.clubedaeletronica.com.br

Autor: Clodoaldo Silva...

Aula 007 - Monitorando a temperatura + Set Point ajustável

Objetivo: Agora vamos ler a varaível temperatura, mostrar no LCD e compará-la com com set pointe ajustável e se esta for maior o Motor deverá ser ligado.

Usaremos como sensor o LM 45 um sinal de 0 a 1VDC, com uma resolução de 10mV/graus Celcius e o arduino nos fornecerá um sinal digital de 10 bits (0 a 206) que converteremos de 0 a 100 °C para exibirmos no LCD.

O Set point poderá ser ajustado através do potenciômetro.

O código...
//-------------------------------------------------------------//
//  Projeto Desenvolvedores 4.0  - Desenvolvimento com Arduino
//  Programa/hardware: 007 - Monitorando a temperatura com Set Point
//  Autor:Clodoaldo Silva
//  Revisão: 26Abr2020
//---------------------------------------------------------------

//inclui a biblioteca do LCD
#include <LiquidCrystal.h>
//http://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

//DEFINIÇÕES DO HARDWARE DE DESENVOLVIMENTO
//Entradas digitais
#define S1 A0    //Nomeia o pino A0 (analógico) como (digital)
#define S2 A1    //indem
#define S3 A2    //indem
#define S4 A3    //indem

//Entradas analógicas
#define Sinal_01 A4   //Preparado p/ receber sinais analógico  
#define Sinal_02 A5   //indem  

//Saídas Digitais 
#define LED_vermelho 10    //define do pino 10 como saída
#define LED_amarelo 9    //define do pino 9 como saída
#define LED_verde 8    //define do pino 8 como saída
#define Lampada 7   //define do pino 7 como saída
#define Motor 6   //define do pino 6 como saída

//DEFINIÇÕES E TIPOS DE VARIÁVEIS

float Valor_AD1 = 0;  // Valor lido no pino A4
float Set = 0;      // variável trabalhada p/ ler tensão

float Valor_AD2 = 0;  // Valor lido no pino A5
float Temp = 0;      // variável trabalhada p/ ler temperatura


//DEFINE PINOS PARA LCD JÁ NA BIBLIOTECA
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/*
   Respectivamente
   LCD RS pin to digital pin 12
   LCD Enable pin to digital pin 11
   LCD R/W pin to ground
   LCD D4 pin to digital pin 5
   LCD D5 pin to digital pin 4
   LCD D6 pin to digital pin 3
   LCD D7 pin to digital pin 3
*/
void setup()
{
  // Inicializa o LCD com 20 colunas e 4 linhas
  lcd.begin(20, 4);
  
  //Configurando os pinos definidos como saídas.
  pinMode(LED_vermelho, OUTPUT);
  pinMode(LED_amarelo, OUTPUT);
  pinMode(LED_verde, OUTPUT);
  pinMode(Lampada, OUTPUT);
  pinMode(Motor, OUTPUT);

  //Configurando os pinos definidos como entradas.
  //Sinais discretos - 4 Entradas
  pinMode(S1, INPUT);
  pinMode(S2, INPUT);
  pinMode(S3, INPUT);
  pinMode(S4, INPUT);

  //Sinais analógicos - 2 Entradas
  pinMode(Sinal_01, INPUT); 
  pinMode(Sinal_02, INPUT);
}
//-------------------------------------------
void loop()
{
  Valor_AD2 = analogRead(Sinal_02); // Lê o pino analógico 
                                   //e armazena na variável Valor_AD 
  
  Temp = Valor_AD2*0.48543689320388349514563106796117; //Multiplica o valor AD
                                                                  
  lcd.setCursor(0,0);             // Posiciona
  lcd.print("Arduino: Temperatura"); // Escreve no LCD
  lcd.setCursor(0, 1);
  lcd.print("Temperatura: " );    
  lcd.print(Temp);               // Imprime a variável Vol no LCD
  lcd.print(" C" );                // Escreve a unidade
  
  Valor_AD1 = analogRead(Sinal_01);  
  Set = Valor_AD1*0.09765625; //Multiplica o valor AD
  
  lcd.setCursor(0, 2);
  lcd.print("Set Point = " );    
  lcd.print(Set);               // Imprime a variável no LCD
  lcd.print(" C" );                // Escreve a unidade             

  if(Temp>Set)                  // Se a temperatura for maior que o Set point
  digitalWrite(Motor,HIGH);     // Liga motor
  else
  digitalWrite(Motor,LOW);
  }



Até a próxima...
"Nada acontece a menos que sonhemos antes”.
Carl Sandburg

www.clubedaeletronica.com.br
Autor: Clodoaldo Silva...

Aula 006 - Tratando sinais analógicos

Objetivo: Coletar dados analógicos para uma tomada de decisão são de grande valia para aplicações industriais. Assim, faremos uma inclusão na nossa placa de desenvolvimento para simular a coleta destes dados.


Usaremos um potenciômetro que devidamente alimentado enviará ao Arduino um sinal de 0 a 5VDC, (Máxima tensão de entrada = 5V) e o arduino nos fornecerá um sinal digital de 10 bits ( 0 a 1023) que converteremos de 0 a 5V para exibirmos no LCD e usarmos em nossas futuras aplicações.

O código...

//-------------------------------------------------------------//
//  Projeto Desenvolvedores 4.0  - Desenvolvimento com Arduino
//  Programa/hardware: 006 - Coletando variáveis de processo
//  Autor:Clodoaldo Silva
//  Revisão: 26Abr2020
//---------------------------------------------------------------

//inclui a biblioteca do LCD
#include <LiquidCrystal.h>
//http://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

//DEFINIÇÕES DO HARDWARE DE DESENVOLVIMENTO
//Entradas digitais
#define S1 A0    //Nomeia o pino A0 (analógico) como (digital)
#define S2 A1    //indem
#define S3 A2    //indem
#define S4 A3    //indem

//Entradas analógicas
#define Sinal_01 A4   //Preparado p/ receber sinais analógico  
#define Sinal_02 A5   //indem  

//Saídas Digitais 
#define LED_vermelho 10    //define do pino 10 como saída
#define LED_amarelo 9    //define do pino 9 como saída
#define LED_verde 8    //define do pino 8 como saída
#define Lampada 7   //define do pino 7 como saída
#define Motor 6   //define do pino 6 como saída

//DEFINIÇÕES E TIPOS DE VARIÁVEIS

float Valor_AD = 0;
float Volts = 0;

//DEFINE PINOS PARA LCD JÁ NA BIBLIOTECA
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/*
   Respectivamente
   LCD RS pin to digital pin 12
   LCD Enable pin to digital pin 11
   LCD R/W pin to ground
   LCD D4 pin to digital pin 5
   LCD D5 pin to digital pin 4
   LCD D6 pin to digital pin 3
   LCD D7 pin to digital pin 3
*/
void setup()
{
  // Inicializa o LCD com 20 colunas e 4 linhas
  lcd.begin(20, 4);
  lcd.clear();

  //Configurando os pinos definidos como saídas.
  pinMode(LED_vermelho, OUTPUT);
  pinMode(LED_amarelo, OUTPUT);
  pinMode(LED_verde, OUTPUT);
  pinMode(Lampada, OUTPUT);
  pinMode(Motor, OUTPUT);

  //Configurando os pinos definidos como entradas.
  //Sinais discretos - 4 Entradas
  pinMode(S1, INPUT);
  pinMode(S2, INPUT);
  pinMode(S3, INPUT);
  pinMode(S4, INPUT);

  //Sinais analógicos - 2 Entradas
  pinMode(Sinal_01, INPUT); 
  pinMode(Sinal_02, INPUT);
}
//-------------------------------------------
void loop()
{
  Valor_AD = analogRead(Sinal_01); // Lê o pino analógico 
                                   //e armazena na variável Valor_AD 
  
  Volts = Valor_AD*0.004887585532746823069403714565; //Multiplica o valor AD
                                                     //pela constante 5/1024              
  lcd.setCursor(0,0);             // Posiciona
  lcd.print("Sinais Analogicos"); // Escreve no LCD
  lcd.setCursor(0, 1);
  lcd.print("Voltimetro:" );    
  lcd.print(Volts);               // Imprime a variável Vol no LCD
  lcd.print("V" );                // Escreve a unidade
  }



Até a próxima...
"Mesmo que já tenhas feito uma longa caminhada, há sempre um novo caminho a fazer”.
Santo Agostinho 


www.clubedaeletronica.com.br
Autor: Clodoaldo Silva...

Aula 005 - Funções - Otimizando o código


Objetivo: Em sistemas simples fica fácil o controle e organização da lógica, porém, à medida que o código aumenta, ou seja, varias entradas e varias saídas a organizanção será melhor se usarmos funções.

"se o problema é grande, devemos dividí-lo em pequenos problemas".

Para nosso exemplo, usaremos três chaves e três saídas, além de uma mensagem inicial fazendo uma propaganda do sistema...

Ao ligar o sistema a seguinte mensagem deverá ser exibida:

Controle - Pressione:
S1 - Ligar LEDs (vermelho, amarelo e verde)
S2 - Ligar Lampadas
S3 - Ligar Motor 

Pressionando a chave as saída correspondente deverá ser acionada e a mensagem corrospondente exibida.
O código... 
//-------------------------------------------------------------//
//  Projeto Desenvolvedores 4.0  - Desenvolvimento com Arduino
//  Programa/hardware: 005 - Função - Otimizando seu código
//  Autor:Clodoaldo Silva
//  Revisão: 25Abr2020
//---------------------------------------------------------------

//inclui a biblioteca do LCD
#include <LiquidCrystal.h>
//http://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

//DEFINIÇÕES DO HARDWARE DE DESENVOLVIMENTO
//Entradas
#define S1 A0    //Nomeia o pino A0 (analógico) como (digital)
#define S2 A1    //indem A1
#define S3 A2    //indem A2
#define S4 A3    //indem A3

//Saídas
#define LED_vermelho 10    //define do pino 10 como saída
#define LED_amarelo 9    //define do pino 9 como saída
#define LED_verde 8    //define do pino 8 como saída
#define Lampada 7   //define do pino 7 como saída
#define Motor 6   //define do pino 6 como saída

//DEFINE PINOS PARA LCD JÁ NA BIBLIOTECA
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/*
   Respectivamente
   LCD RS pin to digital pin 12
   LCD Enable pin to digital pin 11
   LCD R/W pin to ground
   LCD D4 pin to digital pin 5
   LCD D5 pin to digital pin 4
   LCD D6 pin to digital pin 3
   LCD D7 pin to digital pin 3
*/
void setup()
{
  // Inicializa o LCD com 20 colunas e 4 linhas
  lcd.begin(20, 4);

  //Configurando os pinos definidos como saídas.
  pinMode(LED_vermelho, OUTPUT);
  pinMode(LED_amarelo, OUTPUT);
  pinMode(LED_verde, OUTPUT);
  pinMode(Lampada, OUTPUT);
  pinMode(Motor, OUTPUT);

  //Configurando os pinos definidos como saídas.
  pinMode(S1, INPUT);
  pinMode(S2, INPUT);
  pinMode(S3, INPUT);
  pinMode(S4, INPUT);
}

//-------------------------------------------
// Função para tela inicial

void LEDs()
{
  lcd.setCursor(0, 0);
  lcd.print("-------------------");
  lcd.setCursor(0, 1);       //Posiciona
  lcd.print("Status da saida");        //Escreve
  lcd.setCursor(0, 2);
  lcd.print("LEDs ligados");
  lcd.setCursor(0, 3);
  lcd.print("-------------------");

  digitalWrite(LED_vermelho, HIGH); // Liga a saída
  digitalWrite(LED_amarelo, HIGH);
  digitalWrite(LED_verde, HIGH);
}
void Lampadas ()
{
  lcd.setCursor(0, 0);
  lcd.print("-------------------");
  lcd.setCursor(0, 1);
  lcd.print("Status da saida    ");
  lcd.setCursor(0, 2);
  lcd.print("Lampada ligada     ");
  lcd.setCursor(0, 3);
  lcd.print("-------------------");

  digitalWrite(Lampada, HIGH);  // Liga saída
}

void Motores()
{
  lcd.setCursor(0, 0);
  lcd.print("-------------------");
  lcd.setCursor(0, 1);
  lcd.print("Status da saida    ");
  lcd.setCursor(0, 2);
  lcd.print("Motor ligado       ");
  lcd.setCursor(0, 3);
  lcd.print("-------------------");

  digitalWrite(Motor, HIGH); // Liga saída
}

void inicio()
{
  lcd.setCursor(0, 0);                     // Posicionamento Coluna,Linha
  lcd.print("Controle:               ");   // Mensagem correspondente
  lcd.setCursor(0, 1);
  lcd.print("S1 = Ligar LEDS         ");
  lcd.setCursor(0, 2);
  lcd.print("S2 = Ligar Lampada      ");
  lcd.setCursor(0, 3);
  lcd.print("S3 = Ligar Motor        ");

  digitalWrite(LED_vermelho, LOW); // Liga a saída
  digitalWrite(LED_amarelo, LOW);
  digitalWrite(LED_verde, LOW);
  digitalWrite(Lampada, LOW); // Liga a saída
  digitalWrite(Motor, LOW);
}

void loop()
{
 
if (digitalRead(S1) == HIGH) // Se S1 for pressionada
    LEDs();   // Chama função LEDs
  while (digitalRead(S1) == HIGH); // Somente se S1 for pressionada

  if (digitalRead(S2) == HIGH) // Idem.
    Lampadas();
  while (digitalRead(S2) == HIGH);

  if (digitalRead(S3) == HIGH) // Idem.
    Motores();
  while (digitalRead(S3) == HIGH);

  if((digitalRead(S1)== LOW)&&(digitalRead(S2)==LOW)&&(digitalRead(S3)==LOW)) 
  inicio();
  while((digitalRead(S1)==LOW)&&(digitalRead(S2)==LOW)&&(digitalRead(S3)== LOW));
}
Até a próxima...

"Sua luta não termina quando sentir cansaço, mas sim quando atingir o sucesso tão merecido." 

www.clubedaeletronica.com.br
Autor: Clodoaldo Silva...

Aula 004 - Acionando cargas com status

Objetivo: 
Acionar uma carga quando um botão for pressionado e exibir o status da saída no LCD. 

Para nosso exemplo, informaremos, iluminação ligada / desligada e uma propaganda do sistema quando um botão for pressionado...

O código...
//-------------------------------------------------------------//
//  Projeto Iniciativa 4.0 - Desenvolvimento com Arduino
//  Programa/hardware: 004 - Status de funcionamento no LCD
//  Autor:Clodoaldo Silva
//  Revisão: 25Abr2020
//---------------------------------------------------------------

//inclui a biblioteca do LCD
#include <LiquidCrystal.h>
//http://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

//DEFINIÇÕES DO HARDWARE DE DESENVOLVIMENTO
//Entradas
#define S1 A0    //Nomeia o pino A0 (analógico) como (digital)
#define S2 A1    //indem A1
#define S3 A2    //indem A2
#define S4 A3    //indem A3

//Saídas
#define LED_vermelho 10    //define do pino 10 como saída
#define LED_amarelo 9    //efine do pino 9 como saída
#define LED_verde 8    //define do pino 8 como saída
#define Lampada 7   //define do pino 7 como saída
#define Motor 6   //define do pino 6 como saída

//DEFINE PINOS PARA LCD JÁ NA BIBLIOTECA
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/*
   Respectivamente
   LCD RS pin to digital pin 12
   LCD Enable pin to digital pin 11
   LCD R/W pin to ground
   LCD D4 pin to digital pin 5
   LCD D5 pin to digital pin 4
   LCD D6 pin to digital pin 3
   LCD D7 pin to digital pin 3
*/
void setup()
{
  // Inicializa o LCD com 20 colunas e 4 linhas
  lcd.begin(20, 4);

  //Configurando os pinos definidos como saídas.
  pinMode(LED_vermelho, OUTPUT);
  pinMode(LED_amarelo, OUTPUT);
  pinMode(LED_verde, OUTPUT);
  pinMode(Lampada, OUTPUT);
  pinMode(Motor, OUTPUT);

  //Configurando os pinos definidos como saídas.
  pinMode(S1, INPUT);
  pinMode(S2, INPUT);
  pinMode(S3, INPUT);
  pinMode(S4, INPUT);
}

void Ligado()   //Cria uma função chamada ligado
{
  digitalWrite(Lampada, HIGH);
  //mensagem no LCD
  lcd.setCursor(0, 1);      
  lcd.print("Iniciativa 4.0    ");
  lcd.setCursor(0, 2);
  lcd.print("Lampada = Ligada   ");
}
void Desligado() //Cria uma função chamada desligado
{
  digitalWrite(Lampada, LOW);
  lcd.setCursor(0, 1);
  lcd.print("Iniciativa 4.0    ");
  lcd.setCursor(0, 2);
  lcd.print("Lampada = Desligada");
}

void loop()
{

  if (digitalRead(S4) == HIGH) 
    Ligado();
  else // Senão
    Desligado();
}

Até a próxima...
"O pessimismo é humor; o otimismo é vontade." 
Émile-Auguste Chartier

www.clubedaeletronica.com.br
Autor: Clodoaldo Silva...