Hardware | Arduino Gemma 를 DIY 해보자

|

1. Arduino DIY


Arduino 및 테스트용 PCB 등을 무료로 나누어 주는 좋은 회사가 있습니다.


* Board Lab (Board Free)

http://www.boardfree.kr/


Board Lab (Board Free)

http://www.boardfree.kr/



출처: https://chocoball.tistory.com/search/boardfree [초코볼의 inside Tech]


버려지거나 중복되는 PCB 들을 무료로 나누어 주시는 것을 사이드업으로 해주고 계십니다. (고마운 분들)

혹시, 요청하실 분이 계시다면, 수량에 한계가 있으며 무료나눔이 회사의 본업이 아니다 보니, 최대한 조심해서 요청하세요.

보다 자세한 유념 사항은 사이트에 잘 기재되어 있으니, 꼼꼼히 읽어 주시길 바랍니다.


PCB 무료나눔을 통해, 부품공부나 SMD 실장에 대해 경험 할 수 있었습니다.

그 결과물로는 arduino 를 가지게 되는 것이죠. 지금까지 아래와 같은 과정이 있었습니다.


* Hardware | Arduino 를 DIY 해보자 - 1

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


* Hardware | Arduino 를 DIY 해보자 - 2

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


* Hardware | Arduino 를 DIY 해보자 - 3

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


Arduino Nano 도 작업하고 있습니다만, 과정중에 ATmega328P-AU 부트로더에 막혀 있습니다.

아마 AliExpress 에서 fake CPU 가 왔거나, 제가 처음에 fuse bit 을 잘못 해서 그런 것 같아요.


머리를 식힐 겸, 나눔 받은 BL-303 이라는 것을 작업해 보기로 합니다.



* 보드프리

BL-303.pdf


* Arduino

arduino-gemma-schematic.pdf

arduino-gemma-reference-design.zip


본 보드는, ATtiny85 를 CPU 로 사용하는 소형 arduino 입니다.

예전에 ATtiny85 를 이용하여 비슷한 arduino 계열인 Digispark 를 만들어 봤으므로, 그리 어렵지 않을 것이라 생각해서죠.


* Hardware | ATtiny85 를 사용해 보자 - 1

https://chocoball.tistory.com/entry/Hardware-ATtiny85-1


* Hardware | ATtiny85 를 사용해 보자 - 2

https://chocoball.tistory.com/entry/Hardware-ATtiny85-2


* Hardware | ATtiny85 개발 보드를 이용하여 Digispark 를 DIY 하기

https://chocoball.tistory.com/entry/Hardware-Digispark-DIY-using-ATtiny85




2. Arduino Gemma


작업 할 BL-303 보드는 Arduino Gemma 라는 보드를 기본으로 만들어진 보드 입니다.

Arduino Gemma 는 Wearable IoT, 즉 의상이나 소형 IoT 컨트롤러 용으로 만들어진 arduino 입니다.


* ARDUINO GEMMA

https://store.arduino.cc/usa/arduino-gemma



지금은 성능 좋고 소형화된 CPU 들이 많이 나와서, 단종 되었습니다.

참고로, 이 Arduino Gemma 를 업그레이드 시킨, 그렇지만 기본은 동일한 제품이 Adafruit 에서 Trinket 이라는 제품이 있습니다.



CPU 는 같은 ATtiny85 지만 pinout 을 늘여서, 더 많은 확장성을 가지게 한 제품 입니다.



Adafruit 는 3V out 버전과 5V out 버전 두 가지로 나뉘는데, 제가 받은 PCB 는 5V/3.3V 둘 다 지원합니다.

보드프리는 PCB 설계가 뛰어난 것 같습니다.




3. SMD capacitor 구입


다른 arduino DIY 하면서, 왠만한 부품은 모두 구입 했는데, 0805 SMD 용 1uF 캐패시터만 가지고 있지 않아, 구입합니다.


* 0805 SMD Ceramic Capacitor Assorted Kit 1pF~10uF 50values*50pcs=2500pcs Chip Ceramic Capacitor Samples kit

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



이왕 구입하는 김에, 다른 치수들도 함께 들어 있는 패키지로 구입했습니다.


1pF  / 1.5pF / 3pF  / 4.7pF /  5p  / 5.6pF / 6.8pF/ 8.2pF / 10pF

12pF / 18pF  / 20pF / 22pF  / 27pF / 30pF / 33pF

47pF / 56pF  / 68pF / 75pF  / 82pF

100pF(101) / 120pF(121) / 150pF(151) / 180pF(181) / 200pF(201)

220pF(221) / 330pF(331) / 390pF(391) / 470pF(471) / 560pF(561) / 680pF(681)

1nF(102) / 1.5nF(152) / 2.2nF(222) / 3.3nF(332) / 4.7nF(472) / 6.8nF(682) 

10nF(103) / 22nF(223) / 33nF(333) / 47nF(473) / 68nF(683) 

100nF(104) / 150nF(154) / 220nF(224) / 330nF(334) / 470nF(474) 

1uF(105) / 10uF(106)


참고로, 캐패시터 값 변환 공식을 여기에 올려 놓습니다. (Googling)


1 mF (millifarad, one thousandth (10−3) of a farad) = 1000 uF = 1000000 nF

1 uF (microfarad, one millionth (10−6) of a farad) = 0.000 001 F = 1000 nF = 1000000 pF

1 nF (nanofarad, one billionth (10−9) of a farad) = 0.001 uF = 1000 pF

1 pF (picofarad, one trillionth (10−12) of a farad)


도착샷은 예의.



단위가 자잘하게 나뉘는지라, 간략화한 표시로 구분하고 있습니다. 예를 들면 474 는 470nF. 






4. 납땜


Flux paste 를 올리기 전에, 필요한 부품을 도열 시켜 봅니다.



한땀 한땀 flux paste 를 올리고, SMD 부품들을 고정 시켜 놓습니다.



오븐에서 구워져 나오면 이쁘게 자리를 잡아 안착되었습니다.

정리가 필요한 부분은 인두기로 정리해 주면 됩니다. 부품 수가 적은지라 이번에는 따로 할게 없었네요.



Pin header 까지 납땜하면 끝.



USB 핀 쪽의 납땜 정리가 힘들었으나, 새로 구입한 T12-ILS 팁으로 깔끔하게 정리할 수 있었습니다.

작은 PCB 납땜은 필수적으로 극세사 납땜 tip 이 필요합니다.





5. Bootloader


Arduino 를 제작하는 데 있어서, 마무리 작업은 납땜 후, bootloader 를 입히는 작업 입니다.


Arduino Gemma 이지만, Adafruit 의 Trinket 의 bootloader 를 입힐 것이기에, 아래 Adafruit 사이트를 참고합니다.

동일한 ATtiny85 이므로, Digispark 의 bootloader 를 입혀도 될 것 같으나, 새롭게 Trinket 용으로 가 봅니다.


* Repairing bootloader

https://learn.adafruit.com/introducing-trinket/repairing-bootloader



Trinket 의 pinout 정보는 위와 같습니다.

이전에 만들어 봤던 Arduino Duemilanove 를 이용하여 bootloader 를 입혀 봅니다.


-----------------------------
| Trinket     | Duemilanove |
-----------------------------
| VBAT+ (Vin) |      5V     |
|    GND      |     GND     |
|    RST      |     D10     |
|    PB0      |     D11     |
|    PB1      |     D12     |
|    PB2      |     D13     |
-----------------------------


Adafruit 사이트를 참고하여 Duemilanove 연결 합니다.



위의 사이트에서 bootloader 를 입혀주는 sketch 를 Arduino IDE 에서 Duemilanove 에 업로드 해 줍니다.

기록을 남기기 위해 여기에도 파일을 옮겨 놓습니다.


trinketloader_2015-06-09.zip


Duemilanove 에 sketch 를 업로드 하고 Serial Monitor 를 연 다음, "G" 를 입력하면 자동으로 bootloader 를 입혀 줍니다.



다른 arduino 들 처럼, IDE 의 "burn bootloader" 를 이용하는 것이 아니라서 생소하지만, 무사히 완료 되었습니다.


Bootloader 가 문제없이 올라가면, 아래 동영상 처럼, ready 상태임을 나타내는 LED 가 천천히 밝아졌다 어두워 졌다 합니다.

Sketch 를 업로드 할 때, USB 칩이 없으므로, 스위치를 눌러 주어, 강제로 ready 상태를 만들어 줄 때의 모습입니다.





6. Windows Driver


FTDI 나 ATmega16U2 처럼, USB 전용 chip 이 달려있지 않은 보드 이므로, 관련 driver 를 인스톨 해줘야 합니다.

그냥 꽂으면 아래와 같이 나옵니다. "알 수 없는 장치..."



최신 드라이버는 아래 링크에서 받습니다.


* adafruit/Adafruit_Windows_Drivers

https://github.com/adafruit/Adafruit_Windows_Drivers/releases/tag/2.4.0.0


다운로드 받은 파일을 실행하여 드라이버를 인스톨 합니다.



저는 Trinket 만 필요하므로, "Trinket / Pro Trinket / Gemma (USBtinyISP)" 만을 선택해서 인스톨 했습니다.



드라이버가 인스톨 되고 나면, 아래처럼 "libusb-win32 devices" 라는 항목이 생기고, "USBtiny" 라고 기기를 인식합니다.



Windows OS 가 추가로 뭔가를 설치/설정 하기도 합니다.





7. Arduino IDE


납땜 > 부트로더 > Windows Driver 까지 왔으면, 그 다음은 Arduino IDE 설정 입니다.


File > Preferences > Additional Boards Manager URLs 에 아래 링크를 등록합니다.

이는 Board Manager 에 등록되어 선택할 수 있도록 하기 위함 입니다.


https://adafruit.github.io/arduino-board-index/package_adafruit_index.json


메뉴는 아래와 같습니다.

일전에 ESP8266 을 설치 했으니, 그 밑줄에다가 등록해 줍니다.



그러면 Board Manager 에서 Adafruit AVR Boards 를 등록할 수 있게 됩니다.



짜잔~! 이제 Board 메뉴에서 아래처럼 선택할 수 있게 됩니다.


Tools > Board > Adafruit Trinket (ATtiny85 @ 8MHz)


16MHz 를 사용해도 될 듯 한데, 내부 기본 oscillator 가 8MHz 라고 하니, 안전하게 8MHz 로 선택합니다.

16MHz 는 소프트웨어적으로 doubling 한다고 하는데, 아직 필요하지 않으니...



Programmer 는 "USBtinyISP" 를 선택합니다.

이는 여러번 이야기 되었듯이, USB chip 이 없기 때문입니다.



여기까지 오면, 관련된 설정은 이제 모두 끝났습니다.

이후는 Happy Coding 인거죠!




8. Blink


실제로 Trinket 화 된 Arduino Gemma 에게 일을 시켜 봅시다.

센서를 연결해서 확인해도 되지만, 가장 간단한 PCB 상의 LED 점멸을 시켜 보아요.


* Setting up with Arduino IDE

https://learn.adafruit.com/introducing-trinket/setting-up-with-arduino-ide


소스는 위의 Adafruit 사이트 것을 그대로 사용했습니다.


/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.

  To upload to your Gemma or Trinket:
  1) Select the proper board from the Tools->Board Menu
  2) Select USBtinyISP from the Tools->Programmer
  3) Plug in the Gemma/Trinket, make sure you see the green LED lit
  4) For windows, install the USBtiny drivers
  5) Press the button on the Gemma/Trinket - verify you see
     the red LED pulse. This means it is ready to receive data
  6) Click the upload button above within 10 seconds
*/

int led = 1; // blink 'digital' pin 1 - AKA the built in red LED

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
    digitalWrite(led, HIGH); 
    delay(1000);
    digitalWrite(led, LOW);
    delay(1000);
}


Sketch 주석에도 잘 설명이 되어 있듯이, 소스를 업로드 할 때에는 필히 스위치를 눌러서 ready 상태로 만들어야 한다고 나와 있습니다.

이게 타이밍을 맞춰야 해서, IDE > Trinket 에 밀어넣는 순간이, ready 10 초 안에 진행 될 수 있도록 해야 합니다.



성공하면, 위와 같이 다른 arduino 와는 다른 과정들을 보여 줍니다. 아무래도 USB chip 부재...


avrdude: Version 6.3-20171130
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : usb
         Using Programmer              : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:\\.\libusb0-0001--0x1781-0x0c9f
         AVR Part                      : ATtiny85
         Chip Erase delay              : 400000 us
         PAGEL                         : P00
         BS2                           : P00
         RESET disposition             : possible i/o
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    12     4    0 no        512    4      0  4000  4500 0xff 0xff
           flash         65     6    32    0 yes      8192   64    128 30000 30000 0xff 0xff
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

         Programmer Type : USBtiny
         Description     : USBtiny simple USB programmer, https://learn.adafruit.com/usbtinyisp
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e930b (probably t85)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: Using SCK period of 10 usec
avrdude: reading input file "C:\Users\chocoball\AppData\Local\Temp\arduino_build_87390/sketch_nov06a.ino.hex"
avrdude: writing flash (700 bytes):

Writing | ####avrdude: 5 retries during SPI command
#####avrdude: 7 retries during SPI command
####avrdude: 8 retries during SPI command
#####avrdude: 7 retries during SPI command
####avrdude: 7 retries during SPI command
#####avrdude: 8 retries during SPI command
####avrdude: 9 retries during SPI command
#####avrdude: 8 retries during SPI command
####avrdude: 8 retries during SPI command
#####avrdude: 8 retries during SPI command
##### | 100% 0.42s

avrdude: 700 bytes of flash written
avrdude: verifying flash memory against C:\Users\chocoball\AppData\Local\Temp\arduino_build_87390/sketch_nov06a.ino.hex:
avrdude: load data flash data from input file C:\Users\chocoball\AppData\Local\Temp\arduino_build_87390/sketch_nov06a.ino.hex:
avrdude: input file C:\Users\chocoball\AppData\Local\Temp\arduino_build_87390/sketch_nov06a.ino.hex contains 700 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.13s

avrdude: verifying ...
avrdude: 700 bytes of flash verified

avrdude done.  Thank you.


자세한 과정 log 는 위와 같습니다. 동영상으로도 올려 봅니다.



좀더 다른 sketch 는 다음 링크를 참고해 보세요.


* Programming with Arduino IDE

https://learn.adafruit.com/introducing-trinket/programming-with-arduino-ide


Duemilanove 다음으로 성공한, 두 번째 arduino DIY 되겠습니다.

모두 Happy DIY!


And