Arduino 프로젝트를 시작하기 전에 알아야 할 10가지 사항

DigiKey 북미 편집자 제공

Arduino 기판으로 얼마나 많은 일들을 할 수 있는지 보고 직접 시도할 준비가 되셨을 것입니다. Arduino 기판, 점퍼 선, 전원 공급 장치, LED 및 부속품 키트를주문하셨습니다. 하지만 제대로 활용하기 위해서는 시간을 아끼고 혼동을 줄여줄 다음의 고려 사항을 염두에 두어야 합니다.

이러한 팁은 혼동을 줄여주고 새로 주문한 물건을 버리는 상황을 예방할 수 있습니다.

1: 실험과 학습에 매우 유용한 Arduino

전용 소형 작업에 매우 적합합니다. Arduinos는 연기 감지기 내부에 있는 장치의 실험자 친화적 버전과 비슷합니다. 이러한 응용 제품의 마이크로 컨트롤러는 작업 목록이 비교적 짧습니다. 온도 조절기에서 Linux를 실행하거나 큰 계산을 수행하는 데 필요한 것이 아닙니다. OS에서 실행되는 응용 프로그램용 코드의 작성이 목적이라면 Raspberry Pi 또는 BeagleBone Black과 같은 단일 기판 컴퓨터를 고려할 수 있습니다.

모바일 및 사물 인터넷(IoT) 유형의 설계에 집중하려는 경우 Arduino 기판은 모두 휴대성이 좋지만 크기가 더 작고 전력 소비량이 더 낮기 때문에 더 적합한 기판들이 있습니다. Adafruit Trinket, Gemma 및 Arduino Mini가 이와 같은 프로젝트에 적합합니다.

2: 스케치 작성

Arduino 프로그래밍 작업에는 Arduino 개발 환경에서 “스케치를 작성하고 이를 기판에 업로드하는 과정이 포함됩니다(그림 1). 이러한 스케치는 C로 작성하므로 스케치는 동일한 제어 구조를 사용합니다. 이 말의 의미를 모르더라도 실망할 필요는 없습니다. 좋은 소식이 있습니다. C 또는 C++를 조금 알고 있다면 스케치 작성은 이와 매우 비슷합니다. 반대로 스케치를 작성하는 방법을 배우면 C의 기초도 배우게 된다는 의미입니다. 따라서 어느 쪽으로든 좋은 기회입니다.

Arduino 개발 환경의 화면 캡처

그림 1: Arduino에서 프로그래밍하려면 C로 스케치를 작성해야 합니다. 이 화면은 개발 환경의 화면 캡처입니다. (출처: DigiKey)

Arduino 개발 환경에 대한 참고 사항: 디버거가 내장되어 있지 않습니다. Eclipse 또는 MPLAB과 같이 개발 환경에 내장된 디버거로 코드를 수정했던 경우라면 좀 더 머리를 써야 합니다. 일부 텍스트를 반환하는 코드 줄을 삽입하거나 코드 섹션에 도달할 때 LED를 활성화하는 등과 같은 원시적인 문제 해결 방법을 채용해야 합니다. 디버거가 없다는 것은 프로그램 해결 능력의 개발 측면에서 좋은 일일 수 있습니다.

3: 브랜드 실드 및 부속품 사용

염두에 둔 프로젝트가 있거나 전자 장치에 대해 더 자세히 알아보기 위해 Arduino를 구매했을 것입니다. 학습 보조 도구의 설명서와 지원이 충분하지 않다면 배우기가 훨씬 더 어려워질 것입니다. 문제 해결 도구가 아니라 교훈과 개념에 집중해야 합니다.

어쨌든 문제 해결은 전체 과정의 중요하고 꼭 필요한 부분이지만 핸디캡을 안고 시작하지 않아야 합니다.

Sparkfun, Adafruit 및 Seeed Studio는 실드 및 부속품을 공급하는 우수한 공급업체입니다. 이들 공급업체는 우수한 제품을 제작할 뿐만 아니라 널리 사용된다는 점도 큰 강점 중 하나입니다. 무언가 문제가 생겼을 때 다른 누군가가 이미 같은 문제를 경험하고 포럼에 해결 방법을 게시했을 가능성이 매우 높습니다. 이를 적극적으로 활용하십시오.

4: 배우고 개발할 때 메모하기

이 습관은 같은 프로그램을 반복하면서 실험할 때 특히 중요합니다. 어떤 버전이 어떤 작동을 했으며 왜 그랬는지를 추적하기가 쉽지 않습니다. 이러한 수정을 기록하는 것이 필요 없다고 생각할 수 있지만 꼭 필요하게 될 것이라고 장담합니다. 프로젝트 완성을 위해 수행한 변경과 반복의 횟수는 주말만 해도 수백 번을 넘을 수 있습니다.

저는 CAD를 사용한 경험이 많기 때문에 회로를 DraftSight에서 그립니다. 다른 방법은 DigiKey의 Scheme-it®(그림 2)을 사용하는 것입니다. 저는 습관에 따라 DraftSight를 사용하지만 Scheme-it과 같은 전문 도구가 훨씬 효과적이며 저 역시 이 도구로 전환하고 있습니다.

Scheme-it은 DigiKey의 방대한 부품 인벤토리에 관련된 장점을 가집니다. 또한 메모를 위한 다양한 옵션도 제공합니다. 메인 시트에 메모하거나 특정 부품에 메모를 연결할 수 있습니다. 또한 클라우드 기반이기 때문에 데이터가 백업되어 인터넷이 연결된 곳에서는 어디서나 사용할 수 있습니다. 공책에 메모하고 도면을 그릴 수도 있지만 저는 모든 관련 정보를 전자 형태로 보관하는 편을 선호합니다.

DigiKey Scheme-it Arduino 회로 이미지

그림 2: DigiKey의 Scheme-it을 사용하여 그린 간단한 도면. (출처: DigiKey)

5: 차근차근 진행하기

먼저 개별 기술과 개념부터 익히십시오. Arduino IDE에 포함된 “Blink” 예제를 사용하여 LED 점멸부터 시작하십시오. 그런 다음 출력에 결선한 LED를 점멸하게 합니다. 그런 다음 한 번에 여러 개의 LED를 점멸하는 스케치를 작성합니다. 그런 다음 버튼을 누를 때 LED가 점멸되게 만듭니다. 그런 다음 전위차계에서 아날로그 판독을 수행하여 LED 점멸 속도를 제어하는 스케치를 작성합니다.

궁극적으로 만들려고 하는 모든 프로젝트는 더 작은 작업으로 줄일 수 있습니다. 예를 들어 버튼 누름 디바운싱, LCD로 출력, 온도 센서 읽기, LED 점멸과 같은 작은 작업을 한데 모으면 온도 제어 스위치를 만들 수 있습니다.

익히게 되는 각 개념은 벽돌과 같고 프로젝트는 이러한 벽돌로 만든 벽입니다.

마지막으로, 점멸하는 LED를 직접 만들기 전에 몇 가지를 말씀드리겠습니다. 저는 10년 이상 전기 엔지니어로 일했는데 어떤 기판이나 마이크로컨트롤러이든지 간에 처음 접하면 제일 먼저 LED 점멸을 수행합니다. 이렇게 점멸을 해보면 내가 칩을 부분적으로라도 올바르게 초기화했으며 하드웨어를 제어하기 시작했다는 것을 알게 됩니다.

6: 클럭 속도 파악

Arduino UNO에는 16MHz 속도의 내부 클럭이 있습니다. 이는 초당 1600만 클럭입니다. 큰 숫자처럼 보이지만 다음을 고려해 보십시오. 스케치의 각 명령어 또는 검사는 클럭을 사용합니다. 스케치가 수행하는 작업이 많을수록 끝이 없어 보이는 클럭 주기를 더 빠르게 차지합니다. 그러다 결국 Arduino가 입력 신호를 놓치거나 출력 펄스가 초과됩니다. 따라서 원하는 작업을 수행할 시간이 부족해집니다.

기본적인 작업의 경우에는 이런 문제가 거의 발생하지 않지만 프로젝트가 커지면 발생할 수 있습니다. 스테퍼 모터를 제어하거나 서보 모터의 인코더 피드백을 처리할 때 클럭 속도 한계가 더욱 명확해집니다.

클럭 주기 소진이 예상되면 48MHz 클럭을 가진 Arduino Zero를 고려할 수 있습니다.

처리 일부를 실드로 오프로드하는 것도 다른 문제 해결 방법입니다. Trinamic Motion Control에는 이를 위한 스테퍼 모터 제어 실드 TOS-100 V1.1이 채용되었습니다.

7: Arduino 라이브러리 사용 방법 익히기

필요한 코드의 많은 부분이 이미 작성되어 있다면 어떨까요? 프로젝트 완성 시간이 크게 단축되지 않을까요? 이러한 코드를 골라서 스케치에 로드할 수 있습니다. 이러한 코드의 모음이 바로 라이브러리입니다.

이 기사에서 라이브러리에 대한 자세한 설명을 다루기에는 공간과 시간이 부족하므로 개념을 파악하기 위한 비유를 들어보겠습니다. 라이브러리는 관련 작업 집합을 위한 도구 상자와 유사합니다. 프로젝트에 필요한 도구가 포함된 도구 상자를 포함하기만 하면 됩니다.

예를 들어 Arduino 개발 환경에 포함된 라이브러리는 “wire”입니다(그림 3). Wire는 I2C 직렬 통신을 위한 전체 도구가 포함된 도구 상자입니다. Wire 도구는 I2C 통신에 관련된 작업 대부분을 자동화합니다. 이러한 작업을 수행하기 위한 코드를 직접 작성할 수 있지만(학습 목적으로는 유용할 수 있음), 라이브러리를 효과적으로 활용하는 방법을 배우면 그럴 필요가 없습니다.

스케치에 포함된 Wire 라이브러리 이미지

그림 3: 스케치에 포함된 Wire 라이브러리. (출처: DigiKey)

8: 기본 포트를 배우고 병렬 통신에 주의

병렬, 특히 직렬 통신을 배우십시오. 약어 UART의 의미를 찾아보십시오(마이크로 컨트롤러용 범용 직렬 전화기와 같음). SPI(직렬 주변 장치 인터페이스) 및 I2C에 대해서도 알아두십시오. 대부분의 Arduino 기판에 사용되는 칩을 생산하는 Atmel은 SPI 및 I2C 통신 주제에 대한 매우 유용한 응용 예제 몇 가지를 제공합니다. 사용하게 될 대부분의 센서 및 기타 부속품은 SPI 또는 I2C 직렬 연결을 통해 Arduino와 통신합니다. 이러한 통신 기술을 익혀두면 이러한 부속품을 훨씬 더 쉽게 사용할 수 있습니다.

프로젝트의 경우 병렬 통신이 필요한 디스플레이 등의 부속품을 알아두십시오. 병렬 COM 포트는 직렬 COM 포트에 비해 많은 수의 핀을 사용합니다. Arduino에 이를 위한 충분한 핀이 없을 수 있으며, 있더라도 너무 많은 핀을 사용하여 다른 용도로 사용할 핀이 없을 수 있습니다. 병렬 통신 LCD의 제어 방법을 배우는 것은 좋지만 이와 같은 장치는 여러 장치가 관여하는 프로젝트의 경우 I/O 사용량이 너무 높을 수 있습니다.

9: 메모리 제한 알아두기

처음 시작하는 사람들 대부분은 UNO나 Trinket과 같은 기본 기판으로 시작하게 됩니다. 그러다 보면 메모리와 RAM이 가득 차게 됩니다. 이 제한까지 사용하는 것은 좋은 일입니다. 이 말이 약간 이상하게 들릴 수 있지만 설명을 드리겠습니다.

초보자나 경험 많은 코더 모두 필요 이상의 리소스를 차지하는 체계적이지 않은 코드를 만들게 되는 경우가 많습니다. 거의 대부분의 코드는 더욱 컴팩트하게 만들 수 있습니다. 그 목적은 가능한 컴팩트하게 만들고 가지고 있는 리소스를 최대한 활용하는 것입니다. 제한에 도달하지 않는다면 이러한 문제를 해결하려는 노력을 하지 않을 것입니다. 메모리 한계에 도달하면 이런 문제를 해결하려는 노력을 하게 됩니다. 즉, 이미 끝난 작업을 재검토하여 개선 방향을 찾아보게 됩니다. 그냥 메모리가 더 많은 기판으로 전환해 버리면 이런 경험을 해볼 기회를 버리는 것입니다.

언젠가는 더 많은 RAM과 더 많은 메모리가 장착된 기판을 사용하겠지만 서두를 필요는 없습니다.

시작할 때 유용한 작은 팁을 드리겠습니다. RAM 부족을 발견하게 되면 이 방법을 사용하여 텍스트 문자열을 RAM이 아니라 프로그램 메모리에서 직접 읽어오십시오.

Serial.println(F(“your text here”));

여기서 괄호 안에 삽입된 F 매크로는 프로그램 시작 시 텍스트가 RAM에 로드되는 것을 막습니다. 필요할 때 문자열을 플래시 메모리에서 직접 읽습니다.

10: 일부 Arduino 기판에는 기본 USB 기능이 없음

처음에는 이상하게 느껴질 수 있습니다. Arduino를 프로그래밍할 때는 USB 잭을 컴퓨터의 USB 포트에 연결하여 사용한다는 사실을 지적할 수 있습니다. 맞는 말이지만 일부 Arduino 기판의 경우 이면에서 작동되는 매우 똑똑한 소프트웨어 몇 가지가 있습니다. Adafruit Trinket과 같은 기판에는 bootloader가 사전 설치되어 있으며 이를 통해 마이크로 컨트롤러가 스케치를 로드하기 위한 USB 장치처럼 작동할 수 있습니다. 이는 매우 멋진 ad-hoc 코딩입니다.

대부분의 마이크로 컨트롤러는 기본적으로 USB를 처리하지 않습니다. 이를 우회하는 두 가지 방법이 있으며 그중 한 가지가 Trinket에서 사용하는 그다지 일반적이지 않은 방법입니다. 첫 번째 일반적인 방법은 기판에 USB 통신을 처리하기 위한 별도의 칩을 배치하는 것입니다. 이 칩은 USB 연결의 데이터를 메인 마이크로 컨트롤러의 UART가 이해할 수 있는 형식으로 변환하기도 합니다. 다른 통신 방법은 USB를 통해 마이크로 컨트롤러와 통신하려고 할 때 마이크로 컨트롤러에 연결하는 별도 하드웨어를 사용하는 것입니다.

저는 LabVIEW를 실행하는 PC와 실험용 제어 상자 간의 인터페이스로 사용하기 위해 Trinket을 주문한 적이 있기 때문에 이 팁에서 Trinket을 언급했습니다. Trinket이 도착하자 온보드 USB 제어 하드웨어가 없다는 것을 알게 되었습니다.

쉽게 해결된 문제였습니다. 조금 전에 Arduino UNO를 주문했습니다. 이 장치에는 USB 통신을 처리하기 위한 전용 ATmega 칩이 온보드에 있습니다. 작은 문제가 있었지만 하드웨어를 주문하기 전에 이 팁을 읽었다면 피할 수 있었습니다.

요약하자면 Arduino에서 컴퓨터나 카메라 또는 USB 드라이브에 연결하기 위해 USB를 사용하려는 경우 구입하는 기판에 USB 컨트롤러가 포함되었는지 확인하십시오. 또는 USB 호스트 실드로 USB 기능을 추가할 수 있습니다.

결론

Arduino는 전자 시스템을 코딩 및 구현하려는 초보 또는 엔지니어 모두를 위한 뛰어난 학습 환경으로 입증되었습니다. 재미있고 유용하며 적절한 사전 정보와 접근법을 알고 있다면 유용한 학습 과정이 될 수 있습니다. 하지만 5번째 팁, “차근차근 진행하기”를 기억하십시오.

 
DigiKey logo

면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.

게시자 정보

DigiKey 북미 편집자