SlideShare a Scribd company logo
Rubyを用いた
マイコンプログラムの
遠隔書き換えシステム
ルアリダワークス
 山本
和歌山県立 海南高校
 瀧本、筈谷、若勇、和田、岸田
2
システム概要
 基板はArduino Pro Miniとピン互換、
GR-SAKURAと機能互換となっています。
 GR-SAKURA互換基板として使用する
には、GR-SAKURAファームを書き込む
必要があります。
 マイコンには、mrubyが実装されて
おり、Serial 1を使って3Gシールドと
やり取りができるRubyのクラスが
用意されています。
3
プログラム書き換えの仕組み
 インターネット上のサーバにapacheなどを
入れておき、http/httpsでプログラムが取得
できるようにしておく。
インターネット・クラウド
DropBoxファイル
公開サーバ上ファイル
 mrubyボードには、httpを用いて指定ファイルが取得
できるrubyクラスが実装されている。
 下記のサイトからのファイル取得が可能なこと
が確認できている。
 ・DropBox (httpsによる取得)
 ・Yahoo ジオシティーズ (httpによる取得)
実行中のプログラム
自分自身を終了させて、
ダウンロードしたプログラムを呼び出す
ダウンロードしたプログラム ダウンロードしたプログラム
の呼び出し
ダウンロードしたプログ
ラムの実行
4
プログラム書き換えの仕組み
mrubyは、
バイトコードをロードし直せば、
動作プログラムを切り替えられる。
5
実装クラス・メソッド一覧
カーネルクラス
pinMode(pin,mode)
digitalRead(pin)
digitalWrite(pin,value)
analogRead(number)
pwm(pin,value)
pwmHz(value)
analogDac(value)
delay(value)
millis()
led(sw)
システムクラス
Sys.exit()
Sys.setrun(filename)
Sys.version(r)
Sys.push(address,buf,length)
Sys.pop(address,length)
Sys.fileload()
ファイルクラス
Mem.open(number,filename,mode)
Mem.close(number)
Mem.read(number)
Mem.write(number,buf,len)
Mem.seek(number,byte)
シリアルクラス
Serial.begin(num,bps)
Serial.setDefault(num)
Serial.print(number,string)
Serial.println(number,string)
Serial.read(number)
Serial.write(number,buf,len)
Serial.available(number)
I2Cクラス
I2c.sdascl(sda,scl)
I2c.write(id,address,data)
I2c.read(id,addressL,addressH)
I2c.begin(id)
I2c.lwrite(address)
I2c.end()
I2c.request(id,n)
I2c.lread()
I2c.freq(Hz)
ネットワーククラス
Net.begin(setBaurate[,oldBaurate])
Net.date()
Net.time()
Net.lat([timeout])
Net.lng([timeout])
Net.getmrb(server,path,port[,ssl])
Net.restart()
Net.shutdown()
Net.httpget(server,path,port[,ssl])
Net.httppost(server,path,port,header,body[,ssl])
6
rubyプログラム
while(true)do
#http://www.geocities.jp/cansatkainan01/からプログラムをダウンロードする
x = Net.getmrb("www.geocities.jp","/cansatkainan01/sensor-a.mrb",80)
#x=0だったら取得に成功している
if(x == 0)then
#sensor-a.mrbの実行セット
Sys.setrun("sensor-a.mrb")
delay(100) #100ms待つ
#"Success load sensor-a.mrb #cansatkainan"とツイートする
mes = "Success load sensor-a.mrb #cansatkainan"
res = Net.httppost("arduino-tweet.appspot.com","update",80,"",@Token + mes)
#今走っているプログラムを終了させる
Sys.exit()
end
@Dat = Net.date()
@Tim = Net.time()
@Lat = Net.lat(60000)
@Lng = Net.lng(60000)
#間隔待ち。予定の時間になるまで待っている
while(millis() < @ToTime)do
#ファイルローダーを呼び出すべきか調べる
fileloader()
delay(1) #1ms待ちます
End
#次の動作時間をセットする
nextTime()
#LEDを点滅させる
led(@Sw)
@Sw = 1 - @Sw
end
geocitiesからrubyプログラムをダウンロードするプログラム例です。
mrbファイル名を指定して
ダウンロードしている
ダウンロード成功の場合
そのmrbファイルが
次に実行されるファイル
として登録される
Http POSTを利用して
tweetしている
exit()によりプログラムを
終了させると
登録されたmrbファイルが
実行される
7
今後の目標
クラウドサーバークラウドサーバー
O S
RubyVM / JVM
Rails / JAX-RS
プログラムを書いている
H/W
RT(C) Framework
プログラム
mRVM(C)
通信
JAX-RS
JVM
組み込みプログラマを増やす
8
今後の目標
クラウドサーバークラウドサーバー
クラウド分散
デバイス側の処理負荷を
クラウドに持って行く!
CloudManegeCloudManegeクラスとクラスと
ChannelChannelクラスの実装クラスの実装
binary
9
実際の使用例
和歌山県立海南高校が製作した
疑似人工衛星
キャリアの
パラシュート
パラシュート
ロケット用
キャリア
キャリア開閉
機構回路
疑似人工衛星をロ
ケットに搭載するた
め、キャリアに詰め
ている様子
10
実際の使用例
疑似人工衛星を搭載したロケット
Bluetooth通信とインターネット通信は、既に動作して
いる
11
実際の使用例
JAXA能代ロケット実験場での
打ち上げの様子ロケット
400m程度上
昇し、疑似人
工衛星の入っ
たキャリアが
放出される。
缶サット甲子園出場
13
挑戦したミッション
はやぶさが行ったような遠隔操作での
プログラムの書き換え
14
製作した衛星
RubyボードA
RubyボードB
3Gシールド
加速度&ジャイロ
センサA
加速度&ジャイロ
センサB
温度&気圧センサ 衝撃吸収用クッション
ログ用SDメモリ
X2
バッテリと
bluetooth基板
は取り外し中
ネットワークアクセス用(A)とセンサ制御用(B)の2枚のボードを搭載
ここは動画です
16
お わ り
ご清聴ありがとうございました

More Related Content

Similar to Rubyを用いたマイコンプログラムの遠隔書き換えシステム

G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
Tsuyoshi Yamamoto
 
Fuchsia概略その1
Fuchsia概略その1Fuchsia概略その1
Fuchsia概略その1
l_b__
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見る
kishima7
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
Tsuyoshi Yamamoto
 
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
Kazuaki Tanaka
 
S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較
真治 米田
 
Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]
Masashi Shinbara
 
Mod mrubyについて
Mod mrubyについてMod mrubyについて
Mod mrubyについて
Ryosuke MATSUMOTO
 
NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07
Tomoya Hibi
 
LINE API × heroku ×selenium
LINE API × heroku ×selenium LINE API × heroku ×selenium
LINE API × heroku ×selenium
医療IT数学同好会 T/T
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
Takuji Kawata
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
Masashi Shinbara
 
Al mininum 47redmine-2nd
Al mininum 47redmine-2ndAl mininum 47redmine-2nd
Al mininum 47redmine-2nd
mikoto20000
 
mruby/c機能紹介20160329
mruby/c機能紹介20160329mruby/c機能紹介20160329
mruby/c機能紹介20160329
shimane-itoc
 
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
佑介 九岡
 
Lagopusとvagrant
LagopusとvagrantLagopusとvagrant
Lagopusとvagrant
Masaru Oki
 
コミュニティ運営とレンタルサーバ
コミュニティ運営とレンタルサーバコミュニティ運営とレンタルサーバ
コミュニティ運営とレンタルサーバ
法林浩之
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
Ryosuke MATSUMOTO
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
Yuya Rin
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
Masahito Zembutsu
 

Similar to Rubyを用いたマイコンプログラムの遠隔書き換えシステム (20)

G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
Fuchsia概略その1
Fuchsia概略その1Fuchsia概略その1
Fuchsia概略その1
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見る
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
 
S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較
 
Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]
 
Mod mrubyについて
Mod mrubyについてMod mrubyについて
Mod mrubyについて
 
NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07
 
LINE API × heroku ×selenium
LINE API × heroku ×selenium LINE API × heroku ×selenium
LINE API × heroku ×selenium
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
 
Al mininum 47redmine-2nd
Al mininum 47redmine-2ndAl mininum 47redmine-2nd
Al mininum 47redmine-2nd
 
mruby/c機能紹介20160329
mruby/c機能紹介20160329mruby/c機能紹介20160329
mruby/c機能紹介20160329
 
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
 
Lagopusとvagrant
LagopusとvagrantLagopusとvagrant
Lagopusとvagrant
 
コミュニティ運営とレンタルサーバ
コミュニティ運営とレンタルサーバコミュニティ運営とレンタルサーバ
コミュニティ運営とレンタルサーバ
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
 

More from 三七男 山本

GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0
GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0
GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0
三七男 山本
 
2018おうちハックLT小ネタ大会「小型ファンヒーターハック」
2018おうちハックLT小ネタ大会「小型ファンヒーターハック」2018おうちハックLT小ネタ大会「小型ファンヒーターハック」
2018おうちハックLT小ネタ大会「小型ファンヒーターハック」
三七男 山本
 
mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明
三七男 山本
 
GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7
GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7
GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7
三七男 山本
 
GR-CITRUS リファレンス
GR-CITRUS リファレンスGR-CITRUS リファレンス
GR-CITRUS リファレンス
三七男 山本
 
ミニハッカソンの作品製作 参考資料
ミニハッカソンの作品製作 参考資料ミニハッカソンの作品製作 参考資料
ミニハッカソンの作品製作 参考資料
三七男 山本
 
GRデザインコンテスト2017 ファイナル説明資料
GRデザインコンテスト2017 ファイナル説明資料GRデザインコンテスト2017 ファイナル説明資料
GRデザインコンテスト2017 ファイナル説明資料
三七男 山本
 
mruby搭載ボード GR-CITRUS の新しい開発環境の紹介
mruby搭載ボード GR-CITRUS の新しい開発環境の紹介mruby搭載ボード GR-CITRUS の新しい開発環境の紹介
mruby搭載ボード GR-CITRUS の新しい開発環境の紹介
三七男 山本
 
ロボスピン組み立て手順
ロボスピン組み立て手順ロボスピン組み立て手順
ロボスピン組み立て手順
三七男 山本
 
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
三七男 山本
 
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
三七男 山本
 
ロボムーバー組み立て手順
ロボムーバー組み立て手順ロボムーバー組み立て手順
ロボムーバー組み立て手順
三七男 山本
 
GR-CITRUSハンズオン
GR-CITRUSハンズオンGR-CITRUSハンズオン
GR-CITRUSハンズオン
三七男 山本
 
モータ制御基板 SAMBOU-KANとロボホンタンク
モータ制御基板 SAMBOU-KANとロボホンタンクモータ制御基板 SAMBOU-KANとロボホンタンク
モータ制御基板 SAMBOU-KANとロボホンタンク
三七男 山本
 
ロボホンタンクを作る会
ロボホンタンクを作る会ロボホンタンクを作る会
ロボホンタンクを作る会
三七男 山本
 
IoTLT 大阪 Vol.6
IoTLT 大阪 Vol.6IoTLT 大阪 Vol.6
IoTLT 大阪 Vol.6
三七男 山本
 
Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2
三七男 山本
 
ルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータ
三七男 山本
 
GR-CITRUS用モータ基板の回路図
GR-CITRUS用モータ基板の回路図GR-CITRUS用モータ基板の回路図
GR-CITRUS用モータ基板の回路図
三七男 山本
 
ET2016展示パネル
ET2016展示パネルET2016展示パネル
ET2016展示パネル
三七男 山本
 

More from 三七男 山本 (20)

GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0
GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0
GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0
 
2018おうちハックLT小ネタ大会「小型ファンヒーターハック」
2018おうちハックLT小ネタ大会「小型ファンヒーターハック」2018おうちハックLT小ネタ大会「小型ファンヒーターハック」
2018おうちハックLT小ネタ大会「小型ファンヒーターハック」
 
mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明
 
GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7
GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7
GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7
 
GR-CITRUS リファレンス
GR-CITRUS リファレンスGR-CITRUS リファレンス
GR-CITRUS リファレンス
 
ミニハッカソンの作品製作 参考資料
ミニハッカソンの作品製作 参考資料ミニハッカソンの作品製作 参考資料
ミニハッカソンの作品製作 参考資料
 
GRデザインコンテスト2017 ファイナル説明資料
GRデザインコンテスト2017 ファイナル説明資料GRデザインコンテスト2017 ファイナル説明資料
GRデザインコンテスト2017 ファイナル説明資料
 
mruby搭載ボード GR-CITRUS の新しい開発環境の紹介
mruby搭載ボード GR-CITRUS の新しい開発環境の紹介mruby搭載ボード GR-CITRUS の新しい開発環境の紹介
mruby搭載ボード GR-CITRUS の新しい開発環境の紹介
 
ロボスピン組み立て手順
ロボスピン組み立て手順ロボスピン組み立て手順
ロボスピン組み立て手順
 
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
 
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
 
ロボムーバー組み立て手順
ロボムーバー組み立て手順ロボムーバー組み立て手順
ロボムーバー組み立て手順
 
GR-CITRUSハンズオン
GR-CITRUSハンズオンGR-CITRUSハンズオン
GR-CITRUSハンズオン
 
モータ制御基板 SAMBOU-KANとロボホンタンク
モータ制御基板 SAMBOU-KANとロボホンタンクモータ制御基板 SAMBOU-KANとロボホンタンク
モータ制御基板 SAMBOU-KANとロボホンタンク
 
ロボホンタンクを作る会
ロボホンタンクを作る会ロボホンタンクを作る会
ロボホンタンクを作る会
 
IoTLT 大阪 Vol.6
IoTLT 大阪 Vol.6IoTLT 大阪 Vol.6
IoTLT 大阪 Vol.6
 
Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2
 
ルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータ
 
GR-CITRUS用モータ基板の回路図
GR-CITRUS用モータ基板の回路図GR-CITRUS用モータ基板の回路図
GR-CITRUS用モータ基板の回路図
 
ET2016展示パネル
ET2016展示パネルET2016展示パネル
ET2016展示パネル
 

Rubyを用いたマイコンプログラムの遠隔書き換えシステム