Joo, eli joku aika sitten suunnittelin täällä parkkikiekkoa joka asettuu itsestään oikeaan aikaan kun auton sytytysvirta katkaistaan, päädyin opettelemaan arduinoa. Ensimmäinen versioni tulee olemaan todella yksinkertainen ja järjetön, mutta tarkoitus onkin vain opetella arduinoa asteittain.
Servoa ohjataan eri mittaisilla pulsseilla jotka asettavat sen tiettyyn kulmaan riippuen pulssin pituudesta. Arduino-ohjelmani on erittäin yksinkertainen joka antaa servolle uutta pulssia aina 30min välein.
Kun auto on parkissa, servomoottorin virta katkaistaan eikä kiekko pääse liikkumaan vaikka se saakin pulssia, mutta kun auto otetaan ajoon niin pulssi kääntää kiekon taas oikeaan aikaan.
Tähän ohjelman tekemiseen liittyen olisi pieni kysymys, ohjelmaan looppi-osuus näyttäisi kutakuinkin tältä:
void loop()
{
pulseServo(servoPin, 600);
delay (1800000); // 30min
pulseServo(servoPin, 800);
delay (1800000); // 30min
pulseServo(servoPin, 1000);
//…
}
Eli uusi pulssi tulee 30min välein, mutta tuo ohjelmani antaa pulssin vain yhden kerran, auton sytytysvirta voidaan kytkeä koska vain, joten tuota samaa pulssia pitäisi tulla sen koko 30min ajan, esim 20mS välein tai parin sekunnin välein niin että kiekko päivittyy käytännössä heti.
Osaisiko kukaan jeesata kuinka ohjelmaani pitäisi muuttaa? jotta pulssia annettaisiin kokoajan?
Servoa ohjataan eri mittaisilla pulsseilla jotka asettavat sen tiettyyn kulmaan riippuen pulssin pituudesta. Arduino-ohjelmani on erittäin yksinkertainen joka antaa servolle uutta pulssia aina 30min välein.
Kun auto on parkissa, servomoottorin virta katkaistaan eikä kiekko pääse liikkumaan vaikka se saakin pulssia, mutta kun auto otetaan ajoon niin pulssi kääntää kiekon taas oikeaan aikaan.
Tähän ohjelman tekemiseen liittyen olisi pieni kysymys, ohjelmaan looppi-osuus näyttäisi kutakuinkin tältä:
void loop()
{
pulseServo(servoPin, 600);
delay (1800000); // 30min
pulseServo(servoPin, 800);
delay (1800000); // 30min
pulseServo(servoPin, 1000);
//…
}
Eli uusi pulssi tulee 30min välein, mutta tuo ohjelmani antaa pulssin vain yhden kerran, auton sytytysvirta voidaan kytkeä koska vain, joten tuota samaa pulssia pitäisi tulla sen koko 30min ajan, esim 20mS välein tai parin sekunnin välein niin että kiekko päivittyy käytännössä heti.
Osaisiko kukaan jeesata kuinka ohjelmaani pitäisi muuttaa? jotta pulssia annettaisiin kokoajan?
Vastaukset 2
Vanhimmat
Konsepti ei oikein taida olla vieä aivan valmis. Servo ovat hiukan erilaisia ja jotkut tarvitsevat niitä pulseja jatkuvasti. Servo yleensä ei liiku ilman pulssia, mutta servo ei ole vakaassa tilassa ilman pulssia. Servo yleensä ei käänny kuin max 180 astetta. poikkeyksen tekee purjevene servot, mutta niissä on tarkkuus jaettu kierrosten mukaan. Eli pulssinleveys 1ms-2ms on koko liike alue esim. neljä kierrosta. Siis 1ms toinen laita ja 2ms toinen.
Arduinossa on niitä sisäänmenoja useita joten niistä voisi laittaa binäärisesti tai oikein geaykoodilla absoluutti tieto asennosta. puolentunnin resoluutioon riittää viisibittiä. Pyöritys koneisto servosta, CD-aseman raadosta tai jostakin josta saa pientä liikettä aikaan.
Kiitos vastauksestasi.
Juuri näin itsekin ymmärsin että servoa pitää virkistää tiheään tahtiin että asento säilyy. Olen perusteita opetellut ledin vilkutuskytkennällä ja servon perusteita kirjasta Sulautetut. Sulautetut kirja kertoo RC-servon toimivan siten että tietyn mittainen pulssi kääntää sen aina tiettyyn astelukuun.
Yritän ensisijaisesti ostaa 360astetta pyörivän servon, mutta jos en löydä niin yritän avata servon ja purkaa kierrosrajoittimen.
oikeastaan itse ongelma on juuri se että en osaa tehdä ohjelmaa joka virkistää servoa esim. 20ms välein samalla pulssilla ja 30min päästä alkaa virkistämään servoa uudella erimittaisella pulssilla.
Tai osaisin ehkä silleen että jaan 30min 20ms jaksoihin ja alan syöttämään uutta pulssia kun 30min on täynnä mutta ohjelmaa tulisi kilometritolkulla.