SW개발자를 위한 Hardware 워크숍

박동희

노트: http://dh8.kr/workshop/hwworkshop/


Helloboard


어린 창작자를 위한 워크숍


워크숍에서 다루는 내용


참가자 소개


시간표


임베디드 하드웨어/소프트웨어 개발 시작하기

처음 시작할때는 취미 플래폼 체크: Rpi, Arduino, Particle, Mbed

  1. C언어 배우기
  2. 기초 전자이론 (전압, 전류, 파워, 저항, 옴의법칙)
  3. 납땜, 멀티미터, 디버거, 오실로스코프(또는 로직 애널라이져)
  4. 마이크로컨트롤러와 툴체인 선택. 개발보드
  5. 부품 선택 구매(digikey, mouser), 그리고 데이터 쉬트 읽기.

Arduino?


Arduino 시작

시작은 2005년 이탈리아 Interaction Design Institute Ivrea

하드웨어 플랫폼 만들기

Maker 문화를 만든 불씨!


Arduino 회로도


우리가 만들 Arduino 회로도


Arduino 만들기 재료

브레드 보드, 전선, 7805 레귤레이터, LED, 220옴 저항, 10k 옴 저항, 1k 옴 저항, 10uF 캐퍼시터, 16MHz 클럭 크리스탈, 22pF 캐퍼시터 2개, 버튼 스위치, USB 시리얼 컨버터


Multi meter



Breadboard

브레드보드의 내부는 어떻게 연결 되어 있나?


Breadboard 내부


Arduino 만들기 순서


5V 전원회로


Voltage Regulator 7805

실습: 7805 데이터 쉬트 읽기 fairchild


7805 내부회로

7805 내부 회로.

출처: https://www.sparkfun.com/datasheets/Components/LM7805.pdf


5V analog circuit

제너다이오드 제너 점 5.6v, Base-Emitter forward bias 0.7v

5.6v- 0.7v = 4.9v


콘덴서

from: wikipedia


전해 콘덴서 내부


바이패스 콘덴서


전기회로 이론


옴의 법칙

I(전자의 흐름)는 V(세기)에 비례. 비례 상수는 R.

https://youtu.be/mB1z_x7J5Aw?t=178 Electrical Resistance - Georg Ohm


LED (Light Emitting Diode)


Diode


Diode

from: Collin Mel Cunningham http://goo.gl/h8MoY


LED

Forward voltage : 2V Forward current : 20mA

R1 ?


MCU 회로


Atmega8 datasheet 읽기

실습: 팀당 1개씩 읽은 내용 공유.


Arduino atmega8 pin mapping


Arduino on breadboard

https://www.dropbox.com/sh/9elkqexib28sqat/2G90u12MPO


USB serial convertor (CP2103)


개발환경 다운로드

http://119.205.220.242/~donghee/hw/


Bootloader

Serial Bootloader for Atmel mega8 AVR Controller

http://goo.gl/r5R3S

ATmegaBOOT.c

#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include <avr/delay.h>

#define MAX_TIME_COUNT (F_CPU>>1)
#define HW_VER   0x02
#define SW_MAJOR 0x01
#define SW_MINOR 0x12

#ifndef outb
    #define outb(sfr,val)  (_SFR_BYTE(sfr) = (val))
#endif
#ifndef inb
    #define inb(sfr) _SFR_BYTE(sfr)
#endif

소프트웨어 개발자를 위한 하드웨어 워크숍: 둘째날

체크인: 모닝페이지

Quiz

  1. 회로도 그리기(9v–5v): 파워회로 + LED
  2. 왜 바이패스 캐패시터를 쓰나?
  3. 외부 클럭 회로
  4. 마이크로 컨트롤러의 리셋 회로
  5. UART 연결 USB rs232 <-> atmega8

Arduino UNO 탐험!

http://arduino.cc/en/Main/arduinoBoardUno

http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf


Arduino UNO의 새로운 기능

  1. Auto Reset When Uploading
  2. USB전원/ DC전원 자동 스위칭(DC전원 우선)
  3. 3.3v Regulator
  4. usb to uart ic
  5. 500mA USB fuse

Arduino Uno Rev3 회로도 읽기


Input/Output


Digital Output

digital pin 12, 13 에 두개의 LED 연결하여 제어하기 (회로도를 보드로 옮기기)

friz(arduino_led2.frz)


Digital Input

Digital pin 7에 풀업버튼 연결


Digital Input

해보기: Play and Stop

  1. 풀업버튼 2개를 연결한다.
  2. Press Play Button: 두개의 LED를 번갈아가면서 실행.
  3. Press Stop Button: 두개의 LED 모두를 끈다.
  4. 코드 공유/ 리뷰.

Analog Input

가변저항

해보기 1. AnalogInput 예제 2. 512 threshold, CdS 사용 3. 가변저항 전압 측정, 4. Serialport로 온 가변 값과 비교.


Analog Input

LM35

http://www.ti.com/lit/ds/symlink/lm35.pdf

해보기 1. LM35 데이터 쉬트에서 pin 배열, 동작전압, 온도 2. Arduino에 연결하는 회로도 그려보기

[ADC값] -(/1023*5)-> [전압] -(*100)-> [온도]

Analog Input

Sharp GP2Y0A51SK : 거리센서

핀 연결: http://goo.gl/OxlwN


잠깐만! 오실로 스코프 : DSO nano V2

http://www.seeedstudio.com/wiki/DSO_Nano_v2#Usage

http://www.seeedstudio.com/wiki/images/9/97/DSO_Nano_manual.pdf


DSO nano V2 파형 트리거 잡는 기능으로 파형 읽기


PWM (Pulse Width Modulation)

http://dh8.kr/wiki/doku.php/workshop:pwm

해보기 1. 오실로 스코프로 PWM 확인 2. LED 또는 모터 연결하기 3. Fading 예제 실행해보기. 4. 센서(가변저항) 입력받아서 PWM duty ratio 바꾸기


TR, FET, Relay로 큰전력의 주변기기 다루기

BJT TR: P2N2222A

http://blog.naver.com/dolicom/10083875471

FET: FQP33N10 or IRF540

FET구조와 동작: http://blog.daum.net/kingbin/12135407 http://goo.gl/nuwcM

Transistor Therory Explained - (How it works) Transistor / MOSFET tutorial

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

Relay: DC/AC제어


NPN Bipolar Transistor

실습: P2N2222A 데이터 쉬트 읽기 fairchild

  1. 핀배열. base, collector, emittor.
  2. Vbe 동작 전압
  3. Veb, Vce 한계전압 Veb=6v Vce=40v
  4. 증폭. hFE

DC 모터 제어

arduino 9번핀을 NPN BJT의 Base에 연결! PWM으로 제어해보자!

해보기: NPN BJT(P2N2222A) 데이터 쉬트 읽기

해보기: BJT(npn)_를 MOSFET(n-channel 으로 바꾸어 보자!)

QUIZ: 모터의 방향을 바꿀려면? 4개의 BJT를 이용하여, 모터를 바꿀 수 있다.


Servo

Arduino 예제: Servo -> Sweep 참고.


일상에서 유용한 장치 만들기 예시 프로젝트: 자료조사!

내일 프로젝트에서 진행할 내용 사전조사


Hardware Startup Accelerator


Hardware project


Universal Design


소프트웨어 개발자를 위한 하드웨어 워크숍: 셋째날



체크인: 몸상태 알아보기


통신


페러럴 통신


시리얼 통신

출처: https://learn.sparkfun.com/tutorials/serial-communication


시리얼 통신

위키 http://goo.gl/cGvyY


UART

UART(Universal Asynchronous Receiver/Transmitter) 이름으로 알 수 있듯이 리시버와 트랜시버가 따로 존재하고 데이터의 클럭 정보가 없는 비동기식 통신 방식을 말한다.

시작(start bit)과 끝(stop bit) 신호가 있고 그 사이를 일정 시간으로 잘라서 데이터의 비트를 구분한다.

UART는 통신의 속도가 설정가능하고 데이터의 형식(갯수) 설정이 가능하다. UART의 종류로 RS–232(+–12), RS–422, RS–485 등이 있다.


Python 에서 Serialport

다운로드: http://goo.gl/EsIok


Serialport 문자 읽기

int ledPin = 13;
int value;

void setup() {
  pinMode(ledPin, OUTPUT);   
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
    value = Serial.read();
    if (value == '1') { 
        digitalWrite(ledPin, HIGH);
    } else {
        digitalWrite(ledPin, LOW);
    }
  }
}   

오실로 스코프로 UART의 TTL 파형을 찍어보자.

컴퓨터에서 보드로 ‘1’ 을 입력 했을때 RX 핀에서 찍은 파형


Python

파이썬의 serial포트에서 arduino led 켜고 끄기

pyserial

>>> import serial
>>> s = serial.Serial('com5')
>>> s.write('1')
1
>>> s.write('0')
1
>>>

button.py

https://gist.github.com/donghee/efc2ae6f98a002e52df5


프로젝트

http://vimeo.com/5142195

http://vimeo.com/1750454 Ward’s virtual CEO


SPI (Serial Peripheral Interface)

SPI 는 모토로라에서 만든 통신 방식. 직렬 컴퓨터 버스 주변기기를 연결하기 위해 사용된다.

외부 주변장치와 clock 을 통하여 동기화 하는 동기식 통신 방식이며, 하나의 Master 와 하나 또는 다수의 Slave Device 간의 통신이 가능하다.

4개핀 사용: - MOSI (Master Out Slave Input) - MISO (Master Input Slave Out) - SS (Slave Select) - SCK (Serial Clock)


SPI 연결


WS2801

엄밀한 SPI는 아니지만, SPI의 변종. 입력만 있다.


WS2801

해보기

  1. WS2801 보드 회로도 분석.
  2. 데이터 쉬트의 핀배열 보고 Arduino 보드(GPIO)와 연결하기.
  3. 타임 차트 보고 클럭(CKI)과 데이터(SDI) 만들기.

클럭(CKI)이 LOW-> HIGH 로 변할때, 데이터(SDI)가 패치됨.


WS2801

digitalWrite(cki, LOW);
delay(1);
for (int i =0; i< 8; i++) {
    digitalWrite(cki, LOW);
    digitalWrite(sdi, HIGH);
    delayMicroseconds(100);
    digitalWrite(cki, HIGH); 
    delayMicroseconds(100);
}

for (int i =8; i< 16; i++) {
    digitalWrite(cki, LOW);
    digitalWrite(sdi, LOW);
    delayMicroseconds(100);
    digitalWrite(cki, HIGH); 
    delayMicroseconds(100);
}

for (int i =16; i< 24; i++) {
    digitalWrite(cki, LOW);
    digitalWrite(sdi, LOW);
    delayMicroseconds(100);
    digitalWrite(cki, HIGH); 
    delayMicroseconds(100);
}
digitalWrite(cki, LOW);
delay(1);

post_frame: https://gist.github.com/donghee/5167113

활용: Search ‘octagon lounge’ in youtube.com


Buzzer!

해보기

아두이노 사운드 라이브러리: mozzi


I2C

I2C는 필립스사에서 고안한 방식, MCU와 주변장치의 시리얼통신 하는데 사용.

두선 사용. 여러개의 마스터 지원.


I2C 연결

특징, 통신선로 pull-up


I2C 데이터 타임차트


I2C: 통신 포멧


I2C: EEPROM (24LC256)


I2C: 24LC256

EEPROM

https://gist.github.com/donghee/b0bf974b5a925cb214df

해보기

  1. 데이터 쉬트 읽고, 동작전압을 찾는다.
  2. 24LC256의 i2c 주소를 찾는다.
  3. 24LC256의 데이터를 읽고 쓰는 순서를 찾는다.

I2C: tmp102

온도센서

http://pastebin.com/GLLfjhiL

해보기

  1. 동작전압
  2. tmp102의 i2c 주소
  3. tmp102의 데이터 포멧(온도)

SPI와 I2C 비교

SPI의 장점

SPI 단점


부록: 회로도 읽는 팁

나누어 읽기/ 연결하여 읽기/ 전체 읽기

나누어 읽기


부록: 회로도 읽는 팁

연결하여 읽기


부록: 회로도 읽는 팁

시스템을 읽기


부록: 회로도 읽는 팁

그외 회로

Collin’s Lab: Schematics

https://www.youtube.com/watch?v=9cps7Q_IrX0


부록: 데이터쉬트 읽기


부록: 데이터쉬트 읽기

질문하기

참고


책 추천


프로젝트 주제: 일상에서 유용한 장치 만들기

  1. 페르소나와 주제 정하기
  2. 장치를 사용할 고객은 누구인가?
  3. 고객의 문제는 무엇인가?
  4. 문제를 어떻게 해결 하는가?
  5. 장치의 기능
  6. 필요한 기술, 센서

프로젝트 제약

  1. 2인이 1팀. (혼자해도 됨!)
  2. 시간은 2시간. 리소스. 기존에 사용한 센서, 모터 이용.
  3. 쉬는 시간 작업시간 자유!
  4. 케이스가 있을것!

프로젝트 기획!

시간: 40분, 발표: 2시 정각. (발표를 2시 까지 해야 4시 40분에 워크숍 끝!)


프로토타이핑 스케치

from http://www.iamas.ac.jp Advanced Design Project “Prototyping Sketch”


프로덕트 박스 만들기


프로덕트 박스

프로덕트 박스에 들어가면 좋은 내용! (SALE!!)


프로젝트 준비물

  1. 마스킹 테이프. 색지, 풀, 포스트잇, 싸인펜.
  2. 가위, 택배 박스 또는 과자 박스

Cardboard Prototype


결과물 공유


Retrospective


부품 정리