MATLAB/SimulinkとArduinoによるLED点滅制御(Lチカ)に挑戦する

| 3 min read
Author: shuichi-takatsu shuichi-takatsuの画像

はじめに:SimulinkとArduinoで始める「Lチカ」

#

「Lチカ」(LEDの点滅) は、ハードウェア制御の入門として最も基本的な実験です。
本記事では、MATLAB/SimulinkとArduinoを連携させ、LEDを点滅させるプログラムの作成方法を解説します。


開発環境の準備

#
  • ソフトウェア
    • MATLAB(バージョン:R2025a)
    • Simulink(バージョン:25.1)
  • アプリ(for Simulink)
    • Simulink Support Package for Arduino Hardware(バージョン:25.1.0)
  • ハードウェア
    • Arduino Uno/Nano(または互換機)
    • USBケーブル(PCとArduinoの通信用)
  • (オプション)
    • LED + 抵抗(330Ω程度)
    • ブレッドボード、ジャンパワイヤ

環境構築の詳細手順:

#

1. MATLAB と Simulink をインストール

  • MathWorks の公式サイトからインストーラをダウンロードします
  • ライセンス認証を行い、MATLAB と Simulink をインストールします
  • インストール時に「Simulink」コンポーネントを忘れずにチェックします

2. Arduino Support Package を導入

  • MATLAB を起動 → メニューから 「アドオン」 → 「ハードウェアサポートパッケージの入手」 を選択します(アドオンエクスプローラーが起動します)

  • 検索ボックスで 「Arduino」 と入力し、Simulink Support Package for Arduino Hardware を選択します

  • Install をクリックし、パッケージを導入します

  • 導入完了後、Simulinkライブラリに「Simulink Support Package for Arduino Hardware」のブロックが追加されます

3. Arduino のシリアル通信確認

  • ArduinoボードをUSBでPCに接続すると、自動的にドライバが認識されます
  • 認識されない場合は、デバイスマネージャ(Windowsの場合)や ls /dev/tty*(Mac/Linuxの場合)でポートを確認します(※下図はCOM7に接続した例)

回路の接続

#

Arduino の 13番ピン と GND に LED + 抵抗を接続します。
(内蔵LEDを使う場合は外部配線は不要です)

回路図イメージ:

(Arduino 13) ----[抵抗330Ω]----|>|(LED)---- (GND)

Simulinkモデルの作成

#

新規モデルを作成

#
  1. Simulink を起動し、新しい「空のモデル」を作成します

  2. ブロックライブラリから以下を配置します:

    • Pulse Generator(パルス波形を生成)

    • Digital Output(Arduinoのピン出力):このブロックは「Simulink Support Package for Arduino Hardware」に含まれています。

    • 配置したブロックを接続します:

パラメータ設定

#

先ほど配置したブロックのパラメータを設定します。

  • Pulse Generator

    • パルスタイプ:「サンプルベース」
    • 時間:「シミュレーション時間を使用」
    • 振幅:1
    • 周期(サンプル数):1000
    • パルス幅(サンプル数):500
    • 位相遅延(サンプル数):0
    • サンプル時間:0.001
    • ベクトルパラメータを1次元として解釈:チェックON
  • Digital Output

    • Pin番号:13
Information

サンプル時間が「0.001」(秒)で、サンプル周期が「1000」なので、周期(時間)は「1(秒)」になります。
パルス幅を「500」にしているので、この設定では500ミリ秒毎にLEDがON/OFFを繰り返します。

モデル設定

#

ハードウェア実行を以下のように設定します。
(今回、Arduino Nano互換機を使用しました。互換機のブートローダーが旧版だったため、アプリケーションダウンロードのボーレートが低くなっています)

  • ハードウェア実行

パルスジェネレータの出力確認

#

Arduinoにアプリケーションをアップロードする前に、パルスが正しく出力されているか確認します。

  1. 信号のログを設定します(接続線をクリックし、「信号のログ」を設定)

    信号のログが設定されたことをアイコンで確認できます

  2. シミュレーションを実行します

  3. データインスペクタでパルス波形を確認できます


監視と調整(USBポート経由での実行確認)

#

USB経由でArduino Nanoにプログラムを転送し、正しくプログラムが動くか確認します。

  1. ハードウェアタブから「監視と調整」を実行します(終了時間には「inf」を設定します。停止操作をするまで実行を続けます)

  2. Arduino の内蔵LEDが1秒周期で点滅すればモデルは正しく実行されています


Arduinoへの書き込みと実行

#

プログラムをArduinoにアップロードし、自動実行できるようにします。

  1. Simulink の「ビルド、展開起動」を実行します

  2. コンパイル → Arduinoへ転送
     転送が成功すると、以下のログが出力されます。
     LEDが1秒ごとに点滅すれば、転送は成功です。


実行結果と考察

#
  • わずか2つのブロックを接続するだけで、簡単にLED点滅プログラムを作成できました。
  • 周期を短くすると「高速点滅」します(例えば、周期を100、パルス幅を50 など)。
  • パルス幅(Duty比)を変更することで、明るさの制御(PWMの基本) にも応用できます。

まとめ

#
  • MATLAB/SimulinkとArduinoを組み合わせることで、ブロック線図ベースで直感的に制御プログラムを開発できる ことがわかりました。
  • LED点滅は単純な例ですが、PWM制御・センサ入力・モータ制御などへ拡張可能です。

ただLEDを点滅させるだけだったら、Arduino IDEやPlatformIOなどの開発環境でプログラミングした方が早いと思いますが、今後複雑なプログラミングをしていく上で、MATLAB/SimulinkはMBD開発の強力なツールになると感じました。
今後は、自作ライブラリを作ったり、高度な周辺機器をつないで細かいプログラミングに挑戦していきたいと思います。


豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。