VCC GND 역할 - VCC GND yeoghal

VCC GND 역할 - VCC GND yeoghal
Arduino UNO

VCC GND 이런건 기본이니 매우 쉽고

Digital Pin, Analog Pin도 상식으로 이해하기 쉽다.

VIN의 경우

VIN (sometimes labelled "9V"). The input voltage to the Arduino board when it's using an external power source (as opposed to 5 volts from the USB connection or other regulated power source). You can supply voltage through this pin, or, if supplying voltage via the power jack, access it through this pin. 

이렇게 설명하고 있다.

아날로그 핀중에서 보면

I2C/SDA, I2C/SCL 이라는게 있는데

In addition to the specific functions listed below, the analog input pins support 10-bit analog-to-digital conversion (ADC) using the analogRead() function. Most of the analog inputs can also be used as digital pins: analog input 0 as digital pin 14 through analog input 5 as digital pin 19. Analog inputs 6 and 7 (present on the Mini and BT) cannot be used as digital pins.

  • I2C: 4 (SDA) and 5 (SCL). Support I2C (TWI) communication using the Wire library (documentation on the Wiring website).

이런 설명을 하고 있다. I2C 통신은 시리얼(UART)통신과는 다른방식으로 통신하는 것인데 동기화 통신이라 시리얼통신처럼 통신속도를 맞출 필요가 없다고 한다. 그럼 보통 이런걸 언제 쓰는가 하면...

VCC GND 역할 - VCC GND yeoghal
I2C LCD모듈

이런 LCD모듈이다. I2C모듈과 아닌 모듈로 나뉘는데 I2C가 아닌경우 핀이 많다. I2C는 VCC, GND 포함 4개면 되니 여러 모듈을 많이 붙이려고 할때 디지털핀을 절약할 수 있는 장점이 있다.

전통적인 1602LCD의 경우

VCC GND 역할 - VCC GND yeoghal

이렇게 무수히 많은 핀을 사용해야 하니 LCD만을 위한 프로젝트가 아니면 쉽게 사용하기가 어렵다.

그다음에 SCI라는 놈이 있다.

  • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). These pins support SPI communication, which, although provided by the underlying hardware, is not currently included in the Arduino language.

이렇게 설명되고 있는데 I2C통신처럼  SPI 통신인데 4핀을 사용한다. SS, MOSI, MISO, SCK

I2C통신은 무전기처럼 송신, 수신이 동시에 불가능한데, SPI통신은 4핀이나 있어서 그런지 동시에 여러대의 슬레이브에 송수신이 가능하다고 한다. SS는 Slave Select인데 경우에 따라서는 CS(Chip Select)로 쓰기도 한다. MISO는 Master In Slave Out이고 MOSI는 Master Out Slave In, SCK는 Serial Clock이라고 한다. 

VCC GND 역할 - VCC GND yeoghal

알고나니 딱히 어렵진 않다. 그럼 어떤 모듈이 이런 통신을 쓰는가 하고 보니...

VCC GND 역할 - VCC GND yeoghal

뭐이런게 있긴한데

대부분의 센서는 그냥 시리얼통신 아니면 I2C가 흔했다. 그래서 대부분 SPI통신을 지원하긴 하는데 딱히 자주 쓸일이 있는 것 같지는 않다.

VCC GND 역할 - VCC GND yeoghal
ESP8266-01
VCC GND 역할 - VCC GND yeoghal
nodeMCU 12-E

nodeMCU의 경우도 두개의 SPI통신핀과 1개의 I2C통신핀을 가지고 있다.

VCC GND 역할 - VCC GND yeoghal
Wemos D1 Mini

초소형인 Wemos D1 Mini의 경우도 I2C와 SPI통신을 모두 지원한다.

VCC GND 역할 - VCC GND yeoghal

그리고 Built-in LED가 GPIO2번 = D4 라는 걸 알아두면 좋다.

라인센서 사용방법 알기

라인 트랙 자동차에서 눈과 같은 역할을 하는 것이 바로 라인 센서입니다. 이 센서가 어떻게 작동하는지 알아봅시다. 라인 센서를 보면 2개의 엘이디(LED)가 있습니다. 하나는 적외선 빛을 내보내는 적외선 엘이디(LED)입니다. 다른 하나는 빛이 들어왔는지 확인하는 감지 엘이디(LED)입니다.

VCC GND 역할 - VCC GND yeoghal
그림 1-1 라인 센서

적외선은 우리 눈으로는 볼 수 없는 긴 파장의 빛입니다.

VCC GND 역할 - VCC GND yeoghal
그림 1-2 빛의 파장

파장은 파도와 비슷합니다. 파장은 파도처럼 위아래로 움직이는 것을 말합니다. 그리고 이런 빛은 전기와 같은 것입니다. 빛은 모든 종류의 전자기파인 것이죠. 라인 센서는 들어오는 빛을 전기신호로 바꿔서 아두이노가 이해할 수 있도록 만듭니다. 참 신기하죠?

적외선은 우리 눈으로는 볼 수 없는 긴 파장의 빛이지만 라인 센서의 감지 엘이디(LED)는 적외선 빛을 알아볼 수 있습니다. 파장이 길다는 뜻은 파장에서 높은 곳끼리의 간격이 넓다는 뜻입니다.

흰색은 빛을 반사하는 성질이 있습니다. 그림 1-3처럼 적외선을 흰색에 비추면 반사되어 감지 엘이디(LED)가 빛이 들어왔다는 것을 알게 됩니다. 검은색인 경우에는 빛을 흡수해 버리기 때문에 감지 엘이디(LED)로 빛이 들어오지 않습니다.

VCC GND 역할 - VCC GND yeoghal
그림 1-3 라인 센서 작동 원리

라인 센서를 아두이노와 연결해서 코딩을 해볼까요? 준비물을 살펴봅시다.

VCC GND 역할 - VCC GND yeoghal

라인 센서에는 4개의 핀이 있습니다. VCC, GND, DO, AO가 바로 그것이죠.

■ VCC는 볼티지 오브 커먼 콜렉터(Voltage of Common Collector)란 뜻인데 5V 전원과 연결합니다. V가 있으니 5V 전원과 연결한다고 기억하면 좋습니다. 플러스 극이라고 생각하면 됩니다.
■ GND는 그라운드(Ground)로 1편에서 배운 내용입니다. 아두이노의 그라운드 핀(GND)과 연결합니다. GND는 마이너스 극이라고 생각하면 됩니다.
■ DO는 디지털 아웃풋(Digital Output)입니다. 이 핀에서 라인 센서의 디지털 값을 보냅니다.
■ AO는 아날로그 아웃풋(Analog Output)입니다. 이 핀에서 라인 센서의 아날로그 값을 보냅니다. 여기에서는 사용하지 않습니다.

라인 센서에서 파란색 엘이디(LED)는 빛이 나가는 적외선 엘이디(LED)입니다. 검은색 엘이디(LED)는 빛이 들어오는 것을 확인하는 감지 엘이디(LED)입니다. 라인 센서의 앞쪽에는 전원이 들어오면 켜지는 전원 표시 엘이디(LED)가 있습니다.

그리고 빛이 들어온 것을 확인했을 때 켜지는 감지 표시 엘이디(LED)가 있습니다. 또한, 센서의 민감도를 바꾸는 저항이 있습니다. 드라이버로 돌려서 센서의 민감도를 바꿀 수 있습니다.

VCC GND 역할 - VCC GND yeoghal
그림 1-4 라인 센서 앞면과 뒷면

라인 센서에 핀이 나와 있습니다. 이렇게 나와 있는 핀과 아두이노를 연결하기 위해서는 암-수 점퍼 케이블이 필요합니다. 1편에서 배운 내용을 복습하겠습니다. 암-수는 암컷과 수컷을 의미합니다. 케이블에서 구멍이 있는 것은 암, 핀이 있는 것은 수라고 합니다. 어때요? 참 쉽죠? 


그리고 1편에서 배웠던 브레드보드를 다시 살펴보겠습니다.

VCC GND 역할 - VCC GND yeoghal
그림 1-5 브레드보드

브레드보드는 전자부품을 쉽게 연결하기 위해서 만든 도구입니다. 원래는 납을 뜨겁게 녹여서 전자부품을 연결해야 합니다. 납땜을 할 때는 인두기라는 도구를 사용해야 합니다. 인두기가 뜨거워지면 납을 녹입니다. 인두기는 위험하기도 하고 한 번 납땜한 부품은 다른 곳에 다시 사용할 수 없습니다.

하지만 브레드보드를 사용하면 이렇게 힘들게 납땜을 하지 않아도 됩니다. 라인 트랙 자동차를 만들기 위해서 작은 브레드보드를 사용하겠습니다. 브레드보드를 이용하여 라인 센서와 아두이노를 연결합니다. 5V에서 나온 전압이 라인 센서를 지나서 GND로 잘 들어오는지 확인합니다.

VCC GND 역할 - VCC GND yeoghal
그림 1-6 라인 센서 1개 연결 회로

라인 센서의 VCC는 아두이노의 5V 전원 핀과 연결합니다. 라인 센서의 GND는 아두이노의 GND핀과 연결합니다. 그리고 DO는 아두이노 디지털 3번 핀과 연결합니다.

라인 센서의 DO 핀에서 디지털 값이 나와 아두이노 디지털 3번 핀으로 들어갑니다. 즉 DO 핀이 디지털 3번 핀에 전압을 주는 겁니다. 그림 1-7과 같이 코딩을 하고 잘 되는지 확인해 볼까요?

VCC GND 역할 - VCC GND yeoghal
그림 1-7 디지털 3번 핀 읽기

<연결>-<펌웨어 업그레이드>를 순서대로 클릭합니다.

VCC GND 역할 - VCC GND yeoghal
VCC GND 역할 - VCC GND yeoghal
그림 1-8 펌웨어 업그레이드

업로드가 완료되면 초록색 깃발을 클릭합니다. 그리고 곰돌이가 어떻게 말하는지 잘 살펴봅니다. 라인 센서를 하얀색이나 검은색에 가까이 가져가도 곰돌이가 말하는 값이 바뀌지 않는 경우가 있습니다. 즉 곰돌이가 계속 0 또는 1이라고 말하는 것입니다. 이것은 센서의 민감도 때문입니다.

VCC GND 역할 - VCC GND yeoghal
그림 1-9 라인 센서 뒷면

민감도 조절 저항을 부품 상자에 있는 드라이버로 돌려봅시다. 시계 방향으로 끝까지 돌리면 항상 0이라고 말합니다. 즉 라인센서를 어떤 색에 갖다대더라도 항상 흰색이라고 읽게 되는 것입니다.

라인센서가 흰색이라고 읽으면 3번 디지털 핀으로 전압을 주지 않습니다. 그러면 디지털 3번 핀의 값은 0이 되고 곰돌이는 0이라고 말합니다. 그리고 감지 표시 LED에 초록색 불이 들어옵니다.


반대로 시계 반대 방향으로 끝까지 돌리면 항상 1이라고 말합니다. 즉 라인 센서를 어떤 색에 갖다대도 항상 검은색이라고 읽게 되는 것입니다. 라인센서가 검은색이라고 읽으면 3번 디지털 핀에 전압을 줍니다. 그러면 디지털 3번의 값은 1이 되고 곰돌이는 1이라고 말합니다. 그리고 감지 표시 LED에 불이 꺼집니다.

센서의 민감도를 바꾸는 방법을 모르면 센서가 고장 났다고 생각할 수 있습니다. 그리고 센서마다 민감도가 다릅니다. 직접 드라이버로 민감도 조절 저항을 돌리고 흰색과 검은색에 가까이 가져가 봅니다. 색깔이 바뀔 때마다 곰돌이가 값을 다르게 말하면 민감도를 잘 맞춘 겁니다.


가로 10cm 세로 10cm 정도 되는 하얀색 종이와 가로 8cm, 세로 2cm 정도의 검은색 테이프나 검은색 종이를 준비합니다. 흰색 종이 가운데 검은색 테이프(또는 검은색 종이)를 그림처럼 붙입니다. 라인 센서를 흰색이나 검은색에 가까이 가져가 봅시다. 어떻게 되나요? 곰돌이가 말하는 값이 변하나요?

VCC GND 역할 - VCC GND yeoghal
그림 1-10 라인 센서와 라인 트랙 축소판
VCC GND 역할 - VCC GND yeoghal
그림 1-11 흰색을 읽었을 때

어때요? 참 쉽죠? 아두이노로 코딩을 하기 위해서는 이런 전자회로 지식을 잘 알고 있어야 합니다. 이렇게 하나씩 전자회로에 대한 지식을 배운다면 아두이노로 더욱 멋진 작품을 만들 수 있습니다.

이제 라인 센서가 흰색 읽으면 아두이노에 있는 엘이디를 끄고 검은색이면 엘이디를 켜는 프로그램을 만들어 보겠습니다. 우선 값을 저장할 수 있도록 변수를 하나 만들겠습니다.

<데이터&추가블록> 모음을 클릭합니다. 그리고 <변수 만들기>를 클릭합니다. 검은색이라는 변수를 하나 만듭니다.

VCC GND 역할 - VCC GND yeoghal
VCC GND 역할 - VCC GND yeoghal
그림 1-12 변수 만들기

검은색 변수 값이 1이라는 것은 라인 센서가 검은색을 읽었다는 뜻입니다. 이 조건을 만족시키면 [검은색] 변수의 값을 말합니다. 그리고 아두이노 보드에 있는 엘이디(LED)를 켭니다. 아두이노 보드에 있는 엘이디(LED)는 13번 핀과 연결되어 있습니다.

래서 13번 핀에 전압을 주면(켜짐) 엘이디(LED)가 켜집니다. 그리고 조금 기다리라고 <0.02초 기다리기> 블록을 넣었습니다.


만약 라인 센서가 흰색을 읽었다면 [검은색] 변수에 0이 저장됩니다. 그러면 [검은색] 변숫값이 1이라는 조건을 만족시키지 못합니다. 따라서 <아니면> 블록 안에 있는 블록들을 실행합니다. 우선 [검은색] 변숫값을 말합니다. 그리고 디지털 13번 핀에 전압을 주지 않아서(꺼짐) 엘이디(LED)가 꺼집니다.