맨위로가기

아두이노

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

아두이노는 2005년 이탈리아에서 시작된 오픈 소스 하드웨어 및 소프트웨어 프로젝트로, 사용하기 쉽고 저렴한 마이크로컨트롤러 기반의 보드를 제공하여 디지털 기기 제작을 쉽게 만들고자 했다. 아두이노 보드는 아트멜 AVR 마이크로컨트롤러를 기반으로 하며, 다양한 센서 및 모듈과의 호환을 위한 쉴드, 그리고 C/C++ 기반의 간단한 프로그래밍 환경(IDE)을 지원한다. 다양한 종류의 아두이노 보드가 있으며, 메이커 운동, 사물 인터넷(IoT) 등 다양한 분야에서 활용되고 있다.

더 읽어볼만한 페이지

  • 아두이노 - UART
    UART는 비동기 직렬 통신을 위한 하드웨어 장치로, 데이터를 바이트 단위로 전송하고 수신하며, 다양한 오류 감지 기능을 통해 PC와 주변 기기 연결 등 다양한 분야에서 활용된다.
  • 아두이노 - 마이크로컨트롤러 포트
    마이크로컨트롤러 포트는 외부 장치와 연결되는 핵심 입출력 통로로서 디지털/아날로그 입출력 등 다양한 종류가 있으며 LED 제어, 스위치 입력 감지, 모터 제어 등 여러 응용 분야에 활용되고, 마이크로컨트롤러 종류 및 외부 메모리 추가 여부에 따라 포트 구성이 달라진다.
  • 단일 보드 컴퓨터 - RAD750
    RAD750은 BAE Systems의 등록 상표로, PowerPC 750 기반의 내방사선 CPU이며 극한의 우주 환경에서 작동하도록 설계되어 다양한 우주선에 사용된다.
  • 단일 보드 컴퓨터 - 비글보드
    비글보드는 소형 개발 보드 시리즈로, 다양한 모델이 출시되었으며, ARM, RISC-V 등의 CPU를 사용하고, 케이프를 통해 기능을 확장할 수 있으며, 교육, 산업, 연구 분야에서 활용된다.
  • 마이크로컨트롤러 - 마이크로프로세서
    마이크로프로세서는 CPU 기능을 단일 IC에 통합한 것으로, 무어의 법칙에 따라 성능이 향상되어 왔으며 다양한 아키텍처와 기술 발전을 거쳐 현재 광범위한 분야에서 사용된다.
  • 마이크로컨트롤러 - ARM 아키텍처
    ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다.
아두이노
기본 정보
아두이노 로고
아두이노 로고
제누이노 로고
제누이노 로고
아두이노 우노 SMD R3
아두이노 우노 SMD R3
일반 정보
종류단일 보드 마이크로컨트롤러
개발
개발사아두이노
제조
제조사다수
프로세서 및 메모리
CPU아트멜 AVR (8비트)
ARM Cortex-M0+ (32비트)
ARM Cortex-M3 (32비트)
인텔 쿼크 (x86) (32비트)
저장 공간플래시 메모리, EEPROM
RAMSRAM
소프트웨어
운영체제없음 (기본), Xinu
기타
웹사이트arduino.cc

2. 역사

350px


아두이노는 2005년 이탈리아 이브레아에서 초기 프로젝트로 시작되었다.[115] 초기 아두이노 보드는 UARTRS-232를 결합한 통신을 사용했지만, 개인용 컴퓨터의 직렬 포트(COM) 퇴조로 USB를 UART 방식으로 바꾸는 방식을 사용하고 있다. 아두이노 보드에 USB와 UART을 변환하는 별도의 칩을 추가하여 프로그램 코드를 업로드한다.

아두이노 업로드와 시리얼 통신을 위해 사용한 UART의 입출력 신호 변환 회로는 다음과 같이 발전하였다.

방식설명비고
[ 호스트 직렬 포트 (COM 포트, RS-232) ] === [ [ RS-232 - TTL 변환 ] --- [ MCU ] ]BJT, D, R, C 등의 소자로 단순 전압 변환을 통해 직렬 포트를 아두이노에 연결[114]초기 방식
[ 호스트 USB ] === [ [ FTDI FT232계열 ] --- [ MCU ] ]FTDI(FT232RL 등)를 사용하여 USB와 UART 간의 변환을 통해 시리얼 구현[120]호스트에 FTDI용 USB 드라이버 필요
[ 호스트 USB ] === [ [ ATmega8U2 ] --- [ MCU ] ]ATmega8U2를 사용하여 USB - UART 변환을 통해 MCU의 TTL 연결[121]아두이노 우노 초기 버전
[ 호스트 USB ] === [ [ ATmega16U2 ] --- [ MCU ] ]USB - UART 변환[122][123]



아두이노는 "디지털 제어용 보드"라는 장르에서 매우 저렴하고, 단순하며, 소비 전력이 매우 적어 널리 보급되었다. 2008년 10월에는 Arduino Duemilanove가 출시되었고,[116][117] 2009년 3월에는 Arduinio Mega가 출시되었다.[116] 2011년 3월에는 전 세계적으로 30만 개 이상의 아두이노 유닛이 사용되었다.[118][119] 2015년 3월에는 아두이노가 10주년을 맞았다.

2010년 이후, "IoT"에 대한 관심이 높아짐에 따라, 아두이노는 그 입문용 장치의 대표적인 예로 취급받게 되었다.

2. 1. 설립 배경

아두이노 프로젝트는 이탈리아 이브레아에 있는 이탈리아 인터랙션 디자인 연구소(IDII)에서 시작되었다.[3] 당시 학생들은 50USD 상당의 BASIC Stamp 마이크로컨트롤러를 사용했는데, 이는 학생들에게 상당한 경제적 부담이었다. 이러한 배경에서 더 저렴한 제어 장치의 필요성이 대두되었다.

2004년, 에르난도 바라간은 IDII에서 마시모 반지 및 케이시 리스의 지도하에 석사 논문 프로젝트로 개발 플랫폼 ''와이어링''을 만들었다. 케이시 리스는 벤 프라이와 함께 프로세싱 개발 플랫폼을 공동 개발한 것으로 알려져 있다. 이 프로젝트의 목표는 비 엔지니어가 디지털 프로젝트를 만들 수 있도록 간단하고 저렴한 도구를 만드는 것이었다. 와이어링 플랫폼은 ATmega128 마이크로컨트롤러가 장착된 인쇄 회로 기판 (PCB), 프로세싱을 기반으로 한 IDE, 마이크로컨트롤러를 쉽게 프로그래밍할 수 있는 라이브러리 함수로 구성되었다.[5]

2005년, 마시모 반지는 또 다른 IDII 학생인 데이비드 멜리스, 그리고 데이비드 쿠아르티예스와 함께 더 저렴한 ATmega8 마이크로컨트롤러를 지원하도록 와이어링을 확장했다. 와이어링에서 갈라져 나온 이 새로운 프로젝트는 ''아두이노''라고 불렸다.[5]

초기 아두이노 핵심 팀은 마시모 반지, 데이비드 쿠아르티예스, 톰 이고, 잔루카 마르티노, 데이비드 멜리스로 구성되었다.[3] 이들은 "더 간단하게, 더 저렴하게, 기술자가 아닌 학생들도 디지털 기기를 만들 수 있도록 한다"는 목적을 가지고 "아두이노 프로젝트"를 시작했다.

플랫폼이 완성된 후, 더 가볍고 저렴한 버전이 오픈 소스 커뮤니티에 배포되었다.

프로젝트 초기부터 "아두이노"라는 상표의 권리를 주장하며 설계, 제조, 소프트웨어 개발을 하는 조직은, 4명이 설립한 Arduino LLC사와 Gianluca Martino가 설립한 Arduin SRL사의 두 회사로 분열되어 대립(상표 사용을 둘러싸고)하며 소송이 있었지만, 2016년 10월에 양사의 화해가 공식 발표되었다.[80]

이 프로젝트를 시작한 멤버 중 한 명인 마시모 반지(Massimo Banzi)가 자주 가던 의 이름이 "Bar di Re Arduino"(바르디노 = "아르두이노 왕의 바")였기 때문에, 그 가게에 경의를 표하며 프로젝트명과 제품명에 "Arduino"라는 이름을 사용하게 되었다. Re Arduino(아르두이노 왕)는 1002년에 이브레아의 왕이 되어 신성 로마 제국의 하인리히 2세와 싸운 인물이다.

2. 2. 초기 개발

아두이노 프로젝트는 2005년 이탈리아 이브레아에 있는 이탈리아 인터랙션 디자인 연구소(IDII)에서 시작되었다.[3] 당시 학생들은 50USD 상당의 BASIC Stamp 마이크로컨트롤러를 사용했다. 2004년, 에르난도 바라간은 IDII에서 마시모 반지 및 케이시 리스의 지도하에 석사 논문 프로젝트로 개발 플랫폼 ''와이어링''을 만들었다. 케이시 리스는 벤 프라이와 함께 프로세싱 개발 플랫폼을 공동으로 개발한 것으로 알려져 있다. 이 프로젝트의 목표는 비 엔지니어가 디지털 프로젝트를 만들 수 있도록 간단하고 저렴한 도구를 만드는 것이었다. 와이어링 플랫폼은 ATmega128 마이크로컨트롤러가 장착된 인쇄 회로 기판 (PCB), 프로세싱을 기반으로 한 IDE, 마이크로컨트롤러를 쉽게 프로그래밍할 수 있는 라이브러리 함수로 구성되었다.[5]

2005년, 마시모 반지는 또 다른 IDII 학생인 데이비드 멜리스, 그리고 데이비드 쿠아르티예스와 함께 더 저렴한 ATmega8 마이크로컨트롤러를 지원하도록 와이어링을 확장했다. 와이어링에서 갈라져 나온 이 새로운 프로젝트가 ''아두이노''이다.[5]

초기 아두이노 핵심 팀은 마시모 반지, 데이비드 쿠아르티예스, 톰 이고, 잔루카 마르티노, 데이비드 멜리스로 구성되었다.[3] 플랫폼이 완성된 후, 더 가볍고 저렴한 버전이 오픈 소스 커뮤니티에 배포되었다.

초기 아두이노 보드는 UARTRS-232을 결합한 통신을 사용하였다. 그러나 개인용 컴퓨터의 직렬 포트(COM) 퇴조로 USB를 UART 방식으로 바꾸는 방식을 사용하고 있다. 개인용 컴퓨터나 노트북의 경우 직렬 포트 자체가 없는 경우가 많아 이 방식을 사용하면 현실적인 어려움이 있다. 이것을 고려하여 아두이노 보드에 USB와 UART을 변환하는 별도의 칩을 추가하여 프로그램 코드를 업로드한다. 목표 MCU 입장에서 보면 여전히 UART을 통해 업로드와 통신을 하는 방식이다.

아두이노 업로드와 시리얼 통신을 위해 사용한 UART의 입출력 신호 변환 회로는 다음과 같이 발전하였다.

# [ 호스트 직렬 포트 (COM 포트, RS-232) ] === [ [ RS-232 - TTL 변환 ] --- [ MCU ] ] : BJT, D, R, C 등의 소자로 단순 전압 변환을 통해 직렬 포트를 아두이노에 연결[114]

# [ 호스트 USB ] === [ [ FTDI FT232계열 ] --- [ MCU ] ] : 호스트의 통신에서 FTDI(FT232RL 등)를 사용하여 USB와 UART 간의 변환을 통해 시리얼 구현. 호스트에서 FTDI용 USB 드라이버와 USB 버스 드라이버가 필요하고, FTDI 개발사에서 제공한다. 아두이노를 설치하면 호스트용 드라이버는 자동 설치된다.[120]

# [ 호스트 USB ] === [ [ ATmega8U2 ] --- [ MCU ] ] : ATmega8U2를 사용하여 USB - UART 변환을 통해 MCU의 TTL 연결. 아두이노 우노 초기버전에서 사용.[121]

# [ 호스트 USB ] === [ [ ATmega16U2 ] --- [ MCU ] ] : USB - UART 변환.[122][123]

최초의 프로토타입

2. 3. 발전과 보급

아두이노는 2005년 이탈리아 이브레아에 있는 이탈리아 인터랙션 디자인 연구소(IDII)에서 시작된 프로젝트이다.[3] 당시 학생들은 50달러 상당의 BASIC Stamp 마이크로컨트롤러를 사용했는데, 이는 학생들에게 큰 경제적 부담이었다. 이러한 배경에서 더 저렴한 제어 장치의 필요성이 대두되었다.[87]

2004년, 에르난도 바라간은 IDII에서 마시모 반지 등의 지도하에 석사 논문 프로젝트로 개발 플랫폼 ''와이어링''을 만들었다. 이 프로젝트는 비 엔지니어가 디지털 프로젝트를 만들 수 있도록 간단하고 저렴한 도구를 제공하는 것을 목표로 했다.[5] 2005년, 마시모 반지 등은 와이어링을 확장하여 더 저렴한 ATmega8 마이크로컨트롤러를 지원하는 ''아두이노''를 개발했다.[5]

초기 아두이노 핵심 팀은 마시모 반지, 데이비드 쿠아르티예스, 톰 이고, 잔루카 마르티노, 데이비드 멜리스로 구성되었다.[3] 이들은 "더 간단하게, 더 저렴하게, 기술자가 아닌 학생들도 디지털 기기를 만들 수 있도록 한다"는 목적을 가지고 "아두이노 프로젝트"를 시작했다.

플랫폼이 완성된 후, 더 가볍고 저렴한 버전이 오픈 소스 커뮤니티에 배포되었다. 아두이노는 "디지털 제어용 보드"라는 장르에서 매우 저렴하고, 단순하며, 소비 전력이 매우 적어 널리 보급되었다.

아두이노 보드는 2008년 10월까지 5만 개 이상[85]이 판매되었으며, 2011년 2월까지 약 15만 대,[86] 2013년 시점에서는 약 70만 대가 판매되었다.[87]

초기 아두이노 보드는 UARTRS-232을 결합한 통신을 사용하였다. 그러나 개인용 컴퓨터의 직렬 포트(COM) 퇴조로 USB를 UART 방식으로 바꾸는 방식을 사용하고 있다. 아두이노 보드에 USB와 UART을 변환하는 별도의 칩을 추가하여 프로그램 코드를 업로드하는 방식이다.

아두이노 업로드와 시리얼 통신을 위해 사용된 회로는 다음과 같이 발전하였다.

방식설명비고
[ 호스트 직렬 포트 (COM 포트, RS-232) ] === [ [ RS-232 - TTL 변환 ] --- [ MCU ] ]BJT, D, R, C 등의 소자로 단순 전압 변환을 통해 직렬 포트를 아두이노에 연결[114]초기 방식
[ 호스트 USB ] === [ [ FTDI FT232계열 ] --- [ MCU ] ]FTDI(FT232RL 등)를 사용하여 USB와 UART 간의 변환을 통해 시리얼 구현[120]호스트에 FTDI용 USB 드라이버 필요
[ 호스트 USB ] === [ [ ATmega8U2 ] --- [ MCU ] ]ATmega8U2를 사용하여 USB - UART 변환을 통해 MCU의 TTL 연결[121]아두이노 우노 초기 버전
[ 호스트 USB ] === [ [ ATmega16U2 ] --- [ MCU ] ]USB - UART 변환[122][123]



2010년 이후, "IoT"에 대한 관심이 높아짐에 따라, 아두이노는 그 입문용 장치의 대표적인 예로 취급받게 되었다.

Arduino NG


Arduino Diecimila


Arduino Mega2560


Arduino Pro Mini


LilyPad Arduino

2. 4. 상표권 분쟁과 해결

2008년 초, 아두이노 프로젝트의 공동 창립자 5명은 아두이노 관련 상표를 관리하기 위해 Arduino LLC를 설립했다.[8] 보드 제조 및 판매는 외부 회사에서 수행하고, Arduino LLC는 로열티를 받기로 했다.

2008년 말, 잔루카 마르티노(Gianluca Martino)의 회사인 스마트 프로젝트(Smart Projects)는 이탈리아에서 아두이노 상표를 등록하고, 약 2년 동안 다른 공동 창립자들에게 이 사실을 숨겼다. 이는 아두이노 회사가 다른 지역에서 상표를 등록하려고 시도했을 때 밝혀졌는데, 이탈리아에 이미 등록되어 있다는 것을 발견한 것이다.

원래의 아두이노 회사가 상표를 통제하기 위해 마르티노 및 그의 회사와 협상했지만 실패했다. 2014년, 스마트 프로젝트는 로열티 지불을 거부하기 시작했다. 그들은 이후 새로운 CEO인 페데리코 무스토(Federico Musto)를 임명했고, 회사의 이름을 ''Arduino SRL''로 변경했으며, 원래의 ''arduino.cc''의 그래픽과 레이아웃을 복사한 웹사이트 ''arduino.org''를 만들었다. 이로 인해 아두이노 개발 팀에 균열이 생겼다.[9][10][11]

2015년 1월, Arduino LLC는 Arduino SRL을 상대로 소송을 제기했다.[12] 2015년 5월, Arduino LLC는 미국 외 지역에서 브랜드 이름으로 사용되는 전 세계 상표 '''Genuino'''를 만들었다.[13]

2016년 10월 1일 뉴욕에서 열린 메이커 페어(Maker Faire)에서 Arduino LLC의 공동 창립자이자 CEO인 마시모 반지(Massimo Banzi)와 Arduino SRL의 CEO인 페데리코 무스토(Federico Musto)는 두 회사의 합병을 발표하여 Arduino AG를 설립했다.[14]

2017년까지 Arduino AG는 많은 아두이노 상표를 소유하고 있었다. 2017년 7월, 마시모 반지(Massimo Banzi), 데이비드 콰르티에스(David Cuartielles), 데이비드 멜리스(David Mellis) 및 톰 이고(Tom Igoe)가 설립한 BCMI가 Arduino AG와 모든 아두이노 상표를 인수했다. 파비오 비올란테(Fabio Violante)가 페데리코 무스토(Federico Musto)를 대신하여 새로운 CEO가 되었으며, 무스토는 더 이상 Arduino AG에서 근무하지 않는다.[20][21]

3. 아두이노 체계

아두이노는 아트멜사의 8비트 AVR 마이크로컨트롤러와 프로그래밍 및 다른 회로와의 결합을 용이하게 해 주는 부속품들로 구성된 체계이다. 아두이노 보드는 이 마이크로컨트롤러를 기반으로 하며, 다양한 기능을 수행할 수 있도록 설계되었다.

아두이노는 싱글 보드 마이크로컨트롤러의 일종으로, I/O 포트를 갖추고 있으며, 외부의 물리적 변화를 감지하거나 외부에 물리적인 변화를 일으킬 수 있는 인터랙티브한 장치로 사용할 수 있다. 스탠드얼론형(아두이노 단독으로, 한 번 설정·작동시키기 시작하면 다른 컴퓨터는 전혀 없이)으로 작동하거나, 다른 컴퓨터와 상시 연동하여 사용할 수 있다.

아두이노는 오픈 소스 하드웨어이며, 간단한 규정만 지키면 누구나 자유롭게 사용할 수 있다. 하드웨어 설계 정보는 인터넷에 무료로 공개되어 있으며, 조립된 기판을 구입하거나 직접 부품을 구입하여 조립할 수도 있다. 아두이노는 "오픈 소스 하드웨어라는 개념을 넓히는 계기가 되었다"는 평가를 받는다.[81]

아두이노 보드는 입출력 포트 수, 크기 등 다양한 타입이 있으며, 용도에 따라 선택할 수 있다.

3. 1. 하드웨어

아두이노 보드는 아트멜사의 8비트 AVR 마이크로컨트롤러와 프로그래밍 및 다른 회로와의 연결을 쉽게 해주는 부품들로 구성되어 있다. 공식 보드의 마이크로컨트롤러에는 주로 ATmega8, ATmega168, ATmega328과 같은 megaAVR 시리즈가 사용된다. 보드에는 기본적으로 5V 선형 레귤레이터와 16MHz 결정 진동자(크리스털)가 내장되어 있으며, 프로그램 업로드를 쉽게 하기 위해 부트로더가 마이크로컨트롤러에 미리 내장되어 있다.[26]

개념적으로는 모든 보드가 RS-232 직렬 커넥터를 통해 프로그램되지만, 구현 방식은 하드웨어 버전에 따라 다르다. 직렬 아두이노 보드는 RS-232 수준의 신호를 TTL 수준의 신호로 변환해주는 변환 장치(Shifter)를 내장하고 있다. 현재 아두이노 보드들은 모두 USB를 통해 프로그래밍 가능하며, FT232와 같은 USB-시리얼 변환 칩을 통해 사용 가능하다.

아두이노 로고가 없는 아두이노 호환 R3 우노 보드


아두이노 보드는 마이크로컨트롤러 I/O핀의 대부분을 다른 회로에서도 사용할 수 있도록 공개하고 있다. Diecimila, Duemilanove, 현재의 Uno와 같은 주요 모델들은 14개의 디지털 I/O핀을 제공하고 있으며, 그 중 6개의 핀은 PWM(pulse-width modulated)신호를, 다른 6개의 핀은 디지털 I/O핀으로 혼용이 가능한 아날로그 입력 단자를 제공한다.

I/O 위치에 대한 설명과 함께 제공되는 공식 아두이노 우노 R2


아두이노는 오픈 소스 하드웨어이다. 하드웨어 참조 설계는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 2.5 라이선스에 따라 배포되며 아두이노 웹사이트에서 확인할 수 있다. 하드웨어의 일부 버전에 대한 레이아웃 및 생산 파일도 제공된다. 하드웨어 및 소프트웨어 설계는 카피레프트 라이선스에 따라 자유롭게 사용할 수 있지만, 개발자는 파생 작업에 대해 허가 없이 ''아두이노''라는 이름을 공식 제품에만 사용하도록 요청했다. 여러 아두이노 호환 제품이 상업적으로 출시되었으며, 이름 끝에 ''-duino''를 사용하여 프로젝트 이름을 피했다.

대부분의 아두이노 보드는 플래시 메모리, 핀 및 기능이 다양한 Atmel 8비트 AVR 마이크로컨트롤러 (ATmega8,[27] ATmega168, ATmega328, ATmega1280 또는 ATmega2560)로 구성된다.[28] 2012년에는 Atmel SAM3X8E를 기반으로 하는 32비트 아두이노 듀에가 출시되었다.[29] 이 보드는 프로그래밍 및 기타 회로에 통합하기 위해 연결을 용이하게 하는 단일 또는 이중 행 핀 또는 암 헤더를 사용하며, ''쉴드''라는 추가 모듈과 연결될 수 있다. 여러 개의 쉴드를 개별적으로 I²C 직렬 버스를 통해 주소 지정할 수 있다. 대부분의 보드에는 5 V 선형 레귤레이터와 16 MHz 수정 발진자 또는 세라믹 공진기가 포함되어 있다. LilyPad와 같은 일부 설계[30]는 8 MHz로 작동하며 특정 폼 팩터 제한으로 인해 온보드 전압 레귤레이터를 사용하지 않는다.

아두이노 마이크로컨트롤러는 칩 내 플래시 메모리에 프로그램을 업로드하는 것을 단순화하는 부트로더가 미리 프로그래밍되어 있다. 보드는 다른 컴퓨터와의 직렬 연결을 통해 프로그램 코드가 로드된다. 일부 직렬 아두이노 보드에는 RS-232 논리 레벨과 트랜지스터-트랜지스터 로직(TTL 직렬) 레벨 신호 간에 변환하는 레벨 시프터 회로가 포함되어 있다. 현재 아두이노 보드는 FTDI FT232와 같은 USB-to-직렬 어댑터 칩을 사용하여 구현된 범용 직렬 버스 (USB)를 통해 프로그래밍된다. 일부 보드(예: 최신 모델 우노 보드)는 FTDI 칩을 자체 ICSP 헤더를 통해 재프로그래밍할 수 있는 USB-to-직렬 펌웨어를 포함하는 별도의 AVR 칩으로 대체한다. Arduino Mini 및 비공식 Boarduino와 같은 다른 변형은 탈착식 USB-to-serial 어댑터 보드 또는 케이블, 블루투스 또는 기타 방법을 사용한다. 아두이노 IDE 대신 기존 마이크로컨트롤러 도구와 함께 사용하면 표준 AVR 인 시스템 프로그래밍 (ISP) 프로그래밍이 사용된다.

아두이노 보드는 다른 회로에서 사용할 수 있도록 마이크로컨트롤러의 대부분의 I/O 핀을 노출한다. ''Diecimila'', ''Duemilanove'', 및 현재 ''Uno''는 14개의 디지털 I/O 핀을 제공하며, 그 중 6개는 펄스 폭 변조 신호를 생성할 수 있고 6개의 아날로그 입력은 6개의 디지털 I/O 핀으로도 사용할 수 있다. 이러한 핀은 암 0.1인치(2.54 mm) 헤더를 통해 보드 상단에 있다. 여러 플러그인 애플리케이션 쉴드도 상업적으로 이용 가능하다. 아두이노 나노 및 아두이노 호환 Bare Bones Board[32] 및 Boarduino[33] 보드는 브레드보드에 연결할 수 있는 보드 하단에 수 핀 헤더를 제공할 수 있다.

많은 아두이노 호환 보드와 아두이노 파생 보드가 존재한다. 일부는 아두이노와 기능적으로 동일하며 상호 교환하여 사용할 수 있다. 많은 제품이 학교 수준의 교육에서 사용할 수 있도록 출력 드라이버를 추가하여 기본 아두이노를 향상시켜 버기와 소형 로봇을 만드는 것을 단순화한다.[34] 다른 제품은 전기적으로 동일하지만 폼 팩터를 변경하며, 쉴드와의 호환성을 유지하기도 하고 그렇지 않기도 한다. 일부 변형은 호환성이 다양한 다른 프로세서를 사용한다.

지금까지 상용 제품으로 제조된 아두이노 하드웨어는 다음과 같다.[89]

제품명프로세서비고
[https://docs.arduino.cc/hardware/uno-r4-minima/ Arduino UNO R4 Minima] / [https://docs.arduino.cc/hardware/uno-r4-wifi/ WiFi]Renesas RA4M1
- ARM Cortex-M4 (32bit), RAM 32kB, Flash 256kB
아두이노 UNO의 최신판 (2023년 5월 출시). Minima와 Wi-Fi 모듈 탑재 WiFi 두 종류. RTC 기능은 있지만 수정 발진기 미사용으로 시간 오차가 커 보정 기능 필요. Minima는 수정 발진기 배선 패턴이 있어 추후 장착 가능. WiFi는 수정 발진기 연결 핀을 LED 매트릭스에 할당하여 사용 불가, RTC 배터리 전원 핀(VRTC) 존재.
Arduino UNO / R2 / [https://docs.arduino.cc/hardware/uno-rev3 R3]Atmel ATmega328Duemilanove 후속. USB 시리얼 변환 칩: FTDI FT232RL → Atmel ATmega8U2 (R3는 Atmel ATmega16U2). Windows 제어판에서 연결 확인 용이. R3는 SCL, SDA, IOREF, 미사용 핀 추가.
[https://docs.arduino.cc/hardware/due Arduino Due]Atmel SAM3X8E
- Cortex-M3 (32bit) 84MHz, RAM 96kB, Flash 512kB
아두이노 Mega2560 폼 팩터 발전 모델 (2012년 10월 22일 출시).
[https://docs.arduino.cc/hardware/leonardo Arduino Leonardo]Atmel ATmega32U4아두이노 UNO 염가판, USB 시리얼 변환 FTDI FT232RL 제거 (2012년 6월 출시).
[https://docs.arduino.cc/hardware/mega-2560 Arduino Mega 2560]Atmel ATmega2560
- Flash 256kB
USB 시리얼 변환에 ATmega8U2 사용.
[https://www.arduino.cc/en/Main/ArduinoBoardMegaADK Arduino Mega ADK]Atmel ATmega2560Mega 2560에 MAX3421e 추가, Android OS 연동 강화. USB 시리얼 변환에 ATmega8U2 사용.
[https://docs.arduino.cc/hardware/micro Arduino Micro]Atmel ATmega32U4소형판. Leonardo와 기능 동일, Nano와 유사. Micro USB 연결. Adafruit 공동 개발.
[https://www.arduino.cc/en/Main/ArduinoBoardMini Arduino Mini]Atmel ATmega168소형판. 스케치 업로드에 아두이노 miniUSB(USB 시리얼 변환) 필요. 초기 모델: 02형 (Stamp02 라벨). 03형: 디지털 7번 핀 추가. 04형: GND 핀 위치 변경, 리셋 핀 추가.
[https://docs.arduino.cc/hardware/nano Arduino Nano]Atmel ATmega168 / ATmega328소형판. USB Mini Type-B 장착, 자동 리셋 기능. v1/v2: ATmega168 (3층 기판), v3: ATmega328 (양면 2기판). 미국 Gravitech사 제조 (아두이노 명칭 사용 허가).
[https://www.arduino.cc/en/Main/ArduinoBoardEthernet Arduino Ethernet]Atmel ATmega328아두이노 UNO에 Wiznet사 W5100 추가, 이더넷 연결 지원.
[https://www.arduino.cc/en/Main/ArduinoBoardEsplora Arduino Esplora]
[https://www.arduino.cc/en/Main/ArduinoBoardBluetooth Arduino BT]Atmel ATmega168블루투스 지원. 아두이노 NG 기반, ATmega168 + 블루투스 모듈 Bluegiga WT11, iWrap 버전. 입력 전압: 1.2V~5.5V, 통신 속도: 115200 보드 (고정). 스텝업 DC-DC 컨버터 MAX1676 (5V 승압), 3단자 레귤레이터 MC33269D-3.0 (3.3V 강압). 초기 설정: 이름 "ARDUINOBT", 비밀번호 "12345". 전파법에 의해 일본 내 사용 금지.
[https://www.arduino.cc/en/Main/ArduinoBoardFio Arduino Fio]
[https://www.arduino.cc/en/Main/ArduinoBoardPro Arduino Pro]
[https://www.arduino.cc/en/Main/ArduinoBoardProMini Arduino Pro Mini]
[https://www.arduino.cc/en/Main/ArduinoBoardLilyPad LilyPad Arduino]Atmel ATmega168V / ATmega328V웨어러블 용도, 원형 꽃 모양. 초기 모델(00~02형): 자동 리셋 기능 없음. 후기 모델(03형 이후): 자동 리셋 기능 탑재. 04형: ATmega328V 변경. 시리얼 통신 핀: 초기 모델 4핀, 후기 모델 6핀 (USB 시리얼 변환 케이블 다름). MIT Leah Buechley, SparkFun Electronics사 설계/개발.
[https://www.arduino.cc/en/Main/ArduinoBoardLilyPadUSB LilyPad Arduino USB]
[https://www.arduino.cc/en/Main/ArduinoBoardLilyPadSimple LilyPad Arduino Simple]
[https://www.arduino.cc/en/Main/ArduinoLilyPadSimpleSnap LilyPad Arduino SimpleSnap]
[https://www.arduino.cc/en/Main/ArduinoBoardYun Arduino Yún]
[https://www.arduino.cc/en/Main/Robot Arduino Robot]
[https://www.arduino.cc/en/Main/ArduinoBoardTre Arduino TRE]
[https://www.arduino.cc/en/Main/ArduinoBoardZero Arduino Zero]
[https://www.arduino.cc/en/Main/ArduinoGemma Arduino Gemma]


3. 1. 1. 아두이노 업로드

아두이노 우노 R3 업로드 경로. 1번: 리셋 신호, 2번: UART(TTL레벨) 통신, 3번: USB 호스트 통신.


아두이노 우노 R3, 업로드 구조


아두이노 우노는 시리얼 통신을 통해 기계어 코드를 업로드한다. 개인용 컴퓨터와 USB로 연결하면 ATmega16U2(초기 FTDI FT232R처럼 USB-Serial 변환 역할)가 시리얼 신호로 변환한다. 업로드를 위해서는 목표 마이크로컨트롤러(우노는 ATmega328P)에 부트로더가 설치되어 있어야 한다. 부트로더는 시리얼 통신으로 받은 기계어 코드를 플래시 메모리에 기록하여 응용 프로그램 코드를 설치한다. 전원을 켜면 마이크로컨트롤러에 설치된 코드가 실행되어 원하는 동작을 수행한다. 리셋 신호가 들어오면 부트로더는 플래시 메모리에 코드를 새로 쓸지, 아니면 응용 프로그램을 바로 실행할지 결정한다. 플래시 메모리에 코드를 변경할 필요가 없다면 바로 응용 프로그램으로 넘어간다.

아두이노 통합 개발 환경에서 업로드를 실행하면, 그림의 (1)번 DTR 신호가 마이크로컨트롤러에 전달되어 리셋되고 부트로더가 실행된다. 리셋 신호는 ATmega16U2에서 캐패시터(0.1~0.22uF)를 통해 전달된다. 코드 등의 데이터는 그림의 (2)번 선을 통해 전송된다.

업로드가 끝나고 다시 리셋되면 부트로더는 응용 프로그램이 있는 메모리 주소를 선택하여 실행한다. 응용 프로그램에서 시리얼 통신(Serial 클래스 사용)을 사용하면 코드가 실행되면서 시리얼 통신이 이루어진다. 이때 그림의 (2)번 선으로 시리얼 통신이 이루어진다. 부트로더 동작 시 응용 프로그램 코드를 플래시에 쓰는 데이터와 응용 프로그램의 데이터는 같은 신호 선을 통해 전달된다.

3. 1. 2. 아두이노 부트로더

AVR 부트로더 플래시 메모리 구조


300px


AVR 칩을 사용한 아두이노의 부트로더는 AVR의 부트로더 체계를 사용한다.[109] 따라서 아두이노의 부트로더는 AVR의 부트로더와 같은 의미이다. 아두이노는 기본적으로 부트로더가 장착된 방식을 사용하므로, 퓨즈 비트가 부트로더가 실행되도록 설정되어 있다. 부트로더는 플래시에 응용 프로그램 코드를 쓸지, 아니면 코드 변경 없이 바로 0번지의 응용 프로그램으로 점프하여 실행할지를 결정한다. 개발 과정에서는 잦은 코드 변경이 필요하므로 부트로더가 수시로 작동해야 하기 때문이다.

부트로더 설정 비트는 다음 파일에서 확인할 수 있다.

[아두이노 설치 폴더]/hardware/arduino/avr/'''boards.txt'''



uno.name=Arduino Uno

...

uno.bootloader.tool=avrdude

uno.bootloader.low_fuses=0xFF

uno.bootloader.high_fuses=0xDE

uno.bootloader.extended_fuses=0x05

uno.bootloader.unlock_bits=0x3F

uno.bootloader.lock_bits=0x0F

uno.bootloader.file=optiboot/optiboot_atmega328.hex



AVR 내의 플래시 메모리 중 부트로더 영역에 부트로더 프로그래밍 코드가 장착된다. 마이크로컨트롤러가 시작하면 퓨즈 비트 설정에 따라 부트로더 또는 응용 프로그램 중 하나를 실행한다. AVR 내에 부트로더가 장착되어 있을 때, RESET 시 '''BOOTRST''' 비트가 1이면 0000번지가 실행되고, '''0'''이면 부트로더 영역 주소가 선택적으로 실행된다. 부트 영역의 공간은 BOOTSZ1, BOOTSZ0에 의해 4가지 영역의 크기가 선택적으로 결정된다. 아두이노는 RESET 시 무조건 부트로더로 점프(BOOTRST=0)하고 부트로더 프로그램에서 업로드 또는 응용 프로그램 실행 여부를 결정한다.

부트로더가 작동하면, 프로그래밍 코드를 쓰는 과정을 실행할지, 아니면 개발자가 개발한 응용 프로그램을 실행할 지를 결정한다. 부트로더는 포트 D의 특정 입력 핀을 읽어 LOW이면 부트로더 기능을 실행하도록 결정한다.

부트로더 실행 순서는 다음과 같다.

# 포트 D를 입력으로 설정한다.

# 포트 D의 특정 핀 입력이 HIGH (호스트로부터 아무것도 오지 않음)이면, 응용 프로그램이 있는 0000 번지를 실행한다.

# 포트 D가 LOW이면, 응용 프로그램의 코드 쓰기 절차(명령줄 처리)로 진행한다.

## 호스트로부터 오는 프로그램을 받는다.

## 부트로더를 위해 정해진 명령줄에 따라 해석하여 명령줄을 검증한다.

## 명령줄에 오류가 없으면, 수신된 명령에 따라 동작한다.

3. 2. 쉴드 (Shield)

쉴드(Shield)는 아두이노와 결합하여 특정 기능을 수행하는 보드이다. 쉴드는 호환 가능한 여러 부가 모듈과 연결되는 커넥터 구조를 포함하며, 아두이노의 입출력 커넥터에 꽂아 적층 형태로 사용한다.

아두이노 MCU 보드는 마이크로컨트롤러 기능만 있기 때문에 센서나 기타 입출력 장치가 필요하다. 쉴드는 이러한 모듈을 연결하는 데 사용되며, 커넥터를 통해 각 층으로 필요한 모든 핀이 연결된다. 즉, 쉴드는 보드와 보드를 결합하여 다양한 기능을 확장하는 방식이다.

쉴드 적층


연결 핀은 위아래로 연결되어 각 층에서 모두 사용할 수 있다. 단, 핀 기능 중복은 개발자가 판단하여 선택적으로 사용해야 한다.

몇몇 쉴드는 직렬로 연결되지만, I²C 시리얼 버스를 사용하는 경우 고유 주소를 할당받아 병렬로 연결할 수 있다.

아두이노와 호환 보드는 아두이노 핀 헤더에 꽂는 '쉴드'라는 인쇄 회로 확장 보드를 사용한다.[52] 쉴드는 3D 프린팅, GNSS (위성 항법), 이더넷, 액정 디스플레이 (LCD), 모터 제어, 브레드보딩 (프로토타입) 등 다양한 기능을 제공하며, 직접 제작(DIY)도 가능하다.[53]

아두이노 및 서드파티에서 출시되는 쉴드는 다음과 같다.

'''아두이노 정품 쉴드'''

'''서드파티 쉴드'''

3. 3. 소프트웨어

아두이노의 통합 개발 환경(IDE)은 타입스크립트C를 기반으로 개발되는 크로스 플랫폼 응용 소프트웨어이다. 구문 강조, 괄호 찾기, 자동 들여쓰기 기능이 포함된 에디터와 한 번의 클릭으로 컴파일과 업로드가 가능한 컴파일러 기능을 포함하고 있다.[110] 아두이노는 C++ 언어 기반을 사용하며, 컴파일러는 avr-gcc를 사용한다.[111]

아두이노 개발 환경은 C++을 사용하여 원하는 동작을 하도록 코딩하고 보드에 업로드하면 아두이노가 동작한다. 업로드는 플래시 메모리에 쓰이므로, 이후에는 전원만 인가하면 동작한다. PC나 안드로이드에서 아두이노의 데이터를 받아 처리하려면, 해당 운영 체계에 맞는 개발 도구를 활용해야 한다. 비주얼 스튜디오나 안드로이드 SDK 등이 대표적이다. 프로세싱[112]을 사용하면 더 쉽게 코딩할 수 있다. 프로세싱은 PC에서 동작하며, 아두이노와 COM포트로 통신하여 데이터를 처리하고 그래픽으로 표현할 수 있다.

소프트웨어 개발에 익숙하지 않은 사람도 쉽게 프로그래밍할 수 있도록 설계되었으며, 아두이노 IDE를 통해 작성된 프로그램이나 코드를 "스케치(Sketch)"라고 부른다.

아두이노 통합 환경은 편집기, 컴파일러, 업로드 기능과 함께 라이브러리 관리 등 개발에 필요한 옵션을 제공한다. 실행 시, PC와 시리얼 통신을 할 수 있는 모니터를 제공한다. USB를 통해 업로드하므로, 아두이노 보드는 USB를 UART 통신으로 바꾸는 기능이 제공되며, MCU는 부트로더가 올라가 있어야 한다.

아두이노 통합 환경 기능은 다음과 같다.

  • 편집기: UTF-8 기반 편집기.
  • 컴파일러: ATmega의 경우 AVR-GCC를 이용해 컴파일.
  • 업로드: USB-UART 변환 후, MCU 부트로더가 동작하여 기계어 코드를 업로드.
  • 라이브러리 관리: 등록된 라이브러리 목록 및 예제 지원. 공개된 라이브러리를 검색하여 등록 가능.
  • 기타 옵션


USB가 없는 아두이노 보드는 USB-시리얼 변환 모듈을 별도 구매하여 연결할 수 있다.

아두이노는 AVR의 ATmega MCU를 기반으로 만들어져, 내장 모듈을 함수화하여 쉽게 접근할 수 있다. 다양한 부품 적용을 위한 여러 라이브러리가 존재하며, IDE에 기본 내장된 라이브러리와 외부 공개 라이브러리가 있다.

아두이노 IDE 2.0은 2019년 10월 18일에 아두이노 Pro IDE라는 이름으로 초기 알파 버전이 공개되었고, 2021년 3월 1일에 IDE 2.0 베타 버전으로 출시되었다. 이후 2022년 9월 14일에 정식 안정 버전으로 출시되었다.[58]

IDE 2.0은 기존과 같이 아두이노 CLI(Command Line Interface)를 사용하지만, 개선된 점으로는 더 전문적인 개발 환경과 자동 완성 기능 지원 등이 있다.[59] 이 애플리케이션의 프런트 엔드는 이클립스 테이아 오픈 소스 IDE를 기반으로 한다. 주요 기능은 다음과 같다.[60]

  • 현대적이고 완벽한 기능을 갖춘 개발 환경
  • 새로운 보드 관리자
  • 새로운 라이브러리 관리자
  • 프로젝트 탐색기
  • 기본 자동 완성 및 구문 검사
  • 그래프 플로터가 있는 시리얼 모니터
  • 다크 모드 및 DPI 인식
  • 64비트 릴리스
  • 디버깅 기능


아두이노 IDE 2.0의 중요한 기능 중 하나는 디버깅 기능이다.[61] 사용자는 디버깅 기능을 통해 단일 단계 실행, 중단점 삽입, 메모리 보기를 할 수 있다. 디버깅을 하려면 디버그 포트가 있는 대상 칩과 디버그 프로브가 필요하다. 공식 아두이노 제로 보드는 별도 장비 없이 바로 디버깅할 수 있다. 다른 공식 아두이노 SAMD21 보드는 SEGGER J-Link 또는 Atmel-ICE와 같은 별도의 장비가 필요하다.

[https://github.com/arduino/arduino-ide 버전 2.0]은 JavaScript를 사용한 웹 기반의 스탠드얼론 애플리케이션으로 재구축되었으며, 디버거를 이용한 스텝 실행, 클라우드 상의 스케치 저장 및 불러오기 등을 지원하여 기능이 대폭 향상되었다.

3. 3. 1. 아두이노 프로그래밍

아두이노 통합 개발 환경(IDE)은 CC++를 기반으로 개발되며, 구문 강조, 괄호 찾기, 자동 들여쓰기 기능이 포함된 에디터와 한 번의 클릭으로 컴파일과 업로드가 가능한 컴파일러 기능을 포함하고 있다.[110] 아두이노 동작을 위해서 C++ 언어 기반을 사용한다. 컴파일러는 avr-gcc를 사용한다.[111] 따라서 avr-gcc가 제공하는 많은 C언어의 표준라이브러리 함수를 사용할 수 있다.

아두이노 개발환경은 C++을 사용하여 원하는 동작을 하도록 코딩을 하고 이것을 보드에 업로드하면 아두이노가 동작한다. 아두이노 업로드는 플래시 메모리에 써지므로 다음부터는 전원만 인가하면 동작한다. 만약 PC나 안드로이드에서 아두이노에 오는 데이터를 받아 처리하고 싶다면, 해당 운영 체계에 맞는 개발 도구를 활용하여 프로그램을 작성해야 한다. PC의 비주얼 스튜디오나 안드로이드의 SDK 등이 대표적이다. 이러한 개발도구가 좀 어렵다고 느낀다면, 프로세싱[112]을 사용하여 쉽게 코딩 할 수 있다. 프로세싱은 아두이노 개발환경과 별개로 PC에서 동작하며, 아두이노에서 COM포트로 통신을 하고 이 데이터를 화면 등에 처리하여 보여 줄수 있다. 그래픽 처리를 할 수 있는 함수도 제공한다. 프로세싱에서 안드로이드 모드로 변경하면 안드로이드에서 처리할 수도 있다.

소프트웨어 개발에 생소한 사용자들도 쉽게 프로그래밍할 수 있도록 설계되어 있다. 이러한 아두이노 IDE를 통해 작성된 프로그램이나 코드를 "스케치(Sketch)"라고 부른다.

  • 포트(PORT)
  • 마이크로컨트롤러 하드웨어 포트를 사용하여 디지털 입출력을 구현한다.
  • pinMode() - 입출력 방향을 설정한다.
  • digtalRead(), digitalWrite() - 입출력 함수

  • 하드웨어 시리얼 통신 (Serial, UART)
  • 하드웨어 시리얼 함수는 마이크로컨트롤러의 내부 시리얼 하드웨어 모듈을 사용한다.
  • [https://www.arduino.cc/en/reference/serial Serial 객체]
  • begin(), print(), read(), write(), available(), serialEvent()
  • if (Serial), find(), findUntil(), flush(), parseFloat(), parseInt(), peek(), readBytes(), readBytesUntil()
  • readString(), readStringUntil(), setTimeout()

  • 하드웨어 모듈을 사용하므로 보드에 따라 제한된다.
  • Arduino UNO - Serial(핀0 RX, 핀1 TX)
  • Arduino Mega - Serial(핀0 RX, 핀1 TX), Serial1(핀19 RX, 핀18 TX), Serial2(핀17 RX, 핀16TX), Serial3(핀15 RX,핀14 TX)

  • SPI
  • AVR SPI 동기식 시리얼 인터페이스 하드웨어 모듈을 사용한다.
  • MISO (Master In Slave Out) - 슬래이브(slave)에서 마스터(master)로 보내는 전송라인.
  • MOSI (Master Out Slave In) - 마스터(master)에서 출력장치로 전송하는 라인.
  • SCK (Serial Clock) - 마스터(master)에서 만들어 주는 데이터 동기 신호.
  • SS (Slave Select) - 각 장치를 선택할 수 있는 신호선으로 마스터에서 활성화(enable) 또는 비활성화(disable)할 수 있다. 아두이노에서 위의 3개의 신호는 하드웨어에 의해 동작하지만 이 칩선택 신호는 디지털 출력을 사용하여 별도로 디지털 출력을 사용하여 제어해야 한다. 따라서 임의의 핀으로 설정이 가능하다. 그러나 위의 3개 신호는 하드웨어와 연결되어 변경이 불가능하다.

  • [https://web.archive.org/web/20190814220237/https://www.arduino.cc/en/reference/SPI SPI객체]
  • begin(), end() , beginTransaction(), transfer() , endTransaction(),usingInterrupt()
  • setBitOrder(),setClockDivider(),setDataMode()

  • I²C (TWI)
  • AVR I²C 동기식 시리얼 인터페이스 하드웨어 모듈을 사용한다.
  • SDA (data) - 데이터 전송 라인.
  • SCL (clock) - 데이터 동기신호 라인.

  • 하드웨어 모듈을 사용하므로 각 보드에 따라 핀이 결정되어 있다.
  • Uno, Ethernet - A4 (SDA), A5 (SCL)
  • Mega2560 - 20 (SDA), 21 (SCL)
  • Leonardo - 2 (SDA), 3 (SCL)
  • Due - 20 (SDA), 21 (SCL), SDA1, SCL1

  • [http://www.arduino.cc/en/reference/wire Wire 객체]
  • begin(), beginTransmission(), endTransmission(), write(), read()
  • requestFrom(), available(), onReceive(), onRequest()

  • 타이머(Timer)
  • 시간 읽기 함수
  • millis(), micros()
  • 시간 지연 함수
  • delay(), delayMicroseconds()

  • PWM
  • PWM을 만들기 위해 타이머를 사용한다. 따라서 출력 핀은 해당 타이머 모듈에 의해 정해진 핀으로 제한된다.
  • analogWrite() - 특별한 설정없이 핀 번호 만을 가지고 자동으로 타이머를 할당한다. OCnA, OCnB핀을 사용하고, 여기서 n는 타이머 모듈를 지정하는 숫자이고, 보통 각 타이머 마다 2개의 핀이 할당 되어있다. 마이크로컨트롤러 마다 내장 타이머의 숫자가 다르고 핀번호 역시 다르므로 확인하여 사용하면 된다.

  • 외장 타이머 라이브러리
  • 마이크로컨트롤러의 디지털 하드웨어 회로에 의해 동작하는 타이머를 사용한다. 다음 함수는 아두이노 1.6.5버전에서 라이브러리에 내장되지 않았다.
  • [http://playground.arduino.cc/Code/Timer Timer] 객체
  • [http://code.google.com/p/arduino-timerone/downloads/list Timer1 라이브러리] 객체
  • [http://playground.arduino.cc/uploads/Code/TimerThree.zip Timer3 라이브러리] 객체

  • ADC
  • AVR의 ADC 모듈 사용하고, 10비트가 내장되어 있다. ADC 모듈이 한개가 있기 때문에 여러 포트를 사용하려면 내부의 아날로그 MUX을 사용한다. 핀 번호에 의해 자동 설정된다.
  • 함수
  • analogRead(), analogReference()

마이크로컨트롤러는 보통 입출력 장치가 컴퓨터와 다르다. PC에서 사용하는 모니터와 키보드를 보통 사용하지 않는다. 시리얼 통신으로 별도의 컴퓨터로 연결하여 사용하는 방식이 일반적이다. 따라서 표준 입력장치가 없을 때, 시리얼 통신을 사용하여 printf 함수에서 완성된 스트링을 출력할 수 있다. 즉, printf 결과를 개발자가 원하는 장치로 연결할 수 있다. 시리얼 통신 뿐만 아니라, 문자-LCD 등 원하는 장치로 출력할 수 있다.

아두이노는 avr-gcc를 사용하므로 이 규칙에 맞추어 사용하면 된다.



#include

// 우선 FILE 선언을 사용하고, UART와 연결하여 사용한다.

static FILE uartout = {0} ;

// printf에서 완성된 스트링을 한 글자 씩 출력하는 함수가 있어야 한다.

// 스트링을 한바이트 씩 출력한다.

static int uart_putchar (char c, FILE *stream)

{

Serial.print(c); // 원하는 장치로 출력 한다.

return 0 ;

}

void setup(void)

{

Serial.begin(9600); // 시리얼을 시작한다.

// UART 출력을 위한 FILE 디스크립터를 사용한다.

fdev_setup_stream (&uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE);

stdout = &uartout ; // 표준 출력 STDOUT을 선언한다.

}

void loop(void)

{

float seconds ;

seconds = (float) millis() /1000.0;

printf("%d sec\n", (int) seconds);

delay(1000) ; // 1초를 기다리고

}



printf, sprintf 등의 함수에서 %f로 지정된 float 실수형의 값 변환은 avr-gcc의 빌드 옵션 설정 상, 초기설정(default)에서는 지원하지 않는다.

다음과 같이 프로그래밍을 하고:

printf("%f sec\n", seconds);

이 함수의 실행 결과를 보기 위해 시리얼 모니터를 보면 숫자 부분에 '?'가 나타난다.

이것은 초기설정(default) 값이:

:'''-lprintf_min'''

으로 최소 옵션이기 때문이다. %f와 같은 변환은 불가능하다. '''-lprintf_flt'''으로 변경이 필요하다.

이것을 확인하기 위해 빌드 화면을 캡처하면 다음과 같은 컴파일 옵션으로 링크한다 (환경 아두이노 우노):

:[아두이노 설치 폴더]\hardware\tools\avr/bin/avr-gcc '''-w -Os -Wl,--gc-sections -mmcu=atmega328p''' \

::-o [사용자폴더]\AppData\Local\Temp\build6852210290743851828.tmp/스케치프로그램파일.cpp.elf \

::[사용자폴더]\AppData\Local\Temp\build6852210290743851828.tmp\'''스케치프로그램파일.cpp.o''' \

::[사용자폴더]\AppData\Local\Temp\build6852210290743851828.tmp/'''core.a''' \

::-L[사용자폴더]\AppData\Local\Temp\build6852210290743851828.tmp '''-lm'''

아두이노 개발환경에서 avr-gcc의 옵션을 쉽게 추가 및 변경하는 메뉴가 없기 때문에, 아두이노 실수형 변환은 쉽게 구현하기가 힘들다. AtmelStudio 등의 개발도구에서 옵션을 넣는 방법을 제공하는 것과 대조적이다.

만약 실수형의 변환이 필요하다면 다음과 같은 2가지 방법으로 설정을 변경할 수 있다.

  • 개발도구를 재 빌드 하기

:인터넷에서 제공되는 개발도구의 소스[113]를 바탕으로 다음 옵션을 변경하여 개발도구 자체를 재 빌드하는 방법이 있다.

::링커 옵션에 추가:

::: -Wl,'''-u,vfprintf -lprintf_flt'''

  • platform.txt 파일 수정하여 옵션 변경 하기

:다른 방법으로 platform.txt 파일을 수정해서 옵션을 변경할 수 있다.

:[아두이노 설치 폴더]/hardware/arduino/avr/'''platform.txt''' (버전1.6.5에서)

compiler.c.elf.flags={compiler.warning_flags} -Os -Wl,--gc-sections

:다음과 같이 수정한다.

compiler.c.elf.flags={compiler.warning_flags} -Os -Wl,'''-u,vfprintf,'''--gc-sections '''-lprintf_flt'''

이러한 실수형의 계산은 대부분의 마이크로컨트롤러의 FPU(Floating-Point Unit)이 없기 때문에, 기계어 코드의 집합으로 된 함수를 호출하여 정수형 ALU을 통해 계산이 이루어진다.

경우에 따라 실시간 실행이 중요한 경우 부동소수점 계산에서 계산 속도가 부담이 될 수 있다. 이런 경우 계산의 복잡도나 속도를 프로그래밍 과정에 검토해야할 상황이 발생할 수도 있다.

위의 실수 계산의 설정과정이 복잡하다. 경우에 따라 간단히 실수값을 출력하고자 하는 경우는 다음과 같은 함수를 사용할 수도 있다. 시리얼 통신을 지원하는 클래스 Serial에 실수형 변수값을 출력할 수 있는 방법이 존재하므로 경우에 따라 적절히 사용하면 효율적일 때가 있다.

:Serial.println(1.23456, 4); // 실수 출력 "1.2346"의 예

핀 13에 LED 장착


전형적인 스케치의 예는 LED를 점멸시키는 "blink"라는 구문이다. Arduino 언어는 사용자가 이와 같이 작성하면 된다.

아두이노 우노 R3에서는 LED가 13번 핀에 연결되어 있다. 따라서 다음과 같이 코딩하면 별도의 하드웨어 추가없이 우노에서 확인할 수 있다.



#define LED_PIN 13

void setup () { //처음 시작 할때만 실행

pinMode (LED_PIN, OUTPUT); // 13번 핀을 디지털 출력 핀으로 설정

}

void loop () { // 아래의 명령문을 반복

digitalWrite (LED_PIN, HIGH); // LED 점등

delay (1000); // 1000ms(1초) 대기

digitalWrite (LED_PIN, LOW); // LED 소등

delay (1000); // 1000ms(1초) 대기

}



아두이노 하드웨어를 위한 프로그램은 대상 프로세서에 대한 바이너리 기계 코드를 생성하는 컴파일러가 있는 모든 프로그래밍 언어로 작성할 수 있다. Atmel은 8비트 AVR 및 32비트 ARM Cortex-M 기반 마이크로컨트롤러를 위한 개발 환경인 AVR Studio (구형) 및 Atmel Studio (신형)를 제공한다.

아두이노 통합 개발 환경(IDE)는 크로스 플랫폼 애플리케이션으로( 마이크로소프트 윈도우, macOS, 리눅스용) 자바로 작성된 ''Processing IDE''를 기반으로 한다. HAL과 프로그래밍 스타일로 ''Wiring'' API를 사용한다. 텍스트 잘라내기 및 붙여넣기, 텍스트 검색 및 바꾸기, 자동 들여쓰기, 중괄호 일치, 구문 강조와 같은 기능을 갖춘 코드 편집기를 포함하며 아두이노 보드에 프로그램을 컴파일하고 업로드하는 간단한 ''원클릭'' 메커니즘을 제공한다. 또한 메시지 영역, 텍스트 콘솔, 일반적인 기능을 위한 버튼이 있는 툴바 및 작업 메뉴 계층 구조가 포함되어 있다. IDE의 소스 코드는 GNU 일반 공중 사용 허가서, 버전 2로 배포된다.[55]

아두이노 IDE는 코드 구조화에 대한 특별 규칙을 사용하여 CC++ 언어를 지원한다. 아두이노 IDE는 많은 일반적인 입력 및 출력 절차를 제공하는 Wiring 프로젝트의 소프트웨어 라이브러리를 제공한다. 사용자가 작성한 코드는 스케치를 시작하고 메인 프로그램 루프를 시작하기 위한 두 가지 기본 함수만 필요하며, 이는 프로그램 스텁 ''main()''과 함께 GNU 툴체인을 사용하여 실행 가능한 사이클 이그제큐티브 프로그램으로 컴파일되고 링크된다. 또한 IDE 배포판에도 포함되어 있다. 아두이노 IDE는 프로그램 ''avrdude''를 사용하여 실행 가능한 코드를 보드의 펌웨어에 있는 로더 프로그램에 의해 아두이노 보드에 로드되는 16진수 인코딩의 텍스트 파일로 변환한다. 전통적으로 아두이노 IDE는 Atmel AVR 마이크로컨트롤러를 기반으로 하는 아두이노의 공식 보드를 프로그래밍하는 데 사용되었지만, 아두이노의 인기가 높아지고 오픈 소스 컴파일러를 사용할 수 있게 되면서 PIC, STM32, TI MSP430, ESP32의 많은 플랫폼을 아두이노 IDE를 사용하여 코딩할 수 있게 되었다.[56]

''스케치''는 아두이노(Arduino) 통합 개발 환경(IDE)으로 작성된 프로그램이다.[64] 스케치는 개발 컴퓨터에 '''.ino''' 파일 확장자를 가진 텍스트 파일로 저장된다. 아두이노 소프트웨어(IDE) 1.0 이전 버전은 '''.pde''' 확장자로 스케치를 저장했다.

최소한의 아두이노 C/C++ 프로그램은 두 개의 함수로 구성된다:[65]

  • setup(): 이 함수는 전원 공급 또는 리셋 후 스케치가 시작될 때 한 번 호출된다. 변수, 입출력 핀 모드, 스케치에 필요한 다른 라이브러리를 초기화하는 데 사용된다. [66]
  • loop(): setup() 함수가 종료된 후, loop() 함수는 메인 프로그램에서 반복적으로 실행된다. 보드의 전원이 꺼지거나 리셋될 때까지 보드를 제어한다. [67]


;깜빡임 예제

아두이노 호환 보드의 전원 LED (빨간색) 및 사용자 LED (녹색), 13번 핀에 연결됨


대부분의 아두이노 보드는 13번 핀과 접지 사이에 연결된 발광 다이오드(LED)와 전류 제한 저항을 포함하고 있으며, 이는 많은 테스트 및 프로그램 기능에 편리한 기능이다. 초보자가 사용하는 전형적인 프로그램은 Hello, World!와 유사한 "깜빡임(blink)"으로, 아두이노 보드에 내장된 LED를 반복적으로 깜빡인다. 이 프로그램은 IDE 환경에 포함된 내부 라이브러리에서 제공하는 pinMode(), digitalWrite(), delay() 함수를 사용한다.[68][69][70] 이 프로그램은 일반적으로 제조업체에서 새로운 아두이노 보드에 로드한다.



const int LED_PIN = 13; // LED에 연결된 핀 번호.

void setup() {

pinMode(LED_PIN, OUTPUT); // 13번 핀을 디지털 출력으로 설정.

}

void loop() {

digitalWrite(LED_PIN, HIGH); // LED 켜기.

delay(1000); // 1초 (1000 밀리초) 대기.

digitalWrite(LED_PIN, LOW); // LED 끄기.

delay(1000); // 1초 대기.

}



아두이노를 동작시키기 위한 프로그램을 "스케치"라고 하며, 이 스케치를 편집, 전송하기 위한 소프트웨어(통합 개발 환경)의 대표가 아두이노 IDE이다.

아두이노 상의 프로그램은 스케치라고 불린다.[91] C 언어와 같은 구문(신택스)의 프로그래밍 언어이다. 원래는 Wiring에서 파생된 언어이며[92], 제한이 많은 기판에 최적화되어 있다. 파일 확장자는 '''.ino'''이며[93], 텍스트 파일로 저장된다.

최소한의 스케치는, 두 개의 특별한 함수로 구성한다.[91]

  • setup() : 전원이 켜지거나, 리셋된 후, 처음 한 번만 실행되는 함수[94]
  • loop() : setup() 함수가 종료된 후, 반복적으로 실행되는 함수. 보드의 전원이 꺼지거나, 리셋될 때까지 보드를 제어한다.[95]


'''LED 점멸 예'''

입문자가 전형적으로 시도하는 첫 번째 스케치는, 단순히 LED를 점멸시키는 "blink"라는 것이다.

(대부분의 아두이노 보드에는, 처음부터 표면에 LED가 탑재되어 적절한 저항기도 내장되어있어, 추가 부품 없이도 즉시 점등 가능하므로, 이것을 가장 손쉬운 출력 장치로 입문자는 이용한다).



#define LED_PIN 13

void setup() {

pinMode (LED_PIN, OUTPUT); // 13번 핀을 디지털 출력으로 설정한다

}

void loop() {

digitalWrite(LED_PIN, HIGH); // LED를 점등한다

delay(1000); // 1초 대기한다(1000밀리초)

digitalWrite(LED_PIN, LOW); // LED를 소등한다

delay(1000); // 1초 대기한다

}



Firmata는 MIDI를 기반으로, 마이크로컨트롤러를 시리얼 통신(주로 USB를 통해)을 통해 제어하기 위한 범용 프로토콜이다. 이 프로토콜을 사용하기 위한 스케치는 샘플로 아두이노 IDE에 포함되어 있어, 한 번 업로드한 후에는 Firmata를 지원하는 환경을 사용하여 아두이노 IDE 없이도 대화형으로 IO 제어를 할 수 있다. 단, 아두이노를 독립적으로 사용할 수 없으므로, 랩탑이나 데스크톱 PC에서 간편하게 전자 부품을 제어하는 용도에 적합하다.

Firmata를 지원하는 환경으로는, Processing의 Firmata 라이브러리, 음성 신호 처리에 강점을 가진 비주얼 프로그래밍 환경인 Cycling '74 Max의 [https://www.maxuino.org/ Maxuino], 그리고 Pure Data(Pd)의 [http://at.or.at/hans/pd/objects.html Pduino] 등이 있다.

Maxuino나 Pduino를 사용하면, 화면에 아두이노의 디지털 포트 및 아날로그 입력 포트가 그래픽으로 표시되고, GUI를 통해 각 포트의 데이터 흐름을 프로그래밍할 수 있다. 매우 간단하게 피지컬 컴퓨팅을 구현할 수 있기 때문에, 영상 및 음악 분야의 아티스트들이 활용하고 있다.

3. 3. 2. 라이브러리

아두이노는 AVR ATmega MCU를 기반으로 만들어졌기 때문에, ATmega에 내장된 기본 모듈을 함수화하여 쉽게 접근할 수 있다. 이 외에도 다양한 부품을 적용할 수 있도록 여러 라이브러리가 존재한다. 아두이노 개발 IDE에는 기본 내장 라이브러리와 외부 공개 라이브러리가 있다.

  • 포트(PORT)
  • 마이크로컨트롤러 하드웨어 포트를 사용해 디지털 입출력을 구현한다.
  • `pinMode()` - 입출력 방향 설정.
  • `digtalRead()`, `digitalWrite()` - 입출력 함수.

  • 하드웨어 시리얼 통신 (Serial, UART)
  • 마이크로컨트롤러 내부 시리얼 하드웨어 모듈 사용.
  • [https://www.arduino.cc/en/reference/serial Serial 객체]
  • `begin()`, `print()`, `read()`, `write()`, `available()`, `serialEvent()`
  • `if (Serial)`, `find()`, `findUntil()`, `flush()`, `parseFloat()`, `parseInt()`, `peek()`, `readBytes()`, `readBytesUntil()`
  • `readString()`, `readStringUntil()`, `setTimeout()`
  • 하드웨어 모듈을 사용하므로 보드에 따라 제한된다.
  • Arduino UNO - Serial(핀0 RX, 핀1 TX)
  • Arduino Mega - Serial(핀0 RX, 핀1 TX), Serial1(핀19 RX, 핀18 TX), Serial2(핀17 RX, 핀16TX), Serial3(핀15 RX,핀14 TX)

  • SPI
  • AVR SPI 동기식 시리얼 인터페이스 하드웨어 모듈 사용.
  • MISO (Master In Slave Out) - 슬래이브에서 마스터로 보내는 전송 라인.
  • MOSI (Master Out Slave In) - 마스터에서 출력 장치로 전송하는 라인.
  • SCK (Serial Clock) - 마스터에서 만드는 데이터 동기 신호.
  • SS (Slave Select) - 각 장치를 선택하는 신호선. 마스터에서 활성화/비활성화 가능. 아두이노에서 위의 3개 신호는 하드웨어에 의해 동작하지만, 칩 선택 신호는 디지털 출력을 사용하여 별도로 제어해야 하므로 임의의 핀으로 설정 가능. 그러나 3개 신호는 하드웨어와 연결되어 변경 불가능.
  • [https://web.archive.org/web/20190814220237/https://www.arduino.cc/en/reference/SPI SPI객체]
  • `begin()`, `end()` , `beginTransaction()`, `transfer()` , `endTransaction()`, `usingInterrupt()`
  • `setBitOrder()`, `setClockDivider()`, `setDataMode()`

  • I²C (TWI)
  • AVR I²C 동기식 시리얼 인터페이스 하드웨어 모듈 사용.
  • SDA (data) - 데이터 전송 라인.
  • SCL (clock) - 데이터 동기 신호 라인.
  • 하드웨어 모듈을 사용하므로 보드에 따라 핀이 결정됨.
  • Uno, Ethernet - A4 (SDA), A5 (SCL)
  • Mega2560 - 20 (SDA), 21 (SCL)
  • Leonardo - 2 (SDA), 3 (SCL)
  • Due - 20 (SDA), 21 (SCL), SDA1, SCL1
  • [http://www.arduino.cc/en/reference/wire Wire 객체]
  • `begin()`, `beginTransmission()`, `endTransmission()`, `write()`, `read()`
  • `requestFrom()`, `available()`, `onReceive()`, `onRequest()`

  • 타이머(Timer)
  • 시간 읽기 함수
  • `millis()`, `micros()`
  • 시간 지연 함수
  • `delay()`, `delayMicroseconds()`

  • PWM
  • PWM을 만들기 위해 타이머 사용. 출력 핀은 해당 타이머 모듈에 의해 정해진 핀으로 제한.
  • `analogWrite()` - 특별한 설정 없이 핀 번호만으로 자동 타이머 할당. OCnA, OCnB 핀 사용. n은 타이머 모듈 지정 숫자, 보통 각 타이머마다 2개 핀 할당. 마이크로컨트롤러마다 내장 타이머 숫자와 핀 번호가 다르므로 확인 필요.

  • 외장 타이머 라이브러리
  • 마이크로컨트롤러 디지털 하드웨어 회로로 동작하는 타이머 사용. 다음 함수는 아두이노 1.6.5버전에서 라이브러리에 내장되지 않음.
  • [http://playground.arduino.cc/Code/Timer Timer] 객체
  • [http://code.google.com/p/arduino-timerone/downloads/list Timer1 라이브러리] 객체
  • [http://playground.arduino.cc/uploads/Code/TimerThree.zip Timer3 라이브러리] 객체

  • ADC
  • AVR의 ADC 모듈 사용, 10비트 내장. ADC 모듈이 하나이므로 여러 포트 사용 시 내부 아날로그 MUX 사용. 핀 번호에 의해 자동 설정.
  • 함수
  • `analogRead()`, `analogReference()`


마이크로컨트롤러는 PC와 달리 모니터와 키보드를 사용하지 않고, 시리얼 통신으로 별도 컴퓨터에 연결하는 방식이 일반적이다. 따라서 표준 입력 장치가 없을 때 시리얼 통신을 사용하여 `printf` 함수에서 완성된 스트링을 출력할 수 있다. 시리얼 통신 외에 문자-LCD 등 원하는 장치로도 출력 가능하다.

아두이노는 avr-gcc를 사용하므로 이 규칙에 맞춰 사용하면 된다.

```c

#include

// FILE 선언을 사용하고, UART와 연결.

static FILE uartout = {0} ;

// printf에서 완성된 스트링을 한 글자씩 출력하는 함수.

// 스트링을 한 바이트씩 출력.

static int uart_putchar (char c, FILE *stream)

{

Serial.print(c); // 원하는 장치로 출력.

return 0 ;

}

void setup(void)

{

Serial.begin(9600); // 시리얼 시작.

// UART 출력을 위한 FILE 디스크립터 사용.

fdev_setup_stream (&uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE);

stdout = &uartout ; // 표준 출력 STDOUT 선언.

}

void loop(void)

{

float seconds ;

seconds = (float) millis() /1000.0;

printf("%d sec\n", (int) seconds);

delay(1000) ; // 1초 대기.

}

```

`printf`, `sprintf` 등의 함수에서 `%f`로 지정된 float 실수형 값 변환은 avr-gcc 빌드 옵션 설정 상 초기 설정(default)에서는 지원하지 않는다.

`printf("%f sec\n", seconds);`

이 함수 실행 결과를 시리얼 모니터로 보면 숫자 부분에 '?'가 나타난다.

초기 설정(default) 값이 '''-lprintf_min'''으로 최소 옵션이므로 `%f` 변환은 불가능. '''-lprintf_flt'''으로 변경 필요.

빌드 화면 캡처 시 컴파일 옵션 (환경: 아두이노 우노):

:[아두이노 설치 폴더]\hardware\tools\avr/bin/avr-gcc '''-w -Os -Wl,--gc-sections -mmcu=atmega328p''' \

::-o [사용자폴더]\AppData\Local\Temp\build6852210290743851828.tmp/스케치프로그램파일.cpp.elf \

::[사용자폴더]\AppData\Local\Temp\build6852210290743851828.tmp\'''스케치프로그램파일.cpp.o''' \

::[사용자폴더]\AppData\Local\Temp\build6852210290743851828.tmp/'''core.a''' \

::-L[사용자폴더]\AppData\Local\Temp\build6852210290743851828.tmp '''-lm'''

아두이노 개발 환경에서 avr-gcc 옵션 추가/변경 메뉴가 없어 실수형 변환 구현이 쉽지 않다. AtmelStudio 등은 옵션 설정 방법을 제공하는 것과 대조적이다.

실수형 변환이 필요하면 다음 두 가지 방법으로 설정 변경 가능.

  • 개발 도구 재빌드
  • 인터넷에서 제공되는 개발 도구 소스[113]를 바탕으로 다음 옵션 변경 후 개발 도구 자체 재빌드.
  • 링커 옵션에 추가:
  • -Wl,'''-u,vfprintf -lprintf_flt'''

  • `platform.txt` 파일 수정
  • `platform.txt` 파일 수정으로 옵션 변경.
  • [아두이노 설치 폴더]/hardware/arduino/avr/'''platform.txt''' (버전 1.6.5에서)
  • `compiler.c.elf.flags={compiler.warning_flags} -Os -Wl,--gc-sections`
  • 수정:
  • `compiler.c.elf.flags={compiler.warning_flags} -Os -Wl,'''-u,vfprintf,'''--gc-sections '''-lprintf_flt'''`


실수형 계산은 대부분 마이크로컨트롤러에 FPU(Floating-Point Unit)가 없어, 기계어 코드 집합 함수를 호출하여 정수형 ALU로 계산한다.

실시간 실행이 중요한 경우 부동 소수점 계산 속도가 부담될 수 있어, 계산 복잡도나 속도를 프로그래밍 과정에서 검토해야 할 수 있다.

실수 계산 설정 과정이 복잡하므로, 간단히 실수 값을 출력하려면 시리얼 통신 클래스 `Serial`의 실수형 변수 출력 방법을 사용하면 효율적일 수 있다.

`Serial.println(1.23456, 4);` // 실수 출력 "1.2346" 예시

아두이노 하드웨어를 위한 프로그램은 대상 프로세서에 대한 바이너리 기계어 코드를 생성하는 컴파일러가 있는 모든 프로그래밍 언어로 작성할 수 있다. Atmel은 8비트 AVR 및 32비트 ARM Cortex-M 기반 마이크로컨트롤러를 위한 개발 환경인 AVR Studio (구형) 및 Atmel Studio (신형)를 제공한다.

아두이노 프로젝트의 오픈 소스 특성은 다른 개발자들이 프로젝트를 보강하는 데 사용하는 많은 무료 소프트웨어 라이브러리의 출판을 용이하게 했다.

3. 3. 3. 아두이노 IDE 2.0

아두이노 IDE 2.0은 2019년 10월 18일에 아두이노 Pro IDE라는 이름으로 초기 알파 버전이 공개되었고, 2021년 3월 1일에 IDE 2.0 베타 버전으로 출시되었다. 이후 2022년 9월 14일에 정식 안정 버전으로 출시되었다.[58]

IDE 2.0은 기존과 같이 아두이노 CLI(Command Line Interface)를 사용하지만, 개선된 점으로는 더 전문적인 개발 환경과 자동 완성 기능 지원 등이 있다.[59] 이 애플리케이션의 프런트 엔드는 이클립스 테이아 오픈 소스 IDE를 기반으로 한다. 주요 기능은 다음과 같다.[60]

  • 현대적이고 완벽한 기능을 갖춘 개발 환경
  • 새로운 보드 관리자
  • 새로운 라이브러리 관리자
  • 프로젝트 탐색기
  • 기본 자동 완성 및 구문 검사
  • 그래프 플로터가 있는 시리얼 모니터
  • 다크 모드 및 DPI 인식
  • 64비트 릴리스
  • 디버깅 기능


아두이노 IDE 2.0의 중요한 기능 중 하나는 디버깅 기능이다.[61] 사용자는 디버깅 기능을 통해 단일 단계 실행, 중단점 삽입, 메모리 보기를 할 수 있다. 디버깅을 하려면 디버그 포트가 있는 대상 칩과 디버그 프로브가 필요하다. 공식 아두이노 제로 보드는 별도 장비 없이 바로 디버깅할 수 있다. 다른 공식 아두이노 SAMD21 보드는 SEGGER J-Link 또는 Atmel-ICE와 같은 별도의 장비가 필요하다.

타사 보드의 경우에도 GDB, OPENOCD를 지원하고 디버그 프로브가 있다면 아두이노 IDE 2.0에서 디버깅을 할 수 있다. 커뮤니티는 ATMega328P 기반 아두이노[62] 또는 CH32 RiscV 보드[63] 등에 대한 디버깅을 지원하고 있다.

[https://github.com/arduino/arduino-ide 버전 2.0]은 JavaScript를 사용한 웹 기반의 스탠드얼론 애플리케이션으로 재구축되었으며, 디버거를 이용한 스텝 실행, 클라우드 상의 스케치 저장 및 불러오기 등을 지원하여 기능이 대폭 향상되었다.

4. 아두이노 제품

아두이노 제품에 사용된 마이크로컨트롤러(MCU)는 아트멜의 megaAVR, tinyAVR 시리즈와 ARM MCU로 만들어진다.[35]

원래의 아두이노 하드웨어는 이탈리아 회사인 Smart Projects에서 제조했다. 일부 아두이노 브랜드 보드는 미국 회사인 SparkFun Electronics와 Adafruit Industries에서 설계했다. 2016년 기준으로, 17가지 버전의 아두이노 하드웨어가 상업적으로 생산되었다.


4. 1. 종류

아두이노는 사용되는 마이크로컨트롤러(MCU)에 따라 다양한 종류로 나뉜다. 크게 아트멜(Atmel)의 AVR 시리즈와 ARM 아키텍처를 사용하는 MCU로 구분된다.

MCU 제조사MCU 종류아두이노 보드
AVR
ATmega168Pro(168), Mini(168), LilyPad (168V)
ATmega328UNO, Fio, Nano, Pro(328), Mini(328, Rev5, 5V), Pro Mini, LilyPad (328V)
ATmega2560Mega 2560, Mega ADK
ATmega32U4Yún, Leonardo, Esplora, Micro
ATtiny85GEMMA
ARM
Cortex-M0+Zero, Zero PRO, M0, M0 PRO
Cortex-M3Due



각 보드는 입출력 포트 수, 크기 등에서 차이를 보이며, 사용자는 용도에 맞는 보드를 선택할 수 있다. 다음은 상용으로 판매되었던 아두이노 하드웨어의 종류이다.[89]


  • Arduino UNO R4 Minima / WiFi: Renesas RA4M1 (ARM Cortex-M4, 32bit) 기반의 최신 UNO 모델 (2023년 5월 출시). Minima와 WiFi 두 종류가 있다.
  • Arduino UNO / R2 / R3: Atmel ATmega328 기반. UNO는 Duemilanove의 후속 모델로, USB 시리얼 변환 칩을 변경하였다.
  • Arduino Due: Atmel SAM3X8E (ARM Cortex-M3, 32bit) 기반. Mega2560의 발전 모델 (2012년 10월 22일 출시).
  • Arduino Leonardo: Atmel ATmega32U4 기반. UNO의 염가판 (2012년 6월 출시).
  • Arduino Mega 2560: Atmel ATmega2560 기반.
  • Arduino Mega ADK: Atmel ATmega2560 기반. 안드로이드 OS 연동 강화 모델.
  • Arduino Micro: Atmel ATmega32U4 기반. 소형판으로, Nano와 유사하다.
  • Arduino Mini: Atmel ATmega168 기반. 소형판.
  • Arduino Nano: Atmel ATmega168 / ATmega328 기반. 소형판.
  • Arduino Ethernet: Atmel ATmega328 기반. 이더넷 연결 지원.
  • Arduino Esplora
  • Arduino BT: Atmel ATmega168 기반. 블루투스 지원 (일본 내 사용 금지).
  • Arduino Fio
  • Arduino Pro
  • Arduino Pro Mini
  • LilyPad Arduino: Atmel ATmega168V / ATmega328V 기반. 웨어러블 용도의 원형 디자인.
  • LilyPad Arduino USB
  • LilyPad Arduino Simple
  • LilyPad Arduino SimpleSnap
  • Arduino Yún
  • Arduino Robot
  • Arduino TRE
  • Arduino Zero
  • Arduino Gemma
  • Serial Arduino: Atmel ATmega8 기반. 시리얼 인터페이스 장착.
  • Arduino Extreme: Atmel ATmega8 기반. USB 인터페이스 장착.
  • Arduino NG: Atmel ATmega8 기반. USB 인터페이스 장착. "Nuova Generazione" (새로운 세대)를 의미.
  • Arduino NG plus: Atmel ATmega168 기반. USB 인터페이스 장착.
  • Arduino Diecimila: Atmel ATmega168 기반. USB 인터페이스, 자동 리셋 기능 탑재. "Diecimila"는 10,000을 의미.
  • Arduino Duemilanove: Atmel ATmega168 / ATmega328P 기반. Diecimila 후속, 전원 자동 선택 기능 탑재. "Duemilanove"는 2009를 의미.
  • Arduino Mega: Atmel ATmega1280 기반. 확장된 입출력 핀과 메모리.

5. 응용 분야


  • 아두보이(Arduboy): 아두이노 기반의 휴대용 게임기
  • 아두이노메(Arduinome): 모노메(Monome)를 모방한 MIDI 컨트롤러 장치
  • 아두파일럿(Ardupilot): 드론 소프트웨어 및 하드웨어
  • 아두샛(ArduSat): 아두이노 기반의 큐브위성
  • C-STEM 스튜디오(C-STEM Studio): 로봇 공학을 이용한 컴퓨팅, 과학, 기술, 공학 및 수학(C-STEM)의 실습 통합 학습 플랫폼
  • 과학 연구용 데이터 로거[75][76][77][78]
  • OBDuino: 대부분의 현대 자동차에서 발견되는 차량 진단 장치 인터페이스를 사용하는 트립 컴퓨터
  • 오픈EVSE(OpenEVSE): 오픈 소스 전기 자동차 충전기
  • XOD: 아두이노용 시각 프로그래밍 언어


아두이노는 싱글 보드 마이크로컨트롤러의 일종으로, I/O 포트를 갖추고 있으며, 인터랙티브한 장치로 사용할 수 있다. 센서류를 추가하여 외부의 물리적 변화를 감지하거나, 액추에이터를 추가하여 외부에 물리적인 변화를 일으킬 수 있다. 스탠드얼론형으로 작동시킬 수도 있으며, 다른 컴퓨터와 상시 연동하여, 거기에서 실행되는 소프트웨어 (예: 어도비 플래시, Processing, Max/MSP, 퓨어 데이터, 슈퍼콜라이더 등)를 호스트 역할로 설정하여, 그것에 종속되어 컨트롤되는 형태로 사용할 수도 있다.

오픈 소스 하드웨어이며, 간단한 규정만 지키면 누구라도 자유롭게 사용할 수 있다. 하드웨어 설계 정보의 EAGLE 파일은 무료로 인터넷상에 공개되어 있다. 조립된 기판을 구입할 수도 있으며, (AVR의 IC나 다른 부품이 되는 반도체 소자브레드보드 등을 전자 부품 가게 등에서 구입하는 등) 자기 손으로 아두이노의 하드웨어를 조립할 수도 있다. 아두이노가 "오픈 소스 하드웨어라는 개념을 넓히는 계기가 되었다"고 평가하는 목소리도 있다[81]

참조

[1] 웹사이트 Getting Started: FOUNDATION > Introduction https://www.arduino.[...] 2017-05-23
[2] 웹사이트 Arduino - Home https://www.arduino.[...] 2022-10-27
[3] 논문 The Making of Arduino https://spectrum.iee[...] 2011-10-26
[4] 논문 Taking an Open-Source Approach to Hardware https://www.wsj.com/[...] 2014-09-07
[5] 웹사이트 The Untold History of Arduino https://arduinohisto[...] 2016-03-06
[6] 웹사이트 How many Arduinos are "in the wild?" About 300,000 http://www.adafruit.[...] Adafruit Industries 2013-05-26
[7] 웹사이트 Arduino FAQ – With David Cuartielles http://medea.mah.se/[...] Malmö University 2014-03-24
[8] 웹사이트 Business Entity Summary for Arduino LLC http://corp.sec.stat[...] State of Massachusetts
[9] 웹사이트 Arduino Wars: Group Splits, Competing Products Revealed? http://makezine.com/[...] Maker Media, Inc. 2015-04-21
[10] 웹사이트 Massimo Banzi: Fighting for Arduino http://makezine.com/[...] Maker Media, Inc. 2015-04-21
[11] 웹사이트 Arduino SRL to Distributors: "We're the Real Arduino" http://hackaday.com/[...] 2015-04-21
[12] 웹사이트 Arduino LLC vs Arduino SRL lawsuit; United States Courts Archive. https://www.unitedst[...] 2018-02-20
[13] 웹사이트 Arduino Announces New Brand, Genuino, Manufacturing Partnership with Adafruit http://makezine.com/[...] 2015-05-17
[14] 웹사이트 Arduino Blog – Two Arduinos become one https://blog.arduino[...] 2016-10-02
[15] 뉴스 Free Arduino {{!}} Make https://makezine.com[...] 2017-12-22
[16] 뉴스 The Arduino Foundation: What's Up? https://hackaday.com[...] 2017-12-22
[17] 웹사이트 A New Era for Arduino: Original Arduino Founders Finally Get 100% Control https://audioxpress.[...] 2024-05-10
[18] 간행물 Arduino's New CEO, Federico Musto, May Have Fabricated His Academic Record https://www.wired.co[...] 2017-12-22
[19] 뉴스 CEO controversy mars Arduino's open future https://techcrunch.c[...] 2017-12-22
[20] 웹사이트 Arduino Blog – A new era for Arduino begins today https://blog.arduino[...] 2018-01-19
[21] 웹사이트 BCMI Acquires Arduino AG and Makers Breathe a Sigh of Relief https://techwombat.c[...] 2018-11-29
[22] 뉴스 Arduino reborn partners with ARM https://www.electron[...] 2017-11-03
[23] 웹사이트 Announcing the Arduino Command Line Interface (CLI) https://blog.arduino[...] 2020-06-23
[24] 웹사이트 Announcing the Arduino IoT Cloud Public Beta https://blog.arduino[...] 2020-06-23
[25] 웹사이트 Open-source HW in the Modern Era: Interview of Arduino's CEO Fabio Violante https://www.eetimes.[...] 2020-06-23
[26] 웹사이트 Hardware Index https://www.arduino.[...] Arduino Project 2013-12-10
[27] 뉴스 Chip Hall of Fame: Atmel ATmega8 https://spectrum.iee[...] 2017-10-10
[28] 웹사이트 Arduino - Products https://www.arduino.[...] 2018-02-20
[29] 간행물 Microcontroller Maniacs Rejoice: Arduino Finally Releases the 32-Bit Due https://www.wired.co[...] 2018-02-20
[30] 논문 Le wearable technologies e la metafora dei sei cappelli per pensare a supporto del seamless learning
[31] 웹사이트 Optiboot Bootloader for Arduino and Atmel AVR https://github.com/O[...] 2015-10-01
[32] 웹사이트 Bare Bones Board (BBB) Kit http://moderndevice.[...] 2018-11-29
[33] 웹사이트 DC Boarduino (Arduino compatible) Kit (w/ATmega328) - v1.0 https://www.adafruit[...] 2018-11-29
[34] 논문 Disuffo: Design, prototyping, and development of an open-source educational robot https://oaj.fupress.[...] 2019-04-30
[35] 서적 Arduino : a quick-start guide http://worldcat.org/[...]
[36] 웹사이트 Arduino - ArduinoBoardSerial https://www.arduino.[...] 2018-02-20
[37] 웹사이트 Arduino - ArduinoBoardDiecimila https://www.arduino.[...] 2018-02-20
[38] 웹사이트 Arduino - ArduinoBoardDuemilanove https://www.arduino.[...] 2018-02-20
[39] 웹사이트 Arduino Uno Rev3 https://www.arduino.[...] 2018-02-20
[40] 웹사이트 Differences Between the Arduino Uno Revision 2 and Revision 3 https://startingelec[...] 2018-02-20
[41] 웹사이트 Arduino - ArduinoBoardUnoSMD https://www.arduino.[...] 2018-02-20
[42] 웹사이트 Arduino Leonardo with Headers https://www.arduino.[...] 2018-02-20
[43] 웹사이트 Arduino Pro https://www.arduino.[...] 2018-02-20
[44] 웹사이트 Arduino Mega official webpage (arduino.cc) https://www.arduino.[...] 2018-02-20
[45] 웹사이트 Arduino Nano https://www.arduino.[...] 2018-02-20
[46] 웹사이트 LilyPad Arduino Main Board https://www.arduino.[...] 2018-02-20
[47] 웹사이트 Arduino Robot https://www.arduino.[...] 2018-02-20
[48] 웹사이트 Arduino Esplora https://www.arduino.[...] 2018-02-20
[49] 웹사이트 Arduino Ethernet Rev3 without PoE https://www.arduino.[...] 2018-02-20
[50] 웹사이트 Arduino Yún https://www.arduino.[...] 2018-02-20
[51] 웹사이트 Arduino Due https://www.arduino.[...] 2018-02-20
[52] 웹사이트 Arduino - ArduinoShields https://www.arduino.[...] 2017-10-04
[53] 웹사이트 Arduino Shield list http://shieldlist.or[...] 2013-11-05
[54] 웹사이트 Releases · arduino/Arduino · GitHub https://github.com/a[...] 2022-11-12
[55] 웹사이트 arduino/Arduino https://github.com/a[...] 2020-08-27
[56] 웹사이트 Unofficial list of 3rd party boards support urls https://github.com/a[...] 2024-05-08
[57] 웹사이트 Releases · arduino/arduino-ide · GitHub https://github.com/a[...] 2024-02-20
[58] 웹사이트 "It's here: please welcome Arduino IDE 2.0" https://blog.arduino[...] 2022-11-12
[59] 웹사이트 The Arduino IDE Finally Grows Up https://hackaday.com[...] 2019-10-26
[60] 웹사이트 Introducing new Arduino Pro IDE with advanced features https://www.seeedstu[...] 2019-10-26
[61] 웹사이트 Debugging Fundamentals https://docs.arduino[...] 2024-09-26
[62] 웹사이트 Arduino Board Package to Debug Uno/ATmega328P with CH552 debugger in Arduino IDE 2.0.0 https://github.com/D[...] 2024-09-26
[63] 웹사이트 add debug feature. https://github.com/o[...] 2024-09-26
[64] 서적 Programming Arduino Getting Started with Sketches McGraw-Hill 2011-11-08
[65] 웹사이트 Arduino - BareMinimum https://www.arduino.[...] 2018-02-20
[66] 웹사이트 setup() - Arduino Reference https://www.arduino.[...]
[67] 웹사이트 loop() - Arduino Reference https://www.arduino.[...]
[68] 웹사이트 pinMode() - Arduino Reference https://www.arduino.[...]
[69] 웹사이트 digitalWrite() - Arduino Reference https://www.arduino.[...]
[70] 웹사이트 delay() - Arduino Reference https://www.arduino.[...]
[71] 웹사이트 xinu-avr: The Xinu OS for AVR ATmega328P http://se.fi.uncoma.[...]
[72] 웹사이트 xinu-arduino https://github.com/r[...] 2022-10-09
[73] conference Using Protothreads for Sensor Node Programming http://urn.kb.se/res[...]
[74] 웹사이트 FreeRTOS for Arduino https://www.arduino.[...]
[75] journal Cave Pearl Data Logger: A Flexible Arduino-Based Logging Platform for Long-Term Monitoring in Harsh Environments 2018-02-09
[76] journal Open Source Building Science Sensors (OSBSS): A low-cost Arduino-based platform for long-term indoor environmental data collection 2016-05-01
[77] journal Estimating the Underwater Diffuse Attenuation Coefficient with a Low-Cost Instrument: The KdUINO DIY Buoy 2016-03-15
[78] journal Development of a Low-Cost Arduino-Based Sonde for Coastal Applications 2016-04-13
[79] 웹사이트 Arduino Education nominated for Bett Award https://blog.arduino[...] 2020-01-20
[80] 뉴스 https://www.itmedia.[...]
[81] 간행물 トキメキの電子工作 日経WinPC 2010-05-29
[82] 웹사이트 Ars Electronica Archiv http://90.146.8.18/d[...] 2009-02-18
[83] 웹사이트 Ars Electronica Archiv / ANERKENNUNG http://90.146.8.18/d[...] 2009-02-18
[84] 문서 Prix Ars Electronicaの2006年Honorary Mentionsを参照。
[85] journal Build It. Share It. Profit. Can Open Source Hardware Work? http://www.wired.com[...] 2008-10-20
[86] 웹사이트 なぜArduinoが勝利して今も生き続けているのか http://makezine.jp/b[...]
[87] 웹사이트 Arduino FAQ – With David Cuartielles | MEDEA http://medea.mah.se/[...]
[88] 웹사이트 https://www.quora.co[...]
[89] 웹사이트 Arduino - Products https://www.arduino.[...]
[90] 웹사이트 Arduino Software Release Notes https://github.com/a[...] Arduino Project 2024-05-23
[91] 웹사이트 Arduino - Sketch https://www.arduino.[...] Arduino Project 2019-12-21
[92] 웹사이트 Wiring http://wiring.org.co[...] 2019-12-21
[93] 문서 Arduino Software (IDE) リリースノート。2011年11月30日(現地時間)にリリースされたArduino IDE 1.0から使用されている。以前は .pde であった。
[94] 웹사이트 setup関数 https://www.arduino.[...] Arduino Project 2019-12-21
[95] 웹사이트 loop関数 https://www.arduino.[...] Arduino Project 2019-12-21
[96] 웹사이트 Arduino - Software https://www.arduino.[...]
[97] 웹사이트 Arduino - Policy https://www.arduino.[...]
[98] 웹사이트 Arduino AtHeart https://www.arduino.[...]
[99] 웹사이트 Studuino ダウンロードページ http://artec-kk.co.j[...]
[100] 웹사이트 Using an Arduino as an AVR ISP (In-System Programmer) https://www.arduino.[...]
[101] 웹사이트 Arduino, LLC v. Arduino S.R.L. et al :: Justia Dockets & Filings http://dockets.justi[...]
[102] 웹인용 아두이노 개발환경 - 다운로드 http://www.arduino.c[...] 2015-06-19
[103] 웹인용 Arduino - Introduction http://www.arduino.c[...]
[104] 웹사이트 작품 웹사이트 1 https://www.pinteres[...]
[105] 웹사이트 아두이노 작품 이미지 https://www.google.c[...]
[106] 이미지 아두이노 작품 이미지 2 https://www.google.c[...]
[107] 웹인용 Atmel Studio http://www.atmel.com[...]
[108] 웹인용 아두이노, 상상력을 실현하는 플랫폼 http://weekly.khan.c[...] 주간경향 2013-07-09
[109] 웹인용 Self Programming http://www.atmel.com[...]
[110] 웹인용 Releases · arduino/arduino-ide https://github.com/a[...] 2024-05-12
[111] 웹인용 AVR gcc 사이트 http://www.nongnu.or[...] 2015-06-19
[112] 웹인용 Processing 사이트 http://www.processin[...] 2015-06-19
[113] Github 아두이노 개발 도구 소스 버전1.6.5 https://github.com/a[...]
[114] 사이트 Arduino Board - Serial Interface http://arduino.cc/en[...]
[115] 웹인용 The Making of Arduino https://spectrum.iee[...] 2021-08-30
[116] 뉴스 News; Arduino.cc http://www.arduino.c[...]
[117] 웹인용 Home https://arduinohisto[...] 2021-08-30
[118] 웹인용 Why Google Choosing Arduino Matters and Is This the End of "Made for iPod" (TM)? https://web.archive.[...] makezine.com 2011-05-12
[119] 웹인용 Smart Projects http://smartprj.com/ 2013-07-01
[120] 회로도 Arduino Diecimila 회로도 http://www.arduino.c[...]
[121] 회로도 Arduino Mega2560 회로도 http://www.arduino.c[...]
[122] 회로도 Arduino UNO Rev3 회로도 http://www.arduino.c[...]
[123] 회로도 Arduino Mega2560 Rev3 회로도 http://www.arduino.c[...]
[124] 웹인용 Arduino Announces New Brand, Genuino, Manufacturing Partnership with Adafruit {{!}} Make: https://makezine.com[...] 2021-08-30



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com