|
WebIO は、MIDI通信を用いてブラウザからIO制御する仕組みです。こちらを先にご覧ください。
このページは、MIDIデバイス(マイコン)として Leonardo, Micro または XIAO M0 をUSB接続、または ATOM lite をBluetooth接続した時の、さまざまな使用例を紹介しています。ATOMの場合は、スマホの操作で利用します。ATOMに内蔵されているLEDやスイッチを使う例もいくつかあるので、その場合は外部に何も接続する必要はありません。なお、このページには所々に
のような箇所があります。選択したボードに対応した説明が表示されます。
ここではブレッドボードを使いません。
ここでは下図左のブレッドボード(EIC-301)を使います。ボードの内部は下図右のように接続されています。
| (外観) | (内部の接続) |
|---|---|
![]() | ![]() |
ブレッドボードにマイコンを差し込み、GNDと3V3の端子をブレッドボードの電源ラインに接続します。USBケーブルをパソコンに接続すると、電源(3.3V)がパソコンから供給されます。マイコンにピンの番号を書いたラベルを貼っておくことをお勧めします。
| (回路図) | (実体配線図) |
|---|---|
![]() |
![]() |
初めてブレッドボードを使う場合は、練習としてLEDと抵抗を下図左のように接続して点灯を確認しましょう。電源はパソコンからUSB端子を通じて供給され、電流の流れは下図右のようになります。ブレッドボードの内部の結線も含めて「電流が流れる経路」を意識することが重要です。
| (回路図) | (実体配線図) | (電流の流れ) |
|---|---|---|
![]() |
![]() |
![]() |
(練習) ブレッドボードで下記の回路を組み立て、スイッチを押すとLEDが点灯することを確認しなさい。

ここでは下図左のブレッドボード(EIC-301)を使います。ボードの内部は下図右のように接続されています。
| (外観) | (内部の接続) |
|---|---|
![]() | ![]() |
ブレッドボードにマイコンを差し込み、GNDと3V3の端子をブレッドボードの電源ラインに接続します。USBケーブルをパソコンに接続すると、電源(3.3V)がパソコンから供給されます。マイコンにピンの番号を書いたラベルを貼っておくことをお勧めします。
| (回路図) | (実体配線図) |
|---|---|
![]() |
![]() |
初めてブレッドボードを使う場合は、練習としてLEDと抵抗を下図左のように接続して点灯を確認しましょう。電源はパソコンからUSB端子を通じて供給され、電流の流れは下図右のようになります。ブレッドボードの内部の結線も含めて「電流が流れる経路」を意識することが重要です。
| (回路図) | (実体配線図) | (電流の流れ) |
|---|---|---|
![]() |
![]() |
![]() |
(練習) ブレッドボードで下記の回路を組み立て、スイッチを押すとLEDが点灯することを確認しなさい。

ここではブレッドボードを使いません。
上のzipファイルをダウンロードして解凍してください。
のような表示が現れます。これはSeeed XIAO M0という名前のMIDIデバイスが接続されていることを表しています。USB接続のMIDIデバイスが無い場合は、
のような表示になるので、ボタンを押してBluetooth MIDIのデバイスと接続します(詳しくはこちら)。
なお、いつからか、ChromeでMIDIデバイスを扱うサイトを表示する時に、下記のように許可が求められるようになったので、「許可する」をクリックします。

上のコマンド入力欄にJavaScriptの命令文を入力し、実行ボタンを押すかEnterキーを押すと、その命令が実行されます。次のように入力してみてください。
これは、「100をアラート表示しなさい」というJavaScriptの「命令」を表しています。
以下のふたつめの例では文字列と数値((100+200)の演算結果)の連接演算(+)になっていて、数値(演算結果)が文字列に変換されて文字列の連接演算が行われます。
webio2.inoを書き込んだLEONARDOをパソコンにUSB接続します。
ブラウザはWindows版ChromeまたはEdgeを使います
webio2.inoを書き込んだMICROをパソコンにUSB接続します。
ブラウザはWindows版ChromeまたはEdgeを使います
webio2.inoを書き込んだXIAO M0をパソコンにUSB接続します。
ブラウザはWindows版ChromeまたはEdgeを使います
webio2.inoを書き込んだATOM liteをパソコンまたはスマホにBluetooth接続します。
ブラウザはWindows版Chromeまたは Edge、Android版Chromeを使います。
ブラウザからのコマンド操作でLEDを点灯・消灯してみます。
LEDはD9ピンに接続します。LEONARDOの場合は内蔵LED(D13ピン)も利用できます。
LEDはD9ピンに接続します。
LEDはD9ピンに接続します。XIAOの場合は内蔵LED(D13ピン)も利用できます。
| (回路図) | (実体配線図) |
|---|---|
![]() |
![]() |
ATOM内蔵のLED(27ピン)を使います。このピン番号はPIN_LEDやLED_BUILTINで参照できます(こちらを参照)。

「digitalWrite」というコマンドでLEDに高い電圧を出力したり低い電圧を出力したりすることができます。上のコマンド入力欄に
LEDが点灯する時の電流の流れは下図のようになります。下図中のスイッチをJavaScriptの命令で切り替えていると考えるといいでしょう。

「digitalWrite()」や「 D9 D9 D9 D9 」「HIGH」「LOW」はwebio2.jsの中で定義されています(詳しくはこちら)。
(練習)「digitalWrite(D9,1)」および「digitalWrite(D9,0)」を実行した時のD9ピンの電圧を、テスターで測りなさい。
(練習)LEDを他のピンにつなぎ替えて、点灯・消灯してみなさい。
(練習)「digitalWrite(D9,1)」および「digitalWrite(D9,0)」を実行した時のD9ピンの電圧を、テスターで測りなさい。
(練習)LEDを他のピンにつなぎ替えて、点灯・消灯してみなさい。
(練習)「digitalWrite(D9,1)」および「digitalWrite(D9,0)」を実行した時のD9ピンの電圧を、テスターで測りなさい。
(練習)LEDを他のピンにつなぎ替えて、点灯・消灯してみなさい。
はじめの一歩「Lチカ」です。

blink.html:
LEDの点灯・消灯 |

blink.html:
LEDの点灯・消灯 |

blink.html:
LEDの点灯・消灯 |
blink.html:
LEDの点灯・消灯 |
ブラウザの表示は以下のようになります。

冒頭の5行はWebページの常套句で、その先がWebページの本体とプログラムになります。
Webページには単に「LEDの点灯・消灯」と表示されるだけです。<script>と</script>の間がJavaScriptプログラムになります。
プログラムは、はじめにledの値を0にしています。ledはLEDの点灯状態(0で消灯状態、1で点灯状態)を表す変数です。次にsetup()とtoggle()の2つの関数を定義しています。
ここで、setup()は特別な関数の名前になっていて、MIDIデバイス(マイコン)が認識された時にこの関数が実行されます(こちらを参照)。setup()の中では、まずpinModeでLEDが接続されているピンを出力(OUTPUT)にしています。OUTPUTはwebio2.jsの中で定義された組み込み変数です(こちらを参照)。次の「setInterval("toggle()",1000)」で、1000ms(1秒)毎にtoggle()が呼び出されるよう指示しています。toggle()が呼び出されると、LEDの点灯状態ledを0なら1に、1なら0にし、その値をそのままdigitalWrite()で出力します。
JavaScriptプログラムでは「delay」や「wait」などの関数は利用できず、setInterval()やsetTimeout()を使ってプログラムを作ります。
画面上のボタンが押されるとプログラムが実行される例です。

led1.html:
LEDの点灯・消灯 |

led1.html:
LEDの点灯・消灯 |

led1.html:
LEDの点灯・消灯 |

led1.html:
LEDの点灯・消灯 |
ブラウザの表示は以下のようになります。

このページが表示され、MIDIデバイス(マイコン)が認識されると、setup関数が呼び出されます。
setupの関数定義の中の
pinMode関数はwebio2.jsの中で定義されています。利用できるピンや入出力モードは使用するマイコンによって異なり、webio2.jsの中で定義されていて、MIDIデバイス(マイコン)が認識された時点で値が決まります。
pinMode()が呼び出されると、その指示がMIDIデバイス(マイコン)に送信されます。実際にどのようなデータが送られるかは、ブラウザでF12キーを押すと確認することができます(データの詳細はこちら)。
MIDIデバイス(マイコン)はMIDIデータを受け取ると、内容を解読し、LEDが接続されたピンを出力モードにします。
ブラウザ画面のボタンが押されると、
MIDIデバイス(マイコン)はMIDIデータを受け取ると、内容を解読し、LEDが接続されたピンに1(高い電圧)を出力し、LEDが点灯します。
同様に、ブラウザ画面のボタンが押されると、
スイッチの状態(オフで1, オンで0)をコマンド入力欄を使って調べてみます。
D2ピンにスイッチを接続し、「pinMode(D2,INPUT_PULLUP)」とすると、マイコンに内蔵された抵抗が有効になります(下図)。スイッチをオンにするとD2ピンは低い電圧(0V)になり、スイッチをオフにすると高い電圧(5V)になります。この抵抗を「プルアップ抵抗」といいます。「高い電圧に引っ張り上げる抵抗」というような意味です。

D2ピンにスイッチを接続し、「pinMode(D2,INPUT_PULLUP)」とすると、マイコンに内蔵された抵抗が有効になります(下図)。スイッチをオンにするとD2ピンは低い電圧(0V)になり、スイッチをオフにすると高い電圧(5V)になります。この抵抗を「プルアップ抵抗」といいます。「高い電圧に引っ張り上げる抵抗」というような意味です。

D2ピンにスイッチを接続し、「pinMode(D2,INPUT_PULLUP)」とすると、マイコンに内蔵された抵抗が有効になります(下図)。スイッチをオンにするとD2ピンは低い電圧(0V)になり、スイッチをオフにすると高い電圧(3.3V)になります。この抵抗を「プルアップ抵抗」といいます。「高い電圧に引っ張り上げる抵抗」というような意味です。

内蔵されているスイッチを利用します。「pinMode(PIN_BUTTON,INPUT_PULLUP)」とすると、内蔵のスイッチが接続されているPIN_BUTTONピンの内蔵プルアップ抵抗が有効になります。スイッチをオンにするとPIN_BUTTONピンは低い電圧(0V)になり、スイッチをオフにすると高い電圧(3.3V)になります。この抵抗を「プルアップ抵抗」といいます。「高い電圧に引っ張り上げる抵抗」というような意味です。
それでは調べてみましょう。
(練習) D2ピンに接続したスイッチを押した時と放した時のスイッチ両端の電圧を、テスターで測りなさい。
(練習) D2ピンに接続したスイッチを押した時と放した時のスイッチ両端の電圧を、テスターで測りなさい。
(練習) D2ピンに接続したスイッチを押した時と放した時のスイッチ両端の電圧を、テスターで測りなさい。
スイッチの状態(オフで1, オンで0)をブラウザ画面に表示します。

button1.html:
スイッチの状態 |

button1.html:
スイッチの状態 |

button1.html:
スイッチの状態 |

button1.html:
スイッチの状態 |
ブラウザの表示は以下のようになります。

このページが表示され、MIDIデバイス(マイコン)が認識されると、setup関数が呼び出されます。
setupの関数定義の中の
pinMode()が呼び出されると、その指示がMIDIデバイス(マイコン)に送信され、MIDIデバイス(マイコン)はこれを受け取り、内容を解読し、スイッチが接続されたピンをプルアップ入力モードにします。スイッチがオフの時に1(高い電圧)、オンの時に0(低い電圧)になります。マイコンは定期的(20ms毎)にこの値を読み取り、「初回および変化があった時」に、ピンの状態(0か1)を表すMIDIデータをパソコンに送信します。
ブラウザは、20ms毎に実行されるloop関数の中の
loop関数の中では引き続き、
(練習) スイッチを押した時にLEDが点灯しブラウザ画面に「ON」が表示され、スイッチを放した時にLEDが消灯しブラウザ画面に「OFF」が表示されるようにしなさい。
(練習) スイッチを押した時にLEDが点灯しブラウザ画面に「ON」が表示され、スイッチを放した時にLEDが消灯しブラウザ画面に「OFF」が表示されるようにしなさい。
(練習) スイッチを押した時にLEDが点灯しブラウザ画面に「ON」が表示され、スイッチを放した時にLEDが消灯しブラウザ画面に「OFF」が表示されるようにしなさい。
上記に加え、スイッチ操作でLEDも連動して点灯・消灯するようにしてみます。

button2.html:
スイッチの状態 |

button2.html:
スイッチの状態 |

button2.html:
スイッチの状態 |

button2.html:
スイッチの状態 |
ブラウザの表示はスイッチの操作により変化します。

ブラウザのプログラムで点灯・消灯するため、若干の遅れが生じ、その遅れを体感できます。
以下は、スイッチを押すと交互にLEDが点灯・消灯します。

button3.html:
LEDの点灯・消灯 |

button3.html:
LEDの点灯・消灯 |

button3.html:
LEDの点灯・消灯 |

button3.html:
LEDの点灯・消灯 |
ブラウザの表示はスイッチの操作により変化します。

考え方は、「スイッチが押された瞬間に(つまりさっき押されていなくて今押されたら)LED表示を反転する」というものです。buttonには「今のスイッチの状態(0または1)」、lastbuttonには「さっきのスイッチの状態(0または1)」、変数ledには「今のLEDの点灯状態(1が点灯、0が消灯)」を保存します。
まずスイッチが接続されたピンの現在の状態(1または0)を読み取り、buttonに入れます。そして、スイッチが「さっきまで押されていなくて今押されている」ならledの値を0なら1、1なら0にします。その後、LEDが接続されたピンにledの値を出力し、今のスイッチの状態を記憶します。
(練習) 緑色LEDを増設し、スイッチを押すと赤色LEDと緑色LEDが交互に点灯するようにしなさい。
(練習) 緑色LEDを増設し、スイッチを押すと赤色LEDと緑色LEDが交互に点灯するようにしなさい。
(練習) 緑色LEDを増設し、スイッチを押すと赤色LEDと緑色LEDが交互に点灯するようにしなさい。
以下のプログラムは、スイッチ操作4回に一度LEDが点灯します。

button4.html:
LEDの点灯・消灯 |

button4.html:
LEDの点灯・消灯 |

button4.html:
LEDの点灯・消灯 |

button4.html:
LEDの点灯・消灯 |
ブラウザの表示はスイッチの操作により変化します。

スイッチが押されると、Cにスイッチが押された回数を記憶します。つまり、スイッチがさっきまで押されていなくて今押されたならCの値に1を加えます。その後、「C%4==0」つまりCの値を4で割った余りが0であればLEDを点灯し、そうでなければLEDを消灯します。最後に、今のスイッチの状態を記憶します。
(練習) 「C%4==0」の箇所を「C%7==0」や「C%4!=0」などに変えて、どのような動作になるか調べなさい。
(練習) 2個の押しボタンスイッチを使い、一方のスイッチを押すとLEDが点灯し、もう一方のスイッチを押すと消灯するようにしなさい。
はじめに、コマンド入力でLEDの明るさを変えてみます。

|
|

|
|

|
|
ATOM内蔵のLEDを使います。
|
|
analogWrite(ピン,値)は、指定したピンに0~255のアナログ値を出力します。0~255の値に応じてピンの電圧が 0~5V 0~5V 0~3.3V 0~3.3V に変化します。
ブラウザ画面のスライダーの操作でLEDの明るさを変化させます。

slider.html:
LEDの点灯・消灯 |

slider.html:
LEDの点灯・消灯 |

slider.html:
LEDの点灯・消灯 |

slider.html:
LEDの点灯・消灯 |
「<input type=range ...>」の箇所でスライダーの表示を指示していて、「value=0」は初期値を0、「min=0 max=255 step=1」はスライダーの返す値を0~255で1きざみにする指示です。また、「onchange=...」の箇所にスライダーの値が変化した時に呼び出すプログラムを書いています。
LEDの明るさはブラウザのスライダーの操作により変化します。

下図左のようにA0ピンにボリュームを接続すると、ボリュームの操作に応じてA0ピンの電圧は0~5Vに変化します。analogRead(A0)は、A0ピンの電圧に応じて0~1023の値を返します。

下図左のようにA0ピンにボリュームを接続すると、ボリュームの操作に応じてA0ピンの電圧は0~5Vに変化します。analogRead(A0)は、電圧に応じて0~1023の値を返します。

下図左のようにA1ピンにボリュームを接続すると、ボリュームの操作に応じてA1ピンの電圧は0~3.3Vに変化します。analogRead(A0)は、電圧に応じて0~1023の値を返します。

下図左のようにボリュームユニット(回転角ユニット)を接続すると、ボリュームの操作に応じてGROVE1ピンの電圧は0~3.3Vに変化します。analogRead(GROVE1)は、電圧に応じて0~1023の値を返します。

それでは調べてみましょう。
(練習) ボリュームを操作し、A0ピンの電圧がどの範囲で変化するか、テスターで測りなさい。
(練習) ボリュームを操作し、A0ピンの電圧がどの範囲で変化するか、テスターで測りなさい。
(練習) ボリュームを操作し、A1ピンの電圧がどの範囲で変化するか、テスターで測りなさい。
ボリューム操作で変化するアナログ値(0~1023)ブラウザ画面に表示します。

analog.html:
|
|

analog.html:
|
|

analog.html:
|
|

analog.html:
|
|
ブラウザの表示はボリュームの操作により変化します。

読み取った値をバーグラフで表示することもできます。

bargraph.html:
|
|

bargraph.html:
|
|

bargraph.html:
|
|

bargraph.html:
|
|
ブラウザの表示はボリュームの操作により変化します。

この章はありません。
この章はありません。
押しボタンスイッチやスライドスイッチは、操作用のスイッチですが、センサーとしても活躍しています。例えば、CD/DVDデッキやコピー機やプリンタなど動きを伴う機器には、所定の位置に来たがどうかを検知するために、マイクロスイッチが必ずといっていいほど使われています。このような使われ方をするスイッチを「リミットスイッチ」と呼ぶこともあります。
ふたつの金属片を接触させるだけでスイッチ(センサー)となるので、オリジナルのスイッチを作ることも難しくはありません。所定の水位になったかどうかを検知するピンポン球を使った浮力スイッチ、傾けると金属ボールが移動する傾斜スイッチなど、用途に応じて工夫するのも楽しいでしょう。
5.2のボリュームの代わりに明るさセンサー(CDS)をつないでみましょう。明るくなるほどCDSの抵抗値が低くなり、ピンに加わる電圧は高くなります。プログラムは5.2と同様です。

analog.html:
|
|

analog.html:
|
|

analog.html:
|
|

analog.html:
|
|
ブラウザの表示は明るさに応じて変化します。

読み取った値をバーグラフで表示することもできます。

bargraph.html:
|
|

bargraph.html:
|
|

bargraph.html:
|
|

bargraph.html:
|
|
ブラウザの表示は明るさに応じて変化します。

ここでは高精度のデジタル温湿度センサー(SHT31)を使います。analogRead()で温湿度を直接読み取ることができます。温度が23度であればanalogRead(TEMP)は「23」という値を返し、相対湿度が45%であればanalogRead(HUMI)は「45」という値を返します。
以下のプログラムは、温湿度センサー(SHT31)で測定した温度と湿度をブラウザ画面に表示します。
thermometer.html:
初めに「pinMode(D9,OUTPUT_TONE)」のように、ブザーを接続するピンを指定します。その後、「sendNote(key,長さ)」で指定したkeyの音を出すことができます。D9ピンにブザーを接続し、以下の操作で確認してください。
| ![]() |
keyはmidiのノート番号(21~108)または文字列("A0"~"C8")で指定します。また、長さは[ms]で指定します。長さを省略すると300[ms]となります。
sendNote()ではなくplayNote()を使うと、ブラウザから音を出すことができます。以下の操作で確認してください。
|
|
ブラウザからドラム音を出すこともできます。
|
|
以下は、簡単な演奏プログラムで、D9ピンに接続したブザーから音が出ます。midi音源を接続しても動作します。Javascriptにはdelay()という関数がないため、setTimeout()で次の音に進みます。
sendnotes.html:
| ![]() ![]() |
以下は、ブラウザで演奏するプログラムです。
playnotes.html:
| ![]() ![]() |
以下は、楽譜データを参照しながら演奏するプログラムです。楽譜データがプログラムと分離されているので、長い曲も表しやすくなっています。midi音源を接続しても動作します。
midimelody.html:
| ![]() ![]() |
楽譜はさまざまな方法で表現することができます。以下は、少し長い曲を演奏するプログラムです。
playmidi.html:
| ![]() ![]() |
以下は、「私だけの電子オルゴール」のように「ドドソソララソー」のように楽譜を入力できるようにした例です。
オモチャのドラムを左右2つのスティックで叩きます。左のスティックはセンタードラム(L)とサイドドラム(S)、右のスティックはセンタードラム(R)とハイハット(H)を担当し、サーボモータでそれぞれのドラム位置にスティックを移動します。
drum1.html:
|
![]() ![]() ![]() |
オモチャの鉄琴を左右2つのスティックで叩きます。左のスティックはドレミファ(C4 D4 E4 F4)、右のスティックはソラシド(G4 A4 B4 C5)を担当し、サーボモータでそれぞれの位置にスティックを移動します。
tekkin1.html:
|
![]() ![]()
|
複数の楽器で「セッション」も楽しめます。グループ学習でやってみると面白いと思います。ブラウザ画面から音が出ますので、楽器が1台でも十分楽しめます。
それぞれのパソコンのブラウザ画面でを押すと、「正10秒」まで待って演奏を開始します。ボタンを押すタイミングが少しずれても大丈夫です。パソコンの時刻同期の設定をきちんとしておくと時刻のズレを少なくできます(NICTのページで確認できます)。ここではパソコン毎に多少時刻がずれていてもいいように、±1秒の範囲で調整できるようにしてあります。
session1.html:
|
![]() ![]()
|
以下は楽譜データを分けて(sample.js, akahana.js, ...)、曲を選択できるようにした例です。NeoPixelをつなぐと演奏に連動してカラフルに光ります。イルミネーションのオブジェはngo-tecさんのページを見て作りました。「正10秒」で同期演奏できますし、「正時」に演奏させれば「からくり時計」となります。ブラウザ画面上で楽譜を入力して演奏させることもできます。詳しくは「ミニドラム・ミニ鉄琴」のページをご覧ください。
![]()
|
ブラウザの音声合成機能を用いて、おしゃべりするページを作ることができます。
|
|
利用できる声はブラウザによって異なり、こちらのページで確認できます。
デフォルトは「日本語で初めに見つかった声」になります。Windows10版Chromeの場合、日本語は
音程は 0.1~2 で指定できます。無指定時は1となります。
速さは 0.1~10 で指定できます。無指定時は1となります。
以下は、「九九」を合成音声で読み上げるプログラムです。
kuku.html:
| ![]() |
以下は、外部スイッチが押されると「九九」をランダムに読み上げるプログラムです。
kukubutton.html:
| ![]() ![]() |
利用者に適したスイッチを使い、合成音声の読み上げで支援するさまざまなツール(VOCA)をWebで作ることができます。
(練習) 2個のスイッチを接続し、それぞれ「はい」「いいえ」の合成音声が出るようなVOCAを作りなさい。
NeoPixelはフルカラーLEDが連結されていて(ここでは10連LEDを使用)、1本の信号線で任意のLEDの発光をコントロールできるのが特徴です。
初めに
LEDの番号(0~9)と色相(0~255)と明るさ(0~255)を指定することもできます。明るさの指定を省略すると255として扱われます。
まず、コマンド操作で試してみましょう。
|
以下のプログラムは、ひとつ目のLEDを赤で点滅させます。1秒点灯・1秒消灯をくりかえします。下図右は点滅の時間的な変化をタイムチャートで示したものです。
pixelblink1.html:
|
次のようにすると10個のLEDが緑で点滅します。
pixelblink10.html:
|
次のようにすると明るく短時間点灯する「フラッシュ」になります。
pixelflash10.html:
|
(練習) 10個のLEDが1秒毎に「青→黄→赤」を繰り返すプログラムを作りなさい。
以下のプログラムは、10個のLEDを順に点灯させます。このようなイルミネーション効果は「ワイプ」と呼ばれます。
pixelwipe.html:
|
(練習) 「赤のワイプ→緑のワイプ→青のワイプ」を繰り返すプログラムを作りなさい。
以下のプログラムは、10個のLEDを順に点灯・消灯させます。
pixelsweep.html:
|
(練習) 100ms毎にスイープするようにしてみなさい。
以下のプログラムは、4個に1個の点灯がスイープし、波(ウェーブ)のように(あるいは追いかけているように)見えます。「P=3」にすると3個に1個の点灯になります。
pixelwave.html:
|
(練習) 「1個おき」「3個おき」のウェーブにしてみなさい。
以下のプログラムは、ひとつ目のLEDをだんだん明るくし(赤を0→50)、だんだん暗くし(赤を50→0)、これを繰り返します。
pixelfade.html:
|
(練習) 色を変えてみなさい。また速さを変えてみなさい。
(練習) 10個のLEDを同時にフェードイン・フェードアウトさせなさい。
ひとつ目のLEDをフェードアウトしながら、ふたつ目のLEDをフェードインすると滑らかに変化させることができます。これを「クロスフェード」といいます。
pixelxfade.html:
|
以下は、クロスフェードをスイープに応用した例で、LEDの点灯が滑らかに移動します。
pixelxsweep.html:
|
クロスフェードを用いると色を滑らかに変化させることができます。以下のプログラムは、ひとつ目のLEDの色が赤→緑に滑らかに変化します。
pixelxrg.html:
|
RGBの値と表示色の関係は下図のようになっています。
以下のプログラムは、すべてのLEDの色をフルカラーで連続的に変化させます(明るさ最大85)。
pixelxrgb.html:
|
以下のプログラムは、すべてのLEDの色を場所を変えながらフルカラーで連続的に変化させます(明るさ最大85)。rgb()は0~255の色相Wを与えると、R,G,Bの変数に値(各々0~85)がセットされます。
pixelrgb.html:
|
以下は、「ドロップ」のイルミネーションの作例です。水滴が滴り落ちるイメージで、最後にキラッと光ります。
pixeldrop.html:
|
以下は、NeoPixelリング(12個)を使い、ランダムに点灯させるようにした例です。オブジェの作り方はngo-tecさんのページを参考にしました(クッキングシートを使ってみました)。点灯位置と点灯色と点灯時間間隔をランダムにし、点灯後はだんだん暗くしています。
pixelfire.html:
|
(練習) オリジナルのイルミネーションを考え、作ってみなさい。
以下はごくシンプルな東芝のTVリモコンです。赤外線送信モジュールを接続し、テレビに向けてボタンを押すと動作します。
toshiba_tv0.html:
| ![]() ![]() ![]() |
上記のようにブログラムは簡単で、が押されるとIRsend(8,0x40,0x12)が呼び出されるようになっています。「8, 0x40, 0x12」は、東芝のテレビリモコンの電源ボタンを押したときの赤外線信号で、順にプロトコル、アドレス、コマンドになっています。
※ 実際の赤外線信号についてはこちらに少し詳しい説明があります。
上記のようなリモコンを作ろうとする時に、使いたいリモコンのボタンがどのような赤外線信号なのかを知る必要があります。以下は、そのためのものです。赤外線受信モジュールを接続し、受信モジュールに向けて(本物の)リモコンのボタンを押すと、その信号が下記のように画面に表示されます。
irreceive.html:
| ![]() ![]() ![]() |
下図のような、本物そっくりのリモコン、各社対応のリモコン、学習リモコンなど、さまざまなリモコンページを作ってみました。詳しくはこちらをご覧ください。
東芝テレビ![]() |
シャープテレビ![]() |
パナソニックBD![]() |
ブラウザの操作ができる場合ではありますが、障害者にも使いやすいリモコンを作ることもできます。なんでもリモコンのブラウザ版です。
|
ラジコン用のサーボモーターは、右図のようなPWM波形で角度(0~180°)を制御するように作られています。 以下の例は、サーボモーターが車のワイパーのように動きます。 | ![]() |
sweep.html:
| ![]() ![]() |
以下のプログラムは、ボリュームの値によってサーボモーターの位置(角度)が変わります。
knob.html:
| ![]() ![]() |
(練習) 上記のknob.htmlでボリュームの代わりに明るさセンサーを使い、明るさで位置が変わるようにしなさい。


signal.html:
| ![]() |
また、以下は小学校などで利用されている「交通安全教室用信号機」ですが、上記と組み合わせればWebページと連動した指導ができるようになるかもしれません。

以下は、デジタル温湿度センサSHT31を使った温湿度計です。TEMPpinとHUMIpinは特別なアナログ入力ピンです。
thermometer.html:
| ![]() ![]() |
以下は、グラフ表示など多目的に使えるようにした例です。データは使用するパソコンのブラウザに保存され、そのデータをネットワーク経由で見ることはできません。理科や保健の授業などで利用できるかもしれません。ネットワークを利用した気温・湿度・熱中症指数(WBGT)・CO2モニタリングシステムはこちらをご覧ください。
|
![]()
|
| 以下はCO2センサも利用できるようにした例です。 | |
|
|
下図のように、WebIOの動作を確かめるページを作りました。プログラムを保存することもできます。

ブレッドボードで利用できる入出力モジュールの製作例です。
| モジュール | 回路図 | 製作例 |
|---|---|---|
| 可変抵抗モジュール | ![]() | ![]() |
| 明るさセンサーモジュール | ![]() | ![]() |
| 赤外線反射モジュール | ![]() | ![]() |
| 音量センサーモジュール | ![]() | ![]() |
| 10連LEDモジュール | NeoPixel(Dinはpin10に接続) | |
| モーターモジュール | ![]() 右モーターはA0とA1をGNDに接続 | ![]() |
| 名称 | 外観 | 備考 |
|---|---|---|
| Seeeduino XIAO | 秋月 | |
| ブレッドボード EIC-301 | ![]() |
秋月 |
| ブレッドボード ジャンパーワイヤ 15cm | 秋月 | |
| ブレッドボード ジャンパーワイヤ EIC-J-S | 秋月 | |
| LED | ![]() |
秋月 |
| フルカラーシリアルLEDテープ | SwitchScience | |
| 圧電スピーカー | ![]() |
秋月 |
| プッシュスイッチ DS-660R-C | ![]() |
千石 |
| 抵抗 1/4W 4.7Ω, 100Ω, 220Ω, 470Ω, 1kΩ, 10kΩ | ![]() |
秋月 |
| CDS(光センサ) | 秋月 | |
| 温湿度センサ SHT31 | 秋月 | |
| 赤外線反射センサ LBR-127HLD | 秋月 | |
| サーボモーター SG-90 | 秋月 | |
| モータードライバ DRV8830 | 秋月 |