terça-feira, 6 de novembro de 2018

Menu para controle de tempo



Construir um sketch para piscar um led com um tempo determinado
O sketch deve conter 3 botões que permitam:

  • OK - entrar e sair do menu
  • INC - Aumenta o tempo de on/off da rotina para piscar o led
  • DEC - Diminui o  tempo de on/off da rotina para piscar o led

Funcionamento do sketch:

  • Ao iniciar o programa pisca o led
  • Se o botão OK for pressionado o programa para de piscar o led e entra em um menu para aumentar ou diminuir o tempo de on/off da rotina para piscar o led




  • Montar a simulação
  • Montar o hardware para apresentação da atividade



  


Exemplo - Menu

O exemplo mostrado no sketch abaixo pisca um led. 
Ao pressionar o botão OK o programa para de piscar o led e entra no menu
Dentro do menu ao pressionar o botão OK o programa sai do menu volta piscar o led


Fluxograma de funcionamento do skecth




Diagrama de ligação do exemplo



Código do sketch de exemplo do menu
  



/*
 *   Nome: menuTempo_0_0_0.ino
 *
 *  Menu de controle do tempo de piscar o led
 *
 *
 * Mostra no LCD o controle de tempo de piscar um LED
 *
 * O circuito:
 *  botão de pressão OK conectado ao pino 8 de GND
 *  Led indicativo conectado ao pino 11
 *  LCD 16 x 2 I2C – SDA/A4 SCL/A5
 *
 * Versão:
 * 0.0.0 -> Lê as entradas digitais A e B imprime o valor no LCD
 *          Botão - IDE ARDUINO - Exemplos\02.Digital\Button
 *          Criado em 2005 by DojoDave <http://www.0j0.org>
 *          Modificado em 30/08/2011 por Tom Igoe
 *          This example code is in the public domain.
 *          https://www.arduino.cc/en/Tutorial/BuiltInExamples/Button
 *          Arduino Pilger - LCD I2C https://pilger-arduino.blogspot.com/2018/11/blog-post_80.html
 *
 * Data: 19/10/2021
 * Luiz Oscar Ruschel Pilger
 */


// Inclui o código de biblioteca:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// apelidos
#define endereco 0x27 // endereços mais comum 0x27 para o CI Philips PCF8574T
//#define endereco 0x3F // endereços mais comum 0x3F para o CI Philips PCF8574AT
#define colunas 16
#define linhas 2
// entradas
#define btOk 8
// saidas
#define led 11

// criar a intância lcd
LiquidCrystal_I2C lcd(endereco, colunas, linhas); // Criando uma estrutura com o nome "lcd" nos parâmetros indicados

// variáveis globais
byte tempo = 1; // varivale para indicar o tempo em s
bool menu = 0;  // variável para indicar dentro (1) ou fora do menu (0)

void delayS (int segundos) {
  for (int i = 0; i < 100 * segundos; i++) {
    if (digitalRead(btOk) == 0) {   // testa o botão ok
      while (digitalRead(btOk) == 0); // espera soltar o botão ok
      menu = 1;                      // seta a variável menu para 1 para ter acesso ao menu
    }
    delay (10);
  }
}

void setup() {
  // GPIOs - inicializa os pinos digital OK E LED
  pinMode(btOk, INPUT_PULLUP);  // iniciliaza o pino 8 como entrada com resistor de pull up ativado
  pinMode(led, OUTPUT);  // iniciliaza o pino 11 como saída
  // LCD
  lcd.init();                 // Inicializando o LCD
  lcd.backlight();            // Ligando o BackLight do LCD
}

void loop() {
  atualizaLcd();
  piscaLed();
  // abre o menu
  while (menu == 1) {
    controleMenu();
  }
}

void atualizaLcd(void){
  lcd.setCursor(0, 0);    // posiciona na primeira coluna (0) e primeira linha (0)
  lcd.print("Led Pisca T=");           // imprime texto
  lcd.print(tempo, DEC);         // imprime a variável x no formato decimal
  lcd.print("s  ");                  // imprime texto
}

void piscaLed(void) {
  // pisca o led com o tempo especificado
  digitalWrite(led, HIGH);
  delayS(tempo);
  digitalWrite(led, LOW);
  delayS(tempo);
}

void controleMenu (void) {
  lcd.setCursor(0, 0);    // posiciona na primeira coluna (0) e primeira linha (0)
  lcd.print("Dentro Menu    ");           // imprime texto
  if (digitalRead(btOk) == 0) {   // testa o botão ok
    while (digitalRead(btOk) == 0); // espera soltar o botão ok
    menu = 0;                      // seta a variável menu para 0 para sair do menu
  }
}

  


LCD - I2C








Fontes de Consulta








Exemplo Robocore em Simulação


Biblioteca do exemplo Robocore - LiquidCrystal_I2C.h


  

/* lcdI2C_0_0_0
 *  
 *  Exemplo de uso do LCD 16 x 2 I2C com o Arduino Uno
 *  
 * Conexões com o Arduino UNO
 * LCD I2C – SDA/A4 SCL/A5
 * 
 * Versão:
 * 0.0.0 -> Exemplo do site Robocore modificado
 *          https://www.robocore.net/tutoriais/primeiros-passos-com-modulo-i2c.html
 *          
 * Data: 16/09/2021         
 * Autor: Luiz Oscar ruschel Pilger
 */

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

#define endereco 0x27 // endereços mais comum 0x27 para o CI Philips PCF8574T
//#define endereco 0x3F // endereços mais comum 0x3F para o CI Philips PCF8574AT
#define colunas 16
#define linhas 2

LiquidCrystal_I2C lcd(endereco,colunas,linhas);  // Criando uma estrutura com o nome "lcd" nos parâmetros indicados

// variáveis globais
int x=0;

void setup()
{
  lcd.init();                 // Inicializando o LCD
  lcd.backlight();            // Ligando o BackLight do LCD
  lcd.print("Hello, world!"); // Exibindo no LED Hello, world!
}

void loop()
{
  testaLcd();
}

void testaLcd(void){
  lcd.setCursor(x,1);
  lcd.print("oi");
  delay (1000); 
  lcd.setCursor(x,1);
  lcd.print("  ");
  delay (1000);
  x++;
  if(x==16){
    x=0;
  }
}



  

ESP32






  

Acionamento de carga - Conversor A/D - Sensores - PWM - Módulos


  


Acionamento de cargas



  

  

Sensores





PWM









Atividades:

1) Leia e execute o tutorial apresentado no Portal Vida de Silício (link acima) para controlar o brilho de um led por meio de um potenciômetro

2) Controle a velocidade de um motor DC por meio da variação de um potenciômetro




3) Utilizando um sensor de temperatura (LM35) controle a velocidade de um motor DC destinado a resfriar o sensor.
Remapear os valores de modo que:

10º motor parado
50º motor com velocidade máxima






Pratica sensor/sheild/trabalho




    - Escolha trabalho e tutorial
    - Apresentação tutorial funcionando em hardware
    - Desenvolvimento de aplicação diferente do tutorial
    - Apresentação aplicação
    - Entrega de relatório
    - Apresentação para a turma




Contador binário no LCD




  • Usando a mesma ligação entre o LCD e o Arduino desenvolvida na atividade 1 e utilizando como base o sketch do contador binário com 4 botões:
    • Reset
    • Incrementa
    • Decrementa
    • Set
  • Utilize o módulo de LCD ao invés dos 8 leds para indicar o valor do contador.
  • Mostrar no LCD o valor do contador nos formatos:
    • Decimal
    • Binário
    • Hexadecimal
    • octal


  • Montar a simulação
  • Montar o hardware para apresentação da atividade

  


  

Projeto

1 - Alarme residencial


Sensores verificados:

  • LDR indicando uma lâmpada ligada
  • Foto emissor - foto receptor  indicando passagem por local
  • Reed switch com imã - indicando porta ou janela aberta


Botões:

  • Botão de reset para desativar o alarme
  • Botões para acionar menu que permite ativar ou desativar cada sensor individualmente


Saída: buzzer indicando que que o sistema foi violado

LCD - com indicações sobre o status do sistema e controle do menu



2 - Controle de fluxo e limitação de pessoas - "Boate Kiss"


Sensores: 2 pares foto emissor - foto receptor

O sistema deverá indicar:

  • Quando uma pessoa entra por contagem
  • Quando uma pessoa sai por contagem


Saída: buzzer indicando que o limite de pessoas foi atingido

LCD - com indicações sobre o status do sistema



3) Elevador para 2 pavimentos


Sistema para controle de de elevador entre dois pavimentos

Botões:

  • Pavimento inferior - Botão DESCE para chamar o elevador
  • Pavimento superior - Botão SOBE  para chamar o elevador
  • Cabine
    • Botão DESCE para chamar o elevador
    • Botão SOBE  para chamar o elevador
    • Botão PARE para parar o elevador


Chave de fim de curso

  • Inferior - para indicar que o elevador chegou no pavimento inferior
  • Superior - para indicar que o elevador chegou no pavimento superior


O sistema deve ser montado para movimentação de um motor DC funcionando por ponte H

LCD - com indicações sobre o status do sistema




Material para práticas Sensores

1 comparador LM339 ou LM393
1 led foto emissor infravermelho
1 foto receptor (foto transistor)

Entendendo sensores

Sensores são dispositivos, também chamados de transdutores, são elementos que realizam a interface entre os circuitos e o mundo real convertendo grandezas físicas em elétricas.

Fontes de consulta:



– Analógico: o sinal de saída deste tipo de sensor vai variar ao longo do tempo, de forma a assumir valores dentro da sua faixa de operação. Geralmente, os sinais mais utilizados são 4… 20 mA ou 0… 10 V. Mas ele poderá variar de acordo com a sua distância de acionamento ou de acordo com o movimento de um atuador, por exemplo.
– Digital: é um tipo de sensor que pode assumir apenas dois valores em seu sinal de saída, que poderão ser interpretados como 0 (zero) ou então 1.

Existem sensores que podem atuar tanto de forma analógica como digital, e isso vai depender da sua aplicação.







Sensor LDR como entrada digital



A ligação pode ser invertida

Sugere-se a aplicação de um comparador pada adequar o sinal


Atividade 1

Elaborar um programa para acionar uma saída a partir da ação do sensor

Siga a sequencia de passos

  • Monte o divisor com o LDR e o Resistor (~10% do LDR).
  • Meça a tensão para as situações de "Claro" e "Escuro"
  • Calcule o ponto médio de tensão entre os valores de "Claro" e "Escuro"
  • Ligue o comparador com saída do sensor (LDR e resistor) e a tensão de refer~encia (ponto médio de tensão)
  • Meça a saída do comparador, ela deve mostrar nível "0" (LOW) ou "1" (RIGH) para as situações de "Claro" e "Escuro" dependo da ligação escolhida (LDR) e/ou da configuração do comparador.
  • Ligue a saída do comparador a uma entrada digital do ARDUINO e faça a leitura do estado do sensor (uso o programa do "status do botão e led no LCD, como base)






Sensor infra-vermelho










      






    Atividade 2.1

    Implementar o circuito acima e realizar as medidas de tensão na saída do sensor para as situações abaixo:


    Descreva incidência alta de luminosidade:
    Descreva incidência baixa de luminosidade:

    Avaliação: Mostrar os resultados obtidos.






    Atividade 2.2

    Inclua junto ao circuito da Atividade 1.1 o circuito abaixo. O Amplificador operacional funciona como comparador, podendo ser utilizado o LM339 ou LM393, ou qualquer operacional que funcione como comparador.

    Calcule os valores de R6 e R7 para construir um divisor de tensão para o comparador de forma que consiga atender todas as situações da tabela da atividade 1.1.


    Avaliação: Mostrar os resultados obtidos.








    Atividade 2.3

    Elabore um programa para contar a passagem de elementos em uma esteira hipotética

    Avaliação: Apresentar hardware e software em funcionamento