빛 센서를 활용하여 LED 문구를 바꾸는 프로그램 코드를 작성해 보았다.
아두이노 구매 후 관련 프로그램을 설치하여 프로그래밍 환경을 띄운다.
(PC, 아두이노 보드를 구매하면 관련 자료를 제공한다. 검색으로도 충분히 찾을 수 있다.)
설치하면 바탕화면에 'Arduino IDE'라는 아이콘이 생긴다.
실행하여 새로 작성하거나 최근 작성한 파일을 불러오자.
> 샘플을 가져와 수정한 코드(광센서 + LED 글씨 출력 + 온도센서)
샘플과 코딩에 필요한 Library 헤더 파일은 IDE 소프트웨어에서 손쉽게 지원해 준다.
다만 기본적으로 프로그래밍 개념이 없다면 C언어 기본 개념정도(깊게도 필요 없다.)는 익히고 해보길 권한다.
#include <LiquidCrystal_I2C.h> //LiquidCrystal
#include <DHT.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //lcd
DHT dht(12, DHT11); //DHT Temp
void setup() {
int val = analogRead(A0);
Serial.println(val); //light sencer
if (val < 500){
digitalWrite(5, HIGH);
}
else{
digitalWrite(5, LOW);
}
delay(200);
//lcd.begin()
lcd.init();
lcd.backlight();
// temp set
Serial.begin(9600); // temp set
}
void loop() {
char sTemp[10];
//temp start
delay(3000);
int tem = dht.readTemperature();
int hum = dht.readHumidity();
itoa(tem, sTemp, 10);
int val = analogRead(A0);
lcd.clear();
Serial.println(val);
if (val < 500){
digitalWrite(5, HIGH);
lcd.setCursor(0, 0);
lcd.print("Moon is alive!");
lcd.setCursor(0, 1);
lcd.print("Now : ");
lcd.setCursor(6, 1);
lcd.print(sTemp);
lcd.setCursor(8, 1);
lcd.print("C");
}
else{
digitalWrite(5, LOW);
lcd.print("Sun is alive!");
}
delay(200);
}
그런데 온도값을 전혀 가져오지 못한다... 뭐가 문제일까..
<...왜 0도여..>
<설마....잡았나 요놈?>
검색해 보니..
온도센서 이거 내가 엄한 거를 했나 싶다.
그래서 센서를 예제와 비슷한 거로 교체하고
코드를 다음과 같이 void loop() { 부분부터 itoa 함수 부분까지 수정하였다.
void loop() {
float t_VAL;
char sTemp[10];
//temp start
delay(3000);
//int tem = dht.readTemperature();
int hum = dht.readHumidity();
int temp = analogRead(A1);
t_VAL = temp*0.48828125; //화씨 → 섭씨 변경
itoa(t_VAL, sTemp, 10);
analogRead(A1)에서 A0는 이미 광센서가 사용 중인 관계로 다음 INPUT 소켓에 A1을 사용하였다. 이번에 해당 개념을 익히게 되었다.
<오호...나온다..그런데 우리집이 이렇게 따뜻했던가? 오늘 영하던데?>
시간 개념을 입히고 타이머를 맞춰서 모터를 돌려서 뺨을 치는 알람을 한번 만들어봐야겠다.
비닐하우스 자동화에 사용되는 모터 규격과 전력 부분에 대해서도 공부가 필요할까 싶다.
오랜만에 머리 쓸려니 안 되는 머릴 붙잡고 한 가지 숙제를 끝내 본다.