Jokainen on varmasti törmännyt rautakaupan mainoksissa robottiruohonleikkureihin tai pölyä pyöritteleviin robotti-imureihin. Liikkuvat, surisevat ja pärisevät omatoimiset laitteet vastaavat parhaiten mielikuvaamme roboteista, mutta moni unohtaa, että vaikkapa ohjelmavalitsimella varustettu astianpesukone on meille hyvin läheinen robotti.
- LED-valoja, moottoreita, LCD-näyttöjä, nappeja, summereita tai kaiuttimia
- Ympäristöä mittaavia sensoreita, kuten valo-, kosteus- tai lämpötila-anturi
- Viestintälisäosia, joilla arduino saadaan lähettämään / vastaanottamaan keräämäänsä tietoa tai tallentamaan sitä. Bluetooth- tai wifi-lisäosan avulla arduinon ohjaaminen toimii langattomasti vaikkapa kännykällä.
Omassa projektissani tänä kesänä hyödynsin Arduino UNO -mikrokontrolleria taimien kastelussa. Ongelmana oli saada taimien kosteus pysymään tasaisesti samana juoksematta itse koko ajan kastelukannu kädessä. Lyhyesti: Arduinoon on yhdistetty kosteusmittari ja letkun avaava moottori. Kun kosteus laskee riittävästi, avaa moottori letkun.
Kouluissa robotiikkaa tulee lähestyä oppilaita yllättävästä suunnasta. Alakoulussa opetuksen päätavoite on laajentaa käsitystä robotiikasta ja ohjata oppilaat löytämään robotiikalle uusia käyttötarkoituksia heidän omasta elämästään ja arjestaan. Robotiikan opetus kannattaa yhdistää esimerkiksi luonnontieteiden kanssa monialaiseen oppimiskokonaisuuteen säähavaintoasemana tai vaikkapa äidinkielessä näytelmän osaksi. Tällä tavoin robotiikka löytää tiensä ihmisten arkeen ja avartaa ymmärrystä ympärillämme vauhdilla lisääntyvästä ilmiöstä.
Alla on yksi esimerkki siitä, kuinka oman arjen ongelmia voi ratkaista robotiikkaa hyödyntäen. Esimerkki sopii parhaiten yläkouluun haastavan koodin vuoksi.
Kouluissa robotiikkaa tulee lähestyä oppilaita yllättävästä suunnasta. Alakoulussa opetuksen päätavoite on laajentaa käsitystä robotiikasta ja ohjata oppilaat löytämään robotiikalle uusia käyttötarkoituksia heidän omasta elämästään ja arjestaan. Robotiikan opetus kannattaa yhdistää esimerkiksi luonnontieteiden kanssa monialaiseen oppimiskokonaisuuteen säähavaintoasemana tai vaikkapa äidinkielessä näytelmän osaksi. Tällä tavoin robotiikka löytää tiensä ihmisten arkeen ja avartaa ymmärrystä ympärillämme vauhdilla lisääntyvästä ilmiöstä.
Alla on yksi esimerkki siitä, kuinka oman arjen ongelmia voi ratkaista robotiikkaa hyödyntäen. Esimerkki sopii parhaiten yläkouluun haastavan koodin vuoksi.
Arduino UNO -kastelurobotti
Video1: Järjestelmän perusesittely
Vesi valuu sadevesitynnyristä painovoiman avulla rei'itettyä muoviputkea pitkin niin, että kasvien kohdalla vesi lorisee tasaisesti putkesta. Reikiä täytyy säätää teipillä ja putken tasapainoa kääntelemällä ylös alas, muuten vesi valuu vain yhdelle tai kahdelle kasville. Putken kiinnitykseen käytin avattavia nippusiteitä, joiden avulla on helppo säätää putken kaltevuutta.
Kytkentäkaavio
- Servo on kiinni digital out 9:ssä, maassa ja 5V virrassa.
- Kosteusanturi kiinni maassa, virrassa (digital out 7) ja analog 0 sisääntulossa.
- Ledimatriisi, joka kuvaa kosteuden määrää, on kiinni maassa sekä pinneissä 2-6 ja 9 (0 ja 1 pinnejä ei kannata käyttää juuri koskaan).
Video 2: Ledimatriisin kokeilua
Koodi, joka on leikkailtu, liimailtu ja kirjoiteltu itse kasaan.
#include <Servo.h> //servo needs library to run
Servo myservo; // create servo object to control a servo
int pos=0; // variable to store the servo position
int val=0; //value for storing moisture value
int soilPin=A0;//Declare a variable for the soil moisture sensor
int soilPower=7;//Variable for Soil moisture Power
int LED1=8; //LED valojen ulostulopinnit
int LED2=2;
int LED3=3;
int LED4=4;
int LED5=5;
int LED6=6;
//Rather than powering the sensor through the 3.3V or 5V pins,
//we'll use a digital pin to power the sensor. This will
//prevent corrosion of the sensor as it sits in the soil.
//tämä luuppi käydään vain kerran kun kone käynnistyy
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
Serial.begin(9600); // open serial over USB
pinMode(soilPower, OUTPUT);//Set D7 as an OUTPUT
digitalWrite(soilPower, LOW);//Set to LOW so no power is flowing through the sensor
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
}
//This is a function used to get the soil moisture content
int readSoil()
{
digitalWrite(soilPower, HIGH);//turn D7 "On"
delay(10);//wait 10 milliseconds
val=analogRead(soilPin);//Read the SIG value form sensor
digitalWrite(soilPower, LOW);//turn D7 "Off"
return val;//send current moisture value
}
// tässä luupissa määritellään millä kosteusarvolla mikäkin ledi syttyy
void LEDloop()
{
if (val <= 250)
{
Serial.println("pun");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
}
else if ( (val > 250) && (val <= 300) )
{
Serial.println("pun,kel");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
}
else if ( (val > 300) && (val <= 340) )
{
Serial.println("pun,kel,vih");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
}
else if ( (val > 340) && (val <= 370) )
{
Serial.println("pun,kel,vih, vih");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
}
else if ( (val > 370) && (val <= 400) )
{
Serial.println("pun,kel,vih, vih, vih");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, LOW);
}
else if ( val > 400 )
{
Serial.println("pun,kel,vih, vih, vih,vih");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
}
}
//tämä on pääluuppi jota kontrolleri pyörittää jatkuvasti, se sisältää muut luupit lukuun ottamatta setup luuppia
void loop()
{
Serial.print(" Kosteusarvo=");
//get soil moisture value from the function below and print it
Serial.println(readSoil());
LEDloop();
//This 1 second timefrme is used so you can test the sensor and see it change in real-time.
//For in-plant applications, you will want to take readings much less frequently.
delay(1000);//take a reading every second
if (val < 300)
{ // Kastelu luuppi, kosteusarvoa voi säätää tässä
Serial.println("Maa liian kuiva");
for ( pos=720; pos >= 0; pos -=1)
{
myservo.write(pos);
delay(20);
}
Serial.println("hana auki");
for ( int x=0; x < 20; x++ )
{
digitalWrite(LED1, HIGH); // tässä kaikki valot vilkkuu kun kastelu on päällä
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
delay(1000);
}
for ( pos=0; pos <= 720; pos += 1)
{
myservo.write(pos);
delay(15);
}
Serial.println("hana kii");
}
}
|
- Miika Anundi, 2017
Kommentit
Lähetä kommentti