소프트웨어 + 하드웨어 -> 인간과 컴퓨터가 상호작용할 수 있도록 하는 기술
아두이노 - 별도의 운영체제 없이 프로그램을 반복적으로 실행되는 펌웨어
adc(Analog to Digital Converter) 회로를 가지고 있어 센서 데이터를 디지털로 변환하여 컴퓨터나 마이크로 컨트롤러에서 처리할 수 있게 한다. 오디오 신호를 디지털화하여 컴퓨터에서 저장 및 처리가 가능하다. 다양한 측정 장비에서 실시간 데이터를 디지털화해 분석 및 처리한다.

입출력 핀, 아날로그 핀: 납땜을 하지않고 연결하기 위함
전원핀: 3.3볼트, 5볼트, 그라운드
usb 포트(b타입)존재
전원 led, tx led, rx led 내장 led 존재
리셋 버튼, 독립적으로 전원 연결할 수 있는 전원 포트
마이크로 컨트롤러
2단계: 아두이노 메가
3단계: 아두이노 윤
아두이노 앱 실행
툴 -> 아두이노 우노// 자신이 사용할 제품 선택
자신이 사용하는 usb 포트
시리얼 모니터창(서버속도(보드레이트) 9600을 많이 사용함)
시리얼 비긴(Serial.begin(9600);)
:주로 setup에서 사용
시리얼 프린트(Serial.print("Hello Arduino")) - 줄바꿈 x
시리얼 프린트(Serial.println("Hello Arduino")) - 줄바꿈
시리얼 리드(Serial.read()) 수신받은 데이터 읽기
:수신데이터가 비어있으면 -1 출력
:abc 입력하면 아스키코드 출력
시리얼 어베일러블(Serial.available()) - 시리얼 포트로부터 수신받은 데이터 확인
:0이 뜨면 읽지 않은 데이터가 0개라는 뜻
:abcd 입력하면 4가 출력됨
핀모드(pinMode(2, OUTPUT)) - 디지털핀 설정
:디지털 2번 핀을 OUTPUT으로 사용
-> 내장 LED가 깜빡 거리게됨
디지털롸이트(digitalWrite(2, HIGH)) - 디지털핀 값 전달
:디지털 2번핀에 HIGH 값 전달
-> HIGH값은 켠다는 뜻, LOW 값은 끈다는 뜻
디지털리드(digitalRead(2)) - 디지털 센서 값 읽음
:디지털 2번핀에 연결된 센서값읽음
아날로그리드(analogRead(2)) - 아날로그 센서 값 읽음
:아날로그 2번핀에 연결된 센서값 읽음
딜레이(delay(1000)) - 프로그램 실행 지연
HIGH(논리 1. 3.3볼트 OR 5볼트 OR 그라운드)/LOW(논리,0, 0볼트 근처)
: 입출력 핀의 상태
INT형을 가장 많이 사용하지만 많은 자료형을 사용할 수 있다.
CHAR 사용하지만, 한글을 저장할 수는 없다.
int value;
value = 13;
int value = 13;
in python
x += 1
x and y
x or
x != x
in arduino
x ++ 1
x && y
x || y
!x = x
if (조건식1)
{
}
else if (조건식2)
{
}
else
{
}
for (초기화; 조건; 증감표현)
{
반복할 일
}
while (조건)
{
명력문1;
명령문2;
}

저항값을 알고 있어야 저항을 제대로 사용할 수 있음

납땜할 필요없이 소켓으로 아두이노를 이용할 수 있음

red는 7번
yellow는 4번
green은 2번에 연결
블록코드를 먼저 작성

6개의 led 제어
1. 전체 켜기, 끄리
2. 오른쪽으로 하나씩 켜기
3. 왼쪽으로 하나씩 끄기
4. 오른쪽으로 하나씩 켜고 끄기
5. 왼쪽으로 하나씩 켜고 끄기
배열 선언
int myInts[8];
int myInts[8] = {2,1,4,5,6,7,8};
int myInts[] = {2,1,4,5,6,7,8};
char mes[6] - "hello";
led 제어하기 위한 핀 번호를 선언
int led[6] = {13,12,11,10,9,8};
void setup() {
for(int i = 0; i<6; i++)
pinMode(led[i],OUTPUT);
}
void loop() {
for(int i = 0; i<6; i++)
digitalWrite(led[i], HIGH);
delay(300);
digitalWrite(led[i], LOW);
delay(300);
}
디지털 신호는 0(0볼트, LOW)과 1(5볼트, HIGH)로 표현
아두이노에서는 2.5V가 임계전압, 이걸 기준으로 LOW, HIGH 나뉨
PULLUP: 저항을 플러스에 위치
스위치를 누르면 LOW
PULLDOWN: 저항을 마이너스에 위치
스위치를 누르면 HIGH
: '~' 표시가 있는 핀을 사용해야 한다.
0% duty cycle
25% duty cycle(1.25볼트)
50% duty cycle
75% duty cycle(3.75볼트)
100% duty cycle
의 종류가 있고, 높아질수록 밝은 비율이 높아지는 것
int bright =0;
int fadeValue=5;
void loop () {
analogWrite(led, brightness);
bright = bright + fadeValue;
if (bright < 0 || bright > 255)
fadeValue = -fadeValue
delay(300);
}
EX) 초음파, 적외선 발사 후 돌아오는 것도 있지만, 열을 파악해서 움직임 감지
#define PIR 7
#define LED 4
void setup() {
pinMode(PIR, INPUT);
pinMode(LED, OUTPUT);
}
#define BUTTON 7
#define LED 4
void setup() {
pinMode(BUTTON, INPUT);
pinMode(LED, OUTPUT);
}
void loop() {
if(digitalRead(BUTTON)==HIGH)
{
digitalWrite(LED, HIGH);
}
else
{
digitalWirte(LED,LOW);
}
}
HIGH와 LOW로만 나뉘는게 아닌, 연속적인 변수가 존재
시간에 따라 연속적인 값을 표현하는 아날로그 신호(빛의 밝기, 온습도 등등)
입력되는 0에서 5볼트가 0~1024으로 대응됨

void setup(){
Serial.begin(9600);
}
void loop(){
int val = anlaogRead(A0);
Serial.println(val);
delay(100);
}
###################################
int led=3;
void setup(){
pinMode(led, OUTPUT);
}
void loop(){
int val = anlaogRead(A0);
val = map(A0, 0,1024,0,255);
analogWrite(led,val);
}
0~1024: 아날로그 값 범위
0~255: pwm 값 범위
접촉센서 + 비접촉센서
LM35, TMP36, DHT11, DHT22
위 온도센서들의 사양을 DATASHEET를 통해 꼭 확인하고 필요한 것을 구비할 것
0도는 0볼트, 1도가 증가하면 10미리볼트가 증가
#define LM35 A0
int led =2;
void setup(){
Serial.begin(9600);
}
void loop(){
int reading = analogRead(LM35);
float tempC = (reading*5.0*100.0)/1024;
delay(1000);
}
온도: 0~ 50도, 오차범위 2도,
습도 20~90, 오차범위 5
온도: -40~80도, 오차범위 0.5도
습도: 0~ 99.9, 오차범위 2
#include DHT.h
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(3000);
int h = dht.readHumidity();
int t = dht.readTemperature(); // 섭씨온도
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed"));
return;
}
}
// DHTtester에서 예제를 확인할 수 잇음
int led = 3;
void setup(){
pinMode(led, OUTPUT);
}
void loop(){
int light = analogRead(A0);
light = map(light, 0, 1024, 0, 255);
analogWrite(led, light);
}
초음파센서는 임의로 20kHz에서 200MHz 대역의 초음파를 만들어 내고 이를 통해 물체와의 거리를 측정할 수 있는 센서
NewPing 라이브러리

#include <NewPing.h>
NewPing.ultrasonic(6,7);
void setup() {
Serial.begin(9600);
}
void loop() {
int dist = ultrasonic.ping_cm();
delay(100);
}
}
VRX: A0
VRY: A1
SW: 7
int btn = 7;
void setup(){
Serial.begin(9600);
pinMode(sw, INPUT_PULLUP);
}
void loop(){
int x =analogRead(A0);
int y =analogRead(A1);
int b =analogRead(sw);
}
:시스템을 움직이거나 제어하는 기계 장치


#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(3,0);
lcd.println("Hello World");
lcd.setCursor(5,1);
lcd.println("123456789");
}
void loop() {
}
글자가 잘 안 보일수 있는데, 그럴 때 뒤에 있는 나사를 돌려서 보이게 할 수 있다.
아두이노 홈페이지에서 ic2_scanner 예제를 찾을 수 있다.

#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 7
#define DHTTYPE DHT11
LiquidCrystal_I2C lcd(0x27,16,2);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
h = dht.readHumidity();
t = dht.readTemperature();
if (isnan(t) || isnan(h)) {
Serial.print("fail");
return;
}
lcd.setCursor(0,0);
lcd.print(t);
lcd.setCursor(1,1);
lcd.print(h)
}

{262, 294, 330, 349, 392, 440, 494, 523}
{도, 레, 미, 파, 솔, 라, 시 도}
서브모터, DC모터, 스태핑 모터

메뉴: 스케치 > 라이브러리 포함하기 > 라이브러리 관리
#include library header file