がじぇっとるねさす

ホビーとエレクトロニクスを繋げるサイト

がじぇるね工房

作品タイトル:GR-CITRUSを使った小さなパソコン

表示名:@takjn

GR-CITRUSを使った小さなパソコン

コンセプト・作品説明
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
> 

 

@takjn

本職はWeb系のソフトウェアエンジニアをしています。

ハードウェアは素人です。電子工作は趣味として楽しんでいます。

ソースコードはGitHubで公開しています。Pull Requestもお待ちしています。

https://github.com/takjn/mirb4gr

share