Arduino Uno, ledejä ja koekytkentälevy |
Lähdimme tietysti liikkeelle ledin vilkuttelusta. Kiinnitimme yhden ledin pinniin 13 ja pistimme sitä päälle ja pois (pinniin 13 voi kytkeä ledin suoraan ilman vastusta). En ollut aikaisemmin ohjelmoinut ledejä vilkkumaan (saati tehnyt elektronisia kytkentöjä) joten riemu oli suuri kun se todellakin rupesi vilkkumaan. Kytkentä oli siis näin yksinkertainen (piirretty 123D Autodesk Circuit - palvelussa):
Yksi led pinnissä 13 |
// yhden valon vilkutus
// vakiot
int led1 = 13; //led on pinnissä 13 (pitkä haara), lyhyt on GND:ss
void setup() {
// put your setup code here, to run once:
pinMode(led1, OUTPUT); // pinnissä 13 on "ulostulo"
}
void valonVilkutus(int pinni){
digitalWrite(pinni, HIGH);
delay(1000); // aika mikrosekunneissa, yksi sekunti
digitalWrite(pinni,LOW);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
valonVilkutus(led1); // kaikki koodi laitetaan "loop":in sisään
}
Ledin sai vilkkumaan satunnaisesti tällä koodilla:
void randomValo(int pinni){
digitalWrite(pinni, HIGH);
delay(random (1000));
digitalWrite(pinni,LOW);
delay(1000);
}
Ledin himmentäminen ja kirkastaminen automaattisesti menee näin (ledin pitää olla kiinni ~merkin omaavassa pinnissä, jotta himmentämisessä tarvittava PWM = Pulse Width Modulation toimii). Kykentä tehdään näin:
Himmennettävä led kiinnitetään pinniin, jossa on ~ |
// ledin himmennys ja kirkastus
// vakiot
int kirkkaus = 0; // kuinka kirkas led on
int lisays = 5; // paljonko kirkkaus lisääntyy (255 maksimi)
int led1 = 11; // tukee PWM:ää
void setup() {
// put your setup code here, to run once:
pinMode(led1, OUTPUT); // kytkentälevyn led1
}
void himmennys(int pinni){
analogWrite(pinni, kirkkaus);
kirkkaus = kirkkaus + lisays;
if (kirkkaus == 0 || kirkkaus == 255){
lisays = -lisays;
}
delay(30);
}
void loop() {
// put your main code here, to run repeatedly:
himmennys(led1);
}
Yksinkertaisen kytkimen voi tehdä kahden johtimen kanssa näin (johtimet yhdessä -> valo palaa, johtimet irti valo sammuu):
Oikealla olevat punaiset viivat esittävät irtonaisia johtimen päitä, joilla voi sulkea virtapiirin |
// vakiot
int led1 = 11;
int kytkin = 7;
int kytkimentila = 0;
void setup() {
// put your setup code here, to run once:
pinMode(led1, OUTPUT);
pinMode(kytkin, INPUT_PULLUP); /* PULLUP=alasvetovastus, jännite jää alas */
}
void valokytkin(int pinni){
kytkimentila = digitalRead(kytkin);
if (kytkimentila == LOW) { // jos johdot koskevat eli maadotettu
digitalWrite(pinni, HIGH);
}
else {
digitalWrite(pinni, LOW);
}
}
void loop() {
// put your main code here, to run repeatedly:
valokytkin(led1);
}
Ledin himmentäminen valovastuksen avulla onnistuu tällä koodilla. Valovastus kytkettiin vastuksen kanssa niin, että jännite otetaan ulos niiden välistä. Eri komponenttien kytkentätavat voi katsoa esim. Autodesk 123D Circuits sivuilta. Siellä voi myös simuloida Arduino koodin toimintaa. Toinen vastaava ohjelma on Fritzing (tosin se vaatii asentamisen).
Valovastuksella himmennetty led |
int valoisuus = 0;
int skaalattu = 0;
int valovastus = A2; // analoginen sisääntulo
int led1 = 11;
String vakioteksti1 = " valovastus = ";
String vakioteksti2 = " skaalattu = ";
void setup() {
Serial.begin(9600); // otetaan sarjamonitori käyttöön
// put your setup code here, to run once:
pinMode(led1, OUTPUT);
pinMode(valovastus, INPUT);
}
void himmennin(int pinni){
valoisuus = analogRead(valovastus);
Serial.println(valoisuus); // "serial print line"
delay(30);
// mäppää arvot välille 0 - 255 (alussa 20 - 800)
skaalattu = map(valoisuus, 20, 800, 0, 255);
Serial.println(vakioteksti1 + valoisuus);
Serial.println(vakioteksti2 + skaalattu);
analogWrite(pinni, skaalattu); // skaalattu on välille 0-255
}
void loop() {
// put your main code here, to run repeatedly:
himmennin(led1);
}
Huomaa valovastuksen kytkentä! |
Kolme lediä ja valovastus |
int valovastus = A2; // analoginen
int led1 = 11;
int led2 = 12;
int led3 = 13;
void setup() {
// put your setup code here, to run once:
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(valovastus, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
valoisuus = analogRead(valovastus);
delay(30);
if (valoisuus > 700){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
}
else if(valoisuus > 100 && valoisuus < 700) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
} else
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
}
}
Normaalissa valaistuksesssa palaa kaksi lediä |
int valoisuus = 0;
int valovastus = A2; // analoginen
int led1 = 11;
void setup() {
// put your setup code here, to run once:
pinMode(led1, OUTPUT);
pinMode(valovastus, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
valoisuus = analogRead(valovastus);
delay(30);
if (valoisuus > 700){
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
delay(1000);
}
else if(valoisuus > 100 && valoisuus < 700) {
digitalWrite(led1, HIGH);
delay(100);
digitalWrite(led1, LOW);
delay(100);
} else
digitalWrite(led1, LOW);
}
Ja tältä se ledien vilkuttelu sekä valovastuksen toiminta sitten näyttää livenä (kuvassa näkyy Arduino Uno, koekytkentälevy sekä käytetyt komponentit: vastukset, ledit, johtimet sekä valovastus):
Tässä linkkejä, joista voi olla apua kun lähtee suunnittelemaan omia projekteja:
Voisin kuvitella, että 9. luokan sähköopin opiskelun yhteydessä voisin hyvinkin käyttää Arduinoja sekä koodauskerhon touhuissa. Nyt pitäisi vain ostaa sellainen itselle, että pääsisi kokeilemaan kurssilla opittua. Toinen kurssi olisi vielä tarpeen, että osaisi ohjata mottoreita (että aukeaisi mikä se mystinen H-silta ja shield-juttu ovat...).
Moi!
VastaaPoistaHieno kirjoitus kurssin sisällöstä, kiitos siitä. Tutkiskelen parhaillaan onko Kainuun alueella vastaavia kursseja ja minkä hintaisia ovat. Ihan vain esitutkimusta, koska itselläni on mielessä, että saattaisin niitä alkaa järjestämään. Hyvä että ihmiset kirjoittelee kurssien sisällöistä. Kuinka pitkä (ajallisesti) tuo kurssi oli? Entä hinta?
Kiitos. Kurssi oli yhden päivän intensiivikurssi (6h) ja hinta taisi olla 90€. Tässä linkki kurssimainokseen:
VastaaPoistahttp://www.kasityokoulurobotti.fi/robotin-tyopajat-kasvattajille-kevat-2015/
Aika tiivis kurssi, varsinkin jos ei ole koodannut C:llä aikaisemmin...