코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-12-19 15:15:47
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 프로 미니 | 1 | 3.3V / 16Mhz |
2 | 열적외선 온도 센서 | 1 | MLX90614 |
3 | RGB LED | 1 | LED |
4 | 3.7v리튬 전지 | 1 | 2.5 cm X 2 cm / 240mAh 3.7v |
5 | 리튬전지 충전모듈 | 1 | TP4056 |
6 | 220 옴 저항 | 1 | 220옴 저항 |
7 | 100 옴 저항 | 2 | 100옴 저항 |
8 | 점퍼케이블 | 6 | 암/수 케이블 |
9 | 전선 | 1 | 강선 |
10 | 인두 | 1 | 인두 |
11 | 납 | 1 | 납 |
12 | 드레멜 | 1 | 다용도 전동 공구 |
13 | 손전등 | 1 | 에너자이저 LED 43A1 랜턴 겸용 손전등 |
부품명 | 아두이노 프로 미니 | 열적외선 온도 센서 | RGB LED | 3.7v 리튬 전지 | 리튬전지 충전모듈 |
파트 | x1 | x1 | x1 | x1 | x1 |
파트 | 220옴 저항 | 100옴 저항 | 점퍼 케이블 | 전선 | 인두 |
x1 | x2 | x6 | x1 | x1 | |
파트 | 납 | 드레멜 | 손전등 | ||
x1 | x1 | x1 |
IR Temp | 아두이노 |
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
// MLX90614 IR Thermometer Library here: http://bildr.org/2011/02/mlx90614-arduino/
// Instructions for wiring thermometer here: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1214872633
// RGB LED wiring and simple fading sketch: http://wiring.org.co/learning/basics/rgbled.html
#include <i2cmaster.h>
int rawSensorValue = 0; // variable to store the value coming from the sensor
int mappedSensorValue = 0; // maps range of rawSensorVale and constrains it between 0 and 255
int minF = -40; // min range of sensor is -40C = -40F
int maxF = 57; // max range of sensor is 125C = 257F
// set your thresholds for temperatures here
int cold = 60;
int normal = 90;
int hot = 100;
int REDPin = 6; // RED pin of the LED to PWM pin 6
int GREENPin = 5; // GREEN pin of the LED to PWM pin 5
int BLUEPin = 3; // BLUE pin of the LED to PWM pin 3
int brightness = 0; // LED brightness
void setup(){
Serial.begin(9600);
Serial.println("Setup...");
i2c_init(); //Initialise the i2c bus
PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups
pinMode(REDPin, OUTPUT);
pinMode(GREENPin, OUTPUT);
pinMode(BLUEPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
int dev = 0x5A<<1;
int data_low = 0;
int data_high = 0;
int pec = 0;
i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x07);
// read
i2c_rep_start(dev+I2C_READ);
data_low = i2c_readAck(); //Read 1 byte and then send ack
data_high = i2c_readAck(); //Read 1 byte and then send ack
pec = i2c_readNak();
i2c_stop();
//This converts high and low bytes together and processes temperature,
//MSB is a error bit and is ignored for temps
double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
double tempData = 0x0000; // zero out the data
int frac; // data past the decimal point
// This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
tempData = (double)(((data_high & 0x007F) << 8) + data_low);
tempData = (tempData * tempFactor)-0.01;
float celcius = tempData - 273.15;
float fahrenheit = (celcius*1.8) + 32;
Serial.print("Celcius: ");
Serial.println(celcius);
Serial.print("Fahrenheit: ");
Serial.println(fahrenheit);
rawSensorValue = fahrenheit;
// 센서 값을 0부터 255의 값으로 변경
mappedSensorValue = map( mappedSensorValue, minF, maxF, 0, 255);
if ((rawSensorValue>=minF) && (rawSensorValue<=cold)) {
Serial.println("getting colder"); // Blue 색상 출력
analogWrite(REDPin, 0);
analogWrite(GREENPin, (255-mappedSensorValue));
analogWrite(BLUEPin, mappedSensorValue);
}
if ((rawSensorValue>cold) && (rawSensorValue<=normal)) {
Serial.println("normal temp."); // Green 색상 출력
analogWrite(REDPin, 0);
analogWrite(GREENPin, mappedSensorValue);
analogWrite(BLUEPin, (255-mappedSensorValue));
}
if ((rawSensorValue>normal) && (rawSensorValue<hot)) {
Serial.println("getting hot in here!"); // Red 색상 출력
analogWrite(REDPin, mappedSensorValue);
analogWrite(GREENPin, 0);
analogWrite(BLUEPin, 0);
}
if (rawSensorValue>=hot && rawSensorValue<maxF) {
Serial.println("over heated!"); // White색상 출력
analogWrite(REDPin, mappedSensorValue);
analogWrite(GREENPin, mappedSensorValue);
analogWrite(BLUEPin, mappedSensorValue);
}
delay(1000); // 1초동안 대기
}
kocoafab