作品タイトル:GR-CITRUSを使った小さなパソコン
表示名:@takjn
コンセプト・作品説明 |
---|
mrubyが動くGR-CITRUSの特徴を生かして、スタンドアロンで動作するパソコンを作りました。 USBキーボードからmrubyのコードを入力してすぐに実行することができます。 |
はじめに・注意事項
GR-CITRUSは標準でmrubyが利用できますが、プログラミング作成と実行にはPCとRubicなどのPC用アプリが必要です。
一方、この作品ではUSBキーボードからmrubyのコードを直接入力してすぐに実行することができます。
注意事項
- この作品はmrubyとマイコンの実験用です。書いたプログラムの編集や保存、読込ができないため実用的ではありません。
- 技術的にはmirbを簡略化してGR-CITRUSに移植したものです。mirbとはmruby標準のインタラクティブ環境であり、mrubyの式を簡単に入力・実行するためのツールです。
- mrubyのバージョンは1.2相当となります。2017年8月現在の最新版であるmruby1.3には対応していません。
- GR-CITRUS標準のmruby用ファームウェアとの互換性はありません。本作品で利用できるクラスは限られます。使えるクラスを詳しく知りたい方は、本作品のソースコードやこちらにあるmruby-arduinoのソースコードをご確認ください。
- キーボード配列はUS配列(英字配列)となります。また、動かないUSBキーボードがあるようです。キーボードが動かない場合は、キーボードを抜き差ししてみたり別のキーボードで試してみたりしてください。
回路図・部品表
回路図
部品表
部品 | 個数 | 備考 |
---|---|---|
GR-CITRUS (FULL) | 1 | 秋月電子通商で購入することができます。 |
SSD1306 I2C OLEDモジュール | 1 | Amazon.co.jpなどで購入することができます。 |
電源用マイクロUSBコネクタ | 1 | 秋月電子通商で購入することができます。電源供給用であるため、DCジャックとACアダプターなどで代用することができます。 |
電源用マイクロUSBケーブル | 1 | |
マイクロUSB変換ケーブル(Bオス<->Aメス) |
1 | スマホにUSBメモリやキーボードなどを接続するためのケーブルです。改造して利用します。100円ショップでも販売されています。 |
金属皮膜抵抗 15kΩ | 2 | マイクロUSB変換ケーブルの改造で利用します。 |
ブレッドボード、ジャンパーワイヤ | 1 | |
USBキーボード | 1 | US配列のキーボードをおすすめします。 |
注意事項
- SSD1306は購入するお店によってVDDとGNDが逆になっているものがあります。部品にかかれている文字をよく確認してから接続してください。
- 5Vと3.3Vを間違えないように接続してください。SSD1306は3.3Vにつないでください。
- 起動メッセージは電源を入れてすぐに表示されます。万が一表示されない場合、回路に間違いが無いかを確認してください。
- キーボードの認識は、接続後に3秒程の時間がかかります。また、電源容量が不足している場合、キーボードを認識しないこともあります。サーボなど消費電力が大きい部品をつなぐ場合、GR-CITRUSとは別の電源を用意するなどの工夫をしてください。
作り方
USBキーボード接続用ケーブルの作成
USBキーボードを接続するためにはマイコン側をUSBホストモードに設定する必要があります。しかし、GR-CITRUSでは姉妹製品であるGR-SAKURAにあったUSBホスト機能を使うための回路が削除されています。この作品ではマイクロUSB変換ケーブルを改造することでUSBホスト機能を使うための回路を作成しています。
- 変換ケーブルの外側の皮膜を取り除きます。
- 内部に4本(赤:+5V、黒:GND、緑:DATA+、白:DATA-)の配線が見えるはずです。
- 緑、白、黒の配線を途中でカットし、緑と黒の間と白と黒の間に、15kΩ程度の抵抗を割り込ませます。
- 緑と白がショートしないようにビニールテープなどで絶縁してください。
補足
キーボードによってはマイクロUSB変換ケーブルを改造をしなくても動作するものがあるようです。改造をしたくない方は一度試してみてください。
プログラムの書き込み
- GR-CITRUSを単体でPCにつなぎ、リセットスイッチを押してUSBドライブとして認識させてください。
- https://github.com/takjn/mirb4gr/raw/master/citrus_sketch.binをダウンロードしてGR-CITRUSに書き込んでください。
- GR-CITRUSをPCから外してブレッドボードに取り付けてください。
- GR-CITRUSのUSBコネクタにUSBキーボード接続用ケーブルをつなぎ、USBキーボードを接続してください。
- プラスとマイナスの繋ぎ間違いやショートが無いことを確認してください。
- 電源用マイクロUSBケーブルを電源につないでください。
- 起動メッセージが表示されることを確認してください。
シリアル通信による接続
USBシリアル変換モジュールやBluetooth SPPモジュールなどを持っている方はシリアル通信で接続することもできます。
キーボードで入力した内容はシリアルにも出力されます。逆にシリアルから入力した内容はOLEDにも出力されます。
- GR-CITRUSの0ピン、1ピン(Serial1)とシリアル変換モジュールのTX、RXを接続してください。
- ターミナルソフトからGR-CITRUSに接続してください。通信速度は115200bpsです。
- OSやターミナルソフトによっては、接続をしても起動メッセージが表示されないことがあります。エンターキーを押してプロンプトを表示してください。
サンプルプログラム
mrubyの基本構文の他、mruby-arduinoモジュールを組み込んでいるためArduinoの基本機能を利用することができます。Arduinoのメソッドやクラスを使いたい場合は以下の例に示す通りArduinoモジュールを明示的に指定してください。
手動でLEDをOn、Offします。
> extend Arduino # load "mruby-arduino" module
=> main
> digitalWrite(61, 1) # LED On (61 = Built-in LED on GR-CITRUS)
=> nil
> digitalWrite(61, 0) # LED Off
=> nil
メソッドを定義してLEDを点滅させます。
> extend Arduino
=> main
> def blink
* 10.times do
* digitalWrite(61, 1)
* delay 1000
* digitalWrite(61, 0)
* delay 1000
* end
* end
=> :blink
> blink
クラスを定義してLEDを点滅させます。
> class GR_CITRUS
* include Arduino
* include PinsArduino
* def run
* 10.times do
* digitalWrite(PIN_LED0, HIGH)
* delay 1000
* digitalWrite(PIN_LED0, LOW)
* delay 1000
* end
* end
* end
=> :run
> GR_CITRUS.new.run
手動でサーボを動かします。
サーボの制御ピンをGR-CITRUSの10ピンに接続してください。
> extend Arduino
=> main
> s = Servo.new
=> #
> s.attach(10)
=> nil
> s.write(180)
=> nil
> s.write(90)
=> nil
>
本職はWeb系のソフトウェアエンジニアをしています。
ハードウェアは素人です。電子工作は趣味として楽しんでいます。
ソースコードはGitHubで公開しています。Pull Requestもお待ちしています。