<aside>
💡 회로랑 코드 모두 오류 없이 돌아가면
기능 굵은 글씨에 노란색 배경으로 해주세여
ex) 끼릿조
</aside>
지희야 일로와 @서지희
○ 스마트홈 아두이노 회로 제작
RFID를 이용한 스마트 도어락(소현)
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN); //rfid 객체 생성
#include <Servo.h> // 서보 라이브러리를 지정
#define servoPin 8 // 서보 모터핀을 지정
Servo servo; // 서보 라이브러리 변수를 선언
int pos=0; // 현재 각도를 저장할 변수를 지정한다
int RLED=7; // 빨간색 LED단자를 아두이노 7번과 연결
int GLED=6; // 초록색 LED단자를 아두이노 6번과 연결
void setup()
{
pinMode(RLED, OUTPUT); // RED LED를 출력으로 지정
pinMode(GLED, OUTPUT); // GREEN LED를 출력으로 지정
servo.attach(servoPin); // 서보모터 핀을 설정한다
servo.write(0); // 서보모터 0도 위치로 초기화
Serial.begin(9600); // 시리얼 통신 시작
SPI.begin(); // SPI 통신 시작
rfid.PCD_Init(); // rfid(MFRC522) 초기화
Serial.println("Approximate your card to the reader...");
Serial.println();
}
void loop()
{
// 새카드 접촉이 있을 때만 다음 단계로 넘어감
if ( ! rfid.PICC_IsNewCardPresent())
{
return;
}
// 카드 읽힘이 제대로 되면 다음으로 넘어감
if ( ! rfid.PICC_ReadCardSerial())
{
return;
}
// UID 값을 16진 값으로 읽고 저장한 후 시리얼 모니터로 표시함
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < rfid.uid.size; i++)
{
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
content.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(rfid.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "A3 AD 56 10")// 엑세스 승인 하고자하는 UID 기록
{
// 인증이 되면 Green LED와 함께 서보모터를 작동시킨다.
Serial.println("Authorized access");
Serial.println();
digitalWrite(GLED,HIGH);
servo.write(180); // 서보모터의 각도를 변경한다
delay(3000); // 서보 모터의 각도가 변하는 것을 기다려 준다.
servo.write(0); // 시간지연 후 문을 닫는다
digitalWrite(GLED,LOW); // 시간지연 후 LED 끈다
}
else { // 서보모터는 작동 없이 Red LED만 켜고 끈다
Serial.println(" Access denied"); // 그외 UID는 승인 거부 표시
digitalWrite(RLED,HIGH);
delay(3000);
digitalWrite(RLED,LOW);
}
}
스마트 온습도계(영주) (개잘됨)
온습도 센서 및 LCD
(193) [아두이노] DHT11 온·습도 센서로 온도와 습도 측정하기 with LCDI2C - YouTube (온습도 센서)
(193) How to interface LCD display to Arduino without potentiometer/Arduino project/ - YouTube (LCD)
회로
#include <DHT11.h>
#include <DHT.h>
#include <DHT_U.h>
#include <LiquidCrystal.h>
//주변환경의 온도와 습도를 측정하여 시리얼모니터에 출력하기
#define DHTPIN 7
#define DHTTYPE DHT11
int Contrast=75;
LiquidCrystal lcd(12,11,5,4,3,2);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
analogWrite(6,Contrast);
lcd.begin(16,2);
}
void loop() {
//온도와 습도 값을 측정하고 변수에 저장하기
float humi, temp;
temp = dht.readTemperature();
humi = dht.readHumidity();
//센서가 측정하지 못 할 경우 측정 종료
if(isnan(humi) || isnan(temp)){
Serial.println("Failed to read from DHT sensor!!");
return;
}
//측정된 온도와 습도 출력하기
Serial.print("온도:");
Serial.print(temp);
Serial.println("℃");
Serial.print("습도:");
Serial.print(humi);
Serial.println("%");
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.print(temp);
lcd.write((uint8_t)223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Humidity:");
lcd.print(humi);
lcd.print("%");
delay(3000);
}
LED 벽시계(수정 완!!!)→ 아주 잘 돌아가아아아ㅏ암
https://steemit.com/kr-arduino/@codingman/p8a8o-4-digit-7-segment-display
#include <Arduino.h>
const byte segValue[10][7] = {
{1,1,1,1,1,1,0}, //0
{0,1,1,0,0,0,0}, //1
{1,1,0,1,1,0,1}, //2
{1,1,1,1,0,0,1}, //3
{0,1,1,0,0,1,1}, //4
{1,0,1,1,0,1,1}, //5
{1,0,1,1,1,1,1}, //6
{1,1,1,0,0,0,0}, //7
{1,1,1,1,1,1,1}, //8
{1,1,1,1,0,1,1} //9
};
const byte segPin[8] = {7, 3, A3, A1, A0, 6, A4, A2};
const byte digitPin[4] = {8, 5, 4, A5};
const byte interruptPin = 2;
boolean state = false;
extern volatile unsigned long timer0_millis;
unsigned long readTime;
int hour, min, sec;
void setup() {
Serial.begin(9600);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), switchFn, FALLING0);
for(int i=0;i<10;i++){
pinMode(segPin[i], OUTPUT);
}
for(int j=0;j<4;j++){
pinMode(digitPin[j], OUTPUT);
digitalWrite(digitPin[j], HIGH);
}
}
void loop() {
if(Serial.available()){ //입력시간 읽기
String inString = Serial.readStringUntil('\\n');
int index1 = inString.indexOf(':');
int index2 = inString.indexOf(':',index1+1);
int index3 = inString.length();
hour = inString.substring(0, index1).toInt();
min = inString.substring(index1+1,index2).toInt();
sec = inString.substring(index2+1,index3).toInt();
timer0_millis = ((long)hour*3600+min*60+sec)*1000; //입력시간 초변환
}
if(millis()>=86400000){ //타이머 리셋
timer0_millis=0;
}
readTime = millis()/1000; //현재시간 읽기
sec = readTime%60;
min = (readTime/60)%60;
hour = (readTime/(60*60))%24;
if(state==true){ //12시 or 24시 출력모드
hour = hour%12;
}
segOutput(3,min%10,0); //min 1의 자리
segOutput(2,min/10,0); //min 10의 자리
segOutput(1,hour%10,1); //hour 1의 자리
segOutput(0,hour/10,0); //hour 10의 자리
}
//12시 or 24시 출력 변경
void switchFn(){
state=!state;
}
//LED 초기화
void segClear(){
for(int i=0;i<8;i++){
digitalWrite(segPin[i], LOW);
}
}
//LED 출력
void segOutput(int d, int Number, int dp){
segClear();
digitalWrite(digitPin[d], LOW);
for(int i=0;i<7;i++){
digitalWrite(segPin[i], segValue[Number][i]);
}
digitalWrite(segPin[7], dp);
delayMicroseconds(1000);
digitalWrite(digitPin[d], HIGH);
}
조도 센서를 이용한 조명 제어
#include <Stdio.h>
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int readValue = analogRead(A0);
Serial.println(readValue);
if(readValue > 215)
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
}
움직임 감지로 인한 조명 제어(현관)(지희) https://m.blog.naver.com/sisosw/221472630847
@서지희
#include <Stdio.h>
int pir=2; //PIR모션센서
int led=13; //LED
int pirState = LOW; //시작 시, 어떠한 움직임도 감지되지 않았다고 가정
void setup(){
pinMode(pir, INPUT); //디지털 2번핀을 입력모드로 설정
pinMode(led, OUTPUT); //디지털 3번핀을 출력모드로 설정
Serial.begin(9600); //시리얼 통신 시작, 통신 속도는 9600
}
void loop(){
int val = digitalRead(pir); //PIR 모션센서로부터 입력값을 얻어옴
Serial.println(val); // 시리얼 모니터에 val값을 출력
if(val == HIGH) { //PIR 모션센서 입력값(val)이 HIGH이면
if(pirState == LOW){
digitalWrite(led, HIGH); // LED ON
Serial.println("Motion detected!");
pirState = HIGH;
}
} else { //LOW인 경
if(pirState == HIGH){
digitalWrite(led, LOW);
Serial.println("Motion ended!");
pirState = LOW;
}
}
}
조명 제어(조도센서 및 모션감지센서)
#include <Stdio.h>
int pir=2; //PIR모션센서
int led=10; //LED
int led2 = 13; // 조도센서 LED
int pirState = LOW; //시작 시, 어떠한 움직임도 감지되지 않았다고 가정
void setup(){
pinMode(pir, INPUT); //디지털 2번핀을 입력모드로 설정
pinMode(led, OUTPUT); //디지털 3번핀을 출력모드로 설정
pinMode(led2,OUTPUT);
Serial.begin(9600); //시리얼 통신 시작, 통신 속도는 9600
}
void loop(){
int val = digitalRead(pir); //PIR 모션센서로부터 입력값을 얻어옴
Serial.println(val); // 시리얼 모니터에 val값을 출력
if(val == HIGH) { //PIR 모션센서 입력값(val)이 HIGH이면
if(pirState == LOW){
digitalWrite(led, HIGH); // LED ON
Serial.println("Motion detected!");
pirState = HIGH;
}
} else { //LOW인 경
if(pirState == HIGH){
digitalWrite(led, LOW);
Serial.println("Motion ended!");
pirState = LOW;
}
}
int readValue = analogRead(A0);
Serial.println(readValue);
if(readValue > 215)
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
}
스마트 전등 스위치 제어(다음 주)
#include <SoftwareSerial.h>
#include <Servo.h>
Servo myservo1, myservo2;
int bluetoothTx = 10;
int bluetoothRx = 11;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup() {
myservo1.attach(3);
myservo2.attach(5);
Serial.begin(9600);
bluetooth.begin(9600);
}
void loop() {
if (bluetooth.available() >= 2) {
unsigned int servopos = bluetooth.read();
unsigned int servopos1 = bluetooth.read();
unsigned int realservo = (servopos1 * 256) + servopos;
Serial.println(realservo);
if (realservo >= 1000 && realservo < 1180) {
int servo1 = map(realservo, 1000, 1180, 0, 180);
myservo1.write(servo1);
Serial.println("Servo 1 ON");
delay(10);
}
if (realservo >= 2000 && realservo < 2180) {
int servo2 = map(realservo, 2000, 2180, 0, 180);
myservo2.write(servo2);
Serial.println("Servo 2 ON");
delay(10);
}
}
}