ラベル arduino の投稿を表示しています。 すべての投稿を表示
ラベル arduino の投稿を表示しています。 すべての投稿を表示

2014年12月16日火曜日

[Arduino] Visual Studio で Arduino 開発環境を構築する

Arduino いじりを再開しました。
改めて公式の IDE が微妙だなと感じたので、Visual Studio で Arduino 開発ができるようにしてみました。

拡張機能を使って構築
参考にしたのはこちら。

Arduino for Visual Studio and Atmel Studio 拡張機能
まさに!な拡張機能があります。

ダウンロード・インストール
今すぐ入手ボタンを押すとダウンロードページが開きます。
ページの右側、Information のところに Download リンクがあるので、そこをクリックするとインストーラーをダウンロードできます。

ダウンロードできたら、インストールします。

次に、Visual Studio を起動すると、Visual Micro のライセンスダイアログが出ます。
基本機能は無料で使えるのですが、一部機能は有償になってます。
30日間トライアル版が付いていたのでとりあえず使ってみました。
今すぐ使いたくない場合はキャンセルしておきましょう。

続いて、Config ダイアログが開くので、使っている Arduino IDE のバージョンとパスを設定します。

設定は以上です。

プロジェクトの作成
メニューの「ファイル(&F)」>「新規作成(&N)」に「Sketch Project」があるので、クリック。

ダイアログが出るので、プロジェクト名を入力して OK ボタンを押します。

スケルトンが作成されるので、あとはコードを書くだけです。


ビルド・転送
ビルドは F7 押すだけです。


転送する際は、ツールバーに Arduino のバーがあるので、
そこでデバイスの種類と COM ポートを選択しておいてください。

設定ができたら後は Ctrl + F5 をするだけです。

シリアルモニター
Arduino IDE と同様にシリアルモニターが使用できます。
ツールバーのシリアルモニターのボタンを押すとウィンドウがでてきます。あとは、ボーレートを適切に設定するだけです。


デバッグ
デバッグ機能については、公式のドキュメントを御覧ください。
ブレークポイントを置けたりします。
※ デバッグ機能は有償です。(試用期間あり)

まとめ
Arduino for Visual Studio and Atmel Studio 拡張機能は、すごく便利でした。やはり、Visual Studio でコーディングできるのがとてもイイです。
しかも、基本機能は無料で使うことができます。
デバッグ機能が有償ですが、なくても問題にはならないでしょう。
とはいえ、Student or Hobby License なら手の出る価格ですので、機能次第では買ってもよいかもしれません。
有償機能は時間があるときに調べてみようと思います。

Visual Studio Community 2013 がリリースされました。
Express では使えなかった拡張機能(Add-in)が無料で使えるようになってます。
うれしいニュースですね^^

拡張機能が無料になったので、すべて無料の範囲で環境を整えられるようになりました。
というわけで、
Visual Studio Community 2013 + Arduino for Visual Studio and Atmel Studio 拡張機能
はかなりオススメです。


最後に
この記事を書き始めたのが 10月 くらいなので、それから環境構築するだけで Arduino には全く触れず…
当初の予定では、コマンドラインツール + Makefile プロジェクトについても書くつもりだったのですが、転送の部分で躓いているので今回は省きました。
コマンドラインツールでもできるようになったら、またブログに書きたいと思います。

というわけで、まだしばらくは環境構築してると思います。
(でも、ホントにそろそろ再開したいですねぇ…)

2014年7月1日火曜日

[Arduino] 電子回路設計ツール Fritzing

最近は Arduino と戯れていないのですが、
つい最近 Fritzing という電子回路設計ツールを知りました。

Arduino でググった時によく見る回路図がこのツールで書けます。
もっと早く知りたかった…

Fritzing Download

書いてみた
実際使って見たのですが、簡単操作でとっても良かったです。
いや~もっと早く知りたかった…orz



ただまぁ当然のことながら定義されていないパーツもあるわけです。
今回も、16x16 LED matrix と TD62783APG トランジスタアレイのパーツを作成しました。
パーツの作り方は割愛しますが、LED matrix のパーツ作りに手間取ったのでそこだけ書き残しておきます。

TD62783APG は同じような形のパーツを修正するだけでできましたが、LED matrix は 8x8 はあるものの 16x16 がなく、しかもピン数も異なっていたのでそこも変更する必要がありました。

ハマったところは、このコネクターピンを定義する部分です。id の命名にルールがあるようで、そこに気づかずかなりの時間を取られてしまいました…
そもそも、画像ファイルは .svg 形式なのですが、この編集にすら手こずりました… .svg 画像編集ソフトは inkscape を使いました。
画像編集にほとんど縁のない私ですが色々ポチポチやっているうちに、8x8 LED matrix の画像でコピペを駆使してブレッドボード用画像をなんとか作れるようにはなりました。

画像ができたのでコネクターを定義しようとおもいきや、svg のパスを D&D しても反応せず…
(Windows 版使ってるのですがツールのバグでしょうかねぇ…)


色々見てみた結果、.svg 画像の id 名で定義することがわかりました。
.svg ファイルはテキストデータ(xml)です。エディターで開いていただくと path やら g ノードに id 属性があると思います。これを "connectorXXpin" みたいな名前にすると認識してくれました。
(既存の .svg みると ***pad やら ***pin やらあるがそのへんはよくわからん)

id 名は inkscape の「オブジェクトのプロパティ」で変更できます。


これで画像が完成です。
(回路図、プリント基板用にも作る必要がありますが、今回はブレッドボードビューさえ出来てればOKなので割愛)
画像を読み込んでコネクタビューのコネクタリストにチェックがついていればOKです。





さて、イーサネットシールド買ってからほとんど何もしていないわけですが…


…暇になったらやります。

2014年2月7日金曜日

[Arduino] イーサネットシールドを買いました

Arduino イーサネットシールドを買いました。

昨年 Arduino Uno R3 で LED マトリックスをチカチカさせて遊びましたが、今年はイーサネットシールドを使って遊んでみたいと思います。
もちろん、購入した目的はあるのですが、まずはツイートでもさせてみましょうかね。








何か進捗があれば、またブログにでも書きます。
今回はこれだけです。ではでは。

2013年11月11日月曜日

Arduino はじめました(最終報告)

前回から大分時間が経ってしまいました。

結果から言うと、なんとかギリギリ出来上がりました…
(当日の朝まで、現場で調整してました…)
最終的には、このような形になりました。


前回までの配線では、点灯する LED の数で明るさに差ができてしまっていたので、
アノードにつながるシフトレジスタからの出力を、トランジスタアレイで増幅してます。


あと、原因がよくわかっていないのですが、
根本的な処理をライブラリ側に書き出していたのですが、
メイン側のデータ配列(LEDの点滅パターンとか)を増やすと、
なぜかライブラリ側のデータをぶっ壊すような挙動をすることがあったり、
単純にデータが多くてもぶっ壊れたり、よくわからない動作をしていたので、
やりたいことが全部載せられませんでした。。。
結局、その辺の調整をするために当日ギリギリまで作業することに…

色々と、点灯パターンを用意したのですが…残念。


とりあえず、目的は達成したのでしばらく Arduino からは離れますが、
そのうち、イーサネットシールドでも買って、Jenkins の XFD にでもしようかなと思います。





2013年10月1日火曜日

Arduino 自作ライブラリを作る

Arduino では C++ でライブラリを自作できるので、試してみました。

今現在、LED マトリックスで遊んでいるところなので、
それで使っている 74HC595 シフトレジスタの操作をライブラリにしてみたいと思います。

ライブラリの作成には以下のサイトを参考にしました。
arduinoIDEの使い方:自作ライブラリの作り方

ファイル構成
今回のライブラリ名は ShiftRegister とします。
構成は以下のように、任意フォルダの下に、ヘッダー・ソース・キーワードファイルを作ります。
[ShiftRegister]
|- lib74hc595.h
|- lib74hc595.cpp
|- keywords.txt
(ディレクトリ名とソースファイル名は異なっていても問題ありません。)

ヘッダー

#ifndef lib74hc595_H_
#define lib74hc595_H_
#include "arduino.h"

class ShiftRegister
{
public:
 ShiftRegister(int latch, int clock, int data);
 
public:
 void Begin(void);
 void Output(int mode, byte data);
 void Output16(int mode, int data);
 void End(void);
 
private:
 int latchPin, clockPin, dataPin;
};

#endif

Arduino の標準関数などは ardunino.h を include することで使用できます。

ソース

#include "arduino.h"
#include "lib74hc595.h"

ShiftRegister::ShiftRegister(int latch, int clock, int data)
: latchPin(latch), clockPin(clock), dataPin(data)
{
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
}

void ShiftRegister::Begin(void)
{
    digitalWrite(latchPin, LOW);
}

void ShiftRegister::Output(int mode, byte data)
{
    shiftOut(dataPin, clockPin, mode, data);
}
void ShiftRegister::Output16(int mode, int data)
{
    if( mode == LSBFIRST )
    {
        shiftOut(dataPin, clockPin, mode, (data   )&0xFF);
        shiftOut(dataPin, clockPin, mode, (data>>8)&0xFF);
    }
    else
    {
        shiftOut(dataPin, clockPin, mode, (data>>8)&0xFF);
        shiftOut(dataPin, clockPin, mode, (data   )&0xFF);
    }
}

void ShiftRegister::End(void)
{
    digitalWrite(latchPin, HIGH);
}


特に気にすることなく C++ のコードを書きます。
ピン操作などは標準で用意されていますので、ただ呼ぶだけです。

キーワード
キーワードファイルを設定することで文字に色を付けることができます。
今回は以下のように設定しました。

ShiftRegister KEYWORD1
Begin KEYWORD2
End KEYWORD2
Output KEYWORD2

セットアップ
ライブラリが書けたら、Arduino IDE に認識してもらえるようにセットアップします。
と、いってもやることは先ほど作成したライブラリをディレクトリごとコピーするだけです。

コピー先はこちら > %ProgramFiles%\Arduino\libraries

コピーしたら次は使ってみましょう。

使う
作成したライブラリを使うには IDE のメニューの「スケッチ」の「ライブラリの使用」にライブラリリストが表示されるので、その中から追加した「ShiftRegister」を選択します。(名前はディレクトリ名になります。)

すると、コードにライブラリのヘッダーが include されます。

使い方も C++ とほぼ一緒です。
#include <lib74hc595.h>

int latchPin = 8;  // 74HC595のST_CPへ
int clockPin = 12; // 74HC595のSH_CPへ
int dataPin = 11;  // 74HC595のDSへ
int ledPin = 13;

ShiftRegister sr(latchPin, clockPin, dataPin);

void setup() {
  pinMode(ledPin, OUTPUT);
}
 
void loop() {
  for (int j = 0; j < 16; j++) {
    sr.Begin();
    // シフト演算を使って点灯するLEDを選択しています
    sr.Output(LSBFIRST, (1<<j)>>8);
    sr.Output(LSBFIRST, 1<<j);
    if( j % 2 == 0 ) {
      digitalWrite(ledPin, LOW);
    } else {
      digitalWrite(ledPin, HIGH);
    }
    // 送信終了後latchPinをHIGHにする
    sr.End();
//    delay(100);
  }
}

ライブラリを使用したライブラリ
別のライブラリを使用して、新しいライブラリを作ることもできます。
その場合は、普通に使用したいライブラリのヘッダーファイルを include して、
後は普通にライブラリを書くだけです。

#ifndef ledmatrix_H_
#define ledmatrix_H_
#include "arduino.h"
#include "lib74hc595.h"

class LedMatrix
{
public:
    enum {
          RED
        , GREEN
        , ORANGE
    };
    enum {
        MODE_NORMAL
        , MODE_INVERT
    };
public:
    LedMatrix(int latch, int clock, int data
    , int latch_r, int clock_r, int data_r
    , int latch_g, int clock_g, int data_g);

public:
    void setmode(int mode);
public:
    void bitblt(const uint16_t red[16], const uint16_t green[16]);
    void bitblt(const uint16_t data[16], int color);
    
    void slideout_h(const uint16_t red[][16], const uint16_t green[][16]
                      , int num, int delay_n);
    void slideout_h(const uint16_t data[][16], int num, int delay_n, int color);
    void flashout(const uint16_t array[][16], int num, int delay_n, int color);
    
private:
    void setcol(uint16_t red, uint16_t green);
    uint16_t getclearbit();
    
public:
    ShiftRegister m_raw;
    ShiftRegister m_red;
    ShiftRegister m_grn;
    
    int m_mode;
};

#endif

まとめ
まとまったコードをライブラリにすることで、メインのコードをコンパクトに書けるようになりました。
また、使い慣れた言語で書ける点も良い所です。

さて、この LED マトリックスの納期まで残り一週間ほどになってしまいました(汗
ライブラリを使ってコードの使いましができるようにはなったので、ラストスパート頑張ります。
では。

2013年9月17日火曜日

続々・Arduino はじめました

さて、前回は LED を見事に焦がしてしまいましたが、
今回は、LEDマトリックスが届いたので、シフトレジスタも買って LED 光らせたので、そのご報告でございます。

シフトレジスタ
今回買ったのは 74HC595 です。
74HC595 を選んだ理由は、チュートリアルで使わていたからです。

というわけで、チュートリアルを見ながら制御してみました。
特につまずくところはありませんでした。
チュートリアルの通りに配線して、サンプルのコードをコピペですぐにできました。

(写真は撮り忘れたので割愛)
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  // count from 0 to 255 and display the number 
  // on the LEDs
  for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
    // take the latchPin low so 
    // the LEDs don't change while you're sending in bits:
    digitalWrite(latchPin, LOW);
    // shift out the bits:
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  

    //take the latch pin high so the LEDs will light up:
    digitalWrite(latchPin, HIGH);
    // pause before next value:
    delay(500);
  }
}

LED マトリックス点灯式
マトリックスの資料を見たら 5V って書いてあったので、大丈夫だろとぶっ刺しました。
(前回の反省が活かされていませんね…ゾクゾクしますね…)

アノード側にシフトレジスタからの出力をつなぎます。
とりあえず全部点灯でいいのでカソード側を GND に繋ぎました。


点いた\(^o^)/

ダイナミック点灯
さて、このままでは1行/1列ずつしか LED を制御できません。

一個一個の LED を制御するためにダイナミック点灯制御を行います。
ダイナミック点灯は、1つ(1列)ずつ点灯・消灯の操作をものすごく速いスピードでやることで、
人間の目にはすべての LED が同時に制御されているかのように見せる方法です。

シフトレジスタで 1bit ずつ出力するようにずらしながら、(制御ラインの選択)
もう一方の線で LED の ON/OFF を制御します。

int latchPin = 8;  // 74HC595のST_CPへ
int clockPin = 12; // 74HC595のSH_CPへ
int dataPin = 11;  // 74HC595のDSへ
int ledPin = 13;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
}
 
void loop() {
  // LED1からLED8までを順に光らせます
  for (int j = 0; j < 16; j++) {
    // 送信中のlatchPinはグランド(LOW)レベル
    digitalWrite(latchPin, LOW);
    // シフト演算を使って点灯するLEDを選択しています
    shiftOut(dataPin, clockPin, LSBFIRST, (1<<j)>>8);
    shiftOut(dataPin, clockPin, LSBFIRST, 1<<j);
    if( j % 2 == 0 ) {
      digitalWrite(ledPin, LOW);
    } else {
      digitalWrite(ledPin, HIGH);
    }
    // 送信終了後latchPinをHIGHにする
    digitalWrite(latchPin, HIGH);
    delay(100);
  }
}

1行だけですが、飛び飛びに LED を光らせることに成功しました~


デイジーチェーン
シフトレジスタ(74HC595) を複数つなげることで、少ないピンでよりたくさんの LED を制御できるようになります。
74HC595 の Serial Out ピンからの出力をつなげるもう1つの 74HC595 の Serial data input ピンにつなげてやります。

詳しくは、チュートリアルの Exsample2 を参照してください。

これにより、3本の制御線で 16個、24個、32個... の LED を制御できるようになります。
すごいですねぇ~

今回の LEDマトリックスは 48ピンですので、シフトレジスタが 6個必要になります。
アノード制御と赤色/緑色LED の制御にそれぞれ 16ピンずつ使い、それぞれ独立して制御しようと思っているので、
シフトレジスタを2個ずつ、デイジーチェーンでつなげました。



これで、単純計算で 6 x 3 の 18本必要だった線が、3 x 3 の 9本で済みました。

次回
次は TLC5940 を使って調光をできるようにしたいなぁと思っていたのですが、
時間があまりないので全部シフトレジスタで制御するようにして、
実コードを書いていきたいと思います。

では。

2013年8月12日月曜日

続・Arduino はじめました

Arduino の続報です。

あれから、ちょっと忙しくて全然コードを書けていない状態です…

とりあえず、ブレッドボード使って LED チカチカさせました。
そもそもブレッドボードってなんだ
そもそもブレッドボードの使い方がわからない、ってことでググったらいっぱい情報がでてきた。


とりあえず、+(赤) と -(青)は一直線につながっている。
それ以外は縦のラインがつながっているってことは理解しました。


(これは別のブレッドボードですが、こうやってみるとわかりやすいですね。)

調子に乗った…
13pin からの出力で LED チカチカはできたので、他のこともしてみようと
Arduino の 5V 出力から電源を取って、LED を接続してみたところ、

見事に焼き切れたΣ(゜□゜)っっ

とっても芳しい香りが…
あぁ、そうか。ですよねぇ…
抵抗つけなきゃダメですよねぇ…

LED マトリックスも届いたけど、先が不安…

2013年7月31日水曜日

Arduino はじめました

ちょっと個人的にやりたいことがあったので、Arduino をはじめました。
最終的な目標は LED マトリックス使って文字や絵を表示することです。
電子工作自体はじめてですが、頑張って納期までに完成させたいと思います。

まずは購入
というわけで、まずは Arduino を購入しました。
今回購入したのはこちら。


とりあえず、初心者なので入門キットを買いました。
LED マトリックスは目星をつけているのがあるのですが、Arduino に慣れてから購入するつもり。

早速 LED チカチカ
早速、届いたので開発環境をインストールして、サンプルを実行しました。

開発環境のインストールはこちらからしました。
http://arduino.cc/en/Guide/windows
サンプルの実行まで、手順が書いてあるのでそのとおりにやるだけでーす。


できた~(^O^)
delay の数値を弄って点滅スピードが変わるのも確認。

非常に簡単ですね!

次へ
今回購入した Arduinoをはじめようキット はこちらの本の内容を実践するためキットなのですが、

この本は買ってないのです。(2,100円だし買ってもいいのだけど…)

というわけで、早速次に何するか迷子になっているわけですが…
タクトスイッチと LED があるので、スイッチに反応して LED チカチカでも、やりましょうかね。

…えーと、ではまた次回!