目次 このページのソースコードを表示

Arduino

公開日: 更新日:

このページではArduinoをもちいた電子回路,プログラムなどに関する情報を扱います.

  • グラフィック液晶に関する情報をあつかいます. 扱うグラフィック液晶は’SG12864ASLB-GB’です.

    グラフィック液晶外観
    グラフィック液晶外観
  • Arduinoを用いた電子工作でよく使うものの一つにスイッチがあります. 一つか二つのスイッチを使うのなら問題はないのですが、大量のスイッチを用いた電子工作となるとスイッチ一つに一つのピンを消費するわけにはいかなくなります.

    例えば、ちょっとしたゲーム機を作るとしましょう. 十字キー、ABボタンなどで少なくとも6つぐらいのスイッチが必要となります. またグラフィック液晶との接続に13ピンほど使います.ピンが足りません.一つのピンで複数のスイッチ入力を読み取る必要があります.

    また別の問題として仮に上の問題を解決―例えば抵抗による分圧方法によって解決―したとしても同時入力ができない問題があります. ゲーム機を作るとしてボタンの同時入力ができないのはかなり大きな問題でしょう.

    このページではこれらの問題を解決する一つの方法を説明します。

    このページで紹介する方法で以下のことができます。

    • 一ピンあたりボタン六個の入力が可能
    • 同時入力も可能
  • Arduinoで電子工作をしていると音を鳴らしたくなります. その鳴る音は電子音のようなピーピー音ではなく, ゲーム機でなっているような音―むしろ音楽といった方がいいでしょう―にしたいです.

    このページではArduinoを用いて音楽を鳴らすことができる’MediaPalyer’を紹介します. 外部シールドを使わないで音楽を鳴らすことができます.

    ただし以下の環境が必要です.

    対応環境

    メインのArduino

    下の音楽再生用のArduinoをコントロールするためのものです.

    音楽を再生するためのArduino

    MediaPlayerは音楽を再生するためのArduinoを必要とします. これはつまり音楽を再生する処理とそのほかのメイン処理を分けるということになります. こうすることで, Arduinoは音楽を再生するための処理に集中することができます.

    対応しているArduinoについて

    • 動作周波数: 8MHz, 16MHz

    microSD

    音楽ファイルを保存するために必要です

    音楽ファイル

    • 対応ファイル形式: Wave
    • サンプリング周波数: 32KHz, 16KHz, 8KHz
    • 量子化精度: 8bit
  • Arduinoにプログラムを書き込むにはパソコンが必要です. パソコンでプログラムを書きArduinoをパソコンに接続し、スケッチをマイコンボードに書き込みます. 別のプログラムを実行したいとき、またパソコンに接続してスケッチを書き込みます。これは大変労力かかると同時にパソコンなしではプログラムの変更は不可能です.

    このページでは、それを解決する一つの方法を提案します。それは, Arduinoが別のArduinoへスケッチを書き込むということです. 詳しく言うと, スケッチをコンパイルした後に作成されるHexFileをSDカードに保存し, そのHexFileをある一つのArduinoが読み込み別のArduinoへスケッチを書き込むということです.

    このページで紹介する方法で以下のことができます。

    • ArduinoでArduinoにスケッチ書き込み
    • 他機能の組み合わせで応用可能

    "他機能の組み合わせで応用可能"の例ですが, ある端末を作ったとします。その端末にはグラフィック液晶ディスプレイ、コントローラーが付いています。使用者にグラフィック液晶でスケッチの選択をさせることで、一つの端末で複数のプログラムを実行することができます; パソコンでいちいちスケッチを書き込む必要はありません。

    対応環境

    ただし、以下の環境が必要です。

    スケッチを書き込まれるArduinoにはブートローダー"optiboot"がかきこまれていること

    optibootがかきこまれているArduinoは"Arduino UNO"です。このサイトでもこれを使用しています。

    スケッチを書き込むArduinoは16MHzで動作していること

    optibootとの通信には115200bpsのシリアル通信が用いられています。8MHzなどの低周波数で動作するArduinoではこの通信がうまくいきません。

  • Arduinoで何か作品を作っているとき, その作品に音を鳴らせたい時があります. 本格的に音楽を鳴らすのではなく, 効果音としてちょこっと入れたいという意味です. 例えば, 簡単な早押しゲームを作るとして, ボタンを押したときの効果音を入れたいという時です. ですが, この効果音を入れたいために別のArduinoを用意するのはコストの点で好ましくありません. -オーディオプレイヤーのように音楽を鳴らしたい時は[Arduino/Arduinoで音楽を鳴らす]を参照してください.-

    ここで, このMelodyPlayerがあります. このMelodyPlayerは新たにArduinoを用意する必要はありません. また, 音楽再生処理はバックグラウンドで行っているためメインプログラムに何も影響を与えません. メロディーを流しながら何か他の処理―LED点灯, ボタン入力など―をすることができます. あなたがすでに書いたスケッチのコードに一行"Play(’Melody名’)"と入れるだけでメロディーが再生されます.

    MelodyPlayerができるのは以下の通りです.

    • インクルードするだけで簡単にメロディー再生
    • 簡単にメロディーを追加

    ただしMelodyPlayerはピン3,9,10,11のPWM出力を妨げます.

  • Arduinoでグラフィック液晶やドットマトリックスを操作することは定番です. またそれらを操作するライブラリも豊富です. ただ, それらに共通してある2Dに何かを描画するという機能は多くの場合独立していません. この機能を独立させることで, いかなる表示機においても2Dに対する描画法を統一できます. 例えば, ドットマトリックスで描画していたものをグラフィック液晶に簡単に移植できます. メンテナンスもしやすくなるでしょう. 描画の機能のパフォーマンスが向上すれば, その恩恵はその機能を使っているすべての表示機にも与えられます.

    キャンバスとは, Arduinoで2Dグラフィックを扱う時に便利なライブラリです. キャンバスはメモリ上にある描画空間に対して処理を行います―例えば, 点を打つ, 線を引くなど―.

    キャンバス単体で用いることはほとんどありません. キャンバスと実際に目に見えるものに描画するものとを組み合わせて使用します.

    このキャンバスの特徴は以下の通りです.

    • 応用しやすい関数セット
    • 白紙のキャンバスに文字、画像、直線などを描くような操作
    • 高い移植性
    • 高い描画効率

    キャンバスを強化, 改良, 何でもしてください(’ω’)ノ

  • ここには, Arduinoを用いた作品を紹介します.

  • OSは日常のあらゆる場所で目にします. パソコンには必ずと言っていいほどOSが走っており, 携帯, ゲーム機などにもOSが走っております. このような普段よく使うOSですが, そのOSの仕組みを分かっていても, 実際どのように作るのかはよく知られておらず気になります.

    このページでは, 実際にArduinoで動くOSを作成することで, OSの理解を深めます. 使用するプログラミング言語はC言語です. (作成といいましても, すでに在りますFreeRTOSから必要な機能を抜き出し, Arduinoで動くようにしました.) なお, 今回扱うOSは汎用OSではなくリアルタイムOS(RTOS)と呼ばれるものです. 汎用OSとは, すべてのタスクに等しく優先度が与えられますが, RTOSではタスクごとに優先度を設定できます.

    話の進め方ですが, 今回のOS製作では実装に重きを置くため, コードを中心に話を進めていきます. 各コードごとに簡単な説明を行い, その中で特に重要な部分―OSの仕組みに深くかかわる部分―もしくはさらに詳しい説明については別ページで行います. これら別ページ―詳細ページ―は子コンテンツである"仕組み"にまとめられています.

    話の流れは次のとおりです.

    • RTOSとは
    • 目標と使い方
    • 準備
    • ファイル構成
    • スクリプト
    • ボードの設定
    • 仕組み

    対応状況

    • Arduino UNO
    • Arduino Mega

    動作確認済み環境

    • Arduino IDE 1.8.10
    • Arduino AVR Boards 1.8.1
「https://contentsviewer.work/Master/Arduino/Arduino」から取得