コンテンツにスキップ

マイコンにふれる#

image

マイコンって?#

先程から登場していましたがマイコンとは通称マイクロコンピュータで電気機器を制御するための小さなコンピュータです。 例えばボタンを押した回数によって吹く風の強さを変えれる扇風機があるなら「ボタンを押すという入力を受けて、モーターを回す回転数を変える」という操作をしているのがマイコンにあたると思います。

そして今回使うマイコンが上に写真があるArduinoUnoR3です。 このようなマイコンにプログラムを書き込むことで色々なことができます。

プログラムを始める#

プログラムを書き込む#

マイコンにおけるプログラムはただパソコンに打ち込んで終わるわけではなく、マイコンに書いたプログラムを書き込む必要があります。ここではプログラム本文には何も手をつけないで、空白のプログラムを書き込むことができるかをチェックします。

ボードの設定を行う

ArduinoIDEが開けているなら、左上の方に「File」や「Edit」というのがならんでいて、その下にチェックマーク、右矢印、三角形のマークがあると思います。 そして注目してほしいのが以下の写真の右下部分です。

image

写真では「uPesy ESP32 WroomDe...」と書いていますが、おそらく「UnKnown」みたいなことが書いてあると思います。

「UnKnown」の右の下を向いた三角形をクリックすると、もしマイコンをUSBでつないているなら、「COM~」のように出ていると思います。それを選択し、検索欄のようなものが出たら以下のように検索してください。

image

自分の使いたいボードの名前に応じて選択してください。(例:Arduino nano、Arduino Uno等)

Let's 書き込み

ボードの設定ができてるかつ、ボードがささっている状態だと、ボードの名前のところが太字になっているはずです。それが確認できたら右矢印のボタンを押せば書き込みすることができます。

関数について#

詳しくは調べてほしいのですが、これからでる「関数」とはある数字を引数として、なにかをするまたはなにかを結果として返すものです。 たとえば数学でいう関数は下のような式が合った時に、xという引数に数字を入れるとそれを2倍にした数がy、つまり関数の結果としてでます。

y = 2x

上の式をC言語にして使用するなら以下のような感じです。

int nibai(int x)
{
    return 2 * x
}

// メインコード内で
int a = 4;
int b = nibai(a); // b = 8

C言語における関数とは

関数の型:今回だと整数型int、他にも実数型のdouble、floatなどがあります

関数名:今回だとnibai

引数:nibaiのあとのカッコ内に書きます。2つ以上あっても大丈夫です。今回だとint xにあたります。

まとめると、整数型が関数の結果なので関数の前にint、そして関数に使う引数も整数型なのでintとついてるのですね。

このような関数は自分たちで作ることもできますが、用意されている物のもあるのでどんどん活用していきましょう。

Hello World#

よく使う画面表示するプログラムです。Arduinoでは大きく2つの関数があり、まずsetup関数、これは起動時の最初の一回だけ動く関数です。 ここでは関数名の前にvoidと書いてますね。voidとは空を意味していてこの関数は何も結果を返さないよということです。

void setup()
{
    Serial.begin(115200);
}
Arduinoではシリアルというのを用いてマイコン側からつながっているPCに画面表示します。上記のように通信速度を指定して初期化します。

そしてもう一つの関数がloop関数です。名前の通り、setupのあとに何回も繰り返し動く部分ですね。

void loop()
{
    Serial.println("Hello World");
    delay(500);
}
2つの関数がでてきました。println関数はシリアルに含まれている文字列を表示する関数です。「"」で囲まれた部分が文字列となるのですね。 そしてその後のdelayとはプログラムを停止して待つような関数で、ここでは0.5秒待つようになってます。

それではプログラムを実行してみてください。

マイコンのGPIO#

image

マイコンにはたくさんの足(ピン)が生えており、そのうちの大体を占めるのがGPIO(General Purpose Input/Output(ジェネラル・パーパス・インプット/アウトプット))です。これらは汎用I/Oとも呼ばれ、そこにかかる電圧を読み取ったり、電圧を出力したりできるわけです。まずは簡単にLEDを点灯するコードを見ていきましょう。

void setup()
{
    pinMode(D2, OUTPUT);
}

void loop()
{
    digitalWrite(D2, HIGH);
    delay(500);
    digitalWrite(D2, LOW);
    delay(500);
}

setup関数では使うピンの設定を行っています。 pinModeという関数では1つ目の引数でどのピンを、2つ目の引数でどうしたいかを記述しています。ここではT2というピン(上の対応表を見ればわかるのですが、実際にはD2のことですね)を出力用のピンとして設定しています。

loop関数内ではdigitalWriteという関数が使われていますね。これは指定したピンにHIGHの場合は5V、LOWのときには0Vを出力します。 これでD2のピンから5Vが出たり出なかったりするためLEDをチカチカできるというわけです。

LEDを調光する#

先程はLEDを光らすことができました。ですが実際にモーターを回す際には0 or 100というよりはその間の力も段階的に出力できたほうがなめらかに走れそうですよね。 そこで使うのがアナログ出力です。

void setup()
{
    pinMode(D2, OUTPUT)
}

void loop()
{
    // 0 ~ 256
    int power = 128;

    analogWrite(D2, power);
    delay(500);
    analogWrite(D2, 0);
    delay(500);
}
先程digitalWriteと書いていたところがanalogWriteに変わっているだけです。また、2つ目の引数に変化があってHIGHかLOWかを入れるのではなく0~255で出力の割合を指定することができます。これによってLEDの光る強さを調整することができます。

image ここでPWMについて軽く説明をいれておきます。Pulse Width Modulationというもので一定の周期のもとでスイッチのオンとオフを繰り返し出力を調整します。上の図の赤い線ではオンが6割オフが4割になるようにすることで出力は5Vの60パーになります。

話をもどして、ledcAttachPinでは作成したチャンネルをピンに割り当てます。先ほどと同じD2です。 loop関数内ではチカチカしたときと近い雰囲気ですね。256段階あるうちの128、つまり50パーという出力を変数で用意しておきました。 その次にledcWriteにより指定のチャンネルに指定のパワーを出力しました。その後、同じチャンネルを出力0にしてさっきとは強さの違うチカチカを実装することができました。

チュートリアル一覧に戻る