U-Box

Useless box on laatikko jonka kansi on jaettu kahteen palaan. Toisessa osassa on kytkin, jota painaessa toisen puoliskon alta nousee vipu, joka työntää kytkimen takaisin ja palaa takaisin. Äh. Kattokaa tästä.

IMG_0076Niitä hetkiä, kun vannesaha ois kiva.

Boksin palaset

Yök vaneria. Kuka siitä kehtaa edes mitään tehdä? Menköön tämän kerran. Liitoksista tuli melkein siedettävät. Pitkästä aikaa tuli käytettyä jotain muuta kun jiiriä.

IMG_0099

Vartta ohjataan pikkuisella servolla. Servojen ohjaaminen on siitä helppoa, että ne eivät tarvitse mitään kummoista elektroniikkaa ympärille, kuten vaikka H-siltaa. Servo myöskin tietää aina oman sijaintinsa potikan ansiosta (kts. kuva).

Servo timingServo asetetaan oikeaan sijaintiinsa sopivan mittaisilla pulsseilla ja aika ajoin pitää päivittää sijainti. Koska pulssi on mikrosekunteja ja servo ei ihan niin nopeasti käänny.

IMG_0080Välillä joutuu turvautumaan kynään ja paperiin. Varsi on pätkä ympyrän kehästä ja servon akseli on keskipisteessä. Jolloin kehänpätkä pyörii nätisti ympyrärataa.

IMG_0081

Osille valkoinen petsivaha pinta.

IMG_0083Tälläisellä härpäkkeellä servo kiinitetään laatikkoon.

IMG_0092Toinen yök. Reikälevy, ei hitto. Ärsyttävin asia maailmassa. No ei tähän hätään ihan levyjä tilailla ja kun itse tehdytkin ovat vähän niin ja näin. 5V regulaattori, jee. Ei tule ainakaan kylmä. Sopivaan hakkuriin ei löytynyt osia ja meneepä tuo ainakin pienen tilaan. Massiivinen atmega48. Koska oli ainut piiri missä on ADC ja olisi sille ollut yksi käyttötarkoitus, joka kuitenkin nyt jäi. Ehkä joskus. Et joku attiny13 olisi riittänyt.

IMG_0085Sinnehän ne kaikki mahtuu.

DDRB |= (1 << PB0); //Signal pin of servo
PORTD |= (1 << PD3); //Pull-up

EIMSK |= (1 << INT1); //Enable external interrupt (int1), falling edge

set_sleep_mode(SLEEP_MODE_PWR_DOWN);

 sei();

Alustukset. Servon signaalipinni outputiksi ja kytkin pinnin sisäinen pull-up vastus päälle. Kytkimen muutosta haistellaan int1 keskeytykessä. Kytkin vetää pinnin maihin.

void turn(uint8_t a) {
    PORTB &= (1 << PB0); //Clear signal pin

    for(uint8_t i = 0; i < 40; i++){
        _delay_ms(7);

        PORTB ^= 1 << 0; //High
        for(uint8_t d = 0; d < a; d++){
            _delay_us(10);
        }
        PORTB ^= 1 << 0; //Slow
    }
}

Ei mitenkään nätti kääntämisfunktio. Delayt eivät ole ihan tarkoitettu tähän. Ajaa asiansa kuiteskin. Tarpeeksi tarkka ja mitään muuta ei tarvitse taustalla tehdä. Skoopilla  tarkastaessa yllätyin jopa kuinka tarkkoja nuo olivat.

ISR (INT1_vect)
{
    close();
    goSleep = 1;
}

Keskeytys kutsuu vain fuktiota, joka arpoo “sulkemis tavan”.

while(1){
    if(goSleep) {
        goSleep = 0;
        sleep_mode();
    }
}

Main-loop vain haistelee milloin voidaan mennä nukkumaan.

This entry was posted in Jotain aivan muuta and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *