'Arduino'에 해당되는 글 104건

  1. 2019.09.08 Hardware | Dual-axis XY Joystick Module
  2. 2019.08.12 Hardware | ADS1115 16bit 4채널 ADC 를 사용해 보자 6
  3. 2019.08.04 Hardware | Arduino 를 DIY 해보자 - 2
  4. 2019.08.02 Hardware | 납땜 주변 용품
  5. 2019.07.07 Hardware | bluetooth 모듈 HC-06 / HC-05 사용해 보기 - 1
  6. 2019.05.05 Hardware | tilt sensor 를 사용해 보자
  7. 2019.05.05 Hardware | vibration sensor 를 사용해 보자
  8. 2019.04.14 Hardware | touch sensor 를 이용하여 놀아보기
  9. 2019.03.18 Hardware | PN523 - RFID / NFC breakout 보드
  10. 2019.01.25 Book | 훤히 보이는 RFID/USN - Get to know RFID/USN

Hardware | Dual-axis XY Joystick Module

|

1. Dual-Axis XY


집에 가지고 있는 Stepping motor 를 원격으로 조정하고 싶을 때, 조이스틱으로 하면 편할것 같아,

우선 arduino 와 조이스틱 구성의 기본 동작을 익혀봤습니다.


위의 목적 외에도 새로운 모듈을 시험해 보는 것은 언제나 즐거운 일 입니다.




2. 구매


AliExpress 를 뒤지면 여러가지 나오는데, 저는 아래 제품을 구매 했습니다.


* For Arduino Dual-axis XY Joystick Module Higher Quality PS2 Joystick Control Lever Sensor KY-023 Rated 4.9 /5

https://www.aliexpress.com/item/32683242155.html



옵션으로 고정 틀이 들어간 세트도 같이 팔지만,

언제나 그렇 듯, 최소한의 비용 투자가 회사원의 취미로 유지되는 조건이므로 모듈만 구매합니다.


혹시 여유가 있으시다면, 아크릴 고정 틀 세트로 구매하시는 것을 추천드립니다.

어디 놓고 테스트 하거나 구동시킬라면 손으로 잡고 해야 하는데 꽤 불편합니다.





3. 도착


잊을만 할 때 도착했습니다.



엄지 손가락으로 조정하는 고무 모자를 벗겨 보면, XY 축 센서와 SW 센서가 붙어 있습니다.



더 이상 설명이 필요없는 간단한 구성 입니다.





4. Layout


XY 센서는 analog 이고, switch 는 digital 신호로 컨트롤 됩니다.

Arduino nano 와의 연결은 다음과 같습니다.


  Joystick | Arduino Nano
--------------------------
    GND    |     GND
    5V     |     5V
    VRX    |     A0
    VRY    |     A1
    SW     |     D2
--------------------------


배선도는 다음과 같구요.



실제 연결은 다음과 같습니다.



선이 5가닥이 필요하다 보니, 회로 구성 시 자칫 복잡해 질 수 있는 여건이네요.




5. Sketch


소스는 다음과 같습니다. 소스 참고는 아래 사이트 입니다.


* How to connect and use Analog Joystick with Arduino

https://www.brainy-bits.com/arduino-joystick-tutorial/


Switch 눌림과 XY 축 값을 5V 기준으로 leveling 하여 수치로 표시해 줍니다.


// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

void setup() {
	pinMode(SW_pin, INPUT);
	digitalWrite(SW_pin, HIGH);
	Serial.begin(115200);
}

void loop() {
	Serial.print("Switch:  ");
	Serial.println(digitalRead(SW_pin));
	Serial.print("X-axis: ");
	Serial.println(analogRead(X_pin));
	Serial.print("Y-axis: ");
	Serial.println(analogRead(Y_pin));
	Serial.print("\n");
	
	delay(500);
}


스위치가 눌려있는 시간에는 Switch 값이 "0" 으로 변합니다.



요리조리 움직이다 보면 최대값이 나오는 구간이 있습니다. 5V 입력이다 보니 최대값이 1023 으로 표시됩니다.



입력 Vcc 를 3.3V 로 변경하면, 5V 대비 3.3V 로 레벨링 하여 나옵니다. 이 때는 대략 675 정도가 최대값이 되겠네요.



동영상 띄워 봅니다.






FIN


음? 벌써 끝?

네, 이 포스트는 gimbal 에 달려 있는 stepping 모터를 컨트롤 하기 위한 준비 단계라,

XY joystick 모듈과 arduino 와의 연결 확인만 되면 됩니다.


실제 gimbal 과 연결하여 stepping 모터를 컨트롤 하는 것은 다음 포트스에서 해보겠습니다.


And

Hardware | ADS1115 16bit 4채널 ADC 를 사용해 보자

|

1. 16 bit ADC


ADC 는 Analog to Digital Converter 의 약자로서, 입력받는 값에 대해 digital 로 표현해 줍니다.

Arduino 에는 이 ADC 가 장착되어 있어서 analog input 에 입력받은 신호에 대해 digital 로 leveling 을 해서 보여줍니다.

즉, analog 값을 digital 로 변환해서 보여주는 것이죠.


참고로, arduino nano 에는 10 bit ADC 가 장착되어 있어서 10 bit (0 ~ 1023) 값으로 표현해 줍니다.


다 좋은데, 민감한 sensor 를 다룰 때에는, 이 10 bit ADC 가 아쉬울 때가 있습니다.

좀더 정밀한 값을 들여다 보고 싶은데, 값과 값의 사이값을 알수가 없는거죠.


이 때 등장하는 것이 외부 ADC 모듈 입니다.

AliExpress 와 arduino 를 사랑하는 사람들의 blog 를 보니 ADS1115 라는 것을 많이 사용하는 군요.


ADS1115 는 Texas Instruments 사의 chip 을 사용한 16 bit ADC 입니다.


ads1115.pdf


- Resolution: 16 Bits

- Programmable Sample Rate: 8 to 860 Samples/Second

- Power Supply/Logic Levels: 2.0V to 5.5V

- Low Current Consumption: Continuous Mode: Only 150µA Single-Shot Mode: Auto Shut-Down

- Internal Low-Drift Voltage Reference

- Internal Oscillator

- Internal PGA: up to x16

- I2C Interface: 4-Pin-Selectable Addresses

- Four Single-Ended or 2 Differential Inputs

- Programmable Comparator


아래 link 의 제품이 적당해 보이네요. 구매합니다.


* I2C ADS1115 16 Bit ADC 4 channel Module with Programmable Gain Amplifier 2.0V to 5.5V for Arduino RPi

https://www.aliexpress.com/item/32850495005.html






2. 도착


그간 업무로 정신 없었는데, 어느샌가 도착했습니다.



블로그 내용을 부풀리기 위해서라도 항상 도착샷을 올리는건 필수 입니다.



저렇코롬 생겼구요.



ALERT 와 ADDR 에 pinheader 는 남겨 놓고 납땜하기로 합니다. 그 덕에 2 pinheader 하나 득템.

그 이유는 이 밑에 설명.





3. Addressing


이 ADS1115 는 I2C 통신을 하는데, 하나의 arduino 와 4개까지 연결할 수 있다 보니, I2C 접근 주소가 겹치지 않게 할 수 있습니다.

방법은 ADDR pin 을 어디로 연결하느냐로 address 를 결정할 수 있습니다.


Adafruit 4-Channel ADC Breakouts

https://learn.adafruit.com/adafruit-4-channel-adc-breakouts


- 0x48 (1001000) ADR -> GND

- 0x49 (1001001) ADR -> VDD

- 0x4A (1001010) ADR -> SDA

- 0x4B (1001011) ADR -> SCL


회로를 꾸밀 때 마다, address 정의를 위한 연결을 해도 되지만, 귀찮겠죠?

또한, addressing 을 위해 I2C 용 핀이나, VCC 로 연결하면 왠지 껄끄럽습니다.


그래서 ground 로 연결하여, 기본 0x48 을 가지게 합니다.

또한, 아래 새다리님의 블로그를 보면, 이 연결을 가장 깔끔하게 처리하셨더군요. 따라쟁이는 바로 따라해 봅니다.


* 16비트, 4채널 ADC ADS1115 아두이노 Test

https://m.blog.naver.com/twophase/220801664646


예전에 파손된 멀티탭 전원선에서 동선 한가닥을 짧게 잘라 내어 아래와 같이 납땜 해 주섰습니다.

캡톤 테이프로 혹시 모를 쇼트를 방지했구요.



i2cdetect 로 addressing 이 잘 되었나 확인해 봅니다.


     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --


흠흠. 잘 되었네요.




4. Layout


* Arduino ADS1115 Module Getting Started Tutorial

http://henrysbench.capnfatz.com/henrys-bench/arduino-voltage-measurements/arduino-ads1115-module-getting-started-tutorial/


위의 tutorial 사이트에서 보면 ADS1115 를 활용하여, arduino 자체 3.3V 출력을 세밀하게 검증해 보는 소스가 있습니다.

따라쟁이는 당연 따라서 검증해 봅니다.


연결은 I2C 용 연결 2가닥과 VCC/GND 그리고, 입력용에 arduino 3.3V output 을 연결합니다.


 ADS1115 | Arduino Nano
------------------------
    VCC  |      5V
    GND  |      GND
    SCL  |      A5
    SDA  |      A4
    A0   |      3.3V
------------------------


그림으로 그려보면 다음과 같습니다.






5. Sketch


이미 관련한 library 가 나와 있기 때문에, library 를 설치합니다.

역시 God Adafruit. 없는게 없습니다.



ads1115 로 검색하면 나오지 않고, ads1x 로 검색해야 나옵니다.


이제 HENRY'S BENCH 에서 Henry 아저씨가 arduino 3.3V output 에 대해, ADS1115 를 검증해 놓은 소스를 사용해 봅니다.


#include "Wire.h"
#include "Adafruit_ADS1015.h"

Adafruit_ADS1115 ads(0x48);
float Voltage = 0.0;

void setup(void) {
	Serial.begin(9600);
	ads.begin();
}

void loop(void) {
	int16_t adc0;	// we read from the ADC, we have a sixteen bit integer as a result
	
	adc0 = ads.readADC_SingleEnded(0);
	Voltage = (adc0 * 0.1875)/1000;
	
	Serial.print("AIN0: ");
	Serial.print(adc0);
	Serial.print("\tVoltage: ");
	Serial.println(Voltage, 7);
		
	delay(1000);
}


이 소스에서 가장 중요한 것은 PGA (Programmable Gain Amplifier) 값 입니다.

이 ADS1115 의 default output 최대값이 6.144V 이므로, 이를 15 bit (16 bit 이지만, 부호를 표시하는 1 bit 를 빼면 15 bit 만 활용 가능) 인 32767 로 나누면, 출력 1 에 대해 0.1875mV 라는 계산이 나옵니다.


In the default mode, the setting is +/-6.144 volts.

Thus the value of 32767 would represent a value of 6.144 volts.

Dividing 6.144 volts by 32767 yields a scale factor of 0.1875 mV per bit.   This is a significant improvement over the Arduino ADC which resolution of approximately 5 mV per bit.  In fact, its about 26 times better!


위의 로직이 소스에 활용되었습니다.





6. 결과


지금까지 구성한 layout 과 위의 소스를 가지고 실행해 보면 다음과 같이 결과가 나옵니다.



3.3V 이지만, 미세하게 값이 변하고 있다는 것을 알 수 있습니다.

이게 USB 를 통해서 연결하지 않고 Power source 를 통해서 입력 받으면 좀더 정확하고 잘 변하지 않는 3.3V 를 얻을 수 있다고 해요.





7. 비교


Arduino nano 의 자체 3.3V 를 16 bit ADC 를 거치지 않은 채로, anlogRead (10 bit ADC) 를 하면 어떨까?


참고로 Arduino 의 AnalogReference 의 정의는 다음과 같습니다.

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

Arduino AVR Boards (Uno, Mega, Leonardo, etc.)

- DEFAULT: the default analog reference of 5 volts (on 5V Arduino boards) or 3.3 volts (on 3.3V Arduino boards)

- INTERNAL: an built-in reference, equal to 1.1 volts on the ATmega168 or ATmega328P and 2.56 volts on the ATmega32U4 and ATmega8 (not available on the Arduino Mega)

- INTERNAL1V1: a built-in 1.1V reference (Arduino Mega only)

- INTERNAL2V56: a built-in 2.56V reference (Arduino Mega only)

- EXTERNAL: the voltage applied to the AREF pin (0 to 5V only) is used as the reference.

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


AnalogReference(DEFAULT) 를 사용하여, 5V 기준으로 입력값을 leveling 하게 했으며,

arduino nano 에는 PGA 가 없으므로, 단순히 5V 를 10 bit ADC 해상도를 감안하여, 1024 로 나누어, 한 level 당, 0.0049 V 로 계산하도록 했습니다.



최종 소스는 다음과 같습니다.


#include "Wire.h"
#include "Adafruit_ADS1015.h"
 
Adafruit_ADS1115 ads(0x48);
float Voltage = 0.0;
float Voltage2 = 0.0;	// analogRead(A2)
 
void setup(void) {
    analogReference(DEFAULT);
    Serial.begin(9600);
    ads.begin();
}
 
void loop(void) {
    int16_t adc0;   // we read from the ADC, we have a sixteen bit integer as a result
     
    adc0 = ads.readADC_SingleEnded(0);
    Voltage = (adc0 * 0.1875)/1000;
     
    Serial.print("AIN0: ");
    Serial.print(adc0);
    Serial.print("\tVoltage: ");
    Serial.print(Voltage, 7);

	// analogRead(A2) start
    int16_t adc2;
    adc2 = analogRead(A2);
    Voltage2 = (adc2 * 0.0049);
    
    Serial.print("\tAIN2: ");
    Serial.print(adc2);
    Serial.print("\tVoltage2: ");
    Serial.println(Voltage2, 7);
    // analogRead(A2) end
         
    delay(1000);
}


결과값은 이렇게 나왔네요. 많이 부정확 합니다.


그 원인으로는,

- 5V reference 전압이 USB 를 통해 공급받으며, USB 전원은 불안하게 공급받습니다.

- PGA 가 없이, 단순히 5V reference 전압을 10 bit 로 나눈 값을 기준값으로 정했습니다.

- 16 bit 하고는 비교도 안되는 10 bit 해상도 차이가 납니다.



ADS1115 16 bit ADC 를 이용한 센서값 입력은 보다 정확한 값을 보장해 주네요.

향후 자주 사용해야 겠습니다.


And

Hardware | Arduino 를 DIY 해보자 - 2

|

1. Arduino Nano 를 DIY 해보자


이 글은 아래 포스트에서 이야기한, arduino 를 직접 만들어보기 2탄 입니다.


* Hardware | Arduino 를 DIY 해보자 - 1

http://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-1


처음 DIY 대상으로 arduino nano 입니다.

일단, 회로 보는 EAGLE 프로그램에서 뽑은 part list 를 구입에 필요한 것만 정리해 봤습니다.


-------------------------------------------------------------------------------------------------------
|                  name                  | value         | type                                       |
-------------------------------------------------------------------------------------------------------
| C1, C4, C6, C9                         | 100nF         | 0603 SMD                                   |
| C3, C7, C8                             | 1uF           | 0805 SMD                                   |
| C2, C5                                 | 4.7uF 16V     | 0603 SMD Tantalum capacitor                |
-------------------------------------------------------------------------------------------------------
| RP1, RP2                               | 1k Ohm        | CAY16 Network resistor SMD                 |
| L, PWR, RX, TX                         | LED           | 0805 SMD                                   |
-------------------------------------------------------------------------------------------------------
| D1                                     | SS1P3L-M3     | Schottky diodes & rectifier 30V 1A         |
| F1                                     | 500mA 6V      | 0603 SMD MF-FSMF050 Resetable Fuse         |
-------------------------------------------------------------------------------------------------------
| J1, J2                                 | 15 x 2        | single row male 2.54mm pich pin head       |
| J3                                     | USB Mini B    | USB Mini B type female socket              |
| J4                                     | 6             | double row male 2.54mm pitch pinhead       |
| SW1                                    | 157           | SMD tactail switch                         |
-------------------------------------------------------------------------------------------------------
| IC1                                    | FT232RL       | SSOP28 USB UART interface IC               |
| IC2                                    | LM1117IMPX-5.0| SOT223 Linear regulator                    |
| IC3                                    | ATMEGA328P-AU | TQFP32 8-bit Microcontroller               |
| Y1                                     | 16MHz         | SMD Crystal ceramic resonator              |
-------------------------------------------------------------------------------------------------------


0603 SMD 및 CAY16 network resistor 등, 소형화에 특화된 부품들로 구성되어 있습니다.

Oscillator 마저도 SMD 타입 입니다.


정품 arduino nano 의 앞면과 뒷면 사진 입니다.



최신 arduino nano 는 ATmega328 chip 크기가 더욱 작아진 MLF (Micro Lead Frame) 형식으로,

ATmega328-MU 가 실장되어 있습니다.


참고로, 이 ATmega328-MU 의 Package type 은 32M1-A 라고 하네요.

Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Summary.pdf



아래는 밑면입니다.



맨 왼쪽 밑부분에 0603 크기의 fuse 가 있으며,

중간 부분에 SMD 형식의 network resistor 가 실장되어 있습니다.


공간을 최대한 적게 차지하도록 작은 부품들을 사용되어 있습니다. 다만 구하기 힘든 부품들입니다.





2. 구입 부품 최종 확인


정품 nano 에 사용된 SMD 크기는 0603 이지만, 받은 보드는 0805 SMD 로 수정되었으며,

다른 부붐들도 보다 범용적이고 큰 부품들로 변경되어 있다는 것을 알 수 있습니다. 아래 파일은 그 회로도 입니다.


* BL-386

BL-386.pdf


* BL-386(Silk)

BL-386(Silk).pdf


참고가 될 수 있도록 arduino nano 의 official 자료를 아래에 올려 놓습니다.


* Arduino Nano V3.2

Arduino_Nano-Rev3.2-SCH.pdf


아래는 무료로 받은 보드 윗면입니다.

부품 크기가 0805 SMD 죠? 그리고 reset switch 마저도 큼지막 합니다.



아래는 밑면입니다.



모두 0805 SMD 이며, 왼쪽 윗부분의 diode 도 큼지막 합니다.

특징으로는 oscillator 가 4 pin 이며, 정사각형의 모양입니다. 이런건 처음이네요.


이 보드를 설계하신 분의 배려가 느껴집니다.

Arduino Nano 의 보드 자체 크기가 0805 를 충분히 커버할 수 있으므로, 궂이 0603 SMD 를 쓸 이유는 없는 것이지요.


다음에 준비하고 있는 Duemilanove 에서도 0805 SMD 를 그대로 사용하고 있어,

추가 부품을 그렇게 많이 구입하지 않아도 되어서 다행입니다.


최종적으로 실제 필요한 부품을 다시 정리해 봤습니다.


-------------------------------------------------------------------------------------------------------
|                  name                  | value         | type                                       |
-------------------------------------------------------------------------------------------------------
| C1, C3, C4, C7, C9                     | 0.1uF         | 0805 SMD                                   |
| C5, C6                                 | 22pF          | 0805 SMD                                   |
| C8                                     | 10uF          | 0805 SMD                                   |
-------------------------------------------------------------------------------------------------------
| R1, R2, R3                             | 1k Ohm        | 0805 SMD                                   |
| R4, R5, R6, R7                         | 680 Ohm       | 0805 SMD                                   |
| L, PWR, RX, TX                         | LED           | 0805 SMD                                   |
-------------------------------------------------------------------------------------------------------
| D1                                     | SS14          | Schottky diodes & rectifier 30V 1A         |
-------------------------------------------------------------------------------------------------------
| J1, J2                                 | 15 x 2        | single row male 2.54mm pitch pinhead       |
| J3                                     | USB Mini B    | USB Mini B type female socket              |
| J4                                     | 6             | double row male 2.54mm pitch pinhead       |
| SW1                                    | 3 x 6 x 2.5mm | SMD Tactile switch                         |
-------------------------------------------------------------------------------------------------------
| IC1                                    | FT232RL       | SSOP28 USB UART interface IC               |
| IC2                                    | LM1117IMPX-5.0| SOT223 Linear regulator                    |
| IC3                                    | ATMEGA328P-AU | TQFP32 8-bit Microcontroller               |
| Y1                                     | 16MHz         | 3225 SMD Crystal ceramic resonator         |
-------------------------------------------------------------------------------------------------------



필요한 부품 리스트를 만들면서 알게된, 배려가 깃든 보드의 특징은 다음과 같습니다.


* no network resistor

저항을 한데 모아 회로를 단순화 하기 위한 부품으로 SMD 용으 구하기 힘드나,

위의 보드에서는 모두 0805 SMD 로 변경되었습니다.


* no fuse

Fuse 가 생략되었습니다.

사실 arduino nano 는 과전류에 사용될 목적으로 만들어 진 것이 아니므로, 단순화를 위해 삭제된것 같습니다.


* bigger crystal

좁쌀만한 oscillator 가 아닌, 좀더 큰 resonator 로 변경되었습니다.


* bigger diode

Diode 도 일반적으로 사용되는 큰 부품으로 대체되었습니다.


* bigger switch

RST switch 도 큰걸로 대체되었습니다.


* all 0805 SMD based

그렇습니다. 0603 SMD는 모두 0805 SMD 로 변경되었습니다.


배려가 깃든 보드인 것을 조사하면서 알게 되니 감사한 마음이 저절로 듭니다.

이 자리를 빌어 다시한번 감사의 말씀 드립니다.


이제 각 부품 구입을 정리해 봅니다.





3. Capacitor

필요한 캐페시터의 용량은 다음 세가지 입니다.

- 0.1uF = 100nF
- 22pF
- 10uF

아래 링크에서 구입했습니다.
Duemilanove DIY 할 때도 겹치는 부품들과 nano 에만 사용되는 10uF 를 추가로 구입했습니다.

* MCIGICM 100pcs 0805 smd capacitor ceramic 22pf 100nf 1uf 2.2uf 4.7uf 10uf 47uf 22uf capacitors kit sets 0.5pF-47uF


동시에 다른 arduino 를 준비하다 보니, 겹치는 부품들이 꽤 있습니다.



이런 부품을 공유할 수 있어서 좋네요.



8pin DIP socket 이 필요해서 555 주문할 때, 따로 10uF 을 주문했습니다.



얘만 투명 릴에 왔네요.







4. Resistor

저항은 10K 와 680, 두가지가 필요합니다.

* 20Value * 20PCS =400PCS 0805 SMD Resistor Kit 1% 1/8W (10 ohm~1M ohm) component diy samples kit free shipping


위의 세트에는 다음 저항들이 포함되어 있고, 딱 680 Ohm 은 없습니다.


10R / 22R / 47R / 100R / 220 / 470R / 750R / 1K / 2K2 / 4K7 / 6K8 / 10K

22K / 47K / 75K / 100K / 220K / 470K / 750K / 1M



처음 구매한 제품이구요.


Duemilanove 제작시에 필요할 것 같아서 구입해둔 세트에는 680 Ohm 이 없네요.
그래서 새롭게 한세트 더 구입합니다.

* 2000pcs 0805 SMD Resistor Kit Assorted Kit 1ohm-1M ohm 5% 80valuesX 25pcs=2000pcs Sample Kit


세트 구성품은 다음과 같습니다.

10 / 100 / 1K / 10K / 100K
12 / 120 / 1K2 / 12K / 120K
15 / 150 / 1K5 / 15K / 150K
20 / 200 / 2K / 20K / 200K
22 / 220 / 2K2 / 22K / 220K
27 / 270 / 2K7 / 27K / 270K
30 / 300 / 3K / 30K / 300K
33 / 330 / 3K3 / 33K / 330K
39 / 390 / 3K9 / 39K / 390K
47 / 470 / 4K7 / 47K / 470K
51 / 510 / 5K1 / 51K / 510K
62 / 620 / 6K2 / 62K / 620K
68 / 680 / 6K8 / 68K / 680K
75 / 750 / 7K5 / 75K / 750K
82 / 820 / 8K2 / 82K / 820K
91 / 910 / 9K1 / 91K / 910K


다른 부품 구입시 같이 구입하였습니다.


이제 한동안은 0805 SMD 저항 구입할 일은 없겠네요.




5. LED

Duemilanove 와도 겹치는 부품입니다.

* 100pcs=5colors x 20pcs 5050 5730 1210 1206 0805 0603 LED Diode Assortment SMD LED Diode Kit Green/ RED / White / Blue / Yellow





6. Diode

원래는 SS1P3L-M3 이나, 수정된 보드에선 SS14 로 변경되어 있습니다.
Duemilaove 용으로 구입한 세트에 SS14 가 포함되어 있어서 추가 구매는 필요 없었습니다.

* 7 kinds*10pcs=70pcs/lot SMD diode package / M1 (1N4001) / M4 (1N4004) / M7 (1N4007)/ SS14 US1M RS1M SS34 KIT





7. Switch

Original arduino nano 에서는 대략 1210 SMD 정도 크기의 RST switch 가 큰걸로 2510 SMD 급으로 변경되어 있습니다.

* Smart Electronics 10 Kinds of Tactile Switches Push Button SMD Tact Switch Switch 100pcs


이전에 Wi-Fi 모듈 firmware upgrade 하기 위해 구입한 tactile switch 에 포함되어 있으니,
이번에 추가로 구입하지 않았습니다.

* Hardware | 스위치 부품 구매하기




8. USB female socket

Arduino Nano 사양서 상, Mini USB 이면 됩니다.

* 10PCS Short Type SMD Mini USB Connector Micro USB 5pin B type Female Jack For Mobile Phone Micro USB Jack Connector


잘 도착하여 받아본 부품 입니다.



다만, 요즘 Micro USB 추세라, Micro USB 도 구매합니다.

Mini USB 와 비교시 pin 간의 간격만 다를 뿐, pin 순서는 동일했습니다.


* 10pcs Micro USB connector 5pin seat Jack Micro usb Four legs 5P Inserting plate seat Mini usb connector Free shipping 


역시 Micro USB 가 더 단순하고 깔끔한 느낌을 줍니다.



Pin 간격이 좁을 뿐, 순서는 동일합니다.



혹시 몰라, 조금 높이가 있는 Micro USB 도 구매합니다.

* 10pcs/lot Micro USB 5P Connector Mini USB Jack Socket sink 0.72 FLAT MOUTH Width 1.0


다만, 요놈은 도착까지 3개월이 걸렸네요.






9. Pin head

예전에 male pinheader 가 필요했을 적에 구입해 놓은게 있어, 따로 구입하지 않았습니다.

* Hardware | 2.54mm pin header 구매하기


물론 검정 버전도 같이 가지고 있습니다.







10. ICs

이제 마지막으로 IC 주요 부품들 입니다.

FT232RL
- SSOP28 USB UART interface IC

* 5pcs/lot New FT232RL FT232 FTDI USB FS SERIAL UART SSOP28 serial chips imported original In Stock


Duemilanove 용으로 구입한 세트에 모두 포함되어 있습니다.



LM1117IMPX-5.0
- SOT223 Linear regulator

Regulator 인데, 소형이면서 5V / 800mA 대응의 제품은 많은 업자가 팔지도 않을 뿐더러 조금 비쌉니다.
가잘 적절해 보이는 제품이 밑의 링크라서 구입합니다.

* 10PCS/LOT LM1117IMPX-5.0-NOPB SOT223 IC N06B NO6B REG LINEAR 5V 800MA SOT223-4 LM1117IMP-5.0


사양 대로 LM1117IMPX/5.0 을 받고 싶었으나, 사진과 동일한 제품이 왔군요.



5V/800mA 사양대로라면 특별히 문제될껀 없다고 봅니다.



확대 사진입니다.



가지고 있는 arduino micro 를 확인해 보니, AMS1117 / 5.0 이군요.



ATMEGA328P-AU
- TQFP32 8-bit Microcontroller

워낙 유명한 chip 이라 쉽게 찾을 수 있습니다.
가격도 좀 있고 하니, 이번 프로젝트에 끌어들인 동료에게 구입을 의뢰합니다.

* 1PCS ATMEGA328P-AU QFP ATMEGA328-AU TQFP ATMEGA328P MEGA328-AU SMD new and original IC







16MHz Oscillator
- 3225 SMD Crystal ceramic resonator

Oscillator 는 길쭉한것이 아니라 정사각형 모양에 4개의 접점이 있는 모양입니다.


치수는 대략 2mm 조금 넘는것으로 보입니다.
다른 제조사 spec. sheet 를 찾아본 결과, 한쪽 면의 접점 거리가 2.1mm 인 것이 SMD 3225 형식이라는 것을 알아 냈습니다.


형식만 알면 제품을 선택하는 것은 그리 어렵지 않습니다.

AliExpress 에서 검색하니 바로 나오네요. 그 중에서 16MHz 제품을 선택해 줍니다.


* 10pcs SMD 3225 active crystal oscillator OSC 16MHZ 16M 3.2*2.5 3.3V 25PPM

- https://www.aliexpress.com/item/10pcs-SMD-3225-active-crystal-oscillator-OSC-16MHZ-16M-3-2-2-5-3-3V-25PPM/32776378121.html



잘 도착했구요.



Oscillator 치고는 직사각형으로 생겨서 신기합니다.






11. 조립

열풍기가 없으므로, 액체 플럭스를 이용하여 납땜해 갑니다.



인두 팁으로 납땜을 하다 보니, 아무래도 사용되는 납이 많아져 버립니다.

특히 소자 밑으로 스며들게 해야 하는 oscillator 가 가장 힘들었습니다. (좀 지저분하게 되었죠?)


표면에 안착되지 않은 듯 해서 납을 좀 많이 먹여버리기도 하고, 네 귀퉁이의 소자가 붙어버린 것 같아서 납을 빨아들이기도 하고.



0805 SMD 의 LED 소자는 납땜 하는 열로 인하여 안쪽 구조가 쉽게 망가질 수 있어서 신경이 많이 쓰였습니다.



신기한 것은, anode / cathode 가 쉽게 구분될 수 있도록 띠가 마킹 되어 있었습니다.



위의 사진 처럼, 돌기가 있는 쪽이 + 극이네요.



설계대로라면 USB mini B 이어야 하지만, 요즘은 micro USB 로 통합되는 분위기라서 micro USB 를 장착해 봤습니다.

리드선의 순서는 동일해서, 간극만 맞추고 납땜하면 되었습니다.


잘 안착되게 리드선을 밑으로 구부려서 납땜 해야 하는데, 그러지 않아서 납을 많이 먹여도 떠버리네요. (위 사진)



micro USB 부분의 접점이 잘 되지 않자, 조금 많이 인두로 지졌더랬습니다.

그랬더니 패턴이 나가버렸네요. ㅠㅠ (망함)



micro USB 를 PC 에 연결하면 LED 도 들어왔다 나갔다 뭔가 하는것 같은데, PC 에 인식이 되지 않았습니다.

pinheader 까지 다 납땜 해버렸는데...


이번 작업은 망했어요.

다시 이 기판을 주문하여 도착하면 다시 시작하려 합니다.


그러기 전에 열풍기로 작업해야 겠습니다.

열풍기가 준비 되면, 그 때 다시 arduino DIY 를 시작하겠습니다.


And

Hardware | 납땜 주변 용품

|

납땜 취미를 가지다 보면, 인두기부터 시작하여 납땜을 잘 되게 해주는 flux, 인두팁 관리용 제품 등, 다양한 용품이 필요합니다.

향후 작은 SMD 소자를 잘 납땜하기 위해서도 꼭 필요한 물건들이 되겠습니다.


관련된 제품 중에는 일본산이 많습니다. 마침 출장간 김에 부품을 준비해 봅니다.


참고로, 본 일본 제품 구매는, 지금의 무역분쟁이 발생하기 전, 올 5월달에 구매했던 내용입니다.





1. 소포왔다~!


필요한 물품들을 AliExpress 에서 구매해도 되나, SMD를 잘 납땜하기 위해서는 좋은 품질의 용품이 필요하니,

마침 일본 출장 때, Amazon Japan 에서 구매하여 호텔로 배달시켰습니다.



출장 중, 호텔 프론트에서 받는 소포란... 뭔가 업무에 중요한 물건이라도 된 듯 표정으로 받아 들고 옵니다.



박스 하나와 서류 봉투같은 것, 두 개 왔습니다.

업무를 마치고 홀가분한 마음으로, 에어컨 빵빵한 호텔방에서 홀라당 빤쓰 차림으로 기분 좋게 하나씩 뜯어 봅니다.



아... 이게 얼마만에 주문하여 받아보는 물품이던가.

작년 말에 필요했었지만, 저번 출장 때는 생각을 못해 구매를 놓쳐버려, 이번 출장 오자마자 바로 주문하고 받았습니다.



물건 부피는 다 합쳐도 크지 않지만, 배송 상 쉽게 배송할 수 있도록 적어도 이 사이즈의 박스로 배송한다고 어디선가 들었습니다.

중국 AliExpress 는 거의 편지봉투 수준인데...






2. Tip Refresher


정확한 명칭이 이건지 모르겠지만, 인투팁 피막에 엉겨붙은 불순물들을 날려주는 용품입니다.


* goot チップリフレッサー BS-2

https://www.amazon.co.jp/gp/product/B0016VDHIE/



이놈은 낱개 주문이 안되고, 한꺼번에 7개를 주문해야 배송해준다고 해서, 평생 쓸꺼 한꺼번에 샀습니다.



Before / After 모습을 그림으로 보여주고 있구요, 인두팁을 300~360도로 가열한 다음 사용하라고 되어 있습니다.



하나 까서 열어 봅니다.

손끝으로 만져보면, 무슨 금속 가루와 화학약품을 풀로 이겨서 굳혀 놓은것 같은 느낌입니다.



산화되어서 도저히 납땜이 되지 않는 저의 인투팁 등장.



달군 다음 살짝 fresher 에 뭍혀 봤습니다.



지지직~ 흠... 뭔가 변화가 별로 없네요?



아차차, 온도를 450 도로 맞춰 놨었네요.

310 도 정도로 낮춘 다음 다시 fresher 에 지져 봅니다.



오오오옷!

팁의 윤기가 돌아 왔어요~! 신기.


까슬까슬한 페이스트같은 게 녹으면서, 피막을 벗겨 내고 (사진상 페이스트에 뭍어있는 검붉은 색 부분)

혼합된 금속 가루들이 코팅되는 느낌입니다.


처음 구매했을 때의 때깔까지는 복원해 주지는 못하지만, 그럭저럭 사용할 만 하게 되었습니다.

효과 있네요.





4. Tip Recovery


이 제품도 인두 tip 을 재활시켜주는 물건입니다.


* goot チップリカバリー ST-45

https://www.amazon.co.jp/gp/product/B01LWO95KZ/



Tip Refresher 와 비교하여 뭐가 좋은지 몰라서 두개 모두 구매해 본 것입니다.



이놈은 Tip Refresher 와는 반대로, tip 을 완전히 식힌 다음, 이 고무같은 것에 문지르라고 합니다.



고무긴 고무인데, 금속과 혼합되어 있어서, 팁을 문지르면 팁 표면이 갈리는 느낌이 납니다.



살살살 문지르면, 지우개 똥 만들어 지듯, 문지른 주위로 똥이 만들어지고 우수수 떨어집니다.



느낌 상 이게 더 효과가 좋아 보입니다. 깔끔하게 갈렸어요.



별로 많이 문지르지도 않았는데, 저렇게 시커멓게 되는군요.



갈린 부분을 코팅하고자 Tip Refresher 도 해줬습니다.

이 두 물품은 같이 쓰는게 맞는 듯 하네요. 갈아서 벗겨주고, 코팅해주고.





5. Flux


이 제품은 납땜을 이쁘게 해주는 flux 입니다.

SMD 납땜에는 필수라고 할 수 있겠습니다.


이걸 납땜할 자리에 도포하고 납과 함께 지지면, 신기하게도 부품 다리와 PCB 패턴에 납이 잘 모입니다.


* goot プリント基板フラックス BS-75B

https://www.amazon.co.jp/gp/product/B004ANR7KY/



이놈만 병으로 되어 있어서, 뽁뽁이 봉투로 배달된 놈 입니다.



솔직히 이 가격에 이 용량은 좀 아닌것 같아요.



PCB 에 알아서 적정량 잘 발라주고, 잘 납땜하라고 설명하고 있습니다.



금싸라기 같은 용액이라, 일단 약통에 1/3 만 부어서 사용해 보도록 합니다.



주사기 같이, 끝이 아주 미세하게 뚤려 있서, 방울로 액체를 떨어트릴 수 있는 용기가 있으면 좋겠으나,

그런건 없으므로, 버릴 약통을 우선 사용했습니다.



가장 하고 싶었던, 가드다란 다리가 많은 chip 을 PCB에 납땜해 보기로 합니다.



이번에 해보려는 arduino nano DIY 기판 입니다.

이 액체 flux 가 도착하기 전까지 시작하지 못했던 arudino DIY 입니다.


* Hardware | Arduino 를 DIY 해보자 - 1

https://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-1


살짝 도포한다는게, 약병 구명이 너무 커서 한 5방울치 떨어진 것 같아요.



오호호~!!! 기대 이상으로 잘 되었습니다.

신기하게 납들이 금속으로 가서 붙네요. 저런 가느다란 다리임에도 불구하고 전혀 힘들지 않았습니다.


또한, 이 액체는 송진이 원료중에 하나라서, 솔방울 냄새가 나요.


그치만 이 용액만으로는 양이 부족할 듯 하여 알아보던 중,

미국 Amazon 에서는 1리터 짜리가 17 USD 하는 액체 flux 가 좋다고 너tube 에서 봐서 구매했습니다.


사실은 미국에서 출장오시는 분에게 부탁해서... 이걸 가지고 먼저 일정에 있던 중국 들렸다가 서울 오셨슴...

(중국 세관에서 해명하느라 혼났다 함)


* MG Chemicals 836LFNC Lead Free NO Clean Flux, 1 Litre, Bottle

https://www.amazon.com/gp/product/B01MYEE84K/



역시 통큰 나라답게 1리터다! (20ml 가 말이 되냐!)



크고 아름답습니다.



Product of U.S.A. 임... 이라고 당당하게 써 있네요. 따봉.

가격차가 3배 이지만, 용량 차이는 50배나 차이나는 goot (20ml) 놈과 비교해 보면...

효과는 별 차이가 없습니다.





6. Solder Wick


이 제품은 납을 빨아주는 솔더윅 입니다.

이미 알리에서 중국 제품을 구매했지만, 완전 효과 없슴.

원래 내가 기술이 없어서 안되는 것인지 제품이 이상한 것인지 확인하고 싶었습니다.


* goot はんだ吸取り線 CP-3015

https://www.amazon.co.jp/gp/product/B001PR1KPQ/



내가 기술이 없어서 납이 제대로 빨리지 않은 것이면, 많이 사두면 쓰레기만 늘어가는 것이니, 한 개만 구매해 봅니다.



납 위에서 인두로 지지라고 합니다.

중국제로도 그렇게 했는데 말이지...



길이는 1.5m... 미국의 기상을 본받자.



쥐똥만한 길이로 감겨져 있습니다.



ESP8266 의 Flash ROM chip 을 대용량으로 교체할 때, 사용해 봤습니다.

액체 flux 뿌리고 지져 댔습니다.



야이C... 잘됩니다.

깔끔하게 납이 흡수되어 기판에 붙어 있던 Flash ROM chip 이 분리 되네요.


* Hardware | ESP-01 or ESP8266 사용기 - 4

https://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-4


이로써 알리발 중국 제품은 전혀 효과 없음이 증명되었습니다.





7. Iospropyl Alchohol


기판 세척제로는 위험한 TCE, 친환경 세척제 등이 있다고 합니다만,

소독약으로 쓰이는 이소프로폴 알콜 99% 도 기판 세정에 딱이라고 하더군요. 인체에 해도 거의 없고.


그치만 99% Isopropyl Alchohol 을 구하긴 힘듭니다.

그래서 대체제로 소독용 에탄올을 구입했습니다. 1000원.


농도를 보니 83% 네요.

깔끔하게 세척해주지는 못하지만, 그나마 기판에서 불순물을 벗겨내서 날려 줍니다.



Flux 를 사용하면 아무래도 찌꺼기가 남습니다.

마무리는 에탄올 들이 붙고, 칫솔로 쓱싹쓱싹 하면 나름 깨끗해 집니다.







FIN


납땜 스테이션도 교체하고 싶고, 열풍기도 필요하고, Bench Power Supply 도 필요하고...

일단, 최소한 SMD 부품을 납땜 할 수 있는 용품은 준비가 되었네요.


이제 arduino nano DIY 를 시작해 보려 합니다.


And

Hardware | bluetooth 모듈 HC-06 / HC-05 사용해 보기 - 1

|

1. Bluetooth 통신


룰루~ arduino 로 놀 수 있는 센서나 모듈이 뭐가 있을까~ 하고 AliExpress 를 둘러 보던 중,

HC-05, HC-06, SPP-C 가 bluetooth 연결에 사용할 수 있는 모듈이라는 것을 알았습니다.


아직 쌓여있는 센서가 많지만, 일단 구매해 봅니다.


* SPP-C Bluetooth serial pass-through module wireless serial communication from machine Wireless SPPC Replace HC-05 HC-06

https://www.aliexpress.com/item/32755550889.html




* HC-05 HC 05 hc-06 HC 06 RF Wireless Bluetooth Transceiver Slave Module RS232 / TTL to UART converter and adapter

https://www.aliexpress.com/item/32523867394.html








2. 도착


한 업자에게서 구매 해서 동시에 배달되었습니다.



HC-05 이구요.



HC-06 이구요.



응? HC-05 랑 보드는 같고, 다른점은 오른쪽 밑에 스위치와 pin 갯수가 다른 것 뿐이네요.



뒷면에 세겨진 pin out 배열도 동일합니다.



SPP-C 만 다른 보드를 사용합니다.






3. HC-06


일단 오늘은, Slave 만으로 사용할 수 있는 가장 간단한 HC-06 구동을 시험해 보기로 합니다.

HC-05 는 Master / Slave 양쪽으로 사용할 수 있고, HC-06 은 Slave 만 가능하다 하네요.


보드가 동일한 것을 미리 알았더라면, HC-05 만 두개 살껄 그랬습니다.

SPP-C 는 완전 다른 모양이라 HC-05 / HC-06 을 가지고 놀아 보고 그 다음애 해보려 합니다.


구동 전원 Vcc 는 3.6v~5V 라서 arduino nano 의 3.3v 로는 조금 부족하고 5v 로 확실하게 구동됩니다.


HC-06 의 RXD, TXD 는 3.3v 를 이용한 입출력이므로. level shift 회로가 필요합니다만, 출력 (TXD) 은 그대로 하고,

입력 (RXD) 에 저항을 연결하여 회로를 보호해 줍니다.

사실 그대로 연결해도 됩니다만, 저항을 연결해 주는게 느낌상 좋습니다.


실제로 전용회로를 꾸미게 되면, 입출력 전압을 측정하여 거기에 맞는 저항을 달아 주는 것이 좋겠죠?

사양은 다음과 같습니다.


- Bluetooth protocol: Bluetooth V2.0 protocol standard

- Power Level: Class2(+6dBm)

- Band: 2.40GHz—2.48GHz, ISM Band   

- Receiver sensitivity: -85dBm

- USB protocol: USB v1.1/2.0

- Modulation mode: Gauss frequency Shift Keying

- Safety feature: Authentication and encryption

- Operating voltage range:+3.3V to +6V

- Operating temperature range: -20ºC to +55ºC

- Operating Current: 40mA


* Specification : hc06.pdf





4. pin out


여러 연결 방법이 있을 수 있으나,

우선 가장 간단한 arduino nano 를 통해서 PC 와 통신을 시도해 봅니다.

Pin out 정보 입니다.


 HC-06 | Arduino Nano
-----------------------
  RXD  |      D2
  TXD  |      D3
  GND  |      GND
  VCC  |      3.3V
-----------------------



아두이노에서 받는 3.3v 전원은 조금 약한 감이 있고, 5v 를 받자니 arduino nano 가 버거울 것 같아,

외부 전원을 사용하면 안정적으로 3.3v 인가 가능할 것 같습니다.


실제로 arduino nano 의 3.3v 에 연결하면, 되었다 안되었다 불안한 동작을 보여 줍니다.





5. layout


연결 diagram 입니다.



실제로 아래와 같이 연결했습니다.



삽질한 부분은 arduino nano 와 추가 전원의 ground 는 서로 연결해줘야 하는 것이였습니다.

그렇지 않으면, 정상적으로 통신이 되지 않습니다.

Ground 는 꼭 서로 맟춰 줘야 합니다.





6. sketch


아래는 arduino nano 를 PC 와 연결 할 경우에 사용한 소스 입니다.


#include "SoftwareSerial.h"
 
#define HC06_RXD 2
#define HC06_TXD 3
SoftwareSerial bluetooth(HC06_RXD, HC06_TXD);
 
void setup(){
  Serial.begin(9600);
  bluetooth.begin(9600);
}
 
void loop(){
  if (bluetooth.available()) {
    Serial.write(bluetooth.read());
  }
  if (Serial.available()) {
    bluetooth.write(Serial.read());
  }
}





7. AT commands


HC-06 과 연결되면 AT 명령어를 통해서 상태 확인이 가능합니다. 



Arduino IDE > Tools > Serial Monitor 를 띄우고 위의 AT 명령어들을 쳐 봅니다.



통신 속도 = baud rate 는 9600 으로 해야 합니다.

HC-06 은 공장 출하 설정이 9600 bps 로 되어 있습니다.


Bluetooth 이름은 "HC-06" 이구요, ROLE 은 0, 즉 SLAVE 로 되어 있습니다.


* AT+ROLE: See role of bt module(1=master/0=slave)



Password 는 기본 "1234" 로 되어 있습니다.


통신 속도 UART 는 9600 으로 되어 있네요.

바꾸고 싶을 경우는 아래와 같이 설정하면 됩니다.


* 1 set to 1200bps

* 2 set to 2400bps 

* 3 set to 4800bps 

* 4 set to 9600bps (Default) 

* 5 set to 19200bps 

* 6 set to 38400bps 

* 7 set to 57600bps 

* 8 set to 115200bps

  ex) AT+BAUD4 will set the baud rate to 9600



다른 명령어도 다 쳐 봤습니다.





8. Windows 10 과 연결해 보기


Windows 10 에서 블루투스 장치로 연결해 봅니다.



HC-06 을 연결하면 비번을 물어봅니다.



블루투스다 보니 잘 연결됩니다.



장치관리자에서 연결된 HC-06 의 주소를 확인해 보면, 가지고 있는 HC-06 의 address 인 것을 알 수 있습니다.

동일한 장치임을 확인 할 수 있는 부분이죠.



COM 포트를 확인해 보면, 송신 port 가 COM8 임을 알 수 있네요.



시리얼 포트 리스트에도 떠 있습니다.



putty 를 이용하여 COM8 에 연결합니다.



오호라. putty 에서 타이핑 한 것은 보이지 않지만, 글씨를 타이핑 후,

"Ctrl + M, J" 를 치면 arduino IDE 의 Serial Monitor 에서 송신된 단어를 확인할 수 있습니다.



반대로, Serial Monitor 에서 글씨를 치고 Send 를 누르면, putty 화면에 나타나는 것을 확인 할 수 있어요.






9. USB UART CP2102


Serial 연결은, USB Serial 장치인 CP2102 를 통해서도 연결해 봅니다.



RXD 는 저항을 달아서 보호해 주면서, 그림과 같이 연결해 줍니다.


 HC-06 | CP2102
----------------
  RXD  |  TXD
  TXD  |  RXD
  GND  |  GND
----------------

실제 연결은 다음과 같습니다.



역시 putty 를 이용해서 확인해 봅니다.



모든 AT commands 가 잘 먹힙니다. 정상적으로 통신이 가능하네요.





FIN


HC-06 / HC-05 은 해볼 것이 여러가지 있는것 같습니다.

일단 오늘은 HC-06 의 여러가지 연결법과 AT commands 를 사용해 봤습니다.


다음은 HC-05  HC-06 을 사용하여 Master / Slave 연결 등을 활용해 볼께요.




Update - 20210124


사진 정리를 하다, 예전 경주에 놀러갔을 때, 3D 놀이공간 건물 한켠에 전자 공방에서 찍은 사진을 발견.

HC-06 / HC-05 는 bluetooth 에 있어서 널리 사용되는 모듈임을 새삼 다시 알게 되었네요.



And

Hardware | tilt sensor 를 사용해 보자

|

이 글은 아래 포스트와 연결되는 글 입니다. 


* Hardware | vibration sensor 를 사용해 보자

https://chocoball.tistory.com/entry/Hardware-vibration-sensor


저번에 잘못 배송되어 온 센서가, 이 Tilt Sensor 입니다.

원래는 Vibration Sensor 를 구매하려 했는데, 사양이 다른 이 기울기 센서가 왔던 것이죠.


동작 방식도 다르다 보니, 이렇게 따로 구분하여 글을 올립니다.




1. SW-520D tilt sensor


이 Tilt 센서는 의도치 않게 구매하게 되었습니다.

아래 링크에서 보이듯이 SW-18015P 라고 되어 있는데 거짓말 입니다.


* 3pin KY-002 SW-18015P Shock Vibration Switch Sensor Module for arduino Diy Kit 1PCS

https://www.aliexpress.com/item/3pin-KY-002-SW-18015P-Shock-Vibration-Switch-Sensor-Module-for-arduino-Diy-Kit-1PCS/32843226927.html



도착은 합니다만...



Vibration Sensor 의 특징인 한쪽 다리가 가는게 아니라, 이놈은 두가닥 모두 두껍습니다.



음?!!!



센서 표기를 보니 SW-18015P 가 아니라, SW-520D 라고 되어 있네요?

제품 사양을 확인해 보니, SW-180 계열의 스프링 형태가 아니라 굴러다니는 공이 안에 들어있는 구조 입니다.



SW-520D.pdf


원리가 다르다 보니 센싱에 있어서도 차이가 있어 보입니다.





2. Layout


센서의 연결은 간단합니다. 전원 +/- 와 신호선 1개.


기울기 센서는 안에 들어가 있는 볼이 리드선과 접촉했냐 안했냐에 따라서 센싱을 합니다.

그래서, 세워졌을 때 중력으로 두 개의 볼과 리드선이 모두 접촉해 있을때를 기준으로 ON 으로 인식합니다.


접속은 다음과 같습니다.


 SW-520D | Arduino Nano
------------------------
    S    |     D8
   GND   |     GND
   VCC   |     3.3V
------------------------


회로도는 다음과 같습니다.



실재 구성 모습니다.






3. Sketch


Source 는 다음과 같습니다.


int LED = 3; // define the LED Pin
int shock = 8; // define the sensor Pin 
int val; // define a numeric variable val 

void setup () {
	Serial.begin(9600);      // Only for debugging
	pinMode (LED, OUTPUT); // LED pin as output
	pinMode (shock, INPUT); // input from KY-002 sensor
}

void loop () {
	val = digitalRead(shock); // read the value from KY-002
	
	if (val == HIGH ) { // when sensor detects shock, LED flashes
		digitalWrite(LED, HIGH);
		Serial.println(val);
	} else {
		digitalWrite(LED, LOW);
		Serial.println(val);
	}
}




4. 결과


디지털 pin 에 입력이 연결되어 있다 보니, 1 or 0 으로 표시됩니다.



사양서 처럼, 세워져 있는 형태가 기준이 됩니다.

손가락으로 튕겨 진동을 주면 흔들리는 정도에 따라 센싱을 합니다.


옆으로 뉘이면 계속 센싱을 하는것 처럼 되어 버리니, 이 센서를 사용함에 있어서는 세우는 것이 중요해 보입니다.






FIN


뉘거나 기울이면, 오작동 하지만, 세워 놓기만 하면 꽤나 민감하게 반응해 줍니다.

Vibration Sensor 와는 다르게 Tilt Sensor 도 괜찮아 보입니다.


처음 제품이 잘못 온것도 있지만, 이렇게 테스트 해볼 수 있어서 행운이었습니다.


And

Hardware | vibration sensor 를 사용해 보자

|

1. 원리


왠만한 센서들을 시험해 봐서, 점점 arduino 와 놀아 볼 sensor 들이 적어짐을 요즘 느끼고 있습니다.

여러 사이트를 돌아다니다가 Vibration Sensor 가 있음을 알게 됩니다.


오호이, 바로 구입하여 시험해 봤습니다. (물론 AliExpress 이고, 이번 배송은 한달...)



원리는, 코일로 감겨있는 전선이 흔들리면서 중앙에 있는 심지에 닿아, 전기적으로 short 되는 정도를 가지고 측정하는 것입니다.


또한 모델별 제품의 특성으로는,

센서 원통이 길수로 예민하게 반응하고, 모델명에 "P" 가 들어가 있으면 막혀있는 구조라고 합니다.



* 제품 설명 PDF : usr_attachment_Vibration_Sensor_SW180.PDF





2. 구입


AliExpress 에서 검색하면 여러 종류가 나오지만, 그들 중에서 외형이 깔끔한 제품을 선택합니다.

Order 갯수가 3개밖에 없어서 좀 불안하기는 합니다만, 주문해 봅니다.


* KY-002 Vibration Switch Module Vibration Sensor SW-18015P For

https://www.aliexpress.com/item/KY-002-Vibration-Switch-Module-Vibration-Sensor-SW-18015P-For-Arduino/32274071530.html



도착은 했지만, 일반적인 봉투에 그냥 보내서 90도가 꺾인 모습으로 배송되었습니다.

그러면서 단선도 되었네요.



Refund 요청 넣고, 정신줄을 바로잡은 다음, 다시 제품을 검색합니다.


* 3pin KY-002 SW-18015P Shock Vibration Switch Sensor Module for arduino Diy Kit 1PCS

https://www.aliexpress.com/item/3pin-KY-002-SW-18015P-Shock-Vibration-Switch-Sensor-Module-for-arduino-Diy-Kit-1PCS/32843226927.html



이놈은 아예 꺾여있고, terminal 두께가 더 두껍습니다.

원래 한쪽 터미널은 얇게 표현된 사양서와 달라 보입니다만, 우선 기본 동작을 확인하는게 먼저니 이것을 구입합니다.



음? 그런데 새로 도착한 센서 번호가 SW-18015P 가 아니라, SW-520D 라고 표기되어 있네요?

사양을 확인해 보니, SW-18015P 의 스프링 형태가 아니라 굴러다니는 공이 안에 들어있는 구조 입니다.



SW-520D.pdf


원리가 다르다 보니 센싱에 있어서도 차이가 있어 보입니다.

이 Tilt Sensor는 다음 포스트에서 따로 다루었습니다.


* Hardware | tilt sensor 를 사용해 보자

https://chocoball.tistory.com/entry/Hardware-tilt-sensor





3. 센서 /wo breakout board


음... 다시 정신을 차리고, SW-18010P 센서 구입하기 위해 AliExpress 를 뒤집니다.


* 10pcs/lot SW-18010P SW18010P Snap Switch Shock Sensor High Sensitive Vibration Switches ROHS High Quality

https://www.aliexpress.com/item/10pcs-lot-SW-18010P-SW18010P-Snap-Switch-Shock-Sensor-High-Sensitive-Vibration-Switches-ROHS-High-Quality/32864605129.html



이렇게 breakout 보드 없이 센서만 따로 파네요.



센서만 따로 구입했습니다.



이번에는 틀림 없는 "SW-18010P" 입니다.



우여곡절 끝에 기존 고장난 센서와의 스와핑이 끝났습니다.


처음 구입했던, 고장나서 배송되어 온 센서를 가위로 잘라 봤습니다.



사양서 대로 중간에 두꺼운 봉이 있고, 그 주위를 스프링이 접촉없이 둘러 쌓인 구조 입니다.



스프링이 촘촘해서 요로코롬 늘어나요.

진동이 오면 스프링이 어떻게 흔들리나 동영상도 찍어 봤습니다.






4. Layout


연결은 GND 에 5V 를 인가하는 모양으로 연결하였습니다.


SW-18010P | Arduino Nano -------------------------- S | A0 GND | 5V Vcc | --------------------------


Vcc 에 왜 전원이 인가되지 않고, GND 에 인가되었냐고 생각할 수 있습니다.

지금껏 해오던 것처럼, GND / Vcc 에 마이너스 (-) 와 전원을 연결하면 제대로 동작하지 않더군요.


여러 조합을 시험해 본 결과, 센서와 Breakout 보드와 결합된 모양을 감안하여,

두꺼운 부분이 Vcc 와 연결되어 전압이 인가되어야 하고, 가느다란 선이 analog input 으로 가야 맞아 보입니다.


솔직하게 S / + / - 모두 연결해도 되나, 그렇게 되면 너무 둔감하게 반응합니다.

이는 아래 사진처럼 S / + 단자 사이에 저항을 끼어 놔서, 저항에 걸리는 전압과 센서에 걸리는 전압을 동일하게 가져가게 되고,

저항의 값이 센서의 감도를 좌우하게 됩므로 calibration 이 없으면 의미가 없어집니다.



아래는 최종 연결도 입니다.



아래는 실재 사진이구요.






5. Sketch


진동이 감지되면 LED가 켜지고 buzzer 가 울리는 코드 입니다.

그냥 진동 센서만 가지고 놀면 재미가 없으니, LED 와 Buzzer 도 함께 구성해 봤습니다.


또한, analogRead() 함수를 사용하여, 입력 신호를 1023개로 레벨링 하여 숫자로 표현해 줍니다.


마이너스(-) 단자에 5V 를 입력시켰으니, A0 에 max 1023 으로 값이 나올것 입니다.

관련해서는 아래 7. 참고 를 참조해 주세요.


센싱의 가장 적절한 값으로 1000 이상 되면 LED 와 Piezo 를 활성화 하게 했습니다.

그 밑의 값도 나옵니다만, 예민한 것도 있고, 진동 강도에 따라 살짝 안맞는 부분이 있어 보입니다.


int LED = 3; // define the LED Pin
int PIEZO = 2; // buzzer
int val; // define a numeric variable val 

void setup () {
  Serial.begin(9600); // Only for debugging
  pinMode (LED, OUTPUT); // LED pin as output
}

void loop () {
	val = analogRead(A0); // read the value from KY-002
	
	if (val > 1000 ) { // when sensor detects shock, LED flashes
		digitalWrite(LED, HIGH);
		Serial.print("Sensor Value: ");
		Serial.println(val);
		tone(PIEZO, 500);
	} else {
		digitalWrite(LED, LOW);
		Serial.print("Sensor Value: ");
		Serial.println(val);
		noTone(PIEZO);
	}
}


기준값 조정 - calibration - 이 되어야 정밀하게 사용할 수 있을 듯 한데요,

정밀하게 사용하려면, 아래 처럼 breakout 보드에서 입력값 조정하는 회로가 추가되어야 할 것입니다.



가능하면 위와 같은 breakout 보드를 사용할 것 그랬습니다.

(그놈의 돈이...)





6. 결과


Serial Monitor 로는 아래와 같이 아날로그 값이 감지됩니다.



손가락으로 가볍게 치거나 흔들면 1000 이상 되기 때문에, 이때에 LED 와 Piezo 가 반응하도록 했습니다.

아래는 그 동영상 입니다.






7. 참고


처음 arduino 를 접하면서 analog 값에 대한 정확한 사용을 몰랐는데,

이번에 1023 으로 자동 leveling 하는 것을 정확하게 알게 되었습니다.


아래는 아날로그 값을 입력받는 방법에 대한 내용을 arduino 사이트에서 캡춰해 봤습니다.


* Read Analog Voltage

https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage


The microcontroller of the board has a circuit inside called an analog-to-digital converter or ADC that reads this changing voltage and converts it to a number between 0 and 1023. When the shaft is turned all the way in one direction, there are 0 volts going to the pin, and the input value is 0. When the shaft is turned all the way in the opposite direction, there are 5 volts going to the pin and the input value is 1023. In between, analogRead() returns a number between 0 and 1023 that is proportional to the amount of voltage being applied to the pin.





FIN


처음 시작이 고장난 센서였고, 센서만 따로 구매하여 스왑 하는 등, 깔끔하지는 못했으나,

GND 단자에 Vcc 를 연결하면서부터 어느정도 활용할 수 있는 정도로 되어서 기쁩니다.


다음에 vibration sensor 를 다시금 사용하게 된다면, 전용 breakout 보드에 붙은 센서를 구입해서 활용해 보겠습니다.


And

Hardware | touch sensor 를 이용하여 놀아보기

|

오늘은 머리도 식힐 겸, touch sensor 를 가지고 놀아 봤습니다.




1. 구입


터치 센서로는 몇가지가 있지만, RobotDyn 사에서 만든 센서를 선택했습니다.

RobotDyn 사의 기판색이 블렉이고 마무리가 깔끔해서 좋습니다.


* Digital capacitive touch switch sensor. Double side touch area. Module.

https://www.aliexpress.com/item/Digital-capacitive-touch-sensor/32570170116.html






2. 도착


워낙 저렴하고 간단한 부품이라 잊어버리고 있으니 도착해 있더랬습니다.



이 부품은 특이하게 "Capacitive" 라는 단어가 들어가네요.

유도체적인 성질을 가지는 것인가? 라는 생각을 잠시 해봅니다.



외형은 요렇습니다.

Touch Sensor 라고 표시된 밑부분에서 감지를 하도록 되어 있습니다.

Digital Out 이라고 표기해 놔서 arduino 의 digital pin 에 연결하면 된다는 것을 알 수 있네요.



신기하게도 뒷면의 동일한 부분도 터치인식을 합니다.






3. layout


Pin 연결은 digital pin 과 연결하면 됩니다.

전압은 3.3V 줬습니다.


 Touch Sensor | Arduino Nano
-----------------------------
      Out     |     D4
      GND     |     GND
      VCC     |     RX
-----------------------------


회로도는 다음과 같습니다.

그냥 터치센서만 연결하면 어떻게 인식되는지 알 수가 없으니, LED 와 Piezo Buzzer 를 추가했습니다.

Piezo buzzer 사용하는 법은 아래를 참고해 보세요.


* Hardware | Arduino 로 buzzer 소리내기

https://chocoball.tistory.com/entry/HardwareArduinoBuzzer


LED는 220 ohm 저항을 달아주는 것을 잊지 마시구요.



실제 사진은 다음과 같습니다.






4. Sketch


소스는 다음과 같습니다.

각 digital pin 을 정의하고, touch sensor 에 입력이 들어오면 LED 와 buzzer 를 on 하는 구조 입니다.


입력이 없어지면, LED 및 buzzer 오 off 를 꼭 만들어 줘야 합니다.


int T_IN = 4;
int LED = 3;
int PIEZO = 2;

void setup()
{
	pinMode(T_IN, INPUT);
	pinMode(LED, OUTPUT);
}

void loop()
{
	if(digitalRead(T_IN)) {
		digitalWrite(LED, HIGH);
		tone(PIEZO, 600);
	}
	digitalWrite(LED, LOW);
	noTone(2);
}





5. 결과


너무 단순한 내용이라 틀리고 자시고 할 것이 없습니다.

동영상 갑니다.



신기한 것은 손가락이 직접 닿지 않더라도 가까이 대기만 해도 인식합니다. 한 1.5mm 정도?






FIN


요즘 항공무선통신 자격증을 준비하면서, 예전 실기 과목으로는 모르스 부호도 했었다는 것을 알게 되었습니다.

항공무선통신 자격증 시험 준비에 대해서는 다른 포스트에 있습니다.


* Life | 항공무선통신사 도전기 - 1

https://chocoball.tistory.com/entry/Life-airnav-comm-cert-1


나중에 시간 되면, 이번에 했던것을 조금 발전시켜 morse code + arduino 도 한번 도전해 보겠습니다.





* Morse code

https://en.wikipedia.org/wiki/Morse_code


Morse code is usually heard at the receiver as a medium-pitched on/off audio tone (600–1000 Hz), so transmissions are easier to copy than voice through the noise on congested frequencies, and it can be used in very high noise / low signal environments.


And

Hardware | PN523 - RFID / NFC breakout 보드

|

이 글은, 아래 포스트에서 예고 했듯이, RFID / NFC 를 arduino 를 이용하여 tag를 인식시켜 보는 글 입니다.


* Book | 훤히 보이는 RFID/USN - Get to know RFID/USN

https://chocoball.tistory.com/entry/Book-Get-to-know-RFID-USN





1. 대응 가능한 chip


RFID / NFC 를 읽을 수 있는 chip 중에 PN532 가 FeliCa 도 인식할 수 있으며, 대중적으로 구입 가능하다는 것을 알게 되었습니다. (범용)


* RFID Selection Guide - Adafruit Industries

https://cdn-shop.adafruit.com/datasheets/rfid+guide.pdf

rfid+guide.pdf



PN5xx 시리즈 중에서 시중에서 구입 가능한, 그리고 xx 부분의 숫자가 큰 것으로는 PN532 가 있더군요.

가장 우수한 chip 으로는 PN544 입니다만, 관련 breakout 은 5만원 이상이었습니다.


저렴하게 AliExpress 에서 골라서 구입합니다.


* 1Set GREATZT PN532 NFC RFID Wireless Module V3 User Kits Reader Writer Mode IC S50 Card PCB Attenna I2C IIC SPI HSU For Arduino

https://www.aliexpress.com/item/1Set-GREATZT-PN532-NFC-RFID-Wireless-Module-V3-User-Kits-Reader-Writer-Mode-IC-S50-Card/32859551116.html



- User manual : PN532_Manual_V3.pdf


[Features]

1. Gilt PCB and Small dimension and easy to embed into your project

2. Support I2C, SPI and HSU (High Speed UART), Change between those modes

3. Support RFID reading and writing

  1) SupportP2P communication with peers

  2) Support NFC with Android phone


4. Typical Operating Distance have been updated to 5cm~7cm reading distance

5. Work in NFC Mode or RFID reader/writer Mode

6. RFID reader/writer supports:

  1) 1k, 4k, Ultralight, and DesFire cards

  2) ISO/IEC 14443-4 cards such as CD97BX, CD light, Desfire, P5CN072 (SMX)

  3) Innovision Jewel cards such as IRT5001 card

  4) FeliCa cards such as RCS_860 and RCS_854


7. Plug and play, for compatible

8. Built in PCB Antenna, with 4cm~6cm communication distance

9. On-board level shifter, Standard 5V TTL for I2C and UART, 3.3V TTL SPI

10. Work as RFID reader/writer

11. Work as 1443-A card or a virtual card

12. Exchange data with other NFC devices such as smartphone



[Package Included]

1 x1PCS*PN532 NFC RFID Module

1x 2.54mm spacing 4pin Cable

1xMifare One S50 White Card

1xMifare One S50 Key Card

1x12P bended male pins


사양을 보면 FeliCa 도 읽을 수 있다고 되어 있습니다.

FeliCa 는 일본 지하철 / 국철에서 사용할 수 있는 Suica / PASMO 카드에 사용된 기술입니다.

마침 일본에서 사용했던 Suica / Pasmo 카드를 가지고 있으니, FeliCa 대응 가능한 이 breakout 을 이용할 수 있겠네요.


다만, fake 제품은 읽을 수 없다고 합니다. (나중에 안 사실)

AliExpress 에서 구매할 수 있는 저가품이다 보니, 아마 불가능할 것 같다는 느낌은 듭니다.





2. 도착


배송에 한달정도 소요되었습니다.



구성품은 다음과 같습니다.

Tag 종류가 둥그런 것과 카드형식, 두가지가 들어 있네요.



Breakout 보드의 확대 사진입니다.



뒷면입니다. I2C 용 pin head 와 SPI 용이 따로 구분되어 있습니다.



Arduino 와 연결하기 위해서 pin head 들을 납땜 했습니다.

납땜 팁이 오래 쓰면서 산화되어 버려 이제는 납볼이 잘 생성되지 않았지만, 어떻게든 이쁘게 된것 같네요.







3. Library 설치


이 보드에 관한 제작 / 판매하는 사이트를 따라가다 보면 Seeed Studio 라는 회사가 떠오릅니다.

관련한 source 들은 아래 GitHub 에서 공유되어 있습니다.


* elechouse/PN532

https://github.com/elechouse/PN532


위의 사이트에서 설명되어 있기론, 아래 두 파일을 Arduino libraries 폴더에 압축을 풀어서 copy 하라고 합니다.

결국 위의 GitHub 의 파일과, 추가로 Don 이라는 사람이 만든 NDEF 파일을 Arduino > libraries 에 설치하면 준비는 끝납니다.


PN532-PN532_HSU.zip

NDEF-master.zip


위에서 시키는 대로 하면, PN532 directory 가 많아지므로, 구분을 위해 prefix "elechouse" 를 붙여서 아래처럼 저장했어요.



다른 source 로는, 가장 유명한 adafruit 에서 나온 PN532 library 를 설치하면 됩니다.


* adafruit/Adafruit-PN532

https://github.com/adafruit/Adafruit-PN532


위에서 파일을 다운로드 받아 libraries 에 copy 해도 되고, 아래처럼 Library Manager 를 이용하여 install 해도 됩니다.



다만, adafruit 소스에는 HSU (High Speed UART) 연결방식이 지원되지 않습니다.

그러니 HSU 를 사용하고 싶으면, 처음에 소개된 elechouse source 가 필요합니다.





4. I2C 연결


이제 소스를 올리고 RFID 인식을 시켜 봅니다.

Arduino 와 연결 방식은 I2C / SPI / HSU 가 있으니, 먼저 가장 단순한 I2C 를 이용해 봅니다.


아래처럼 DIP switch 를 I2C 방식으로 변경합니다.



문제 없이 I2C 통신이 이루어 지는지 I2C detect 소스로 확인해 봅니다.

방법은 예전에 올렸던 아래 포스트에서 확인해 보세요.


* Hardware | Gyroscope GY-521 MPU-6050 을 사용해 보자

https://chocoball.tistory.com/entry/Hardware-Gyroscope-GY521-MPU6050



PN532 breakout 의 측정된 주소로 "0x24" 가 나왔네요.

연결은 다음과 같이 합니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     A4
    SDL   |     A5
-------------------------


연결 layout 은 다음과 같습니다.

구매한 breakout 보드와 동일한 fritzing 파트를 찾을 수 없어서 adafruit 에서 나온 것을 사용하였습니다.



여타 I2C 연결이 그러하듯 동일합니다.



아래 sample source 를 arduino 에 로드합니다. iso14443a_uid 가 처음 시작하기에 가장 평범한 소스라고 하네요.


File > Examples > elechouse_PN532 > iso14443a_uid



Serial Monitor 에서 확인하면 다음과 같이 인식합니다!



위의 소스의 단점은 준비 상태로 되는 것과 카드를 태킹하면 인식에 시간이 좀 걸린다는 것 입니다.

실생활에 전혀 사용할 수 없는 수준이네요.


그럼 이번에는 Adafruit 의 동일한 소스를 사용해 봅니다.


File > Examples > Adafruit PN532 > iso14443a_uid


adafruit 소스는 먼저번 소스와는 다르게, IRQ 와 RESET (RSTO) 를 추가로 연결하는 부분이 존재합니다.


// If using the breakout or shield with I2C, define just the pins connected
// to the IRQ and reset lines.  Use the values below (2, 3) for the shield!
#define PN532_IRQ   (2)
#define PN532_RESET (3)  // Not connected by default on the NFC Shield

// Uncomment just _one_ line below depending on how your breakout or shield
// is connected to the Arduino:

// Use this line for a breakout with a SPI connection:
//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

// Use this line for a breakout with a hardware SPI connection.  Note that
// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino's
// hardware SPI SCK, MOSI, and MISO pins.  On an Arduino Uno these are
// SCK = 13, MOSI = 11, MISO = 12.  The SS line can be any digital IO pin.
//Adafruit_PN532 nfc(PN532_SS);

// Or use this line for a breakout or shield with an I2C connection:
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);


위의 소스의 일부분에서 보여주는 것 처럼 SPI 부분을 주석처리 하고, I2C 부분을 활성화 시킵니다.

두개의 pin 연결이 아래처럼 추가되었습니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     A4
    SDL   |     A5
    IRQ   |     D2
   RSTO   |     D3
-------------------------


결과는 인식률과 인식 속도가 엄청 빨라졌습니다.

결국 IRQ / RESET 핀이 준비상태 및 인식 처리를 추가로 담당한다는 것을 예상할 수 있습니다.

Serial Monitor 결과는 다음과 같습니다.



참고로 위의 소스로 신용카드 (버스카드) 를 인식 시키면 "Mifare Classic" 으로 읽어보라고 메시지가 뜹니다.


File > Examples > Adafruid PN532 > readMifareClassic 을 로드 시켜 봅니다.



뭔가 정보를 더 많이 뿌려줌과 동시에, "Mifare Classic" 이라고 이야기 해 줍니다.


조금 벗어난 이야기 이지만,

RFID / NFC 분야도 존재하는 규격이 많아서 chip 제조사로서는 골치가 아플 듯 합니다.


이것도 결국 기술 로열티와 표준 제정 이권싸움의 결과겠죠.

Thunderbolt 도, 결국은 Thunderbolt 3 = USB Type-C 로 통합되듯, 언젠가 RFID / NFC 도 통합이 되었으면 좋겠습니다.





5. SPI 연결


이제 SPI 연결을 시도해 봅니다. 역시 많은 데이터 교환은 I2C 보다는 SPI 방식입니다.

먼저, Software SPI 연결법 입니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SCK   |     D2
    MISO  |     D5
    MOSI  |     D3
    SS    |     D4
-------------------------


소스는 adafruit 의 것을 이용해 봅니다. (elechouse 것도 상관 없슴)


File > Examples > Adafruit PN532 > readMifare


이미 소스에서 SCK / MOSI / SS / MISO 의 pin 번호를 정희해 놨으므로, 그에 맞게 arduino 와 연결해 줍니다.



TIMEOUT! 이 뜨긴 합니다만, 결과는 아래와 같이 잘 나옵니다.

아무래도 Software SPI 여서 그런 듯 합니다.



역시 SPI 는 Hardware SPI 죠. Hardware SPI 법으로 구동해 봅니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SCK   |     D13
    MISO  |     D12
    MOSI  |     D11
    SS    |     D4
-------------------------


SS pin 은 어느 digital IO pin 이나 상관 없습니다.

이미 PN532_SS 를 4 번 pin 으로 정의해 놨으니, 그 pin 을 그대로 사용합니다.



나머지 pin 들은 각각의 arduino 에 맞게 연결하면 됩니다.

참고로 arduino nano 는 위의 주석에 설명되어 있는 것처럼 SCK = 13, MOSI = 11, MISO = 12 로 맞추면 됩니다.

이는 아래 그림처럼 실제 nano 의 pin out 과 동일합니다.



결과는 다음과 같이 나옵니다. TIMEOUT! 도 없고 인식도 가장 빠른것 같아요.



동영상도 올려 봅니다.






6. FeliCa 인식


FeliCa 가 된다고 하니, electhouse 소스의 FeliCa_Card_Read 를 실행해 봅니다.


File > Examples > elechouse_PN532 > FeliCa_Card_Read


실망스럽게도 PASMO 는 인식되지 않았습니다.

당연하게도 Mifare (ISO14443A) 카드들에게는 전혀 반응하지 않았구요.


단, 희한하게도 일본에서 사용했던 Times (한국의 SOCAR 같은 서비스) 카드는 이 소스로 읽혔습니다.



FeliCa 도 여러 종류가 있는 듯 합니다.

아쉽게도 지하철에 사용되는 FeliCa 인, 일본의 PASMO 와 싱가포르의 EZ-Link 는 어떤 소스에도 읽히지 않았습니다.





7. High Speed UART 연결


특이하게 HSU 라는 연결 방법을 제공합니다. 이는 High Speed UART 의 약자.

이 HSU 는 Hardware Serial (Serial1) 을 바탕으로 소스가 만들어졌습니다.



다만, 위의 표에서 보이듯이, Hardware Serial 를 사용하는 지라, 일부 arduino 에서는 Serial Monitor 를 열어서 확인할 수 없게 됩니다.

Arduino Nano 도 Hardware Serial 은 USB 통신에 점유되어 있어서 "Serial1" 을 사용할 수 없었습니다.



하늘이 무너져도 솟아날 구멍은 있다던가요, 가지고있는 arduino micro 에서는 사용 가능했습니다.

그럼 아래 source 를 arduino micro 에 업로드 해봅니다.


File > Examples > electhouse_PN532 > iso14443a_uid


PN532_HSU 쪽을 활성화면서 "Serial1" 을 사용하게 합니다.



Arudino micro 와의 pin 연결은 다음과 같습니다.


   PN531  | Arduino Micro
--------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     RX
    SDL   |     TX
--------------------------


잊지 말아야 할 것은, DIP switch 를 HSU 으로 설정해 둬야 합니다.



Arduino micro 의 RX / TX 와 연결하여 HSU 인겁니다.



오오오오! 느낌적으로 SPI 보다 더 빠른 듯 합니다. 이게 가장 빠르네요.




결과는 이렇게 보이구요.



동영상도 올려 봅니다.



그럼 arduino nano 처럼 Hardware Serial 여유가 없는 arduino 는 안되는거냐!

찾아보니 방법을 GitHub 의 설명에서 친절하게 알려주고 있었습니다.


아래 소스처럼 "SoftwareSerial.h" 를 이용하여 구현이 가능합니다.

우선 바로 아래는 Hardware Serial 로 구현된 부분을...


#include "PN532_HSU.h"
#include "PN532.h"

PN532_HSU pn532hsu(Serial1);
PN532 nfc(pn532hsu);

void setup(void)
{
	nfc.begin();
	//...
}


아래처럼 SoftwareSerial.h 를 추가하고 관련된 pin 을 정의해 주면 됩니다.

뭐, 관련된 함수를 "PN532_SWHSU.h" 에서 구현해 줘서 가능한 것이지만 말입니다.


#include "SoftwareSerial.h"
#include "PN532_SWHSU.h"
#include "PN532.h"

SoftwareSerial SWSerial( 10, 11 ); // RX, TX

PN532_SWHSU pn532swhsu( SWSerial );
PN532 nfc( pn532swhsu );

void setup(void)
{
	nfc.begin();
	//...
}


최종적으로 Hardware Serial 관련 부분을 주석처리 하고, SoftwareSerial 을 활성화 하는 코드를 추가하면 됩니다.



Pin 연결은 위에서 정의한 D10 과 D11 에 각각 연결하면 됩니다.

참고로, SDA 는 TX 이고, SDL 은 RX 이므로, SDA(TX) <--> D10 (RX), SDL(RX) <--> D11(TX) 가 됩니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     D10
    SDL   |     D11
-------------------------


잘 구동합니다만, 뭔가 타이밍이 맞지 않은지 authentication fail 이 뜹니다.

소스코드에서 수정해야 할 부분이 있는듯 보입니다만, 확인이 어느정도 되었으니 패스.






8. 확인한 RFID / NFC 카드들


마지막으로, 본 포스트에서 확인용으로 사용된 카드들을 소개합니다.



위는 PN532 breakout board 를 구입하면 기본으로 딸려오는 tag 들 입니다. 하나는 원형, 하나는 카드 모양입니다.



위는 싱가포르 출장때 구입해서 사용했던 지하철 패스카드 입니다. 충전식이죠.

아쉽지만, 구입한 PN532 가 짝퉁이라서 못 읽는 것인지 모든 소스와 연결 방법에서 읽기를 실패했습니다.



마찬가지 FeliCa 인식에서 실패한 일본 PASMO 입니다. 일본에서 거주할때 신세를 졌었죠.



저의 회사 출입 카드 입니다. 5년전에 찍은 거라 얼굴이 지금보다 젊어 보이네요. ㅠㅠ



버스카드 겸용인 신용카드 입니다. Mifare Classic 입니다. 잘 읽힙니다.

전용 어플을 이용하면 RFID 정보도 덮어 씌기가 될 듯 한데, 이번에는 도전하지 않았습니다.



유일하게 읽힌 FeliCa 카드 입니다!

다른 소스에서는 전혀 읽히지 않았고, FeliCa Read 소스에서만 유일하게 읽힌 놈입니다.

일본에서 자가용을 운용할 여유가 안되어서, 잘 빌려서 타고 다녔습니다. (SOCAR 같은 서비스)





9. FIN


역시 아쉬운 점은 지하철용 FeliCa 를 읽을 수 없었다는 점 입니다.

뿌듯한건 모든 인터페이스 - HSU, Software HSU, I2C, I2C with RST, Hardware SPI, Software SPI - 모두를 확인해 봤다는 점 입니다.


기회가 되면, 아래 스샷처럼 NXP 에서 나온 어플을 가지고 완벽하게 debugging 을 해보고 싶습니다.

다만, PN544 breakout 보드가 5만원 이상이라는 것 때문에, 일단 여기서 멈춥니다.



And

Book | 훤히 보이는 RFID/USN - Get to know RFID/USN

|

조만간 AliExpress 에서 주문한 RFID reader 와 tag 가 도착하기 전에 RFID 에 조금이라도 알고 싶어서 이 책을 도서관에서 빌렸습니다.

ETRI 관련된 박사님들이 각자 잘 아시는 영역의 글을 모아 만든 RFID/USN 관련된 서적입니다.



아래는 목차입니다.




이 책은 8분이 공동으로 저술한 책 입니다.





1. 책 정보


* 시리즈 : ETRI easy IT 의 6번째 책

* 제목 : 훤히 보이는 RFID/USN

* 발행 : 초판 2008년 6월 25일

* 지은이 : 표철식, 박상준, 김기일, 김동균, 이문규, 김관중, 김선진, 서정해

* 펴낸곳 : 전자신문사

* ISBN 978-89-92885-05-8 03560

* 값 : 20,000원


꼭 알아야 할것은, 이 책이 발간된 해가 2008 년도 라는 부분입니다.


지금은 NFC 나 RFID 가 일상생황에 많이 쓰이고 있어서, 독자에게 별다른 감흥을 못주는 책이 될 수 있습니다.

또한 일본에서는 이미 NFC 기능의 Suica 를 2001년부터 시험 운용하고 있었다는 점을 보면, 2008년에 이 책이 나온것도 조금 늦은 감이 없지않아 있습니다.





2. 용어


알아둬야 할 용어는 당연히 다음과 같겠습니다.


* RFID : Radio Frequency Identification

https://en.wikipedia.org/wiki/Radio-frequency_identification


* USN : Ubiquitous Sensor Network

T23010000040001PDFE.pdf


* NFC : Near Field Communication

https://en.wikipedia.org/wiki/Near-field_communication


지금에 와서는 USN 은 IoT 의 일부가 되겠네요.

요즘은 USN 이라고 이야기 하면 알아듣는 사람은 거의 없을꺼예요.

이 출판물이 나왔던 2008년에 ITU 에서 발간한 문서에서 USN 이라는 용어가 쓰였습니다.


또한 비슷한 것끼리는 RFID 와 NFC가 있습니다만, 개발된 흔적에 따라 쓰임이 조금 다릅니다.

아래 website 에서 잘 설명되어 있네요.


* RFID vs. NFC: What’s the Difference?

https://blog.atlasrfidstore.com/rfid-vs-nfc


infographic 으로 된 그림이 있어서 여기에 개제해 봅니다.



iPhone 끼리 근거리 통신을 통하여 사진을 전송받는 기술이 NFC 였군요.





3. 원리


긴 이야기를 짧게 해본다면 다음과 같습니다.



- 전자기파를 reader 에서 쏴주면, tag 코일에서 발생하는 유도전류를 통해 생성된 전기

- 그 전기를 이용하여 tag ID 를 reader 에 부하변조를 통하여 정보 전달

- 변조 방식은 ASK, FSK, PSK 등을 사용



실제 tag 를 까 보면, transponder 와 chip 및 회로로 되어 있습니다.



가로세로 1mm 의 저 작은 칩이 모든 것을 관장한다니 너무 신기합니다.



저 chip 의 제조에 대해서는 아래 Youtube 를 참고해 보세요.


* How I Made My Own RFID tag - From Shenzhen, China to New York City

https://www.youtube.com/watch?v=PWzyPZAPbt0



사실 저도 이 영상을 보고 RFID 와 arduino 를 연결해서 확인해 보고 싶다는 생각을 한 계기가 되었습니다.

저 위의 Youtube 주인공은 (오른쪽 - Scotty Allen), iPhone 을 부품을 개별적으로 구입해서 하나의 완성 iPhone 을 만들어서 큰 반향을 일으켰던 사람입니다.


이번에는 RFID 를 쫒아, 중국의 Shenzehen 으로부터 New York 까지의 일정이 담겨있습니다.





4. 활용


활용되는 분야는 너무 많습니다.

물류부터 시작하여, 뭔가 추적해야 하는 것이라면 모두 사용될 수 있겠습니다.



등록된 주차장에 들어갈 때도 사용되구요.



마라톤을 뛸 때, 신발에 부착하여 저 바닥면을 지나갈 때, 선수 기록용으로도 활용됩니다.

확실하게 저 위에만 밟고 지나가면 시간이 등록되고 휴대폰 SMS 로 전송되어서 신기했습니다.





5. chip 선택


이미 완성된 기술이기 때문에 그만큼 규격도 다양하게 나왔습니다.

그 규격에 따라 사용되는 tag chip 과 reader 종류가 많습니다.

사실 규격이라고 하기보단, 필요에 따라 발전시킨 버전들이라고 봐야겠죠.


마침 "RFID Selection Guide" 라는 PDF 를 인터넷에서 발견해서 여기에 링크를 걸어 봅니다.


* RFID Selection Guide

rfid+guide.pdf



위에서 보이는 PN532 가 마켓에서 쉽게 구할 수 있고, NFC 및 RFID 양쪽에 대응하면서 그럭저럭 쓸만한 대상으로 보입니다.

인터넷에서 찾아보면 RFID 만 되고, 상용 NFC 가 안되는 것들도 있거든요.


SONY 가 개발한 FeliCa (Suica) 및 iPhone 의 FeliCa 대응 NFC 도 될 듯도 하니,

AliExpress 에서 도착하면 따로 글을 작성해 보겠습니다.






FIN


책 이야기는 별로 하지 않고, RFID 와 NFC 에 대해서 조사해본 이야기가 주가 되었네요.


이 책의 아쉬운 부분은, 이미 한창 발전해버린 RFID 가 주제이다 보니, 지금의 2019 년에 읽기에는 조금 old 한 느낌입니다.


또 하나를 더 들자면, 저자가 8명이나 관여하다 보니 서로 겹치는 내용이 다뤄져 있어, 읽는데 지겹습니다. (사공이 많음)

어떤 챕터는 너무 기본 기술에 치중되어 있고, 다른 챕터는 활용성에만 치중되어 있어서, 이게 기술서적인지 마케팅 서적인지 혼란스러운 부분도 있습니다.


다만 일관성이 없다보니, 전반적으로 "응~ 그렇구나" 정도로 넓은 범위로 지식을 얻기에는 좋은 책이네요. (궂이 들자면...)


And
prev | 1 | 2 | 3 | 4 | 5 | 6 | ··· | 11 | next