'sparkfun'에 해당되는 글 4건

  1. 2018.07.31 Hardware | MAX31855 + K-type 온도센서 조합 2
  2. 2017.11.22 Hardware | Safecast bGeigie Nano 를 조립해 보자 - 2
  3. 2017.10.01 Hardware | Rotary Encoder 를 사용해 보자
  4. 2017.08.02 Hardware | Soil Moisture Sensor 구동해 보기

Hardware | MAX31855 + K-type 온도센서 조합

|

1. 또 온도센서야?


지금까지 시험해본 온도센서들 입니다. 5개나 있네요.


* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

http://chocoball.tistory.com/entry/HardwareArduinoMLX90614


* Hardware | Arduino BMP280 고도/온도/기압 센서

http://chocoball.tistory.com/entry/HardwareArduinoBMP280


* Hardware | BME280 sensor

http://chocoball.tistory.com/entry/HardwareBME280


* Hardware | DS18B20 온도센서

http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor



* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

http://chocoball.tistory.com/entry/HardwareArduinoMLX90614


* Hardware | Arduino BMP280 고도/온도/기압 센서

- http://chocoball.tistory.com/entry/HardwareArduinoBMP280


* Hardware | BME280 sensor

- http://chocoball.tistory.com/entry/HardwareBME280



출처: http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor [초코볼의 inside Tech]


* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

http://chocoball.tistory.com/entry/HardwareArduinoMLX90614


* Hardware | Arduino BMP280 고도/온도/기압 센서

- http://chocoball.tistory.com/entry/HardwareArduinoBMP280


* Hardware | BME280 sensor

- http://chocoball.tistory.com/entry/HardwareBME280



출처: http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor [초코볼의 inside Tech]

* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

http://chocoball.tistory.com/entry/HardwareArduinoMLX90614


* Hardware | Arduino BMP280 고도/온도/기압 센서

- http://chocoball.tistory.com/entry/HardwareArduinoBMP280


* Hardware | BME280 sensor

- http://chocoball.tistory.com/entry/HardwareBME280



출처: http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor [초코볼의 inside Tech]


* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

http://chocoball.tistory.com/entry/HardwareArduinoMLX90614


* Hardware | Arduino BMP280 고도/온도/기압 센서

- http://chocoball.tistory.com/entry/HardwareArduinoBMP280


* Hardware | BME280 sensor

- http://chocoball.tistory.com/entry/HardwareBME280



출처: http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor [초코볼의 inside Tech]

네 그렇습니다.

온도 센서에는 기존에 확인했던 위의 센서들 말고, 준비하고 있는게 아래 3가지가 있습니다.


- K-type

- PT100 / PT100

- Cu50


이 포스트에서는 K-Type 에 대해 알아보려 합니다.





2. K-type


이번에는 K-type 온도센서 이므로, 해당의 제품을 구매합니다.


* Thermocouple K-Type Thermocouple Thermometer Probe WRNT-03 200mm*1000mm

https://www.aliexpress.com/item/Thermocouple-K-Type-Thermocouple-Thermometer-Probe-WRNT-03-200mm-1000mm/32615649856.html



일반적으로 Thermocouple K-type 은 선이 두가닥인데, 도착한 놈은 세가닥 입니다.

거기에 더해서 "Cu50" 이라는 라벨도 붙어 있습니다...


분명 난, K-Type 을 보고 주문한건데 말입니다.

사양서도 확인해 보면 WRNT-03 이라서 Probe type 의 thermocouple 이라고 생각했습니다만, 도착한건 그냥 Cu50 인듯 합니다..



세가닥 단자들 사이는 55 Ohm / 0 Ohm 의 차이를 보입니다.

100 Ohm 정도면 PT100 인데, 55 Ohm 이면 좀 애매하네요.



확실히 잘 사용되지 않는 Cu50 이 맞는 듯 합니다.

이놈은 이놈 나름대로 사용될 수 있는 방법을 찾아봐야겠습니다.



음?

테스터기로 측정하고 있을 때 눈에 들어오는 테스터용 온도 probe !!!



위 사진의 오른쪽 다발로 보이는 것이 테스터용 온도 센서 입니다.



혹시나? 하고 메뉴얼을 찾아 보니 "K-type" 이라고 적혀 있네요!



우연히 K-Type 온도센서를 구할 수 있게 되었습니다.

역시 K-Type 은 단자가 2개인게 확실합니다.





3. MAX31855


보통 온도 센서들은 아날로그 값으로 표현하므로, digital 로 변환해주는 converter 가 필요합니다.

K-Type 온도센서용으로는 MAX31855 라고 하는군요.


Arduino 용 K-Type 모듈인 MAX31855 를 구입합니다.


* MAX31855 MAX6675 SPI Type K Thermocouple Temperature Sensor Board Module For Arduino

https://ko.aliexpress.com/item/MAX31855-K-Type-Thermocouple-Breakout-Board-Temperature-200C-to-1350-Celsius-for-Arduino/32746337946.html



아래는 도착 사진 입니다.



친절하게 알아서 사용하라는 중국 생산자의 배려 입니다.



기록을 위해 뒷면도 찰칵.






4. sketch


Arduino IDE 에서 Library Manger 를 열고 max 라는 키워드로 검색하면, MAX31855 가 나옵니다.

인스톨 하세요.



패키지 인스톨 후, "File > Examples > Adafruit MAX31855 library > serialthermocouple" 을 선택합니다.



Sketch 는 다음과 같아요.


/*************************************************** 
  This is an example for the Adafruit Thermocouple Sensor w/MAX31855K

  Designed specifically to work with the Adafruit Thermocouple Sensor
  ----> https://www.adafruit.com/products/269

  These displays use SPI to communicate, 3 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include "SPI.h"
#include "Adafruit_MAX31855.h"

// Default connection is using software SPI, but comment and uncomment one of
// the two examples below to switch between software SPI and hardware SPI:

// Example creating a thermocouple instance with software SPI on any three
// digital IO pins.
#define MAXDO   3
#define MAXCS   4
#define MAXCLK  5

// initialize the Thermocouple
Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);

// Example creating a thermocouple instance with hardware SPI
// on a given CS pin.
//#define MAXCS   10
//Adafruit_MAX31855 thermocouple(MAXCS);

void setup() {
  while (!Serial); // wait for Serial on Leonardo/Zero, etc
  
  Serial.begin(9600);
  
  Serial.println("MAX31855 test");
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {
  // basic readout test, just print the current temp
   Serial.print("Internal Temp = ");
   Serial.println(thermocouple.readInternal());

   double c = thermocouple.readCelsius();
   if (isnan(c)) {
     Serial.println("Something wrong with thermocouple!");
   } else {
     Serial.print("C = "); 
     Serial.println(c);
   }
   //Serial.print("F = ");
   //Serial.println(thermocouple.readFarenheit());
 
   delay(1000);
}



음? 정상적으로 동작하지 않는군요.

혹시 몰라 MAX31855 의 전 버전인 MAX6675 라이브러리를 설치하고 sketch 를 실행시켜 봅니다.



음... 안되는군요.

뭐가 문제일까요?





5. 중국 공장의 나쁜 버릇


폭풍 검색을 해도 문제를 해결한 케이스를 볼 수 없다가,

우연히 Youtube 의 댓글에서 힌트를 찾았습니다.


MAX6675 와 MAX31855 breakout 보드의 차이점은 1번과 2번 pin 이 연결되어 있느냐 없느냐의 차이라고 합니다.



제가 구입한 MAX31855 breakout 보드의 1번과 2번을 보니 붙어 있네요.



위는 MAX6675 의 breakout board 의 layout 입니다.

1번과 2번이 연결되어 있네요.



MAX31855 의 breakout board 의 1번 / 2번 pin 은 서로 붙어있지 않습니다.



Adafruit 의 정식 판매용 MAX31855 breakout board 도 1번 / 2번 pin 도 떨어져 있습니다.



위의 사진은 중국 AliExpress 제품의 소개 사진입니다.

Chip 은 MAX31855 지만, breakout board 는 전압 regulator 도 없는 MAX6675 용 breakout board 와 비슷합니다.


즉, 중국 업자들은 기존 MAX6675 breakout board 에,

스펙이 비슷한 MAX31855 chip 을 얹은게 아닌가 하는게 internet 친구들의 예상입니다.


MAX31855 는 minus 온도까지 측정할 수 있는 등 upgrade 되었으나,

MAX6675 breakout board 를 사용하면서 기능 확장도 안되고, pinout spec. 에 맞지 않게 된거죠.


쉽게 말하면,

upgrade 제품이니까 맞겠지 하고 MAX6675 breakout board 에 MAX31855 를 얹으면서 정상작동하지 않는 것이였습니다.

(이거 팔아도 되는거야? 구매한 다른사람들은 어떻게 사용한거지?)



결국 위의 사진처럼 1번/2번 pin 사이의 연결을 완전히 긁어 내어 단락시키니 정상 작동하였습니다.

아놔....





6. K-Type +/- 단자 사이에 capacitor


해결점을 찾아서 정상 작동까지는 왔으나,

값이 널을 뛰어 안정적으로 측정하지 못했습니다.



위에서 보듯이 많은 사람들이 단자에 capacitor 를 사용했더랬습니다.


* Hardware | AliExpress 에서 Ceramic Condenser 를 구입해 보자

http://chocoball.tistory.com/entry/Hardware-AliExpress-Ceramic-Condenser-buying


뭘 하려면 여러가지가 구비되어야 하는군요.

다행이 ceramic capacitor (condenser) 가 있었습니다.



사용된 것은 10nF = 0.01uF 입니다.



Capacitor 를 연결하고서야 안정적으로 값을 확인할 수 있었습니다.





7. Pinout / Layout


Pinout 은 다음과 같습니다.


 MAX31855  | Arduino Micro
---------------------------
    Vin    |      5V
    GND    |      GND
    DO     |      D3
    CS     |      D4
    CLK    |      D5
---------------------------



구성도는 다음과 같습니다.



실제 사진입니다.






8. 결과


이제서야 제대로 측정이 되었습니다.

chip 자체적으로 Internal Temp 를 측정 가능한게 신시합니다.



여름 저녁이라 거실 실내 온도가 31도군요.

올해는 더워도 너무 덥습니다. 1994년도 5월에 입대하고 기초훈련 받던 때가 생각나네요.

그때도 이만큼 더웠던것 같습니다. 유격훈련 한번 하고 나면 동기들이 탈진해서 쓰러지곤 했더랬습니다.


우리 기수, 다른 중대 훈련병 중에 행군중 탈진으로 죽은 전우가 있어,

저의 다음 기수부터는 행군을 생략했다는 이야기를 들었습니다.

저의 행군 중에도, 옆에서 쓰러진 동기는 흰자위를 보이며 땅바닥에서 경련을 일으킬 정도로 극한의 날씨였습니다.



위는 K-type thermocouple 에 라이터 불로 온도를 높혔을 때를 동영상으로 찍어 봤습니다.



EXCEL 의 그래프 작업으로 internal / sensor 의 온도변화를 그래프로 표현해 봤습니다.

흠흠, 잘 변화를 감지했군요.





FIN


제대로 함정을 밟았지만, 잘 헤쳐나온것 같습니다.

Breakout board 는 되도록 reference (Adafruit / Sparkfun) 과 잘 비교해 본 다음, 문제가 없어보이면 구입하는게 좋을것 같습니다.


And

Hardware | Safecast bGeigie Nano 를 조립해 보자 - 2

|

이 글은 전편이 있습니다. 먼저 다음 link 를 꼭 읽고 오세요.


* Safecast bGeigie Nano 를 조립해 보자 - 1

http://chocoball.tistory.com/entry/Hardware-Safecast-bGeigie-Nano-1




1. Mainboard


bGeigie Nano 의 중추인 mainboard 입니다.



보드 버전은 1.1r5a 입니다.

조립 메뉴얼이 초기 버전을 기준으로 제작되어 있다 보니, 나름 최신 보드와 맞지 않는 부분들이 있습니다.

대략 예상하면서 메뉴얼을 따라가면 그리 큰 문제는 없습니다.



모든 실장 위치에 금도금이 되어 있어서 납이 잘 붙게 되어 있습니다.

잘 만들어진 보드라고 생각합니다.




2. 부품과 아크릴 지지대


부품은 따로 포장되어 있습니다.

제가 받은 제품의 고유 번호는 2981 되겠습니다.



기판을 보호하고 모양을 만들어주는 아크릴 지지대와 logging 을 위한 micro SD + adapater,

그리고 GM tube 를 보호해 주는 철망이 보입니다.






3. 저항 납땜하기


이제 본격적으로 작업을 시작합니다.

저항을 하나씩 검수해 가며 납땝합니다.

예전에 만들어 놓은 Transistor Tester 를 이용했습니다.


* Transistor Tester

http://chocoball.tistory.com/entry/Hardware-Transistor-Tester




10kΩ 짜리를 측정해 봅니다. 대략 오차범위 이내 입니다. 납땜해 줍니다.



1kΩ 짜리를 측정해 봅니다. 대략 오차범위 이내 입니다. 납땜해 줍니다.



4.5kΩ 짜리를 측정해 봅니다. 대략 오차범위 이내 입니다. 납땜해 줍니다.



겨우 4개 저항을 납땜했지만 뿌듯합니다. 기념샷 찍어줍니다.



계속 측정하고 땜질하고 반복합니다.



궁금해졌습니다. 왜 예전 방식인 "탄소 피막 저항" 일까?

온도변화에 약하며 정확도가 떨어지는 제품을 썼을까?


"메탈 피막 저항" 은 정확하며 온도변화에도 강한데 말입니다.


저항에 대해서는 아래 link 를 읽어보세요. 저도 처음에는 구분을 못했답니다.

http://chocoball.tistory.com/entry/Hardware-buying-resistors



집에 굴러다니는 메탈 피막 저항을 측정해 보는 것으로 궁금함은 더해가지만,

일단 접어두고 나중에 community 에 물어봐야겠습니다.





4. 콘덴서 납땜하기


저항 다음에는 콘덴서를 납땜해 줍니다.



총 3개가 있습니다. 100nF 이라고 합니다.



정말 소중하게 한땀한땀 납땜하였습니다.



뒷면의 리드로 모드 잘라주었습니다. 깔끔하게 잘 했다고 자화자찬을 해 봅니다.





5. 그 외 부품 납땜하기


저항과 콘덴서로 손이 어느정도 익었으니, 속도를 좀 내어 봅니다.

트랜지스터 1개와 스위치류, LED 등을 납땜해 갑니다.



C1815 라는 제품이지만 잘 모릅니다.



측정해 보면 NPN 트랜지스터 입니다. 납땜해 줍니다.



토클 스위치입니다. 일본에서 제조된 제품이네요.



사진으로는 크지만 앙증맞게 생겼습니다. 금속으로 된 스위치로 딸깍거리며 동작시키는 것이 은근 재미 있습니다.



무슨 용도의 스위치 인지는 모르겠습니다.

조이스틱처럼 누르기도 되고 상하좌우 움직일 수 있습니다. 메뉴 설정등에 사용될 듯 합니다.



밑면입니다.



스피커 입니다. 제품 마무리가 잘 되어 있습니다.



다이오드 입니다. 열에 약하니 최대한 짧게 열을 가하여 납땜합니다.



전원 스위치 입니다.

전류가 흐르는 곳이니 납을 많이 먹여 납땜합니다.



딥스위치 입니다. 납땜합니다.



Alerting 과 Counting 을 하는 LED 입니다.

제품 버전에 따라 빨간색 대신 파란색도 있었던것 같습니다.


조립하는 사람에 따라 빨간색을 counting 으로 사용하는 사람도 있고 여러가지 입니다.

저는 Alerting 에는 빨간색, Counting 에는 흰색을 선택해서 납땜하였습니다.



LED 는 이런 값을 보여주는군요.



Transistor Tester 로 측정시 불이 들어왔다 나갔다 하는 모습이 신기하여 동영상으로도 찍어 봤습니다.



아마도 측정시에 여러가지 패턴으로 전류/전압을 가해보고 결과를 도출하는 것 같습니다.



자잘한 부품을 모두 납땜한 모양입니다. 여기까지 하고 좀 쉬었습니다. 한 2주일.





6. OLED


가장 눈에 띄는 OLED 를 작업합니다.



뽁뽁이 포장지를 잘 뜯습니다.



저 위의 구멍에 납땜을 하면 됩니다.



제품 정식 명칭은 Adafruit 사의 SSD1306 1.3" 128x64 OLED 입니다.

집에 다른 OLED 두개를 더 가지고 있어서 잠깐 비교 놀이를 해봅니다.


* Adafruit SSD1306 128x64 1.3" monochrome OLED 를 사용해보자

http://chocoball.tistory.com/entry/Hardware-Adafruit-SSD1306-128x64-13inch-monochrome-OLED



기판 밑부분에 지지대를 납땜하고 볼트로 고정해 줍니다.



OLED 를 납땜한 소켓에 삽입하고 너트로 지지대 기둥에 고정해 줍니다.



설명서에는 휘지 않도록 너트를 위아래로 설치하라고 되어 있으나, 지지대 볼트 길이가 짧아서 절대 불가능 합니다.

그냥 위에만 너트로 고정해 줍니다. 너무 조이면 장력이 생기니 적당하게 조여줍니다.




7. GPS module


Adafruit 의 Ultimate GPS Breakout v3 제품입니다.



66개의 channel 을 받을 수 있다고 하네요. Wow!



뒷면은 GPS 정보를 저장하여 다시 reboot 될 때 GPS 를 빨리 연동되게 하기 위한 battery 고정부가 있습니다.



3.3V ~ 5V 까지 인가할 수 있습니다. 5V 도 견디지만 3.3V 로 동작시키면 좋겠죠?



이렇게 분리되어 있는 것을 아래와 같이 납땜해 주었습니다.



고정하는 부분이니 납을 많이 먹여 주었습니다.



GPS 가 올 자리는 여기가 되겠습니다.



지지대를 세우고 mainboard 와 연결되는 부분에 pin 을 납땜해 줍니다.



고정 기둥에 올려 놓고 너트로 조이면 이렇게 됩니다.

점점 모양을 갖춰 가네요.





8. OpenLog


측정한 data 를 micro SD 에 저장하는 부분입니다.



제품은 SparkFun 사의 OpenLog DEV-13712 입니다.



Arduino 와 친숙한 ATmega 칩이 달려 있습니다.



뒷면은 micro SD 를 삽입할 수 있게 되어 있습니다.

한번 넣으면 딸깍 하면서 고정이 되고, 다시한번 누르면 튀어나오는 방식입니다.



위치할 자리는 여기 입니다.

예전 버전에는 바로 아래 부분에 GM tube 와 연결하는 pin 납땜자리가 있어 쉴딩을 해줘야 했지만,

버전업이 되면서 GM tube 연결 땜 자리는, 그 밑으로 위치하는 레이아웃으로 바뀌었습니다.



이왕 본 김에 GM tube 와 연결되는 pin 을 납땜해 줍니다.





9. Arduino FIO


이제 두뇌에 해당하는 Arduino FIO 를 작업합니다.



DEV-10116 이라고 되어 있네요.



LED가 반짝반짝 하는 윗부분이 밑으로 가야 하는지라 좀 아쉽습니다.



밑부분이지만 위로 가는 부분입니다.



위치는 여기가 되겠네요.

납땜할 자리가 가장 많습니다.

일단 mainboard 에 모든 다리에 pin 을 넣고 납땜해야 하고, 그다음 male pin 들을 Arduino FIO 에 납땜하여 다리를 만들어 줘야 합니다.




향후 firmware upgrade 를 위해 FTDI 인터페이스에도 납땜을 해 줍니다.

실제로 이런 모양이라고 합니다.


* Using a L-shaped plug and soldered low-profile sockets to program a Fio

https://www.arduino.cc/en/Main/ArduinoBoardFioProgramming



나중에 software 가 version up 되면 도전해 보겠습니다.

마침 FTDI breakout 보드도 있네요 :-)


* FTDI Serial Adapter 를 사용해 보자

http://chocoball.tistory.com/entry/Hardware-FTDI-FT232RL-using



지금까지의 모든 부붐을 올려 봤습니다. 호오오오!





10. Bluetooth module


micro SD 카드에 logging 을 하지만,

스마트폰으로 실시간 측정치를 확인하거나, 로그를 인터넷으로 바로 보내고 싶으면 Bluetooth 모듈이 필요합니다.



제품은 seeed 사의 BLEBee v2 입니다.

https://www.seeedstudio.com/BLEBee-v2.0.0-p-2461.html


따로 사려면 34.5 USD 하는군요.

AliExpress 에서 파는 XBEE 의 bluetooth 모듈과 호환이 되는지 많이 궁금합니다.


https://ko.aliexpress.com/item/Free-shipping-bluetooth-wireless-module-bluetooth-slave-HC-06-red-for-arduino/2046081268.html


기회가 되면 한번 실험해 보겠습니다.



Bluegiga BLE113-A-M256K 라는 모듈을 이용해서 만들었다고 합니다.



오리지날은 MiKro Labs 라고 합니다.

하지만 이미 website 는 가동되지 않고 있네요. ( www.mikro-labs.com )



Arduino FIO 의 밑단 부분에 세모로 선이 그어있는 부분에 꽂습니다.






11. 시험 가동


GM tube 를 제외하고 모든 부품이 실장되었습니다.

GM tube 를 연결하기 전에 납땜이 정상인지를 확인하고,

추가 작업을 진행하기 전에 수정사항이 있는지를 보기 위해 battery 를 연결하고 시험 가동을 해 봅니다.


동봉된 battery 는 1200mAh Li-Ion Polymer 입니다.



두근두근....



한번에 성공입니다!!!

사실 실패하면 다른 방도는 없었습니다.


역시 납땜시는 열을 최대한 짧게 가하고 완료하는게 정말 중요하네요. 오로지 이거 하나만 지키면서 납땜하였습니다.

오랜 동안 납땜에 투자한 시간이 보상받는 순간입니다.





12. Geiger Mueller Tube


방사능 측정용 센서는 pancake 형태인 센서 입니다.


* LND 7317

http://www.lndinc.com/products/geiger-mueller-tubes/7317/


특장점으로는 엄청 예민하다는 것과, alpha / beta / gamma 모두를 잡아낼 수 있다는 것입니다.

일반적으로 한가지나 두가지만 잡아낼 수 있는 센서와는 격을 달리합니다.


그래서 낱개 구매는 130 ~ 200 USD 정도 한다고 합니다.

bGeigie Nano kit 가격의 1/3 에 해당합니다. 그만큼 조심해서 다뤄야 합니다.



GM tube 의 표면이 찟기지 않게 하기 위해 철망을 붙여줘야 합니다.

여성들의 메니큐어 코팅제로 붙이면 나중에 메니큐어 제거재로 쉽게 분리 가능하다 하니, 준비합니다.



살살 제품을 꺼냅니다. 아주 얇은 피막으로 되어 있다고 씌여 있습니다.



뒷면이 위로 오게 뒤집어져 있습니다. 앞쪽은 얇은 피막이니까요.

only USA 에서만 생산되고 있습니다.

들어보면 꽤 무겁습니다. 무식한 작은 후라이팬처럼 생겼습니다.



앞면입니다. 찟어지지 않도록 살살...



다른 작업으로 진행하기 전에 얼른 금속망을 앞면에 붙여줍니다.

1분 이상 지긋이 누르라고 설명서에 나와 있으니, 지긋하게 눌러서 고정되게 합니다.




13. GM tube 연결


GM tube 와 고전압 회로와 연결하는 보드를 조립합니다.



보드에 선을 납땜해야 하는데, 극성이 선의 배열과 다릅니다.

이쁘게 납땜할 수 있도록 핀을 이용하여 선을 동그랗게 말아줍니다.


미리 투명 수축 튜브도 끼워 넣어 줍니다.



납땜을 이쁘게 하고, 수축튜브를 잘 씌운 다음, 열을 가하여 수축, 고정되게 합니다.




14. Case 고무에 동그랗게 구멍 뚫기


Pelican 1010 case 의 안쪽 뒷면은 고무로 기기를 안정되게 고정될 수 있도록 쿠션이 있습니다.

여기를 GM tube 가 돌출될 수 있도록 구멍을 뚫어야 합니다.



보드에 LND 7317 과 연결하고 아크릴에 고정시켜 봅니다.

이제야 고지가 눈앞에 보이네요.



케이스 뒷면에 센서가 돌출될 수 있도록 동그랗게 구멍을 뚫어 줍니다.

신기하게도 250ml 주스캔 윗부분과 크기가 똑같습니다. 주스캔을 이용하여 그림을 그린 다음 커터로 잘라주면 됩니다.



짜잔~!





FIN


이로써 모든 조립 작업이 완료되었습니다.

계획하고 구입하고 조립하기 까지, 장장 6년(계획)하고 3개월(실조립) 이 걸렸습니다.


왜 구동 모습이 없냐구요?

실제 구동 모습은 따로 글을 만들어서 차근차근 기록하겠습니다.

여기까지만 해도 진이 다 빠졌습니다.


And

Hardware | Rotary Encoder 를 사용해 보자

|

1. Rotary Encoder


예전 전자 기기들의 볼륨 조절은, 최저/최고값이 표시되어 있고, 그 안에서만 움직이는 방식이었습니다.


요즘 나오는 자동차의 음성 조절이나 iPod 같은 전자기기의 볼륨도,

min/max 가 정해져 있지 않은 볼륨 조절 장치로 되어 있어요.


이를 Rotary Encoder 라고 부른다고 합니다.


제가 arduio 및 전자 취미시 처음으로 만져본 것은 "Transistor Tester" 라는 기기였습니다.


http://chocoball.tistory.com/entry/Hardware-Transistor-Tester


왼쪽 / 오른쪽으로 끝없이 돌려도 되면서,

위로부터 꾹 누르면 스위치의 "select" 도 구현되어 있는 센서였습니다.



기술 발전이란...




2. 원리


원리는 원반에 구멍이 일정 간격으로 뚫려 있고,

파형상 90도 차이나는 광원을 배치해, 각각 입력되는 펄스의 변화를 가지고 방향 인지 및 count 를 한다 합니다.



입력 시그널은 아래와 같이 나오며, 시계방향과 반시계방향의 펄스 입력값의 차이에 따라 알수 있겠죠.



값의 변화는 다음과 같이 되구요.



시작점을 11 값이라고 본다면, 각 방향으로 돌렸을 때의 변화값이 다르다는 것을 알 수 있습니다.



결국 저 작은 뭉퉁이에 photo diode 와 conuter 가 들어있다는 거네요.

예전같으면 불가능 했겠지만, sensor 들이 작아지면서 가능한 부품이 탄생한 것 같습니다.


참고한 사이트는 아래 두곳입니다.


http://howtomechatronics.com/tutorials/arduino/rotary-encoder-works-use-arduino/


- http://openhardware.ro/rotary-encoders-experiments/





3. AliExpress 에서 구매


Rotary Encoder 로 검색하면 여러가지 제품이 나옵니다.

그중에 가장 적당한 것으로 골랐습니다.


이걸 고른 이유는, 항상 LED 가 켜져 있어서 알려주는 indicator 가 없어서 였고 (눈부심),

괜찮게 저렴했기 때문이지요.



구매 링크는 다음과 같고, 사양은 아래와 같이 나와 있습니다.


https://ko.aliexpress.com/item/Rotary-Encoder-Module-Brick-Sensor-Development-Board-For-Arduino/1893663630.html


"rotation counts are not limited" 라고 되어 있어서, 어느 방향으로나 영원히 돌릴 수 있고,

"With the buttons on the rotary encoder can be reset to its initial state, that starts counting from 0" 라고 되어 있어서,

버튼 스위치가 구현되어 있다고 하네요.


=======================================

100% Brand new and high quality

Material: Electronic components + PCB

Size: About 31 * 19 * 29mm / 1.22" * 0.75" * 1.14"

Main color: Black

Working voltage: 5V

Pulse circle: 20

  

By rotating the rotary encoder can be counted in the positive direction and the reverse direction during rotation of the output pulse frequency, unlike rotary potentiometer count, this rotation counts are not limited. With the buttons on the rotary encoder can be reset to its initial state, that starts counting from 0. 

=======================================


다만, 가장 좋은 외형은 아래와 같이,

중간에 나사산이 있고, 윗부분에 어떤이라도 씌울 수 있는 돌기가 세겨져 있는 것이 좋을 듯 합니다.



비슷한 제품은 역시 괜찮은 sensor 들을 만들고 있는 SparkFun 에 있네요.

배송만 문제 없으면 이걸 구입하고 싶은데, 그냥 AliExpress 구매 제품으로도 만족합니다.





4. 도착


잊고 있었는데, 어느새 도착했습니다.

HDD 포장하는 것처럼 정전기 방지 비닐로 왔습니다.



필요한 단자는 다 있는 듯 합니다.



뒷면입니다.

중간에 R1 하나가 빠져 있는데, 괜찮은지 모르겠습니다.

아무래도 ripple 관련하여 있으면 좋지만 없어도 되는 부분을 뺀듯 합니다.


기회되면 나중에 10K 짜리 저항을 달아줘야겠습니다.





5. Layout


Pin 배열은 다음과 같습니다.


  Rotay  |
  Encder | Arduino Nano
-------------------------
    CLK  |     D2
    DT   |     D3
    SW   |   (empty)
     +   |     3.3V
    GND  |     GND
-------------------------

  SSD1306 | Arduino Nano
-------------------------
    VCC   |     3.3V
    GND   |     GND
    SDC   |     A5
    SDA   |     A4
-------------------------


전체 layout 은 다음과 같아요.






6. Sketch


Sketch 소스는 다음 link 를 참조하였습니다.


http://domoticx.com/arduino-rotary-encoder-met-oled-scherm/


원 저작자는

------------------------------------------------

"U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI"

------------------------------------------------


을 로딩했지만, 저는 SSD1306 OLED 이므로, 다음과 같이 수정하였습니다.

------------------------------------------------

"U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);   // Fast I2C / TWI"

-----------------------------------------------


// U8glib Bibliotheek importeren
#include "U8glib.h"
// U8glib Bibliotheek configureren voor het juiste display
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);   // Fast I2C / TWI
 
// Encoder pins configureren.
int pinEncA=2;
int pinEncB=3;
 
static byte abOud;       // Initialiseer status.
volatile int teller = 0; // rotatie teller.
int teller_oud;          // oude rotatie teller.
 
// Waarden voor variabel getal reserveren.
enum {BufSize=6};
char tellerStr[BufSize];
 
void setup() {
  // Encoder pinnen instellen.
  pinMode(pinEncA, INPUT);
  pinMode(pinEncB, INPUT);
 
  // Interrupts instellen (pin hoog-laag verandering).
  // Interrupt 0 = Pin 2 op de Arduino UNO.
  // Interrupt 1 = Pin 3 op de Arduino UNO.
  attachInterrupt(0, pinActie, CHANGE);
  attachInterrupt(1, pinActie, CHANGE);
 
  u8g.setFont(u8g_font_5x8); // Lettertype instellen voor u8glib.
}
 
void loop() {
  // IF loop wanneer er aan de encoder is gedraaid.
  if (teller_oud != teller) {
    teller_oud = teller;  
    snprintf(tellerStr, BufSize, "%d", teller);  // Converteer de "teller" INT naar STR (tbv OLED scherm)
  
    // OLED scherm loop.
    u8g.firstPage();  
    do {
      u8g.drawStr(0, 10, "Encoder:");
      
      u8g.drawBox(0, 14, 128, 16);    // Teken een witte rechthoek, 0px vanaf links, 14px van boven, 128px breed, 16px hoog.
      u8g.setColorIndex(0);           // zet kleur negatief (pixel uit).
      u8g.setScale2x2();              // maak het lettertype 2x groter.
      u8g.drawStr(25, 14, tellerStr); // print "teller" tekst.
      
      u8g.undoScale();                // zet het lettertype weer terug.
      u8g.setColorIndex(1);           // zet de kleur positief (pixel aan).
    } while( u8g.nextPage() );
  }
  // Overige code...
}
 
// Wanneer een interrupt heeft plaatsgevonden, lees de input pinnen, bereken nieuwe status, pas de telling aan.
void pinActie() {
  enum { upMask = 0x66, downMask = 0x99 };
  byte abNieuw = (digitalRead(pinEncA) << 1) | digitalRead(pinEncB);
  byte criteria = abNieuw^abOud;
  if (criteria==1 || criteria==2) {
    if (upMask & (1 << (2*abOud + abNieuw/2)))
      teller++;    // tel naar boven.
    else teller--; // tel naar beneden.
  }
  abOud = abNieuw; // bewaar nieuwe status.
}




7. 구동


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



IDE 로 메뉴 프로그래밍만 잘 하면 멋진걸 만들 수 있을것 같습니다.




FIN


단순한 입력 센서가 아닌, 설정하고 조정하는 조절센서로는 처음인것 같습니다.

여러가지로 활용해 봐야지.

And

Hardware | Soil Moisture Sensor 구동해 보기

|

1. 농작물 automation

향후 나이를 먹으면, 농사를 지을 생각입니다.

다만, 전자 기기 경험과 IT 경력을 이용하여 가능한 전자동으로 하고싶습니다.


일조량, 물주기, 항온 항습, 통풍, 영양소 확인 등등...

그 목적을 위해 오늘도 Arduino 를 이용하여 열씸히 놀고 있습니다.


이 농사 automation 에서 토양의 수분 확인은 필수겠죠?

그래서 관련 센서들을 평소 찾아 다녔습니다.




2. Soil Moisture Sensor

네, 맞습니다. 한글로 번역하면 "토양 수분 감지기" 정도가 되겠습니다.

토양에 자동으로 물을 주려면 수분의 level 을 잘 감지해 내야겠죠?


AliExpress 에서 찾아 봅니다.



센서부에 금박이 칠해져 있고, 품질 좋은 것으로 호평받는 RobotDyn 사의 제품이 있습니다.

1.28 USD !!! 배송비 무료. 감사합니닷.




3. 도착

잊고 있었더니만 어느샌가 도착했습니다.



비닐 포장도 깔끔하게 되어 있고, 프린팅도 괜찮습니다.

간만에 괜찮은 품질의 제품을 만난것 같습니다.



개봉한 샷 입니다.



금빛 찬란하군요.





4. Layout

Pin 접속은 다음과 같습니다.


 Soil Moisture Sensor | Arduino Nano
-------------------------------------
          OUT         |     5V
          GND         |     GND
          VCC         |     D2
-------------------------------------


 128X64 OLED | Arduino Nano
----------------------------
     GND     |     GND
     VCC     |     3.3V
     SDA     |     A4
     SDL     |     A5
----------------------------

RobotDyn 제품의 원래 오리지날은 SparkFun 사의 "Soil Moisture Sensor" 일지도 모르겠습니다.


https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide


외관이 너무 비슷합니다.

그래서 고맙게도 IDE sketch 를 그대로 가져다 써도 잘 동작합니다.






5. Source

Sketch 는 다음과 같습니다.

OLED 를 붙여서 동작시키게 조금 수정하였습니다.


/*  Soil Mositure Basic Example
    This sketch was written by SparkFun Electronics
    Joel Bartlett 
    August 31, 2015

    Basic skecth to print out soil moisture values to the Serial Monitor 

    Released under the MIT License(http://opensource.org/licenses/MIT)
*/

#include "SPI.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#include "stdint.h"
 
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


int val = 0; // value for storing moisture value 
int soilPin = A0; // declare a variable for the soil moisture sensor 
int soilPower = 7; // variable for Soil moisture Power

// rather than powering the sensor through the 3.3V or 5V pins, 
// we'll use a digital pin to power the sensor. This will 
// prevent corrosion of the sensor as it sits in the soil. 

void setup() {
	Serial.begin(57600); // open serial over USB
	
	pinMode(soilPower, OUTPUT); // set D7 as an OUTPUT
	digitalWrite(soilPower, LOW); // set to LOW so no power is flowing through the sensor
	display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}

void loop() {
	// get soil moisture value from the function below and print it
	int result = readSoil();
	Serial.print("Soil Moisture = ");    
	Serial.println(result);

	// clear the buffer
	display.clearDisplay();
	
	// text display tests
	display.setTextSize(2);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.print("Soil\n");
	display.print("Moisture\n");
	isplay.print("\n  == ");
	display.print(result);
	
	display.display();

	// this 1 second timefrme is used so you can test the sensor and see it change in real-time.
	// for in-plant applications, you will want to take readings much less frequently.
	delay(1000); // take a reading every second
}

// this is a function used to get the soil moisture content
int readSoil() {
	digitalWrite(soilPower, HIGH); // turn D7 "On"
	delay(10); // wait 10 milliseconds 
	val = analogRead(soilPin); // read the SIG value form sensor 
	digitalWrite(soilPower, LOW); // turn D7 "Off"
	return val; // send current moisture value
}


출처는 SparkFun 사의 위의 사이트 입니다.




6. 동작 확인

Pin 을 연결하고 sketch 를 업로드 한다음 제대로 동작하는지 확인해 봅니다.



화분에 물주고 확인해야 하는데, 일이 커지므로 손기운으로 측정으로 해봅니다.

잘 되네요!!!



실측값을 토대로 실제로 흙속에 넣고 해봐야겟지만, 동작확인이 되었으니 충분합니다.


아마 흙속에 계속 넣고 있으면, 금박 등이 다 삵아서 제대로 동작되지 않겠죠?

지속적인 사용은 못할 듯 합니다.

실제 농작물 automation 에 사용하려면 수분이 직접 닫지 않고도 측정되는 센서가 필요할 듯 합니다.


동영상도 한번 찍어봤습니다.


간단하게 잘 동작하네요.




FIN

아~ 나의 농작 automation~!!!

And
prev | 1 | next