-
아두이노 라이브러리 | I2C 멀티플렉서 TCA9548A 모듈Technology/Arduino 2024. 11. 27. 22:10
1. I2C 멀티플렉서 TCA9548A 모듈
I2C 주소를 변경하는 기능을 지원하지 않는 센서를 사용하는 경우, 해당 모듈을 이용할 경우 동일한 I2C 주소를 가지고 있더라도 두 센서를 모두 사용할 수 있다.
2. 아두이노 라이브러리 추가
제조사 Adafruit에서 제공하는 TCA9548 라이브러리를 설치하여 사용하도록 하자.
아두이노 IDE 상단 툴바에서 '툴'을 선택한 뒤 '라이브러리 관리' 항목을 선택하자. 그러면 곧이어 '라이브러리 매니저' 창이 나타나는데, 해당 창 오른쪽 상단에 라이브러리 이름을 입력하면 아두이노 플랫폼에서 지원하는 라이브러리를 검색할 수 있다. 해당 칸에 'TCA9548'을 입력하자. 라이브러리를 검색하면 입력한 검색어와 관련된 라이브러리 목록이 나타난다. 'TCA9548' 최신 버전을 선택하여 설치하도록 하자. 아래링크로 접속하면 해당 라이브러리에 대한 설명과 사용 방법을 확인할 수 있다.
3. 예제
3.1. 회로 구성
3.2. 프로그램 작성
#include <TCA9548.h> #include <AS5600.h> #include <Servo.h> #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> AS5600 TopSensor; // channel 2 AS5600 BottomSensor; // channel 1 uint32_t lastTime = 0; PCA9546 MP(0x70); Servo TopESC; Servo BottomESC; int potValue = 1023; int TopAngle; int BottomAngle; int PWM = 1300; RF24 radio(8, 9); // CE, CSN const byte address[6] = "01203"; struct motionData { int X; int Y; int Z; int YAW; }; motionData input; void setup() { Serial.begin(115200); // Check multiplexer connection Wire.begin(); Wire.setClock(400000); if (MP.begin() == false) { Serial.println("Multiplexer error"); } MP.selectChannel(2); if (TopSensor.isConnected() == false) { Serial.println("TopSensor error"); } MP.selectChannel(1); if (BottomSensor.isConnected() == false) { Serial.println("BottomSensor error"); } TopSensor.begin(4); TopSensor.setDirection(AS5600_CLOCK_WISE); BottomSensor.begin(4); BottomSensor.setDirection(AS5600_CLOCK_WISE); TopESC.attach(5); BottomESC.attach(6); // Start RF communication radio.begin(); radio.openReadingPipe(1, address); radio.setPALevel(RF24_PA_MIN); radio.startListening(); // Calibrate BLDC motor Serial.println("Power the motor, and turn the knob to the minimum position when two bep alarms are on."); radio.startListening(); while (PWM != 800) { if (radio.available()) { radio.read(&PWM, sizeof(PWM)); } Serial.println(PWM); TopESC.writeMicroseconds(PWM); BottomESC.writeMicroseconds(PWM); delay(5); } radio.startListening(); if (radio.available()) { radio.read(&PWM, sizeof(PWM)); } TopESC.writeMicroseconds(PWM); BottomESC.writeMicroseconds(PWM); delay(5); Serial.println("********** Calibrated **********"); input.Z = 800; radio.startListening(); } void loop() { if (radio.available()) { radio.read(&input, sizeof(input)); delay(5); } Serial.println(input.Z); TopESC.writeMicroseconds(input.Z); BottomESC.writeMicroseconds(input.Z); /* MP.selectChannel(2); TopAngle = TopSensor.rawAngle(); if (TopAngle >= 850 && TopAngle <= 1250) { TopESC.writeMicroseconds(2000); } else if (TopAngle >= 2850 && TopAngle <= 3250) { TopESC.writeMicroseconds(900); } MP.selectChannel(1); BottomAngle = BottomSensor.rawAngle(); if (BottomAngle >= 950 && BottomAngle <= 1350) { BottomESC.writeMicroseconds(900); } else if (BottomAngle >= 3050 && BottomAngle <= 3150) { BottomESC.writeMicroseconds(2000); } delay(5); */ }
참고문헌
- RobTillaart. (2021). TCA9548. GitHub. https://github.com/RobTillaart/TCA9548. 2024.11.27.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 라이브러리 | 비접촉 자기 엔코더 센서 AS5600 모듈 (2) 2024.11.26 아두이노 | BLDC모터 (0) 2024.11.25 아두이노 라이브러리 | 서보모터 정밀 제어 (0) 2024.11.24 아두이노 프로젝트 | 휴대용 냉각기 (0) 2024.11.23 아두이노 | 펠티어 열전소자 (0) 2024.11.22