30.5.2016

Valmis!!!

Valojen prototyyppi on valmis!

Valot syttyvät kun pyörä on liikkeessä pimeällä. Kiihtyvyysanturi havaitsee myös stepperien tärinää, joten se sytyttää valot lopussa, vaikka varsinainen liike loppuu.


Katso linkki:


https://youtu.be/v0M95Jqieoo

Kohta se on valmis

Pienen pohdinnan jälkeen, kaikki komponentit löysivät paikkansa piirilevyltä. Circuit wizard -ohjelman uusi versio ei tukenut enää vanhaa piirustustamme, joten paikat piti katsoa pohtimalla.

Koodi syötettiin arduinoon, minkä jälkeen koodia testattiin koekytkennällä.
Samalla valoille tehtiin 3D-tulostimella pidikkeet, jotka saatiin kiinni steppereihin.



Komponentit juotettiin paikoilleen piirilevylle, minkä jälkeen osia alettiin kiinnittämään laatikkoon.


Valmis koodi

Koodi valmistui pääsiäisenä 2014. Projektia pääsimme jatkamaan keväällä 2016. Heh.


Tässä valmis koodimme:




//21.4.-14 Looppiin tehty erilliset funktiot


//23.5.-16 Koodi ladattu Arduinoon


 


#include <Stepper.h>


//Valovastukset


int analogInput1 = A4; // Potentiometrin keskimmäinen jalka kytketään tähän pinniin


int analogInput2 = A5; // Potentiometrin keskimmäinen jalka kytketään tähän pinniin


int arvo1 = 0; // jännitteen arvo tallennetaan tähän muuttujaan


int arvo2 = 0; // jännitteen arvo tallennetaan tähän muuttujaan


int keskiarvo = 0; // jännitteen arvo tallennetaan tähän muuttujaan




//Kiihtyvyysanturi


int xPin = 1;


int yPin = 2;


int zPin = 3;


int arvo;


int vanhaArvo;


int laskuri = 0;


 
//Ledit


const int ledPin = 9;





//Askelmoottorit


const int stepsPerRevolution = 200;


Stepper myStepper(stepsPerRevolution, 2,4,3,5);           


int digitalPin1 = 7;


int digitalPin2 = 8;


 


void setup(){


 


    pinMode(ledPin, OUTPUT);


    pinMode(7, INPUT);


    pinMode(8, INPUT); 


    // set the speed at 60 rpm:


    myStepper.setSpeed(60);


    // initialize the serial port:


    Serial.begin(9600);


}


 


void loop() {


    valovastus();


    stepperi();


}


 


void valovastus() {


    arvo1 = analogRead(analogInput1);


    arvo2 = analogRead(analogInput2);


    keskiarvo = (arvo1+arvo2)/2;


    // Tulostetaan saalis sarjaporttiin:


    Serial.print("Jännite = " );


    Serial.println(keskiarvo); // "Serial.println" komento vaihtaa riviä tulostuksen jälkeen


    if (keskiarvo<500) {


        kiihtyvyysanturi();


    }


    else if (keskiarvo>500) {


        digitalWrite(ledPin, LOW);


    }


}


 


void kiihtyvyysanturi() {


    int xRead = analogRead(xPin);


    int yRead = analogRead(yPin);


    int zRead = analogRead(zPin);


    int arvo = xRead+yRead+zRead;


 


    Serial.print("x: ");


    Serial.print(xRead);


    Serial.print(" | y: ");


    Serial.print(yRead);


    Serial.print(" | z: ");


    Serial.println(zRead);


    Serial.print("arvo ");


    Serial.println(arvo);


 


    delay(3);


    if (laskuri < 1) {


        if(abs(arvo-vanhaArvo) > 100) { //abs on itseisarvo, joka tekee laskun miinusmerkkisestä luvusta plusmerkkisen. >100 kynnysarvo liikkelle, mikä määrää syttyykö valo vai ei.


            digitalWrite(ledPin, HIGH); // sytyttää ledin.        


            laskuri = 100; // laskuri määritetään arvoksi 100, jolloin ledit ovat päällä 100 silmukan kierrosta. 


        }


        else {


            digitalWrite(ledPin, LOW); //sammuttaa ledit.           


            laskuri = 0; //laskuri määritetään arvoksi 0.


        }


    }


    laskuri--; //vähentää laskurin arvosta 1.


    vanhaArvo = arvo; //tallennetaan arvo seuraavan kierroksen arvoksi.


}


 


void stepperi() {


    if (digitalRead(digitalPin1)==HIGH) {


        // step one revolution  in one direction:


        Serial.println("clockwise");


        myStepper.step(50);


        delay(5);


    }


    if (digitalRead(digitalPin2)==HIGH) { 


        // step one revolution in the other direction:


        Serial.println("counterclockwise");


        myStepper.step(-50);


        delay(5);


    }


}