지금까지 7종류의 흙에 대해서 습도센서에 대한 calibration을 해보았습니다.

각각의 흙에 대해서 상대습도, x(%) 대비 센서값(y)을 나타내는 식을 구하였고 그 결과들은 아래와 같습니다.

 

휴가토: y=13.62*x +702.01

녹소토: y = 17.68*x + 1065.60

펄라이트: y = 3.91*x + 803.11

코크피트: y = 6.66*x + 955.49

동생사: y = 1045.70/(1 + exp(-0.18*(x-26.52)) )+799.78

피트모스: y = 6.19 * x +1010.46

적옥토: y = 0.48*x^2 -2.25*x+748.72

 

이제 각 식을 그래프로 그려보면 아래와 같습니다.

 

일단 눈에 띄는 것은 동생사는 특이하게 S자형으로 보인다는 것이고, 피트모스와 코크피트는 비슷한 경향을 보입니다. 이 두 흙은 생김새도 비슷합니다.

 

그 다음 적옥토는 2차곡선 모양으로 높은 습도에서 값이 빠르게 올라갑니다. 그 외 나머지는 직선으로 변화합니다. 가장 값이 큰 것은 녹소토, 가장 낮은 것은 펄라이트 입니다.

 

그럼 이 다음에는 2가지의 흙이 섞여 있을 때는 어떻게 되는지 보도록 하겠습니다.

 

 

오늘은 휴가토를 이용해서 센서 calibration을 해보았습니다.

먼저 아래는 휴가토 사진입니다. 흙이라기보다 작은 돌멩이처럼 보입니다.

 

다음은 습도의 변화에 따른 센서값입니다. 휴가토의 질량은 약 175g이었습니다.

마찬가지로 선형으로 fitting한 결과는 아래와 같습니다.

Fitting 결과는,

 

x는 상대 습도 (%), y 는 센서의 값입니다.

이 식을 뒤집으면,

즉, 센서값 y를 알면 상대습도 x를 알수 있습니다.

 

 

지난 글에서 개발보드 중 페더가 있다고 말씀드렸는데, 이번 글에서는 페더 보드 중에서 하나를 골라 좀 더 자세히 보겠습니다.

 

이번 글에서 볼 보드는 Adafruit Feather nRF52840 Sense입니다.

https://www.adafruit.com/product/4516

이 보드는 Nordic사의 nRF52840 칩을 기반으로 그 외에 각종 센서들, 전원장치, usb 시리얼 통신모듈 등을 탑재하고 있는 보드입니다. 보드를 자세히 보면 아래와 같습니다.

 

오른쪽의 큰 칩이 nRF52840이며, 왼쪽 가장자리에 마이크로 usb 포트, 위 가장자리에 LiPo 배터리 커넥터가 있습니다. 전원공급은 usb 케이블로 하거나 혹은 LiPo 배터리로 하거나 둘 중의 하나의 방식으로 가능하며, 케이블과 배터리 동시에 연결되어 있어도 동작합니다. 그리고 보드의 중간에 각종 센서 모듈들이 배치된것을 볼수 있습니다.

 

그럼 이 보드의 스펙을 한번 보겠습니다.

  • nRF52840은 ARM의 cortex M4 chip을 nordic에서 라이선스 받아 자체적으로 생산해서 판매하는 MCU입니다. 64 MHz의 클럭속도, 1MB의 플래시 메모리와 256kB의 RAM을 가지고 있습니다.
  • usb 시리얼 통신이 가능하여, 데스크탑 컴퓨터에 usb 케이블로 연결하여 동작 코드를 업로드할 수 있습니다. 여기에 arduino IDE를 사용해서 코딩하고 업로드를 해줄수 있습니다. 또한 citcuitpython을 이용해서 python으로도 작성이 가능합니다.
  • nRF52840은 BLE (Bluetooth light energy)기능이 있어 블루투스 무선 통신이 가능합니다.
  • 21개의 디지털 입출력핀, 6개의 12bit ADC(analogue-to-digital converter), 12채널의 PWM(pulse width modulation) 출력이 가능합니다.
  • 다른 장치와의 통신규격으로 I2C, I2S, SPI, UART 등이 지원됩니다.
  • 보드에 LED가 1개가 있어 빛을 낼수 있습니다.
  • 크기는 가로 51mm, 세로 23mm, 높이 7.2mm입니다.
  • 탑재된 센서는 다음과 같습니다.
  • LSM6DS3TR + LIS3MDL: 3축 가속도, 자이로 + 자기장 감지
  • APDS9960: 근접센서, 조도센서, 색깔감지기, 동작감지기
  • PDM: 마이크(소리센서)
  • SHT: 습도센서
  • BMP280: 온도계, 대기압/고도 감지기

 

위의 스펙을 보시면, 주변 환경의 변화를 감지하여 usb케이블을 통해서 혹은 블루투스를 통해서 무선으로 감지된 정보를 전송할 수 있고, 배터리를 이용해서 원격으로 동작이 가능합니다.

 

Adafruit사의 한가지 특징은 자기네가 개발한 제품의 설계도도 공개한다는 점입니다. 아래는 해당제품의 회로도와 PCB artwork입니다. https://learn.adafruit.com/adafruit-feather-sense/downloads 각종 센서들의 사양서들도 있습니다.

 
 

 

 

이 제품의 사용방법은 아래의 사이트에 있습니다. 개별 핀설명, 전원공급 방법, 예제 코드, 설계도 등 모든 정보가 있습니다.

https://learn.adafruit.com/adafruit-feather-sense

 

 

 

지난 시간에 이어 오늘도 Adafruit에 파는 물건 중 대표 상품인 개발보드에 대해 말씀드리겠습니다.

 

개발보드란 MCU(micro controller unit)를 포함하는 크기가 작은 PCB라고 할수 있는데, 이 보드에는 MCU뿐만 아니라 전원장치, USB 시리얼 통신 장치 등이 포함되어 있습니다. USB케이블이나 LiPo 배터리로 전원을 공급하고, USB포트를 통해서 동작 코드를 업로드 해 줄 수 있습니다.

 

보통 개발보드를 사용하는 목적은, DIY(do-it-yourself) 전자제품을 만드는 분들이 센서, 엑츄에이터, 디스플레이 등을 연결하여 사용자가 원하는 특정한 목적의 기능을 수행하도록 만드는데 사용하는 일종의 범용 정보처리 회로라고 볼수 있습니다. 범용이므로 당연히 사용자가 코드를 짜서 usb케이블을 통해서 MCU에 업로드를 해줄수 있습니다. 사용하는 언어는 주로 C언어이고 아래 사진의 circuitpython처럼 python인 경우도 있습니다. 아두이노 혹은 아두이노 호환보드의 경우 arduino IDE라는 개발 프로그램을 컴퓨터에 설치한 후, C언어로 짠 코드를 usb 케이블을 통해서 개발보드에 업로드하면 됩니다.

 

예를들어 아래의 사진처럼 모터를 돌리게 할 수 있습니다.

 

아두이노 개발보드로 할 수있는 것들이 매우 많으니 한번 여기를 둘러보시길 권합니다. https://learn.adafruit.com/search?q=ard

 

아두이노에 대한 소개페이지(https://learn.adafruit.com/ladyadas-learn-arduino-lesson-number-0)

도 있는데 영어로 되어있어서 여기보다는 다른 분들이 쓰신 아두이노 소개 블로그나 동영상을 보시는것도 좋겠습니다.

 

상점 홈페이지에서 shop을 눌러보면 카테고리별로 제품이 소개되는데, 아두이노(Arduino)와 패더(Feather)가 개발 보드들이며, 라즈베리 파이(Raspberry Pi)는 개발보드라기 보다는 소형 컴퓨터에 가까운 물건입니다.

 

먼저 아두이노는 Adafruit에서 개발한 것이 아니라 아두이노 개발사(https://www.arduino.cc/)에서 만든것이고, 예전에는 Adafruit에서 아두이노 개발보드를 판매하기도 하였으나 현재는 아래와 같은 아두이노 호환보드 몇 종류만 팔고 있습니다.

 

그 다음은 페더(Feather)라는 다른 종류의 개발보드를 팔고 있습니다. 페더는 Adafruit에서 직접 개발해서 판매하는 개발보드의 브랜드명입니다. STM32나 ESP32, NRF 등의 MCU를 탑재하고 있고, Arduino IDE 혹은 circuitpython으로 코딩하여 사용할 수 있습니다.

 

한가지 예를 들면 아래의 사진과 같습니다.

 

제목에 적혀있다시피 ESP32 MCU를 탑재하고 있고, 8 메가의 비휘발성 메모리(Flash), 2 메가의 휘발성 메모리(PSRAM)를 탑재하고 있습니다. ESP32는 Espressif사에서 개발한 MCU로 블루투스와 와이파이등 무선 통신기능이 탑재되어 있습니다. 또한 사진에서 왼쪽에 마이크로 usb 핀 소켓이있어 usb 케이블을 꽂을수 있게 되어 있고(전원공급 및 코드 업로딩), 위쪽에는 LiPo 배터리를 연결할 수 있는 커넥터가 있습니다. 그 외에 위아래의 가장자리에는 MCU와 연결되는 핀들이 있어, 각종 센서 등을 연결해줄 수 있습니다. (헤더 소켓이나 혹은 전선과의 납땜이 필요합니다.)

 

마지막으로 라즈페리 파이가 있습니다. 이 종류는 개발보드라기 보다 소형컴퓨터입니다. 왜냐하면 탑재된 정보처리장치가 MCU가 아닌 CPU (central processing unit)이기 때문입니다. MCU와 CPU의 차이는 쉽게말하면 스펙의 차이입니다. 동작 클럭, 메모리 사이즈 등의 하드웨어의 성능이 MCU에 비해 훨씬 좋기 때문에 두 종류 사이의 구분이 생깁니다. 라즈베리는 신용카드보다 약간 더 큰 크기의 보드로 모니터, 키보드, 마우스 등을 뺀 모든 것이 하나의 보드에 있다고 보면 됩니다. 예를들면 최신 버전인 라즈베리 파이 5는 아래의 사진과 같습니다.

 

사진을 보면 아래쪽 가장자리에서 왼쪽에서부터 전원을 위한 마이크로 usb 케이블 포트가 있고, 그 오른쪽에 HDMI 디스플레이 포트 2개, 그 오른쪽에 카메라는 위한 슬롯이 2개 있습니다. 오른쪽 가장자리에는 usb 포트 4개를 위한 소켓2개와 네트워크 케이블 커낵터가 있습니다. 위쪽 헤드들은 디지털 입출력을 위한 핀들입니다.

 

이 제품을 컴퓨터로 사용하려면 마이크로 usb 포트에 usb 케이블을 연결하고, usb포트에 키보드와 마우스를, 그리고 디스플레이의 hdmi 케이블을 hdmi 커넥터에 연결하면 됩니다. 보드에 와이파이와 블루투스 통신을 담당하는 칩이 내장되어 있어 무선 통신도 가능합니다. 즉 아래의 사진과 같습니다

 

 

 

아래처럼 아예 키트로 팔기도 합니다. (디스플레이와 라즈베리 파이 보드 별도 구매)

https://www.adafruit.com/product/5824

 

 

그래서 라즈베리 파이는 크기가 작은 컴퓨터로 쓸수 있습니다. 참고로 라즈페리 파이에는 마인크래프트 파이버전(minecraft pi edition, minecraft 교육용 버전)와 매스매티카(mathematica)를 무료로 쓸수 있습니다.

 

 

 

마찬가지로 녹소토에 대해서도 센서 캘리브레이션을 해봤습니다.

아래는 녹소토 사진입니다. 녹소토의 경우 물을 뿌렸을 경우, 물을 상당히 잘 흡수하는 것을 볼수 있습니다. 습도가 80%에 가까워도 화분 밑으로 물이 새어 나오지 않는 것을 볼수 있습니다.

아래는 흙의 질량에 대비한 투입한 물의 상대적 비율과 센서 값 사이의 상관 관계입니다. 녹소토의 경우 동일 습도에서 피트모스 등에 비해 데이터의 분산이 비교적 적은 것을 볼수 있습니다. 흙의 질량은 약 185g입니다.

 

역시 위의 데이터를 linear fit하면 아래의 결과가 나옵니다.

Fitting결과는,

이며, x는 습도 (%), y는 센서의 값입니다. x와 y를 뒤집으면,

위와 같습니다.

 

 

혹시 전자회로 DIY (do-it-yourself)에 관심이 있으신가요? 그렇다면 충전식 배터리로 동작하는 것을 만들때가 많은데, 그런 프로젝트에는 LiPo (리튬폴리머 배터리) 배터리가 하나씩 들어갑니다. 그렇다면 배터리 충전기가 필요합니다. 그래서 아래 LiPo 배터리 충전기를 소개합니다.

 

PowerBoost 1000 Charger - Rechargeable 5V Lipo USB Boost @ 1A

https://www.adafruit.com/product/2465

 

위 사진 왼쪽에는 micro-usb 커넥터가 있어서 어뎁터에 micro-usb 5 핀 케이블을 연결하고 오른쪽의 검은색 커넥터에는 LiPo 배터리의 커넥터가 연결됩니다. 위의 제품에는 켜고끄는 스위치가 없어서 그런 스위치를 달고 LiPo 배터리에 연결하는 것은 아래의 튜토리얼에 나와 있습니다.

https://learn.adafruit.com/adafruit-powerboost-1000c-load-share-usb-charge-boost/assembly

 

배터리만 연결된 상태에서는 배터리 자체의 3.7V를 5.2V로 승압해서 회로에 제공하며, 배터리와 micro-usb가 동시에 연결되어 있으면, mico-usb(전압 5V)에서 제공되는 전력이 회로에 전력을 공급함과 동시에 배터리 충전도 동시에 합니다. 그래서 회로가 동작하면서 동시에 배터리 충전도 가능합니다.

 

주의할 점은 이 제품은 LiPo 배터리만 사용가능하고, 다른 종류의 배터리를 지원되지 않는다는 것과, 최대 공급 가능 전류가 1A까지라는 점입니다. 그래서 작은 프로젝트의 전원 공급용으로 적당합니다.

 

 

처음 습도 센서를 봤을 때, 이 센서가 식물관리에 도움이 되겠다 싶어서 구매해서 써보고 있습니다. 그런데 한가지 든 의문은 그럼 센서의 값이 무엇을 나타내는가 하는 것입니다. 물론 화분안애 습도의 양에 따라서 센서 값이 오르기도 내려가기도 하겠지만, 그 숫자 자체가 뭘 의미하는지 알 수가 없습니다.

 

그래서 센서의 값을 교정해서, 센서의 값이 흙안의 수분의 양을 나타내도록 하고 싶었습니다. 그런데 문제는 원예용 용토(상토 등등)이 몇종류의 흙들의 혼합물로 구성되어 있어서, 제품이 달라지면 센서값의 의미가 달라진다는데 있습니다. 그렇다고, 제품을 일일이 사다가 교정하기는 원예용 흙 제품의 종류가 너무 많아서 교정해보는 것은 불가능합니다.

 

그래서 생각한게, 용토의 성분을 구성하는 대표적인 흙의 종류가 있어서(예를 들어서 적옥토, 코크피트 등등) 일단 각 종류의 흙에 대해서 교정을 해두고, 그 교정 결과를 이용해서 혼합된 흙의 상대습도를 예측해 보는 것입니다. 그러니까, 적옥토의 교정결과가 있고, 코크피트의 교정결과가 있다면, 그 두 종류의 흙이 절반씩 혼합된 흙은 각각의 교정결과를 절반씩 비중으로 두고 합산한다면, 혼합된 흙의 교정결과와 일치하는지 보는 것입니다.

 

만약 이 방법이 통한다면, 개별적인 원예용 용토를 교정할 필요없이, 각 흙의 교정 결과를 이용해서 혼합비율 대로 합산하면 어떨까 하는 것입니다. 그래서 제가 각 흙 별로 교정결과를 측정하는 이유입니다.

만약 이 방법이 맞다면, 용토를 사다가 측정한 결과와 합산한 계산 결과와 맞는지 확인해 볼 예정입니다.

 

 

지난번에 소개한 adafruit에서 판매하고 제가 직접 사용해본 부품들에 대해서 한개씩 리뷰를 해보려 합니다. (저는 adafruit와 아무 관련이 없으며 헙찬받은바도 없습니다.) 오늘은 그 첫번째로 Neopixel에 대해서 써보겠습니다.

 

Neopixel은 adafruit에서 판매하는 일종의 LED (light emitting diode: 발광 다이오드)인데 이 제품의 특징은 여러개를 한줄로 연결해서 프로그램이 가능하다는 것입니다. 아래에 제품의 사진이 있습니다.

네오필셀 사진 (상), 확대 정면 사진 (하)

 

확대 뒷면 사진 (상), 여러개의 led들이 연결된 strip형태 제품 (하)

 

 

제품 판매 주소는 아래에 있습니다.

NeoPixel 5050 RGB LED with Integrated Driver Chip - 10 Pack

Make your own smart LED arrangement with the same integrated LED that is used in our NeoPixel strip and pixels. This tiny 5050 (5mm x 5mm) RGB LED is fairly easy to solder and is the most ...

www.adafruit.com

 

위줄의 아래 사진을 보면 하얀 케이스안에 뭔가 조그만 사각형 칩이 있고, 아래줄 위의 케이스 뒷면 사진을 보면 전극이 4개가 위 아래 2개씩 있는 것을 볼수 있습니다. 바로 이 사각형 칩이 빛을 내는 부분이고, 이 안에 빨강, 초록, 파랑색 LED가 모두 있어서, 각 LED의 밝기를 조절해서 다양한 색상을 구현합니다. 또한 전극은 4개 중 단 3개만 사용하며, 5V전원, gnd, 그리고 DIN (data in)이 있습니다.

 

다수의 neopixel을 구동하기 위해서 단 3개의 선만 사용합니다. 그럼 전원(5V, GND)를 제외하고 어떻게 단 한개의 선(DIN)으로 개별 led의 색깔을 조절할까요? 그것은 바로 led들을 microcontroller(이하 mcu)에 연결해서 사용하기 때문에 가능합니다. (아래의 그림) 즉, 아두이노에 있는 mcu가 DIN을 이용해서 각 led를 호출하고, 각각의 led에 어떤 색깔을 표시할지를 지시해 주기 때문입니다. 물론, 동시에 여러개를 지시할 수 없으니까 순서대로 1개씩 호출하지만 각각을 호출하는 속도가 빠르다보니 동시에 여러개를 콘트롤하는 것처럼 느껴집니다. 즉 아래의 그림처럼 연결하면 됩니다. (출처: https://learn.adafruit.com/adafruit-neopixel-uberguide/basic-connections)

 
 LED는 전력소모가 크므로 아두이노 보드에서 공급하는 전력으로는 단 몇개만 구동이 가능하며, 수십개의 LED를 구동하려면 별도의 전원(그림에서 아래의 5V 전원선)이 별도로 필요합니다.

 

 

개별LED를 구매할 수도 있고, 아래의 사진처럼 길다란 줄의 형태로 구매할 수 도 있습니다.

https://www.adafruit.com/product/1461

Adafruit NeoPixel Digital RGB LED Strip - Black 60 LED

You thought it couldn't get better than our world-famous 32-LED-per-meter Digital LED strip but we will prove you wrong! You wanted twice the LEDs? We got it (well, it's 1.875 times ...

www.adafruit.com

 

실제로 구동해보면 LED의 밝기가 상당해서 최대의 밝기로 켜면 눈이 아플정로로 휘도가 높습니다. 이 제품의 또다른 특징으로는 한번 색깔을 지정해 두면 추가적인 명령없이 계속 같은 색깔을 유지한다는 점입니다.

 

아래에 adafruit에서 제공하는 튜토리얼이 있습니다. (연결방법, 라이브러리, 예제 코드 등이 있습니다.)

https://learn.adafruit.com/adafruit-neopixel-uberguide/the-magic-of-neopixels

 
Adafruit NeoPixel Überguide

NeoPixels are “intelligent” full-color RGB LEDs that can be controlled and chained from a single microcontroller pin. This guide presents an overview of NeoPixel products, along with tips for building and powering projects of all shapes and sizes.

learn.adafruit.com

아두이노를 가지고 계시다면 한번 구매해서 사용해 보세요. 장식용으로 그럴듯한 물건을 만들수 있습니다.

 

 

 

+ Recent posts