에프티크레이이티드(http://fdc.ne.kr)에서 제공하는 교육용 아두이노를 이용하여 제작했습니다.
사용한 센서는
- 조도 센서
- 온도 센서
- 습도 센서
를 사용하여
버튼을 땐경우에는 - 온도,습도 를 출력
버튼을 누른경우에는 - 조도를 출력합니다.
#include#include #include #define dataPin 22 // 온습도 데이터 입력핀 설정 #define clockPin 23 // 시간 데이터 입력핀 설정 SHT1x sht1x(dataPin, clockPin); LiquidCrystal lcd(32, 54, 33, 34, 35, 36, 37); int buttonState = 0; const int cdsInPin = A0; // Analog input pin that the potentiometer is attached to const int analogInPin = A1; // Analog input pin that the potentiometer is attached to int sensorValue = 0; // value read from the pot int cdsValue = 0; // value read from the pot void setup() { Serial.begin(9600); // Serial.println("Starting up"); Wire.begin(); // join i2c bus (address optional for master) delay(500); pinMode(8, INPUT); //LED Set "Relay Board Cn1" lcd.begin(8,2); // 8열 2줄 LCD 활용 시작 lcd.clear(); // LCD 화면 비움 } void loop() { buttonState = digitalRead(8); sensorValue = analogRead(analogInPin); cdsValue = analogRead(cdsInPin)*10; float sensor; float cds; // Read values from the sensor sensor = analogInPin; cds = cdsInPin; const int lookup[10] = {0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x6F}; int Count, Thousands, Hundreds, Tens, Base; Wire.beginTransmission(0x38); Wire.write((byte) 0); Wire.write(B01000111); Wire.endTransmission(); float temp_c; // 섭씨 float temp_f; // 화씨 float humidity; // 습도 // 위의 변수 값에 센서로부터의 값을 입력 받도록 설정한다. temp_c = sht1x.readTemperatureC(); temp_f = sht1x.readTemperatureF(); humidity = sht1x.readHumidity(); if(buttonState == HIGH){ //LCD START lcd.setCursor(0,0); // 0, 0 윗줄 시작 lcd.print("Temp= "); // 따옴표 사이에 원하는 글을 적는다. lcd.print(temp_c, DEC); // 따옴표 사이에 원하는 글을 적는다. lcd.setCursor(0,1); // 0, 1 아랫줄 시작 lcd.print("Humi= "); lcd.print(temp_f, DEC); //LCD END // 7 SEGMENT START Wire.beginTransmission(0x38); Wire.write(1); Thousands = (int)temp_c/10; Hundreds = (int)(temp_c - (Thousands*10)); Tens = (int)temp_f/10; Base = (int)(temp_f - (Tens*10)); Wire.write(lookup[Thousands]); Wire.write(lookup[Hundreds]); Wire.write(lookup[Tens]); Wire.write(lookup[Base]); Wire.endTransmission(); }else{ if(cdsValue >= 160) { Serial.print("Relay Cn1 On\n"); Serial.print("Trun off Light 0n\n"); digitalWrite(33, LOW); digitalWrite(32, HIGH); lcd.begin(8,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("cds"); lcd.print(cdsValue,DEC); lcd.setCursor(0,1); lcd.print("lightoff"); Wire.beginTransmission(0x38); Wire.write(1); if(cdsValue>99 && cdsValue<1000){ Thousands = 0; Hundreds = cdsValue/100; Tens = (cdsValue - (Hundreds*100))/10; Base = (cdsValue - (Hundreds*100)-(Tens*10)); Wire.write(lookup[Thousands]); Wire.write(lookup[Hundreds]); Wire.write(lookup[Tens]); Wire.write(lookup[Base]); Wire.endTransmission(); }else if(cdsValue>9 && cdsValue<100){ Thousands = 0; Hundreds = 0; Tens = cdsValue/10; Base = (cdsValue - (Tens*10)); Wire.write(lookup[Thousands]); Wire.write(lookup[Hundreds]); Wire.write(lookup[Tens]); Wire.write(lookup[Base]); Wire.endTransmission(); }else if(cdsValue>10){ Thousands = 0; Hundreds = 0; Tens = 0; Base = cdsValue; Wire.write(lookup[Thousands]); Wire.write(lookup[Hundreds]); Wire.write(lookup[Tens]); Wire.write(lookup[Base]); Wire.endTransmission(); } } else { Serial.print("Relay Cn2 On\n"); Serial.print("Trun On the light On\n"); digitalWrite(32, LOW); digitalWrite(33, HIGH); lcd.begin(8,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("cds "); lcd.print(cdsValue,DEC); lcd.setCursor(0,1); lcd.print("light on"); } } // 7 SEGMENT END delay(50); }
이 프로그램을 응용하여 릴리즈를 활용하여
조도값을 받아 어두울때는 전등을 키고 밝을때는 전등을끄는 기능과
추울때는 히터를 틀고 더울때는 히터를 키는 소스를 구현하였습니다.
#include#include #include #define dataPin 22 // 온습도 데이터 입력핀 설정 #define clockPin 23 // 시간 데이터 입력핀 설정 SHT1x sht1x(dataPin, clockPin); LiquidCrystal lcd(40, 54, 41, 42, 43, 44, 45); const int cdsInPin = A0; // Analog input pin that the potentiometer is attached to const int analogInPin = A1; // Analog input pin that the potentiometer is attached to int sensorValue = 0; // value read from the pot int cdsValue = 0; // value read from the pot void setup() { Serial.begin(9600); // Serial.println("Starting up"); pinMode(32, OUTPUT); pinMode(33, OUTPUT); lcd.begin(8,2); // 8열 2줄 LCD 활용 시작 lcd.clear(); // LCD 화면 비움 } void loop() { sensorValue = analogRead(analogInPin); cdsValue = analogRead(cdsInPin)*10; float sensor; float cds; // Read values from the sensor sensor = analogInPin; cds = cdsInPin; float temp_c; // 섭씨 float temp_f; // 화씨 float humidity; // 습도 // 위의 변수 값에 센서로부터의 값을 입력 받도록 설정한다. temp_c = sht1x.readTemperatureC(); temp_f = sht1x.readTemperatureF(); humidity = sht1x.readHumidity(); if(temp_c<20){ // 온도의 기준은 20도 //LCD START lcd.setCursor(0,0); // 0, 0 윗줄 시작 lcd.print("T="); // 따옴표 사이에 원하는 글을 적는다. lcd.print((int)temp_c, DEC); // 따옴표 사이에 원하는 글을 적는다. digitalWrite(32, HIGH); lcd.print(" ON "); // 따옴표 사이에 원하는 글을 적는다. }else{ //LCD START lcd.setCursor(0,0); // 0, 0 윗줄 시작 lcd.print("T="); // 따옴표 사이에 원하는 글을 적는다. lcd.print((int)temp_c, DEC); // 따옴표 사이에 원하는 글을 적는다. digitalWrite(32, LOW); lcd.print(" OFF "); // 따옴표 사이에 원하는 글을 적는다. } if(cdsValue >= 160) // 밝기의 기준은 160 { Serial.print("Relay Cn1 On\n"); Serial.print("Trun off Light 0n\n"); lcd.setCursor(0,1); lcd.print("L="); // 따옴표 사이에 원하는 글을 적는다. lcd.print(cdsValue, DEC); // 따옴표 사이에 원하는 글을 적는다. lcd.print(" OFF "); // 따옴표 사이에 원하는 글을 적는다. digitalWrite(33, LOW); } else { Serial.print("Relay Cn2 On\n"); Serial.print("Trun On the light On\n"); lcd.setCursor(0,1); lcd.print("L="); // 따옴표 사이에 원하는 글을 적는다. lcd.print(cdsValue, DEC); // 따옴표 사이에 원하는 글을 적는다. lcd.print(" ON "); // 따옴표 사이에 원하는 글을 적는다. digitalWrite(33, HIGH); } delay(1000); }
'Programming > Arduino' 카테고리의 다른 글
이더넷 포트를 통한 아두이노 제어하기 (1) | 2013.03.25 |
---|---|
아두이노 보드를 이용한 DC모터 제어 (0) | 2013.01.23 |
소리를 이용한 LED를 ON/OFF하기 (0) | 2013.01.22 |
초음파 센서를 이용한 차량 후방 감지기 구현 (2) | 2013.01.22 |
74HC595를 이용한 3핀->8핀 만들기 (1) | 2013.01.17 |