코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
아두이노 스마트홈 서보모터
현섭 | 2019-05-30
|
|
---|---|
스마트홈 서보모터가 작동이 제대로 돌아가질 않습니다. #include "DHT.h" // DHT11를 사용하기 위한 라이브러리 호출하기
#include <Servo.h> // 서보모터를 사용하기 위한 라이브러리 호출하기
#include <LiquidCrystal_I2C.h> // I2C LCD를 사용하기 위한 라이브러리 호출하기
LiquidCrystal_I2C TV(0x27, 16, 2); // I2C LCD를 TV라는 이름으로 선언
// 온습도 센서를 디지털 3번 핀에 연결합니다.
#define DHTPIN 3
#define DHTTYPE DHT11
int flag1 = 1; // 블라인드의 상태를 저장하는 변수 서보모터 int servo = 6; // 서보모터를 오렌지보드 A0번에 연결
int C = 1047; // 도
int D = 1175; // 레
int E = 1319; // 미
int F = 1397; // 파
int G = 1568; // 솔
int A = 1760; // 라
int B = 1976; // 시
int piezoPin = 2; // 피에조 부저의 +극을 오렌지보드 2번에 연결
int airCon = 9; // RGB LED의 파란색 핀을 디지털 9번 연결
int cdsPin = A0; // 조도센서를 오렌지보드 A0번에 연결
int note[] = {4186, 4698, 5274, 5587, 6271};
int notes[25] = { G, G, A, A, G, G, E, G, G, E, E, D, G, G, A, A, G, G, E, G, E, D, E, C };
int notex[] = {6900, 4906, 6900, 4906, 6900};
int notea[] = {4186, 6271}; //서보모터 멜로디 int tempo = 200; // 멜로디의 음 길이 설정
int irPin = 5; // 적외선 장애물 센서를 오렌지보드 6번에 연결
// 가까울 시 울릴 경보의 멜로디 작성
boolean flag = 0;
int Flag;
DHT dht(DHTPIN, DHTTYPE);
Servo blind; // 서보모터를 blind라는 이름으로 선언
void setup() {
// 시리얼 통신을 위해 통신속도(Baudrate)를 9600으로 설정
Serial.begin(9600); blind.attach(servo); // 서보모터를 6번핀에 연결 blind.write(80); // 서보모토의 기본값을 80도로 설정
dht.begin();
pinMode(piezoPin, OUTPUT); // 피에조 핀을 출력핀으로 설정
pinMode(airCon, OUTPUT); // 3색 LED중 파란색 핀을 출력핀으로 설정
pinMode(irPin, INPUT); // 적외선 장애물 센서 핀을 입력핀으로 설정
TV.init(); // I2C LCD의 기본 설정
TV.backlight(); // I2C LCD의 백라이트를 켜줌
TV.setCursor(0, 0); // I2C LCD의 커서위치를 0, 0으로 설정(첫번째 줄, 첫번째 칸)
TV.print("Looking TV...."); // I2C LCD에 "Looking TV...." 메세지 출력
}
// 온습도센서로 온도와 습도값 측정 float humidity = dht.readHumidity(); if (isnan(humidity) || isnan(temperature) ) {
Serial.println("Failed to read from DHT sensor!");
float discomfortIndex = (1.8 * temperature) - (0.55 * (1 - humidity / 100.0) * (1.8 * temperature - 26)) + 32;
// 불쾌지수값이 83보다 높을 경우 if (discomfortIndex >= 83) {
for (int i = 0; i < 5; i++) { tone(piezoPin, note[i], 300); delay(150); } flag = 1;
else { // 에어콘(파란색 LED)를 끔
digitalWrite(airCon, LOW);
flag = 0;
}
int cdsVal = analogRead(A0); Serial.println(cdsVal);
// 날이 밝으면(빛이 밝아지면) if (cdsVal < 300) { // 현재 블라인드가 올라가있으면 if (flag1 == 0) { // 멜로디를 출력하고 for (int i = 0; i < 2; i++) { tone(piezoPin, notea[i], tempo); delay(500); } // 블라인드를 내림 blind.write(180); // 블라인드가 내려가 있는 상태로 설정 flag1 = 1; } }
// 날이 어두우면(빛이 어두워지면) else { // 블라인드가 내려가 있으면 if (flag1 == 1) { // 블라인드를 올림 blind.write(80); // 블라인드가 올라가 있는 상태로 설정 flag1 = 0; } }
delay(100);
// 조도 센서 값 측정 후 시리얼 모니터에 출력
int IRVal = digitalRead(irPin);
Serial.println(IRVal);
// 거리가 가까울 경우
if (IRVal == 0) {
if (Flag == 0) {
// 경보 멜로디를 출력
for (int i = 0; i < 5; i++) {
tone(piezoPin, notex[i], 150);
delay(150);
}
Flag = 1;
}
// TV를 끔
TV.noBacklight();
}
// 거리가 멀 경우
else {
// TV를 킴
TV.backlight();
Flag = 0;
}
delay(100);
} |
|
이전글 | 서브모터와 Interrupt코드 | 2019-05-29 |
다음글 | 오렌지보드 BLE 2대 간 통신 질문드립니다. | 2019-05-30 |