Rasberry Pi와 Arduino의 I2C 연결(IoT에 필요한 아날로그 전압 측정)

소개



센서의 값을 얻기 위해 필수적인 아날로그 전압 측정은 Rasberry Pi를 사용하여 수행됩니다. 이것이 가능하게 되면, RasberryPi가 다양한 아날로그계의 센서(온도 센서나 초음파에 의한 거리 센서 등)의 값을 인식할 수 있게 되므로, 비약적으로 활용의 폭이 넓어집니다. 단지, 그것을위한 몇 가지 방법이 있습니다. 전용의 IC(AD 컨버터, MCP3208나 MCP3008)를 사용하는 수법이 있어, 아마 그것이 가장 빠르다고 생각됩니다만, 향후의 확장성을 생각해 Arduino UNO(이것도 호환 보드라면, 1000엔 이하 에서 얻을 수있는 것도있는 것 같습니다)를 사용하는 방법도 인기있는 것 같습니다. 벌써 많은 훌륭한 해설(맨 아래의 참고에 기재)이 나와 있고, 굳이 기사로 할 필요도 없을지도 모릅니다만, 실제로 해 보았으므로, 대충 하는 것을 이해하고 싶은 방향으로, 간단하게 한 일을 소개합니다. 이것을 봐 주시면, 거기까지 힘든 작업이 아닌 것은 이해하실 수 있지 않을까 생각합니다. 덧붙여 이하의 내용과 실천은 자기 책임으로 부탁드리겠습니다.

Arduino 사전 준비



우선 Arduino측에서 아날로그 전압의 값을 읽을 수 있도록 세팅을 합니다. 이번에는 A0과 GND(접지) 사이의 전압값을 얻기로 하고 싶습니다. 라즈파이측에서 데이터가 요구되었을 때, analogRead(A0)로 전압값을 꺼내, Wire.write로 I2C 통신을 시켜 Rasberry Pi쪽으로 읽은 데이터를 보내도록 합니다.
다음 프로그램을 Arduino IDE에서 만들고 컴파일 및 보드에 씁니다.
#include <Wire.h> 

void setup() { 
    // I2Cバスにアドレス8を使うということで、設定します。 
    Wire.begin(0x8); 

    // データが要求された時にsendReading関数が呼ばれるように設定します。 
    Wire.onRequest(sendReading); 
} 

// A0ピンの値を読み、4分の1にしてI2Cバスに書き込みます 
void sendReading() { 
    int reading = analogRead(A0); 
    Wire.write(reading/4); 
} 

void loop() { 
    delay(100); 
}

라즈파이, Arduino 및 전자 회로 간의 연결



다음으로, 라즈파이, ArduinoUNO, 그리고 전자 회로의 접속을 실시합니다. 보드의 핀 할당을 잘 확인하면서 아래와 같이 결선을 하십시오.



Raspberry Pi 설정 (OS 설정)



기본적으로 라즈파이는 I2C 통신이 가능하지 않으므로 설정해야 합니다. Raspberry Pi OS를 시작하고 시작 메뉴에서 설정 -> Raspberry Pi 설정을 선택합니다. 그러면, 설정 화면이 나오므로, 이 화면의 항목의 I2C의 곳을 「유효」로 합니다.

Raspberry Pi의 파이썬 코드 (터미널 조작)



드디어 Rasberry Pi 측에서 I2C 통신을 사용하여 전압을 취득하는 명령을 내려갑니다. 터미널을 시작하고 python3을 시작하고 다음 코드를 입력해보십시오.
% python3

>> from smbus import SMBus
>> arduino = 0x8
>> i2cbus = SMBus(1)
>> i2cbus.read_byte(arduino)

그렇게 하면, 전압 상응의 값이 나온다고 생각합니다. 가변 저항으로 노브를 돌려 저항 값을 바꾸면 값의 변화도 보인다고 생각합니다.
①A0-GND간의 실제 전압값과 ②여기서 표시되는 값의 관계는 비례 관계에 있으므로 오실로스코프 등으로 그 계수를 내면 저항에 걸려 있는 전압값을 라즈파이만으로 인식할 수 있다. 그렇게 된다는 것입니다.

연결 이미지



별로 깨끗한 것은 아니지만, 일단 외형은 이런 느낌이라는 것으로 참고로서 이미지를 얹어 둡니다.



참고 정보

좋은 웹페이지 즐겨찾기