TDA 9548A multiplexer https://learn.adafruit.com/adafruit-tca ... t/overview
new Adafruit sensor https://learn.adafruit.com/adafruit-ltr ... or/arduino
old Waveshare sensor https://www.waveshare.com/uv-sensor-c.htm
Wiring Diagram:
https://drive.google.com/open?id=1KysMp ... drive_copy
The Arduino code:
Code: Select all
//program to use the tda9485 multiplexer to use 3 I2C UV sensors
#include "Adafruit_LTR390.h" //UV sensor Library
#include "Wire.h"
#define TCAADDR 0x70
Adafruit_LTR390 ltr_plastic = Adafruit_LTR390(); //The LTR 390 UV sensor variables
Adafruit_LTR390 ltr_paper = Adafruit_LTR390();
Adafruit_LTR390 ltr_mylar = Adafruit_LTR390();
void tcaselect(uint8_t i) {
if (i > 7) return;
Wire.beginTransmission(TCAADDR);
Wire.write(1 << i);
Wire.endTransmission();
}
void setup() {
Wire.begin();
Serial.begin(115200); //date transfer rate
Serial.println("\nTCAScanner ready!");
for (uint8_t t=0; t<8; t++) {
tcaselect(t);
Serial.print("TCA Port #"); Serial.println(t);
for (uint8_t addr = 0; addr<=127; addr++) {
if (addr == TCAADDR) continue;
Wire.beginTransmission(addr);
if (!Wire.endTransmission()) {
Serial.print("Found I2C 0x"); Serial.println(addr,HEX);
}
}
}
Serial.println("\ndone");
tcaselect(1);
if ( ! ltr_plastic.begin() ) { //if the sensor is not found, report couldn't find
Serial.println("Couldn't find LTR plastic sensor!");
}
tcaselect(2);
if ( ! ltr_paper.begin() ) { //if the sensor is not found, report couldn't find
Serial.println("Couldn't find LTR paper sensor!");
}
tcaselect(7);
if ( ! ltr_mylar.begin() ) { //if the sensor is not found, report couldn't find
Serial.println("Couldn't find LTR mylar sensor!");
}
tcaselect(2);
ltr_paper.setMode(LTR390_MODE_UVS); //sets the UV Sensor to UV mode
if (ltr_paper.getMode() == LTR390_MODE_ALS) {
Serial.println("LTR Paper In ALS mode");
} else {
Serial.println("LTR Paper In UVS mode");
}
tcaselect(1);
ltr_plastic.setMode(LTR390_MODE_UVS); //sets the UV Sensor to UV mode
if (ltr_plastic.getMode() == LTR390_MODE_ALS) {
Serial.println("LTR Plastic In ALS mode");
} else {
Serial.println("LTR Plastic In UVS mode");
}
tcaselect(7);
ltr_mylar.setMode(LTR390_MODE_UVS); //sets the UV Sensor to UV mode
if (ltr_mylar.getMode() == LTR390_MODE_ALS) {
Serial.println("LTR Mylar In ALS mode");
} else {
Serial.println("LTR Mylar In UVS mode");
}
tcaselect(2);
ltr_paper.setGain(LTR390_GAIN_3); // set gain for uv sensors
Serial.print("LTR Paper Gain : ");
switch (ltr_paper.getGain()) {
case LTR390_GAIN_1: Serial.println(1); break;
case LTR390_GAIN_3: Serial.println(3); break;
case LTR390_GAIN_6: Serial.println(6); break;
case LTR390_GAIN_9: Serial.println(9); break;
case LTR390_GAIN_18: Serial.println(18); break;
}
tcaselect(1);
ltr_plastic.setGain(LTR390_GAIN_3); // set gain for uv sensors
Serial.print("LTR Plastic Gain : ");
switch (ltr_plastic.getGain()) {
case LTR390_GAIN_1: Serial.println(1); break;
case LTR390_GAIN_3: Serial.println(3); break;
case LTR390_GAIN_6: Serial.println(6); break;
case LTR390_GAIN_9: Serial.println(9); break;
case LTR390_GAIN_18: Serial.println(18); break;
}
tcaselect(7);
ltr_mylar.setGain(LTR390_GAIN_3); // set gain for uv sensors
Serial.print("LTR Mylar Gain : ");
switch (ltr_mylar.getGain()) {
case LTR390_GAIN_1: Serial.println(1); break;
case LTR390_GAIN_3: Serial.println(3); break;
case LTR390_GAIN_6: Serial.println(6); break;
case LTR390_GAIN_9: Serial.println(9); break;
case LTR390_GAIN_18: Serial.println(18); break;
}
tcaselect(2);
ltr_paper.setResolution(LTR390_RESOLUTION_16BIT); //set selectivity for three sensors
Serial.print("LTR Paper Resolution : ");
switch (ltr_paper.getResolution()) {
case LTR390_RESOLUTION_13BIT: Serial.println(13); break;
case LTR390_RESOLUTION_16BIT: Serial.println(16); break;
case LTR390_RESOLUTION_17BIT: Serial.println(17); break;
case LTR390_RESOLUTION_18BIT: Serial.println(18); break;
case LTR390_RESOLUTION_19BIT: Serial.println(19); break;
case LTR390_RESOLUTION_20BIT: Serial.println(20); break;
}
tcaselect(1);
ltr_plastic.setResolution(LTR390_RESOLUTION_16BIT); //set selectivity for three sensors
Serial.print("LTR Plastic Resolution : ");
switch (ltr_plastic.getResolution()) {
case LTR390_RESOLUTION_13BIT: Serial.println(13); break;
case LTR390_RESOLUTION_16BIT: Serial.println(16); break;
case LTR390_RESOLUTION_17BIT: Serial.println(17); break;
case LTR390_RESOLUTION_18BIT: Serial.println(18); break;
case LTR390_RESOLUTION_19BIT: Serial.println(19); break;
case LTR390_RESOLUTION_20BIT: Serial.println(20); break;
}
tcaselect(7);
ltr_mylar.setResolution(LTR390_RESOLUTION_16BIT); //set selectivity for three sensors
Serial.print("LTR Mylar Resolution : ");
switch (ltr_mylar.getResolution()) {
case LTR390_RESOLUTION_13BIT: Serial.println(13); break;
case LTR390_RESOLUTION_16BIT: Serial.println(16); break;
case LTR390_RESOLUTION_17BIT: Serial.println(17); break;
case LTR390_RESOLUTION_18BIT: Serial.println(18); break;
case LTR390_RESOLUTION_19BIT: Serial.println(19); break;
case LTR390_RESOLUTION_20BIT: Serial.println(20); break;
}
tcaselect(2);
ltr_paper.setThresholds(100, 1000); //for all three sensors
ltr_paper.configInterrupt(true, LTR390_MODE_UVS);
tcaselect(1);
ltr_plastic.setThresholds(100, 1000); //for all three sensors
ltr_plastic.configInterrupt(true, LTR390_MODE_UVS);
tcaselect(7);
ltr_mylar.setThresholds(100, 1000); //for all three sensors
ltr_mylar.configInterrupt(true, LTR390_MODE_UVS);
}
void loop() {
tcaselect(1);
Serial.print("Plastic UV data: ");
Serial.print(ltr_plastic.readUVS());
tcaselect(2);
Serial.print(" Paper UV data: ");
Serial.print(ltr_paper.readUVS());
tcaselect(7);
Serial.print(" Mylar UV data: ");
Serial.println(ltr_mylar.readUVS());
delay(1000); //how long to wait for next data