아두이노 틴커태드 회로정리

LED 깜빡이기

void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(13, LOW);
delay(1000); // Wait for 1000 millisecond(s)
}
LED 교대로 깜빡이기

void setup()
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
}
푸시버튼 / 풀다운 방식 저항 연결

void setup()
{
pinMode(8, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
int readValue = digitalRead(2);
if(readValue == HIGH){
digitalWrite(8, HIGH);
}
else {
digitalWrite(8, LOW);
}
}

풀 업 방식 : 스위치 연결이 끊겨도 지속적으로 5V입력 발생 >> 노이즈 영향 x
풀 다운 방식 : 스위치 끊겨도 잔류 전류가 빠져나갈 그라운드가 존재
두 방식을 통해 신호입력의 노이즈(플로팅 현상)을 방지
Serial Read/Print

void setup()
{
Serial.begin(9600);
pinMode(8, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
int readValue = digitalRead(2);
Serial.println(readValue);
delay(100);
}
Serial.begin(9600); >> 아두이노와 컴퓨터가 대화할 수 있도록 통신 속도를 9600bps로 설정
if(Serial.available() > 0) >> "컴퓨터로부터 전송되어 대기 중인 데이터가 있는가?"를 확인
int inputValue = Serial.read(); >> 대기 중인 데이터 중 1바이트(문자 하나)를 읽어와 inputValue 변수에 저장
읽어온 값은 문자가 아닌 ASCII(아스키) 코드값 숫자로 저장
사용자가 시리얼 모니터에 "hello"를 치고 전송을 누르는 순간,
이 글자들은 아두이노의 시리얼 버퍼라는 임시 저장 공간에 도착
먼저 들어온 게 먼저 나가는(FIFO, First-In-First-Out) 구조
Serial.read()함수는 버퍼에서 데이터를 가져올 때 **딱 1바이트(글자 하나)**만 꺼내오는 성질
한 번 실행될 때 'h'만 쏙 빼오고, 나머지는 버퍼에 그대로 남겨둠 >> loop를 통해서 반복
가변저항 potentiometer


void setup()
{
//아날로그는 입력만 가능, 핀모드 설정 불필요
Serial.begin(9600);
}
void loop()
{
int readValue = analogRead(A0);
int scale = map(readValue,0, 1023, 0, 10);
Serial.println(scale);
}
map 함수 >> 특정 변수의 범위를 변경
map ( value , from min , from max , to min , to max)
조도센서 photoresistor

void setup()
{
pinMode(8, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int readValue = analogRead(A0);
Serial.println(readValue);
if(readValue < 500) {
digitalWrite(8, HIGH);
}
else{
digitalWrite(8, LOW);
}
}
LED 밝기 조절하기 (PWM)
PWM : Pulse Width Modulation
끄고 키는 비율을 조절해 중간의 값을 만들어 내는 방식
아두이노의 ~표시가 있는 핀이 PWM이 가능 >> 이때 PWM을 사용하려면 analogWrite를 사용(8비트)


void setup()
{
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
analogWrite(11, 100);
analogWrite(10, 10);
}
서보 모터 Servo Motor
#include <Servo.h> >> 서보모터 라이브러리 참고 >> pwm제어 없이 간단하게 각도입력으로 서보를 제어하게 해준다
이 라이브러리 사용 시 9번 10번 핀의 pwm기능이 비활성화 된다
Servo s1; >> 서보모터 선언
s1.attach(13); >> 서보모터 연결
attatch(pin, min, max) >> pin만 있어도 작동 min/max는 optional
서보모터의 작동 각도가 정확하지 않을때 min과 max를 tuning해서 조절
기본값 : min = 544 max =2400
write(angle); >> 해당 각도만큼 회전 <200 조건에서 작동, 그 이상의 값은 microseconds로 처리


#include <Servo.h>
Servo s1;
void setup()
{
s1.attach(13, 544, 2500);
}
void loop()
{
s1.write(90);
delay(20);
}
초음파센서 Ultrasonic Sensor
초음파 생성 (20kHz ~ 200MHz) >> Ranging 장치
duration = micro second
거리(cm) = duration * (340/20000)
3핀 vs 4핀 : 트리거 / 에코 조절 선이 따로 있는지 합쳐져 있는지 여부
트리거 : PWM 필요 X
에코 : PWM 필요 O
트리거가 high > low로 되는 순간 초음파 발사 > 동시에 echo는 high로 설정
초음파가 돌아와서 인식되면 echo가 low로 변경 >> echo가 high인 기간을 측정


void setup()
{
Serial.begin(9600);
}
void loop()
{
//초음파 신호 전송
pinMode(9, OUTPUT);
digitalWrite(9, LOW);
delayMicroseconds(2);
digitalWrite(9, HIGH);
delayMicroseconds(5);
digitalWrite(9, LOW);
//초음파 신호 수신
pinMode(9, INPUT);
float duration = pulseIn(9, HIGH);
float cm = duration *340/10000/2;
Serial.println(cm);
}
피에조 스피커 Piezo Speaker
압전소자의 수축/팽창 진동을 이용해 소리를 발생
tone(pin,음계,시간)
음계값


void setup()
{
Serial.begin(9600);
}
float current = 20;
void loop()
{
delay(100);
tone(8, current, 300);
Serial.println(current);
current +=20;
}
RGB LED
4개의 소켓 : R/G/B + Common Cathode / Common Anode
RGB각 선에 개별 저항 필요 + PWM지원 필요


int red = 9;
int blue = 10;
int green = 11;
void setup()
{
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
}
void loop()
{
analogWrite(red, random(255));
analogWrite(blue, random(255));
analogWrite(green, random(255));
}
인체감지센서 PIR 센서
적외선을 이용해 열을 내는 물체(사람, 동물 등)의 움직임을 감지하는 장치

void setup()
{
pinMode(13, INPUT);
pinMode(8, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int value = digitalRead(13);
Serial.println(value);
if(value == HIGH){
digitalWrite(8, HIGH) ;
delay(2000);
digitalWrite(8, LOW);
}
}