Projetos

Utilizando Sensores I₂C com o Mesmo Endereço

Eletrogate 26 de setembro de 2023

Introdução

O protocolo I2C foi criado pela Philips Semicondutors com o intuito de conectar dispositivos de baixa velocidade. Ele funciona utilizando apenas dois fios para a comunicação: o SCL (Serial Clock) e o SDA (Serial Data). Para fazer essa comunicação, o Microcontrolador é declarado Master (Mestre), e os demais sensores como Slaves (Escravos). E isso é alcançável graças ao uso dos endereços, que são únicos. Como todos os TCS34725 têm o mesmo endereço, surge a ideia de conectar dois sensores I₂C na mesma placa Arduino Uno, utilizando o CI Demultiplexador CD4051.


Circuito

O circuito será o seguinte:


Código

O código será o seguinte:

//inclui as bibliotecas
#include <Wire.h>
#include "Adafruit_TCS34725.h"

//indica o endereço dos sensores
Adafruit_TCS34725 sensTCS1 = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_300MS, TCS34725_GAIN_1X);
Adafruit_TCS34725 sensTCS2 = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_300MS, TCS34725_GAIN_1X);

//Configura os pinos que irão se conectar ao Chip CD4051
const int pinAddA = 5;
const int pinAddB = 6;
const int pinAddC = 7;

void setup() {

  Serial.begin(9600);
  pinMode(pinAddA, OUTPUT); //define as portas como saída
  pinMode(pinAddB, OUTPUT);
  pinMode(pinAddC, OUTPUT);

  selSens1(); //chama a função para escolher o sensor 1 
    if (sensTCS1.begin()) {
    Serial.println("Sensor1 conectado"); // verifica se o sensor se conectou com sucesso
  } else { 
    Serial.println("Sensor1 com problema");
  } 

  selSens2(); //chama a função para escolher o sensor 2
    if (sensTCS2.begin()) {
    Serial.println("Sensor2 conectado"); // verifica se o sensor se conectou com sucesso
  } else { 
    Serial.println("Sensor2 com problema");
  }

}

void loop() {
  //declara os variáveis locais 
  uint16_t r1, g1, b1, c1, TemperaturaDaCor1, LUX1; 
  uint16_t r2, g2, b2, c2, TemperaturaDaCor2, LUX2;

  selSens1(); //chama a função para selecionar o sensor 1 
  sensTCS1.getRawData(&r1, &g1, &b1, &c1); //recebe os valores de R,G,B e luminosidade
  TemperaturaDaCor1 = sensTCS1.calculateColorTemperature(r1, g1, b1); //calcula a temperatura da cor 
  LUX1 = sensTCS1.calculateLux(r1, g1, b1);
  
    if (c1 < 5000) { //se a luminosidade for menor do que 5000 
    if (r1 > b1 && r1 > g1 && r1 > 100) { //compara os valores de R , G e B para mostrar qual cor está na frente do sensor
      Serial.println("Sens1 : Vermelho");
      delay(100);
    }
    else if (g1 > r1 && g1 > b1 && g1 > 100 ) { 
      Serial.println("Sens1 : Verde");
      delay(100);
    }
    else if (b1 > r1 && b1 > g1 && b1 > 100) { 
      Serial.println("Sens1 : Azul");
      delay(100);
    }
  }
 
  selSens2(); //chama a função para selecionar o sensor 2
  sensTCS2.getRawData(&r2, &g2, &b2, &c2); //recebe os valores de R,G,B e luminosidade
  TemperaturaDaCor2 = sensTCS1.calculateColorTemperature(r2, g2, b2);
  LUX2 = sensTCS2.calculateLux(r2, g2, b2);
  
    if (c2 < 5000) { //se a luminosidade for menor do que 5000 
    if (r2 > b2 && r2 > g2 && r2 > 100) { //compara os valores de R , G e B para mostrar qual cor está na frente do sensor
      Serial.println("Sens2 : Vermelho");
      delay(100);
    }
    else if (g2 > r2 && g2 > b2 && g2 > 100 ) { 
      Serial.println("Sens2 : Verde");
      delay(100);
    }
    else if (b2 > r2 && b2 > g2 && b2 > 100) { 
      Serial.println("Sens2 : Azul");
      delay(100);
    }
  }

}

void selSens1() { //função responsável por selecionar o sensor 1 
  digitalWrite(pinAddA, LOW);
  digitalWrite(pinAddB, LOW);
  digitalWrite(pinAddC, LOW);
}

void selSens2() { //função responsável por selecionar o sensor 2 
  digitalWrite(pinAddA, HIGH);
  digitalWrite(pinAddB, LOW);
  digitalWrite(pinAddC, LOW);
}

Explicação da Função

De acordo com os 3 pinos do chip que estão conectados, é possível selecionar qual sensor será lido naquele momento.


Sobre o Autor


Arthur Almeida

Estudante do Ensino médio , aficionado por criar novos projetos eletrônicos e automações, principalmente com o Arduino. No meu tempo livre eu gosto de pesquisar sobre novas tecnologias e tento criar projetos com elas.


Eletrogate

26 de setembro de 2023

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!