Altera CycloneIIIリファレンスボードDE0が届いた.
【追記した】mixiボイスとtwitterに同時ポストするスクリプトを書いてみた.GUIにも対応してみた.
【追記】TkでGUIにも対応しておいた.
twitterでちょっと話題になったので,書いておく.
使い方.(Rubyがインストールされている状態で!)
(下記ソース | カキソース(ってオイスターソースだっけ?))を保存して,中の
について書き換えて,
コマンドラインで,
gem install twitter
gem install mechanize
をかけて,
ruby mixitter.rb "うんこうんこー!"
と打ちこむとポストする.
ruby mixitter.rb
と打ちこむとGUIを起動する.
イカソース!
mixitter.rb
require "rubygems" require "mechanize" require "tk" require "twitter" require "kconv" class Mixi MIXI_BASE = "http://mixi.jp/" MIXI_HOME = "#{MIXI_BASE}home.pl" attr_accessor :email, :password def initialize(email, password) @email = email @password = password @agent = WWW::Mechanize.new end def login top_page = @agent.get(MIXI_BASE) form_login = top_page.form_with(:name => 'login_form') form_login.email = email form_login.password = password @agent.submit(form_login) end def post(text) home_page = @agent.get(MIXI_HOME) form_echoPost = home_page.forms.find{|f| f.form_node['id'] == 'EchoPost'} form_echoPost.body = text @agent.submit(form_echoPost) end end mixi_email = "hogehoge@hoge.jp" mixi_password = "fugafuga" twitter_id = "hogehoge" twitter_password = "fugafuga" def mixitterpost(email, mpass, tid, tpass, comment) puts "mixiとtwitterに同時ポストするツール" puts "" comment = Kconv.toutf8(comment) puts "mixi=================================" magent = Mixi.new(email, mpass) puts "認証中." magent.login puts "コメントをポスト中" magent.post(comment) puts "" puts "twitter==============================" puts "認証中." tauth = Twitter::HTTPAuth.new(tid, tpass) tagent = Twitter::Base.new(tauth) puts "コメントをポスト中" tagent.update(comment) end if(ARGV[0] != nil) mixitterpost(mixi_email, mixi_password, twitter_id, twitter_password, ARGV[0]) else @root = TkRoot.new(:title => "Mixitter") @text = TkEntry.new.pack @button = TkButton.new(nil, :text => "POST") @button.command = proc{ mixitterpost(mixi_email, mixi_password, twitter_id, twitter_password, @text.value) @text.value = "" } @button.pack Tk.mainloop end
kconvを使っているのは,Windows環境を想定しているから.
Mixiクラスのコンストラクタでloginしていないのは,無駄に重くなることを恐れたため.
以上!
すっごい安いAltera CycloneIIIのリファレンスボードを注文した.
Terasic社のCycloneIIIリファレンスボード DE0がソリトンウェーブで安く手に入るっぽい感じだったので,注文したみた.
[名称]DE0 開発学習ボード (アカデミック版)
[記号]DE0-A
[会員価格]\10,290(税込)
[発売日]2009/08/19
[分類]FPGA開発:Terasic
[単価]10,290円(税込)
■DE0 開発学習ボード (アカデミック版) : 株式会社ソリトンウェーブ
注文してから気がついたけれど,どうやらつい最近リリースされたものの模様.
CEATEC2009でも展示されていたようで,安価な環境としてかなり期待される存在.
http://www.ceatec.com/2009/ja/visitor/detail.html?exh_id=E090425
なんつったって,搭載CycloneIIIのロジックエレメントは,ディジタルデザインテクノロジ付録のLattice基板の3倍!
チップLED,7セグメントLED,スライドスイッチ,プッシュスイッチ,PS/2コネクタ,アナログVGAコネクタ,SDカードスロット,フラッシュメモリ,SDRAMまでしっかり搭載されている,やばい!
ついでに本来FPGA開発に必要とされる接続ケーブルも必要とせず,USBだけで接続できちゃう!
開発環境からNiosIIまで無償で提供されてて,なんでもできる気がしてくるよ!
どうやったらこんなものが10000円程度で提供できるんだ,不思議!
bamboo touchで"くぱぁ"してみた.
bamboo touchペン付きを買ったので,どんな感じでピンチインとかしているのか気になって,調べてみた.
Wacom ペンタブレット Sサイズ イラスト&ビジネスに Bamboo CTH-460/K0
- 出版社/メーカー: ワコム
- 発売日: 2009/10/03
- メディア: Personal Computers
- 購入: 8人 クリック: 215回
- この商品を含むブログ (17件) を見る
とりあえずspy++で見てみたら,どうやら仮想キーボードでControlKeyを押して,そいで仮想マウスのスクロールをしている模様.
<00218> 00030B2A P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:0 fUp:0<00219> 00030B2A P WM_MOUSEWHEEL fwKeys:MK_CONTROL zDelta:120 xPos:531 yPos:494<00220> 00030B2A P WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
なので,適当にコードを書いてみた.フォーム上で"くぱぁ"した時.
Private Sub Form1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseWheel If Control.ModifierKeys And Keys.ControlKey = Keys.ControlKey Then If e.Delta > 0 Then '広げたときの処理 Else '閉じたときの処理 End If End If End Sub
まぁマウスホイールイベントが発生した時に,コントロールキーが押されているか調べて,ホイールの回転角が正なら広げている動作で,負なら閉じている動作というわけ.
というわけで,適当に画像を用意してくぱぁクラスを書いて動画にしてみた.
だれか画像きぼんぬ!
TrevaなるカメラをArduinoにつなげてみる.
つなげてみた.
trevaはクロックを与えるだけで,データを出力してくれる素敵なカメラ.
上のページの解析結果を参考にスケッチを描いてみる.
#include <stdio.h> #define CLK 8 #define DAT 9 #define BAUDRATE 115200 void setup() { pinMode(CLK, OUTPUT); pinMode(DAT, INPUT); Serial.begin(BAUDRATE); } void loop() { capture(); } void capture() { long magic = 0,i,k; int v = 0, u = 0, y = 0; int r = 0, g = 0, b = 0; unsigned char d; while((magic & 0xffffff) != 0xaa55ff) { magic <<= 1; if(readbit()) { magic |= 0x01; } } for(i=0; i<29*8; i++) { readbit(); } Serial.println("get!!"); for( k=0; k < 96*72*2; k++){ d = 0; for (i=0; i<8; i++){ d <<= 1; if(readbit()) d |= 0x1; } if((k & 0b11) == 0b00){ v = d - 128; }else if((k & 0b11) == 0b10){ u = d - 128; }else if((k & 0b11) == 0b01 || (k & 0b11) == 0b11){ y = d; r = u + y; g = 0.98 * y - 0.53 * u - 0.19 * v; b = v + y; if(r > 255) r = 255; if(r < 0) r = 0; if(g > 255) g = 255; if(g < 0) g = 0; if(b > 255) b = 255; if(b < 0) b = 0; Serial.print(r, DEC); Serial.print(" "); Serial.print(g, DEC); Serial.print(" "); Serial.print(b, DEC); Serial.print(" "); } } Serial.println(""); } int readbit() { int a; digitalWrite(CLK, HIGH); //delayClk(1); a = digitalRead(DAT); digitalWrite(CLK, LOW); //delayClk(1); if(a){ return 1; }else{ return 0; } } void delayClk(int clk) { int i; for(i=0;i<clk;i++); }
これをアップロードすると,シリアルポートからPPM画像のデータ部を出力する.
ので,適当に保存してimageMagickで変換してみた画像がこれ.
96*72画素しかないので,こんなもんだけど,ロボットカーコンテストで赤いパイロンを見分けるぐらいには使えるだろうと思い込む.
オリジナルの出力はYUVで,96*72*2バイト出力されるけど,Arduino本体のメモリには格納できない気がするので,どうやって画像処理するか悩む.
明るい,暗い,赤いっぽいものが目の前にある,とかそんなもんしか認識できないよなー,なんて妄想.
WiiモーションプラスをArduinoにつなげてみる.
手元に以前買ったモーションプラスのユニットがあったので,適当に検索していたらフォーラムにスケッチを見つけたので試してみるテスト.
Wiiリモコンと拡張デバイスはI2Cで通信しているので,サンプルスケッチはWireライブラリで繋げているだけのようだ.
なので,3.3VとGroundはArduinoの刻印通りつなげるとして,SCLとSDAはリファレンス通り
ArduinoボードのSDA(データライン)はアナログ入力ピン4、SCL(クロックライン)はアナログ入力ピン5です。
Arduino 日本語リファレンス
の様につなげてあげましょう.
今回はポリウレタン線で基板上から引き出して,ジャンパ線で接続しています.
あとは一番上のリンクのフォーラムのスケッチをアップロードしてかんりょ.
たかだか1500円のユニットに3軸ジャイロが入っていて,どこの家電量販店でも売っているなんて!
これはいい時代ですね(^q^)
ArduinoでGPSデータ受信できたおww
つい下のエントリで意地あけて,放置していたらいつのまにやら測位できてた.
部屋から出て10分ぐらいPC片手にぶらぶらしてても,測位できなくて,ずーっと部屋の窓際に放置していたら,おそらく2時間ぐらいたって4個だけ衛星が見つかった模様.
出力された数値を緯度経度それぞれ600000で割ってやれば,一般的な緯度経度の値になるので,GoogleMAPで調べてあげたら,しっかりと自宅の地図が出たので安心.
GPSって田舎とか関係ないよね!むしろ田舎の方が測位できるはずだよね!むしろそうあるべきだよね!!!