Tässä ensimmäinen kokeiluni, servomoottorin ohjaaminen potentiometrillä. Simulaation käynnistämisen jälkeen tartu hiirellä potentiometriin ja liikuttele sitä niin saat servon kääntymään. Jos haluat tutkia koodia, sen saa näkyviin valitsemalla "Code".
Tinkercadillä piirretty kytkentäkuva servomoottorin ohjaamisesta potentiometrillä |
Tinkercadillä voi myös ohjelmoida ja ladata koodin ArduinoCC-tiedostona |
Tämän näköistä koodia tästä generoitui:
#include <Servo.h>
Servo servo_3;
void setup()
{
pinMode(A0, INPUT);
servo_3.attach(3);
}
void loop()
{
servo_3.write(map(analogRead(A0), 0, 1023, 0, 180));
delay(100); // Wait for 100 millisecond(s)
}
Tässä vielä kuva kytkennästä:
Arduino kytkettynä potentiometriin ja servomoottorin |
Vastaava toiminta micro:bit:illä ei toiminut aivan näin hyvin. Simulaatioon ei voi itse lisätä komponentteja, servo kyllä ilmestyy siihen automaattisesti kun koodiin valitsee servoblokin, potentiometriä ei voi lisätä mutta sitä voi mallintaa klikkailemalla P1-pinniä. Ensimmäinen versio koodista ei toiminut. Ilmeisesti vika on siinä, että koska JSBlocks ei tue liukulukuja jakolasku pyöristyy nollaksi...
Hyvältä näyttää mutta ei toimi... |
Kun laskujärjestyksen muuttaa niin, että kertolasku suoritetaan ensin, homma lähtee toimimaan. Aika kinkkistä...
Tämä versio koodista toimii |
Tässä linkki projektiin. Microbit:iin ladattuna koodi ei kuitenkaan toimi yhtä hyvin kuin Arduino:ssa, servo pörisi ja nyki epäilyttävästi. Tämä johtuu micro:bit:in alemmasta käyttöjännitteestä (Arduino 5V, micro:bit 3,3V).
Tässä vielä vertailun vuoksi sama koodi ohjelmoituna C++:lla ja mbed:llä:
#include "MicroBit.h"
MicroBit uBit;
int main()
{
uBit.init();
while(1){
int potikka = uBit.io.P1.getAnalogValue(); //P1: 0-1024
int moottori = (int(potikka/1024.0*180));
uBit.io.P0.setAnalogValue(moottori); //P0: 0-180
uBit.sleep(10);
}
}
Myös mbed:llä ohjelmoidessa kokonaislukujen jakolaskun kanssa pitää olla tarkkana ja muistaa muuttaa ainakin toinen liukuluvuksi (vrt. 1024.0 yllä olevassa koodissa) ettei tulos pyöristy tässäkin nollaan.
Tämän kytkennän sai toimimaan ilman kondensaattoria Arduinon kanssa mutta micro:bit:illä ei (moottori jämähti välillä paikoilleen). Kondensaattorin tarkoitus on tässä tasailla moottorin käynnistämisen aiheuttamia virtapiikkejä, ja ilmeisesti alemmalla käyttöjännitteellä tasaaminen auttaa pitämään moottorin käynnissä paremmin. micro:bit:in kanssa pitäisi ilmeisestikin käyttää ulkoista jännitelähdettä servolle, ja se taas johtaisi paljon monimutkaisempaan kytkentään...
micro:bit kytkettynä potentiometriin ja servomoottoriin |