Project 7: Temperature Alarm image source: http://image.dfrobot.com/image//Blog/ |
int SUMMERI = 8;
int SENSORI = 0;
int arvo = 0;
void setup() {
pinMode(SUMMERI, OUTPUT);
Serial.begin(9600);
}
void loop() {
arvo = analogRead(SENSORI);
Serial.println(arvo);
}
Lämpötilan sensorin raaka-arvot liikkuivat 50 (huoneen lämpötila) ja 60 välillä (uloshengitys). |
Vout = 10mV/°C * T (LM35 datasheet)
Koska käytämme 5.0V jännitettä ja analogRead muuntaa jännitearvot kokonaisluvuiksi välille 0-1024, sensorin antama raaka-arvo (x) voidaan muuttaa celsiusasteiksi seuraavan kaavan avulla:
T(x) = (5.0 * x * 100.0) / 1024 (Arduino Playground)
Seuraavaksi teimme apufunktion (arvoLampotilaksi), joka muuttaa raaka-arvon lämpötilaksi.
int SUMMERI = 8;
int SENSORI = 0;
int arvo = 0;
double lampotila = 0;
void setup() {
pinMode(SUMMERI, OUTPUT);
Serial.begin(9600);
}
double arvoLampotilaksi(int x){
double temp = 0;
temp = (5.0*x*100)/1024;
return temp;
}
void loop() {
arvo = analogRead(SENSORI);
lampotila = arvoLampotilaksi(arvo);
Serial.println(lampotila);
}
Seuraavaksi otimme käytöön ehtolauseen ja summerin. Jos lämpötila nousee riittävän suureksi, summeri alkaa soida.
int SUMMERI = 8;
int SENSORI = 0;
int arvo = 0;
double lampotila = 0;
void setup() {
pinMode(SUMMERI, OUTPUT);
Serial.begin(9600);
}
double arvoLampotilaksi(int x){
double temp = 0;
temp = (5.0*x*100)/1024;
return temp;
}
void loop() {
arvo = analogRead(SENSORI);
lampotila = arvoLampotilaksi(arvo);
Serial.println(lampotila);
if(lampotila > 27){
tone(SUMMERI, 2000);
delay(2);
} else {
noTone(SUMMERI);
}
}
Summerin ääni ei järin korvia huumaa, joten kokeilimme myös mallikoodin mukaista hienompaa hälyytysääntä. Tosin tämän koodaaminen olikin jo hieman haastavampaa monelle ja koodin aukiselittäminenkin jäi tasolla "summerin sisääntuloa vaihdellaan for-loopin avulla"...
int SUMMERI = 8;
int SENSORI = 0;
int arvo = 0;
double lampotila = 0;
float sinVal = 0;
int toneVal = 0;
void setup() {
pinMode(SUMMERI, OUTPUT);
Serial.begin(9600);
}
double arvoLampotilaksi(int x){
double temp = 0;
temp = (5.0*x*100)/1024;
return temp;
}
void loop() {
arvo = analogRead(SENSORI);
lampotila = arvoLampotilaksi(arvo);
Serial.println(lampotila);
if(lampotila > 27){
for(int x = 0; x < 180; x++){
sinVal = (sin(x*(3.1412/180)));
toneVal = 2000+(int(sinVal*1000));
tone(SUMMERI, toneVal);
delay(2);
}
} else {
noTone(SUMMERI);
}
}
Temperature Alarm - kytkentä näyttää tältä |
NOTE: Tämän projektin kanssa hämmennystä aiheutti summerin + merkki, joka näytti olevan väärällä puolella summeria ja tästä johtui se, että alkuun ääntä ei tullut lainkaan.
Ei kommentteja:
Lähetä kommentti