verus diary このページをアンテナに追加 RSSフィード

Effective ひとり生活++

2009-10-23

Altera CycloneIIIリファレンスボードDE0が届いた.

火曜日ぐらいに届いてた.土日を抜けば注文から3日ぐらいか.


パッケージは意外と普通.一般家電みたいw

f:id:verus:20091020082700j:image:w400


外箱をスライドすると中箱が出てきた.

f:id:verus:20091020082718j:image:w400


まず最初に出てきたのは,シリーズのカタログとCD-ROM.CDにはWEBからダウンロードできるものと同じものが入ってる.開発環境のQuartusとかリファレンスとかサンプルソースとか回路図とか.

f:id:verus:20091020082744j:image:w400


その下には,ボード本体と付属品が出てくる.

f:id:verus:20091020082758j:image:w400


ボード本体.アクリルパネルがあるとかっこいいよね.

f:id:verus:20091020082840j:image:w400


付属品は,ACアダプタと,USBケーブルと,滑り止めの足につけるキャップと,電源を外部から取り込むための線材.

f:id:verus:20091020082922j:image:w400



というわけで,これが内容品すべて.

これが10000円程度なのは,やっぱり驚異的.

FPGAに入門してみよう!と思う人にはかなりお勧めだと思う.

これだけで一通り動かすことができるしね.

2009-10-21

【追記した】mixiボイスとtwitterに同時ポストするスクリプトを書いてみた.GUIにも対応してみた.

【追記】TkGUIにも対応しておいた.



twitterでちょっと話題になったので,書いておく.


使い方.(Rubyインストールされている状態で!)


(下記ソース | カキソース(ってオイスターソースだっけ?))を保存して,中の

mixi_email = "hoge@hoge.jp"

mixi_password = "fugafuga"

twitter_id = "hoge"

twitter_password = "fugafuga"

について書き換えて,

コマンドラインで,

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していないのは,無駄に重くなることを恐れたため.


以上!

2009-10-15

すっごい安いAltera CycloneIIIのリファレンスボードを注文した.

Terasic社のCycloneIIIリファレンスボード DE0がソリトンウェーブで安く手に入るっぽい感じだったので,注文したみた.

http://www.terasic.com.tw/attachment/archive/364/image/001_500.jpg


[名称]DE0 開発学習ボード (アカデミック版)

[記号]DE0-A

[会員価格]\10,290(税込)

[発売日]2009/08/19

[分類]FPGA開発:Terasic

[単価]10,290円(税込)


■DE0 開発学習ボード (アカデミック版) : 株式会社ソリトンウェーブ


Terasic - All FPGA Main Boards - Stratix III - Altera DE0 Board


注文してから気がついたけれど,どうやらつい最近リリースされたものの模様.

New TerASIC DE0 FPGA board - MiniMIGtg68? - Amiga.org


CEATEC2009でも展示されていたようで,安価な環境としてかなり期待される存在.

no title


なんつったって,搭載CycloneIIIのロジックエレメントは,ディジタルデザインテクノロジ付録のLattice基板の3倍!

チップLED,7セグメントLED,スライドスイッチ,プッシュスイッチ,PS/2コネクタ,アナログVGAコネクタSDカードスロット,フラッシュメモリSDRAMまでしっかり搭載されている,やばい!

ついでに本来FPGA開発に必要とされる接続ケーブルも必要とせず,USBだけで接続できちゃう!

開発環境からNiosIIまで無償で提供されてて,なんでもできる気がしてくるよ!


どうやったらこんなものが10000円程度で提供できるんだ,不思議!

2009-10-04

bamboo touchで"くぱぁ"してみた.

bamboo touchペン付きを買ったので,どんな感じでピンチインとかしているのか気になって,調べてみた.

Wacom ペンタブレット Sサイズ イラスト&ビジネスに Bamboo CTH-460/K0

Wacom ペンタブレット Sサイズ イラスト&ビジネスに Bamboo CTH-460/K0


とりあえず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

まぁマウスホイールイベントが発生した時に,コントロールキーが押されているか調べて,ホイールの回転角が正なら広げている動作で,負なら閉じている動作というわけ.


というわけで,適当に画像を用意してくぱぁクラスを書いて動画にしてみた.

D


だれか画像きぼんぬ!

2009-09-18

TrevaなるカメラをArduinoにつなげてみる.

f:id:verus:20090918063558j:image:w400

つなげてみた.

trevaはクロックを与えるだけで,データを出力してくれる素敵なカメラ.

no title


上のページの解析結果を参考にスケッチを描いてみる.

#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で変換してみた画像がこれ.

f:id:verus:20090918063757j:image


96*72画素しかないので,こんなもんだけど,ロボットカーコンテストで赤いパイロンを見分けるぐらいには使えるだろうと思い込む.

オリジナルの出力はYUVで,96*72*2バイト出力されるけど,Arduino本体のメモリには格納できない気がするので,どうやって画像処理するか悩む.

明るい,暗い,赤いっぽいものが目の前にある,とかそんなもんしか認識できないよなー,なんて妄想.

WiiモーションプラスをArduinoにつなげてみる.

f:id:verus:20090918005629j:image:w400

手元に以前買ったモーションプラスのユニットがあったので,適当に検索していたらフォーラムにスケッチを見つけたので試してみるテスト

Wii Motion Plus Decoded

Wiiリモコンと拡張デバイスはI2Cで通信しているので,サンプルスケッチはWireライブラリで繋げているだけのようだ.


ちなみにWiiリモコンのピンアサインはこんな感じ.

Wiimote Expansion Port - HwB


なので,3.3VとGroundはArduinoの刻印通りつなげるとして,SCLとSDAはリファレンス通り

ArduinoボードのSDA(データライン)はアナログ入力ピン4、SCL(クロックライン)はアナログ入力ピン5です。

Arduino 日本語リファレンス

の様につなげてあげましょう.

今回はポリウレタン線で基板上から引き出して,ジャンパ線で接続しています.


あとは一番上のリンクのフォーラムのスケッチをアップロードしてかんりょ.


f:id:verus:20090918012449j:image:w400

エクセルプロットしてみたら,それっぽいので満足w


たかだか1500円のユニットに3軸ジャイロが入っていて,どこの家電量販店でも売っているなんて!

これはいい時代ですね(^q^)