티스토리 뷰

 

 

학교 프로젝트로 간단한 옷장관련 시스템을 만들었습니다.

첫 아두이누 작품이었고 또 많이 허접하지만 올려봅니다...ㅎ

 

 

 

 

 

 

사용 센서와 시스템의 개요는 위와 같습니다.

 

 

 

 

 

 

 

위와 같이 시나리오를 짜고 코딩을 시작했습니다.

 

 

 

 

 

 

 

 

도트매트릭스(MAX7219)와 LED, 팬의 경우에는 레지스터 코딩을 했고

디지털 온습도 센서, 서보모터는 라이브러리를 사용했습니다.

 

 

 

 

 

 

#include "DHT.h"
#include <Servo.h>

const uint8_t font[128][8] = {
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul)
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space)
  { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!)
  { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (")
  { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#)
  { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($)
  { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%)
  { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&)
  { 0x20, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (')
  { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (()
  { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ())
  { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*)
  { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+)
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,)
  { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-)
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.)
  { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/)
  { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0)
  { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1)
  { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2)
  { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3)
  { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4)
  { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5)
  { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6)
  { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7)
  { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8)
  { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9)
  { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:)
  { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//)
  { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<)
  { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=)
  { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>)
  { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?)
  { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@)
  { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A)
  { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B)
  { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C)
  { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D)
  { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E)
  { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F)
  { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G)
  { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H)
  { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I)
  { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J)
  { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K)
  { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L)
  { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M)
  { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N)
  { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O)
  { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P)
  { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q)
  { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R)
  { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S)
  { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T)
  { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U)
  { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V)
  { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W)
  { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X)
  { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y)
  { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z)
  { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([)
  { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\)
  { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (])
  { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^)
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_)
  { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`)
  { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a)
  { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b)
  { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c)
  { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d)
  { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e)
  { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f)
  { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g)
  { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h)
  { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i)
  { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j)
  { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k)
  { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l)
  { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m)
  { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n)
  { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o)
  { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p)
  { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q)
  { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r)
  { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s)
  { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t)
  { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u)
  { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v)
  { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w)
  { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x)
  { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y)
  { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z)
  { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({)
  { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|)
  { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (})
  { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~)
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F
};


//DIN : PB0 : 53
//CS  : PB2 : 51
//CLK : PB1 : 52
//fan : PB4 : 10

#define TRIG 6 //TRIG 핀 설정 (초음파 보내는 핀)
#define ECHO 7 //ECHO 핀 설정 (초음파 받는 핀)
#define DHTPIN 8        // DHT11이 연결된 핀
#define SERVOPIN 9      // 서모보터가 연결된 핀
#define DHTTYPE DHT11   // DHT 11, DHT시리즈중 11을 선택합니다.

Servo servo;                // 서보 제어변수
DHT dht(DHTPIN, DHTTYPE);   // DHT 설정
unsigned long Time = 0.0;  // 시간 저장
float Matrix_tem = 0.0;
bool Open = false;
long distance = 0;
int cnt = 0;


uint8_t Buffer[100][8];
uint8_t Display[4][8];
uint8_t Buffer_len = 0;
uint8_t a = 0, b = 0;
String str = " ";




void setup() {

  // 시리얼 통신 활성화
  Serial.begin(9600);

  // 포트 활성화
  DDRB = 0xff;  // 출력모드
  DDRD = 0xff;  // 입력모드

  PORTB = 0x00;
  PORTD = 0x00;

  Time = millis();     // 실행시간 저장
  dht.begin();          // 온습도 측정시작

  servo.attach(SERVOPIN); // 서보 모터 초기화

  // 초음파 센서 초기화
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);


  /**********************MAX 7219********************/

  ADMUX = B01000000;
  ADCSRA = B10001100;
  set_Max7219(0x09, 0x00); // Decode Mode - No decode for digits
  set_Max7219(0x0a, 0x01); // Intensity - 3/32
  set_Max7219(0x0b, 0x07); // Scan Limit - All Output Port Enable
  set_Max7219(0x0c, 0x01); // Shutdown - Normal Operation
  set_Max7219(0x0f, 0x00); // Display Test

  set_Max7219(0x00, 0x00);
  set_Max7219(0x00, 0x00);
  set_Max7219(0x00, 0x00);



  create_Buffer();

}

void loop() {
  uint8_t i, j;

  if (millis() - Time >= 2000) {
    Time = millis();
    dht_();
    wave_();
  }

  for (i = 1 ; i < 9 ; i++) {
    PORTB &= ~(1 << 2); // CS를 Low로 설정
    for (j = 0 ; j < 4 ; j++) {
      write_byte(i);
      write_reverse_byte(Display[j][i - 1]);
    }
    PORTB |= (1 << 2); // CS를 High로 설정
  }

  create_Display();
  delay(50);

}


/**********************MAX 7219********************/



// 버퍼에 데이터 삽입
void create_Buffer() {
  uint8_t i, j;
  Buffer_len = str.length();
  for (i = 0 ; i < str.length(); i++) {
    for (j = 0 ; j < 8 ; j++) {
      Buffer[i][j] = font[str[i]][j];
    }
  }
}


// 디스플레이에 데이터 삽입
void create_Display() {
  uint8_t i, j;
  for (i = 0 ; i < 4 ; i++) {
    for (j = 0 ; j < 8 ; j++)
      Display[i][j] = (Buffer[(a + i) % Buffer_len][j] >> b) | (Buffer[(a + i + 1) % Buffer_len][j] << (8 - b));
  }
  b++;  // 쉬프트 연산 누적
  if (b == 8) { // 8번 쉬프트 : 시작하는 문자가 바뀐다.
    a++;     // 시작하는 문자 갱신
    b = 0;  // 쉬프트 연산 초기화
    if (a == Buffer_len) { // 마지막 문자를 출력했을 경우
      a = 0;  // 첫글자의 인덱스로 초기화
    }
  }
}


// 옵션 세팅
void set_Max7219(uint8_t address, uint8_t data) {

  PORTB &= ~(1 << 2); // CS를 Low로 설정
  write_byte(address);
  write_byte(data);
  PORTB |= (1 << 2); // CS를 High로 설정

}

// 바이트 삽입
void write_byte(uint8_t data) {

  uint8_t i;

  for (i = 0 ; i < 8 ; i++) {
    if ((1 << (7 - i)) & data)
      PORTB |= (1 << 0); // 데이터 삽입
    else
      PORTB &= ~(1 << 0);  // 데이터 삽입
    PORTB |= (1 << 1);    // CLK를 High로 설정
    PORTB &= ~(1 << 1);  // CLK를 Low로 설정
  }
}


// 역방향으로 바이트 삽입
void write_reverse_byte(uint8_t data) {

  uint8_t i;

  for (i = 0 ; i < 8 ; i++) {
    if ((1 << i) & data)
      PORTB |= (1 << 0); // 데이터 삽입
    else
      PORTB &= ~(1 << 0);   // 데이터 삽입
    PORTB |= (1 << 1);    // CLK를 High로 설정
    PORTB &= ~(1 << 1); // CLK를 Low로 설정
  }
}



/**********************다른 센서********************/


//초음파 측정함수
void wave_() {

  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(2);
  digitalWrite(TRIG, LOW);
  long duration = pulseIn (ECHO, HIGH); //물체에 반사되어돌아온 초음파의 시간을 변수에 저장합니다.
  distance = duration * 17 / 1000;

  //Serial.println(distance);

  if (distance < 20)
  {
    LED_on();
    str.replace(str, " " + String(Matrix_tem) + "'C");
    create_Buffer();
  }
  else {
    cnt++;
    if (cnt == 6) {
      LED_off();
      str.replace(str, " ");
      create_Buffer();
      cnt = 0;
    }
  }

}



// LED 키기
void LED_on() {
  LED_off();
  if (Matrix_tem > 27)
    PORTD |= (1 << 0);  // 빨간색 LED 출력

  else if (Matrix_tem > 24)
    PORTD |= (1 << 1);  // 노란색 위 LED 출력

  else if (Matrix_tem > 17)
    PORTD |= (1 << 2);  // 노란색 아래 LED 출력

  else
    PORTD |= (1 << 3);  // 초록색 LED 출력
}



// LED 끄기
void LED_off() {
  for (int i = 0; i <= 4; i++)
    PORTD &= ~(1 << i); // LED출력 중지

}



// 온습도 측정 함수
void dht_() {


  float h = dht.readHumidity();         // 습도 측정
  float t = dht.readTemperature();      // 온도 측정

  // 측정 오류시 리턴
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // 값 보정
  float c = dht.computeHeatIndex(t, h, false);
  Matrix_tem = c;

  // 습도가 50이상이면 환기 실행
  if (h > 55) {
    Ventilation();
  }
  else {
    Ventilation_over();
  }


  //출력
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");

  //Serial.print("Temperature: ");
  //Serial.print(t);
  //Serial.print(" *C ");

  Serial.print("Heat index: ");
  Serial.print(c);
  Serial.println(" *C ");

}


// 환기
void Ventilation()
{

  PORTB |= (1 << 4);  // 팬작동

  //환기 구가 닫혀있다면 열음
  if (!Open) {
    for (int angle = 100; angle < 180; angle++)
    {
      servo.write(angle);
      delay(10);
    }
    Open = true;

  }
}

// 환기 종료
void Ventilation_over()
{
  PORTB &= ~(1 << 4); // 팬 정지

  //환기 구가 열려있다면 닫음
  if (Open) {
    for (int angle = 180; angle > 100; angle--)
    {
      servo.write(angle);
      delay(10);
    }
    Open = false;
  }
}

 

 

 

 

 

 

 

[참고자료]

 

 

아두이노 #51 MAX7219 8x8 LED Matrix - MAX7219 동작 원리

Arduino : MAX7219 8x8 LED Matrix 동작 원리 이전 포스트에서 8x8 LED Matrix 동작원리와 사용법에 대한 포스트를 작성하였습니다. 이번 포스트는 MAX7219 LED Dot Matrix를 사용하기 전에 MAX7219의 동작 원리..

juahnpop.tistory.com

 

 

DHT11 아두이노 온도, 습도 센서 알아보기 / 아두이노 코딩 교육

안녕하세요? 메카솔루션입니다. 오늘은 DHT11의 동작원리 부터 회로도, 소스코드, 그리고 코딩 교육을 ...

blog.naver.com

 

 

 

[아두이노 강좌] 14. 아두이노로 서보모터 제어하기 - 가치창조기술 위키

본 게시글에서는 아두이노를 이용하여 서보모터를 어떻게 제어하는지 살펴보도록 하겠습니다. 서보를 자동으로 앞뒤로 움직이게 만들어보고, 포텐셔미터를 추가하여 서보의 포지션을 제어하

wiki.vctec.co.kr

 

 

 

 

감사합니다.

 

 


공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

 

 

댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday