고등학교/스마트홈 프로젝트

2022/01/19 - 3일차

MSHUN 2022. 1. 20.
반응형

릴레이

릴레이는 전기로 작동시키는 스위치를 말한다.

낮은 전압을 이용해 높은 전합을 제어하는데 많이 사용한다.

릴레이 회로

전원 연결 커넥터 설치 -> 220V 전구 소켓 설치 -> 12V 팬 설치 -> 커넥터-소켓- 팬-2채널 릴레이 배선 연결

코드

// 릴레이 제어

#define fanPin A2 // 12V DC 팬 제어 릴레이 핀 번호
#define lampPin A3 // 220V AC 전등 제어 릴레이 핀 번호 

void setup() {
  pinMode(fanPin, OUTPUT);
  pinMode(lampPin, OUTPUT);
}

void loop() {
  testRelay();
}

void testRelay(){
  //팬, 전등을 교대로 동작 테스트
  digitalWrite(fanPin, HIGH);
  digitalWrite(lampPin, LOW);
  delay(1000);
  digitalWrite(fanPin, LOW);
  digitalWrite(lampPin, HIGH);
  delay(1000);
}

서보모터

서보모터

서보모터는 일반 모터와는 달리 특정 위치나 특정 수치를 입력하면 제어계측 회로에 의해 입력한 만큼만 정확하게 움직일 수 있는 모터이다.  예를 들어 모터에 90도를 입력하면 제어계측 회로를 이용해 모터를 정확하게 90도가 될 때까지만 움직이고 멈추는 것이다.

PWM

PWM

PWM(펄스 폭 변조, Pulse Width Modulation)는 펄스 변조의 일종으로 신호의 크기에 따라 펄스의 폭을 조절하는 방식으로 변조한다. 펄스 파형의 High 상태와 Low 상태 파형의 비율을 Duty Cycle이라고 부르는데, PWM은 이 듀티 사이클을 조정해서 변조하는 방식이다.

회로

회로

코드

#include <Servo.h>

#define servoPin 5

Servo myServo;  // 서보모터 제어 객체 생성

void setup() {
  myServo.attach(servoPin); // 서보모터 객체를 포트에 연결
}

void loop() {
  servoMove(0);
  servoMove(90);
  servoMove(179);
  delay(1000);
}

//입력받은 각도만큼 움직이기
void servoMove(int servoPos){
  myServo.attach(servoPin); // 서보모터 연결
  myServo.write(servoPos); // 입력받은 각도만큼 움직이기
  delay(500); // 모터가 움직임이 끝날때까지 기다리기
  myServo.detach(); // 서보모터 연결 해제
}

detach()를 이용해 서보모터의 연결을 해제해야 모터가 떨리는 지터링 현상을 막을 수 있다.

블루투스

Bluetooth

블루투스(Bluetooth)는 1994년에 에릭슨이 최초로 개발한 디지털 통신 기기를 위한 개인 근거리 무선 통신 기술이다.

2.4~2.485 GHz의 단파 UHF 전파를 이용하여 개인용 컴퓨터에 이용되는 마우스, 키보드를 비롯해, 휴대전화 및 스마트폰, 태블릿, 스피커 등에서 문자 정보 및 음성 정보를 비교적 낮은 속도로 디지털 정보를 무선 통신을 통해 주고받는 용도로 채용되고 있다.

회로

코드

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // 아두이노 기준 (RX, TX)

void setup() {
  Serial.begin(57600);
  while (!Serial) {
    ; // USB 시리얼 연결될 때까지 대기(arduino <-> PC)
  }

  Serial.println("Serial begin."); // Ard->PC

  // set the data rate for the SoftwareSerial port
  mySerial.begin(57600); // 아두이노-BT 간 시리얼 통신 시작
  mySerial.println("Hello, BT?"); // Ard->BT
}

void loop() {
  if (mySerial.available()) { // 시리얼 입력이 있나? (BT->Ard)
    Serial.write(mySerial.read()); // BT의 입력을 읽어서 PC로 전송
  }
  if (Serial.available()) { // PC->Ard 입력이 있나?
    mySerial.write(Serial.read()); // PC의 입력을 읽어서 BT로 전송
  }
}

AT 명령어

1. 모듈 테스트

   명령어 : AT 

   반환 값 : OK



2. 버전 확인

    명령어 : AT+VERSION

    반환값 : OKlinvorV1.8 



3. 이름 변경

    명령어 : AT+NAME이름

    반환값 : OKsetname



4. BAUD rate 설정

 

    명령어 : AT+BAUD숫자


    1---------1200

    2---------2400

    3---------4800

    4---------9600 

    5---------19200

    6---------38400

    7---------57600

    8---------115200 

​    반환값 : OK숫자

5. PIN 설정

    명령어 : AT+PINxxxx

    (xxxx는 네 자리 숫자)


    반환 값 : OKsetPIN

 

스마트폰 연결

Serial Bluetooth Terminal을 설치한다.

 

Serial Bluetooth Terminal - Google Play 앱

블루투스 클래식 / LE와 연결된 시리얼 장치의 터미널

play.google.com

조도센서

CdS센서는 빛의 양에 따라 저항의 수치가 달라져 이로 인한 전압 차이로 조도를 구분할 수 있다.

빛을 받으면 저항값이 감소하며 빛이 없으면 저항값이 증가한다.

 

회로

코드

#define cdsPin A1 // 조도센서 (cds) 핀 번호

int cdsValue = 0; // 조도(cds) 값

void setup(){
  Serial.begin(9600);
  Serial.println("Serial start.");
}

void loop(){
  cdsValue = analogRead(cdsPin); // 조도센서값 읽기
  Serial.println(cdsValue);
  delay(100);
}

3일 차 결과물

반응형

댓글