Making H2S sensing device(using arduino MKR1000 & Blynk)

본 메이킹 포스트는 아두이노 MKR1000과 BLYNK 서비스를 이용하였으며 하드웨어 구성은 아래와 같습니다.

이번 메이킹은 쥬라기공원 자이로 스피어 완구를 개조하고 센서를 추가하여 핸드폰 앱으로 제어가 가능한 센싱 디바이스를 만드는 것이 목표였습니다. 이를 위해 wifi가 연결 가능한 아두이노 mkr1000과 H2S 센서를 활용하였고 기존 완구의 모터 구동 방향을 제어하기 위해 L298N 모터 드라이버를 사용하였습니다.

H2S 센서의 경우 기본적으로 시리얼 통신을 통해 사용되며 대부분의 아두이노의 경우 아래의 주소에 포스트 된 내용처럼 SoftwareSerial.h 라이브러리를 사용하나 MKR1000의 경우 위 라이브러리의 사용이 불가하며 직접 Serial 통신 instance를 정의하여 통신을 해야 합니다. 이에 대한 자세한 설명과 예제 코드는 아래의 주소에 설명되어 있습니다.

https://learn.adafruit.com/using-atsamd21-sercom-to-add-more-spi-i2c-serial-ports/creating-a-new-serial

또는 아래의 예제 코드를 참고하면 됩니다.

#include <Arduino.h>                              // required before wiring_private.h
#include <wiring_private.h>

// Serial2 pin and pad definitions (in Arduino files Variant.h & Variant.cpp)
#define PIN_SERIAL2_RX       (1ul)                // Pin description number for PIO_SERCOM on D1
#define PIN_SERIAL2_TX       (0ul)                // Pin description number for PIO_SERCOM on D0
#define PAD_SERIAL2_TX       (UART_TX_PAD_0)      // SERCOM pad 0 TX
#define PAD_SERIAL2_RX       (SERCOM_RX_PAD_1)    // SERCOM pad 1 RX

// Instantiate the Serial2 class
Uart Serial2(&sercom3, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX);

void setup()
{
  Serial2.begin(115200);          // Begin Serial2 
  pinPeripheral(0, PIO_SERCOM);   // Assign pins 0 & 1 SERCOM functionality
  pinPeripheral(1, PIO_SERCOM);
}

void loop()
{
  if (Serial2.available())        // Check if incoming data is available
  {
    byte byteRead = Serial2.read();    // Read the most recent byte
    Serial2.write(byteRead);           // Echo the byte back out on the serial port
  }
}

void SERCOM3_Handler()    // Interrupt handler for SERCOM3
{
  Serial2.IrqHandler();
}
// 출처: https://forum.arduino.cc/index.php?topic=393296.0

위의 방법으로 시리얼 통신에 성공하면 이후 몇가지 입력으로 센서가 값을 읽도록 할 수 있으며 이에 대한 자세한 내용은 위 센서 구매 링크의 technical documents 탭에서 자료를 다운로드한 후 4페이지를 참고하길 바랍니다. 문서에서는 tera-term을 사용한 방법을 다루고 있으나 시리얼 통신에 성공하면 tera-term을 활용한 것과 똑같인 작동하므로 입력값만 참고하여 사용하면 되겠습니다.(본 포스트에서는 ‘c’입력으로 continuous mode로 데이터를 얻었습니다.)

이렇게 시리얼 통신으로 데이터를 얻으면 특정 포맷으로 (센서 문서 참고) 값이 읽어지는데 이 중 두번째 값이 ppb단위로 측정한 H2S 농도이고 문자열 배열을 사용하여 이 값만 따로 분리한 후 atol()함수로 정수형으로 바꿔주었습니다.(포스트 끝에 첨부된 코드 참고)

L298N을 사용하여 DC 모터의 방향을 제어하면 본 포스트에서 사용한 완구에서는 직진 또는 반시계방향의 회전 두가지가 가능하며 L298N 드라이버의 자세한 사용법은 아래의 링크에 설명되어 있습니다. 참고로 mkr의 5V 핀에 제어핀을, 건전지의 +,-극을 전력핀에 연결해야 정상적으로 작동합니다.

http://pds25.egloos.com/pds/201702/03/38/L298N-MOTOR-DRIVER.pdf

모바일 앱을 이용하여 제어하기 위해 blynk를 사용하였고 자세한 사용방법은 아래의 blynk 홈페이지를 참고하면 됩니다.

https://blynk.io

위의 사항에 대해 이해하면 충분히 스스로 회로를 구성하고 작동시킬 수 있으므로 나머지 사항에 대해서는 생략하도록 하겠습니다.

아래는 실제 구동영상입니다.

 https://www.youtube.com/watch?v=JKnULUWNI3k&feature=youtu.be 

아래링크의 파일은 위의 내용을 활용하여 최종적으로 작성한 코드이며 일부 라이브러리는 직접 아두이노 IDE에 설치해야 될 수도 있습니다.

https://postechackr-my.sharepoint.com/:u:/g/personal/juhpark_postech_ac_kr/EQHV_OubbL9CmKgZx4nxn_EB3OCbCNsz85WLzcfpKbthoA?e=OKKVUH

댓글 남기기