Riikka Lindroos
Tiimi:
Jero Kostiainen
Roope Kuikka
Riikka Lindroos
Välineet:
Arduino duemillanova,
ultraäänisensori,
9v-patteri,
summeri,
3 lediä(eri värejä),
hyppylankaa,
alle tuhat riviä kovaa koodia.
13.5.2010
Lähdimme ratkomaan projektia ensin yksinkertaisesti siitä että saimme ultraäänisensorin toimimaan, se onnistui helposti kun löysimme sopivan koodin. Sitten monimutkaistimme projektia niin että led-valo syttyisi kun mitattu matka on esim. 10Cm tai vähemmän. Kun saimme tämän vaiheen onnistumaan, yritimme saada sekä lediä että summeria toimimaan niin että led syttyisi kun matkaa olisi 10cm ja summeri menisi päälle kun matkaa on 5cm tai alle. Tätä emme saaneet toimimaan. Yllä olevalla koodilla saimme siis ainoastaan ledin tai summerin toimimaan kun etäisyyttä oli 10cm tai alle.
Opittua: Kiiltävällä pinnalla ultraäänisensorilla on vaikeuksia tunnistaa matkoja.
14.5. & 17.5.
Emme edenneet projektissa mihinkään, vaikka käytimme aikaa siihen lukuisia tunteja.
18.5.
Aloitimme projektin teon n. klo 11.45, mikään ei tuntunut aluksi toimivan. Lopulta saimme torstaina tehdyllä koodilla yhden ledin vilkkumaan. Olimme jo epätoivoisia, kunnes huomasimme että emme olleet määritelleet ledejä outputeiksi, kun teimme sen saimme projektin toimimaan jo huomattavasti paremmin. Lisäksi saimme apua Sulautetut-kirjassa esitellystä väijyvahti-projektin koodista.
Alla olevalla koodilla led-valo syttyy kun matkaa esteeseen on alle 20cm ja summeri aloittaa piipittämisen alle 5cm kohdalla.
Sorsa:
/*@author Riikka Lindroos
Köyhän miehen peruutustutkan koodi.
Ideana on että led-valo syttyy kun takana oleva este on
alle 10cm päässä ja summeri piipittää kun esteeseen on alle 5cm.
*/
float t=20; // kalibroidaan sensori toimimaan huoneenlämmössä.
int pingPin = 2; // sensorin data kulkee pinnissä 2.
int SummeriPin = 4; //Summeri on pinnissä 4
float limitCm = 20; // ensimmäinen raja-arvo on 20cm
float limitCm2 = 5; //toinen raja-arvo on 5cm
int ledPin = 5; //led-valo on pinnissä 5
float speedCmUs = 0; //annetaan speedCmUs:lle alkuarvoksi 0.
void setup()
{
//määritellään sarjaportin nopeudeksi 115 200 bauhnia, ja led, summeri sekä sensori outputeiksi.
Serial.begin(115200);
pinMode(pingPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(SummeriPin, OUTPUT);
float v=331.5+0.6*t;
Serial.print("Speed of Sound in m/s is "); //tulostaa ensimmäisenä monitoriin että matkat ovat metriä sekunnissa.
Serial.println(v, DEC);
speedCmUs=v*100/1000/1000;
}
//sensorin asetukset.
float distanceCm() {
pinMode(pingPin, OUTPUT); //sensori outputiksi
digitalWrite(pingPin, LOW); //poispäältä
delayMicroseconds(3);
digitalWrite(pingPin, HIGH); //päälle
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT); //sensori inputiksi
digitalWrite(pingPin, HIGH);
long int roundTripTimeUs = pulseIn(pingPin, HIGH);
return (float) roundTripTimeUs / 2 * speedCmUs; //laskee ja palauttaa matkan.
}
//varsinainen ohjelma
void loop ()
{
Serial.println(distanceCm(), DEC); //tulostaa monitoriin matkan
float dist = distanceCm(); //asetetaan että dist tarkoittaa distanceCm muuttujaa
if (dist < limitCm) { //määritellään että jos dist on ensimmäistä raja-arvoa pienempi led-valo syttyy
digitalWrite(ledPin, HIGH);
Serial.println ("ledPin"); //monitoriin tulostuu ledPin-sana
} else
{
digitalWrite(ledPin, LOW); //jos matka on suurempi kuin ensimmäinen raja-arvo ledpin ei pala.
}
delay (1000); // viive asetetaan 1 sekuniksi.
{
Serial.println(distanceCm(), DEC);
float dist = distanceCm();
if (dist < limitCm2) { //jos matka on piemepi kuin toinen raja-arvo summeri alkaa piipittää
digitalWrite(SummeriPin, HIGH);
Serial.println ("summeriPin"); //monitori tulostuu summeripin-sana
}
else {
digitalWrite(SummeriPin, LOW); // jos matka on suurempi kuin ensimmäinen raja-arvo summeri on hiljaa.
}
delay (1000); //viive asetetaan 1 sekuniksi.
}
}

Comments
Post new comment