quarta-feira, 27 de março de 2019

Controlar 3 LEDs com controle remoto no Arduino

    Neste projeto vamos utilizar um controle remoto e o receptor de infravermelho (IR) para controlar 3 LEDs com um controle remoto. Vamos LIGAR e DESLIGAR os LEDs pressionando alguns dos botões do controle remoto. 
Nota: Você pode utilizar controles que já tem, como o da TV. Mas utilize controles de infravermelho.

Lista de componentes:


1 - Arduino Uno;
1 - Controle remoto;
1 - Receptor IR;
1 - Protobord;
3 - LED's;
3 - Resistores de 220 ohms;
Alguns jumpers;

Circuito a ser montado:


    Para que a placa Arduino leia os códigos do controle remoto pela placa Arduino, precisamos de uma biblioteca externa, a biblioteca IRremote, você pode obter a biblioteca IRremote aqui.    ( como inserir nova biblioteca no arduino IDE )

    Neste projeto, primeiro executamos o programa de exemplo IRrecvDemo a partir do exemplo da biblioteca IR do arduino, para identicar o código dos botões do controle.

(Nota: Se você tiver algum erro ao executar esta biblioteca, remova “IRremoteTools.cpp” das bibliotecas \ RobotIRremote \ IRremoteTools.cpp)

Código Arduino para receber IR como código hexadecimal


#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Inicia o receptor
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Recebe o próximo valor
  }
}

     Em seguida, usamos os dados decodificados como condição de comutação no programa para ligar e desligar os três LEDs.

Código Arduino Para Controle Remoto IR

#include <IRremote.h>
 
int RECV_PIN = 11; // 
int output1 = 2;
int output2 = 4;
int output3 = 6;
int itsONled[] = {0,0,0,0};

#define code1  0xFF807F // 
#define code2  0xFFA05F // 
#define code3  0xFF906F // 
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
  Serial.begin(9600);   // 
  irrecv.enableIRIn();  // 
  pinMode(output1, OUTPUT);
  pinMode(output2, OUTPUT);
  pinMode(output3, OUTPUT);
}
 
void loop() {
  if (irrecv.decode(&results)) {
    unsigned int value = results.value;
    switch(value) {
       case code1:
         if(itsONled[1] == 1) {        // 
            digitalWrite(output1, LOW);   // 
            itsONled[1] = 0;           // 
         } else {                      // 
             digitalWrite(output1, HIGH); // 
             itsONled[1] = 1;          // 
         }
          break; 
       case code2:
         if(itsONled[2] == 1) {
            digitalWrite(output2, LOW);
            itsONled[2] = 0;
         } else {
             digitalWrite(output2, HIGH);
             itsONled[2] = 1;
         }
          break;
       case code3:
         if(itsONled[3] == 1) {
            digitalWrite(output3, LOW);
            itsONled[3] = 0;
         } else {
             digitalWrite(output3, HIGH);
             itsONled[3] = 1;
         }
          break;          
    }
    Serial.println(value); // Você pode comentar esta linha
    irrecv.resume(); // Receber o próximo valor
  }
}
Neste programa nós usamos



code1 como  0xFF807F

code2 como  0xFFA05F
code3 como  0xFF906F

     Você pode alterar estes códigos de acordo com o código recebido no Monitor serial e a partir do primeiro  programa do arduino. 

Os componentes deste tutorial pode ser comprados AQUI!


quarta-feira, 20 de março de 2019

Monitor de Frequência Cardíaca AD8232 com interface Arduino


      O AD8232 é um circuito integrado para monitorar a frequência cardíaca. O AD8232 é um bloco de condicionamento de sinal integrado para aplicações de medição de ECG e outros sinais de bioeltericidade. Ele é projetado para extrair, amplificar e filtrar pequenos sinais na presença de condições ruidosas através de 3 eletrodos.



     Este projeto permite que um conversor analógico-digital de energia ultrabaixa (ADC) ou um microcontrolador incorporado adquira o sinal de saída com facilidade.

O que é ECG?



     Crédito de imagem: Wikipedia.org

           Esta onda de ECG tem duas seções como intervalo PR e intervalo QT, usando o AD8232 IC podemos obter menos informações de ruído.

Placa de monitor de coração AD8232








.




     É simples e fácil de usar esta placa para monitoramento de freqüência cardíaca. Esta placa mede a atividade elétrica do coração através dos eletrodos  colocados na pele. Ao conectar esta placa com o Arduino, podemos obter o gráfico de ECG através da janela Processing IDE.


Ligações.

 Etiqueta da placa
Pino Função
Conexão Arduino
GND
terra
GND
3.3v
Fonte de alimentação 3.3v
3.3v
OUTPUT
Sinal de saída
A0
LO-
Leads-off Detectar -
11
LO +
Leads-off Detect +
10
SDN
Desligar
Não usado

Eletrodos.


Cor do cabo
Sinal
Preto
RA (braço direito)
Azul
LA (braço esquerdo)
Vermelho
RL (perna direita)


AD8232 Conexão com Arduino


Crédito de imagem: theorycircuit.com

      Conecte os eletrodos correspondentes na pele e forneça a fonte de alimentação 3.3V e GND da placa Arduino, o pino SDN (shutdown) não está conectado a nenhuma parte. O pino OUTPUT está ligado ao A0 (entrada analógica 0) do Arduino. Para detectar o Leads off, os pinos LO -, LO + estão conectados ao pino digital Arduino D11 e D10, respectivamente.

Código Arduino


/******************************************************************************

Heart_Rate_Display.inoDemo Program for AD8232 Heart Rate sensor.

Casey Kuhns @ SparkFun Electronics 6/27/2014

https://github.com/sparkfun/AD8232_Heart_Rate_Monitor

******************************************************************************/

 

void setup() {
  // initialize the serial communication:
  Serial.begin(9600);
  pinMode(10, INPUT); // Setup for leads off detection LO +
  pinMode(11, INPUT); // Setup for leads off detection LO -
 
}
 
void loop() {
  
  if((digitalRead(10) == 1)||(digitalRead(11) == 1)){
    Serial.println('!');
  }
  else{
    // send the value of analog input 0:
      Serial.println(analogRead(A0));
  }
  //Wait for a bit to keep serial data from saturating
  delay(1);
}
 

 

Código de processamento


/******************************************************************************
Heart_Rate_Display.inoDemo Program for AD8232 Heart Rate sensor.
Casey Kuhns @ SparkFun Electronics 6/27/2014
https://github.com/sparkfun/AD8232_Heart_Rate_Monitor
******************************************************************************/
import processing.serial.*;
 
Serial myPort;        // The serial port
int xPos = 1;         // horizontal position of the graph
float height_old = 0;
float height_new = 0;
float inByte = 0;
 
 
void setup () {
  // set the window size:
  size(1000, 400);
 
  // List all the available serial ports
  println(Serial.list());
  // Open whatever port is the one you're using.
  myPort = new Serial(this, Serial.list()[0], 9600);
  // don't generate a serialEvent() unless you get a newline character:
  myPort.bufferUntil('\n');
  // set inital background:
  background(0xff);
}
 
 
void draw () {
  // everything happens in the serialEvent()
}
 
 
void serialEvent (Serial myPort) {
  // get the ASCII string:
  String inString = myPort.readStringUntil('\n');
 
  if (inString != null) {
    // trim off any whitespace:
    inString = trim(inString);
 
    // If leads off detection is true notify with blue line
    if (inString.equals("!")) {
      stroke(0, 0, 0xff); //Set stroke to blue ( R, G, B)
      inByte = 512;  // middle of the ADC range (Flat Line)
    }
    // If the data is good let it through
    else {
      stroke(0xff, 0, 0); //Set stroke to red ( R, G, B)
      inByte = float(inString);
     }
 
     //Map and draw the line for new data point
     inByte = map(inByte, 0, 1023, 0, height);
     height_new = height - inByte;
     line(xPos - 1, height_old, xPos, height_new);
     height_old = height_new;
 
      // at the edge of the screen, go back to the beginning:
      if (xPos >= width) {
        xPos = 0;
        background(0xff);
      }
      else {
        // increment the horizontal position:
        xPos++;
      }
 
  }
}
 
No link abaixo há informações sobre a janela do Processing.
https://www.arduinoecia.com.br/2014/09/tutorial-arduino-processing.html

sexta-feira, 15 de março de 2019

Relé acionado por um sensor de presença PIR


Utilizaremos nesse projeto o eficiente módulo sensor de movimento PIR, um módulo compacto com sensor infravermelho e ajustes de sensibilidade e tempo de acionamento:

Ajustes do sensor:
Este módulo permite o ajuste da sensibilidade do sensor, ou seja, à qual distância um objeto será detectado (3 à 7 metros) , e também o tempo de delay (tempo que a saída permanece acionada, em nível alto), de 5 a 200 segundos. Os ajustes são feitos nos 2 potenciômetros soldados à placa. Observando a foto, vemos que o da esquerda ajusta a sensibilidade, e o da direita ajusta o tempo.


O sensor aceita alimentação de 4,5 à 20V, e a conexão com o Arduino utiliza apenas um pino, que apresenta o estado HIGH (alto), ao detectar um movimento, e LOW (baixo) quando não há movimentação perto do sensor. Maiores informações sobre o funcionamento do módulo podem ser obtidas no datasheet do produto, nesse link.
Circuito do relé:
Para utilização com um relé, precisaremos construir um circuito de proteção para evitar danos ao Arduino. Se você utilizar um módulo relé, o circuito de proteção não será necessário, pois ele já está embutido no módulo. 
Os componentes para o circuito do relé são os seguintes :
  • 1 relé 5V;
  • 1 diodo 1N4007 ou equivalente
  • 1 Transistor BC548 (ou equivalente NPN)
  • 1 Resistor de 10K
Circuito:
IMPORTANTE: Alguns módulos tem a pinagem invertida, com o Vcc (5V) no lado esquerdo e o GND no lado direito, ao contrário da imagem mostrada abaixo. Confira a pinagem do seu módulo removendo a tampa superior e observando a ligação correta, evitando assim a queima do componente.

Lembre-se que dependendo do tipo de relé que você estiver utilizando, a disposição dos pinos pode variar. No circuito, NO corresponde ao pino Normal Open (Aberto)NC ao Normal Close (Fechado), e C ao comum. Siga a mesma ligação ao relé que você estiver usando.

Programa:
O programa abaixo verifica se o pino 7 (entrada do sensor de movimento) foi acionado, ou seja, se está em estado alto (HIGH), e então aciona o pino 2 (saída para o relé), que por sua vez aciona o relé, os pontos 1 e 2 podem ser usados para acionar um portão, lâmpada ou um alarme por exemplo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//Programa : Sensor de presenca com modulo PIR

int pinorele = 2; //Pino ligado ao rele
int pinopir = 7; //Pino ligado ao sensor PIR
int acionamento; //Variavel para guardar valor do sensor

void setup()
{
pinMode(pinorele, OUTPUT); //Define pino rele como saida
pinMode(pinopir, INPUT); //Define pino sensor como entrada
Serial.begin(9600);
}

void loop()
{
acionamento = digitalRead(pinopir); //Le o valor do sensor PIR

if (acionamento == LOW) //Sem movimento, mantem rele desligado
{
digitalWrite(pinorele, LOW);
Serial.println("Parado");
}
else //Caso seja detectado um movimento, aciona o rele
{
digitalWrite(pinorele, HIGH);
Serial.println("Movimento !!!");
}
}

Este post foi baseado no site filipeflop.
Os componentes deste tutorial pode ser comprados AQUI!