なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

黄色いmbedのベータテスタ募集に当たったよ。

Posted by arms22 on 2011年12月26日 3  0


mbedのフォーラムでmbedの新型、「mbed NXP LPC11U24」のベータテスタ募集していたので、応募したら当選したよ。というか応募数が少なくて応募者全員がもらえたようですな。だめもとでも応募してよかった。

ベータテスタ募集:『mbed NXP LPC11U24』
http://mbed.org/forum/ja/topic/2952/

mbed NXP LPC11U24は32bit ARM Cortex-M0ベースのマイコンボードでUSBデバイスやバッテリーアプリケーションに最適なデバイスです。mbed NXP LPC1768に比べてメモリサイズが半分だったり、イーサーネットI/Fが省かれている分、価格は安く設定されるようです。

mbed NXP LPC11U24

mbed NXP LPC11U24

mbed NXP LPC11U24

mbed NXP LPC11U24
http://mbed.org/handbook/mbed-NXP-LPC11U24

mbed NXP LPC1768
http://mbed.org/handbook/mbed-NXP-LPC1768

「いいね!」っぽいボタンの作り方(回路とスケッチ編)

Posted by arms22 on 2011年12月25日 2  0

目次


イントロダクション


前回、「いいね!」っぽいボタンの外箱の作り方を解説したので、今回は回路とスケッチです。回路はものすごく簡単でボタンとキャラクタLCDだけ繋いでいます。キャラクタLCDの配線は少し多いけど、1本1本確実に配線していけば間違わないよ。
ブレッドボードの図と回路図は Fritzing を使って描いています。

Fritzing
http://fritzing.org/

回路


good_button_ブレッドボード
2番 → RS
3番 → Enable
4番 → D4
5番 → D5
6番 → D6
7番 → D7
8番 → ボタン
9番 → バックライトLEDアノード


回路図


good_button_回路図


スケッチ


このスケッチでは、キャラクタLCDに大きな文字を書くためにBigFontライブラリ、ボタンのチャタリング処理にBounceライブラリを使用しています。それぞれのライブラリを次のURLからダウンロードし、Arduinoのライブラリフォルダにコピーしてください。ライブラリをコピーしたらArduinoソフトウェアを再起動してください。

BigFont ライブラリ
http://code.google.com/p/arms22/downloads/detail?name=BigFont.zip

Arduino Playground - Bounce
http://www.arduino.cc/playground/Code/Bounce

スケッチは少し長いけど行っている処理は単純です。ボタンが押されたらカウンタ変数の値を1つ増やしEEPROMのアドレス0番に値を保存します。その後、値をキャラクタLCDに1.5秒間表示します。この間、次のボタン入力は受け付けません。ボタンの連打対策です。カウンタ変数の値が1971・3470の時、"Congratulations!"と表示します。

ボタンを10秒間長押しするとカウントダウンが始まり、5秒立つとカウンタ変数の値をリセットし、EEPROMの0番に0を書き込みます。

#include <LiquidCrystal.h>
#include <BigFont.h>
#include <Bounce.h>
#include <EEPROM.h>

// ピン定義
const int goodPin = 8;
const int backLightPin = 9;

// EEPROMアドレス定義
const int goodCountAdr = 0;

// LCDライブラリ(rs=2, enable=3, d4=4, d5=5, d6=6, d7=7)
LiquidCrystal lcd(2,3,4,5,6,7);

// ビッグフォントライブラリ
BigFont bigf;

// いいねボタン
Bounce good = Bounce(goodPin, 20);

// いいねカウント
unsigned int goodCount;

// サンキュウ表示時間
unsigned long displayTime;

void setup()
{
  // ピン入出力設定
  pinMode(goodPin, INPUT);
  digitalWrite(goodPin, HIGH);
  pinMode(backLightPin, OUTPUT);
  digitalWrite(backLightPin, HIGH);
  good.write(HIGH);
  // キャラクタLCDを初期化
  lcd.begin(16, 2);
  // キャラクタLCDをビッグフォントクラスにアタッチ
  bigf.attach(&lcd);
  // いいねカウントをEEPROMから読み出す
  goodCount = readInt( goodCountAdr );
  // カウント表示
  printNumber(goodCount);
  // 表示時間
  displayTime = 0;
}

void loop()
{
  // いいねボタン状態更新
  if( good.update() ){
    // オフからオン
    if( good.risingEdge() ){
      // いいねカウントアップしてEEPROMに書き込む
      writeInt( goodCountAdr, ++goodCount );
      // カウンタの値チェック
      if((goodCount == 1971) ||(goodCount == 3470)){
        int i;
        for(i=0; i<2; i++){
          printMessage(
          "Congratulations!",
          " you win! ");
          delayWithButton(1000);
          lcd.clear();
          delayWithButton(500);
        }
        printMessage(
        "Congratulations!",
        " you win! ");
        delayWithButton(5000);
      }
      else{
        // Thank youを表示
        printMessage(
        " Thank you! ",
        " :D ");
      }
      // 1.5秒後にいいねカウント表示要求
      delayWithButton(1500);
      // カウント値を表示
      printNumber(goodCount);
      //displayTime = millis();
    }
  }
  else{
    if( (good.read() == LOW) && (good.duration() > 10000) ){
      // リセット通知
      printMessage(
      " good count ",
      "will be reset :(");
      // 数秒まつ
      delayWithButton(5000);
      // カウントダウン
      for(int i=5; i>0; i--){
        printNumber(i);
        delayWithButton(1000);        
      }
      // いいねカウントクリア
      goodCount = 0;
      // 0書き込み
      writeInt( goodCountAdr, 0 );
      // リセット完了
      printMessage(
      " good count ",
      " reset! ");
      // 数秒まつ
      delayWithButton(3000);
      // カウント値を表示
      printNumber(0);
    }
  }

  if(displayTime){
    if((millis() - displayTime) > 1500){
      printNumber(goodCount);
      displayTime = 0;
    }
  }

}

// ディレイ with good.update
void delayWithButton(unsigned long ms)
{
  unsigned long start = millis();
  do {
    if((millis() - start) > ms){
      break;
    }
    good.update();
  }
  while(1);
}

// メッセージを表示
void printMessage(const char *msg1, const char *msg2)
{
  lcd.clear();
  lcd.print(msg1);
  lcd.setCursor(0, 1);
  lcd.print(msg2);
}

// 数字を右詰めで表示
void printNumber(int number)
{
  bigf.clear();

  if(number >= 1000){
    bigf.setCursor(0, 0);
  }
  else if(number >= 100){
    bigf.setCursor(4, 0);
  }
  else if(number >= 10){
    bigf.setCursor(8, 0);
  }
  else{
    bigf.setCursor(12, 0);
  }
  bigf.print(number);
}

// EEPROMからintを読む込む
unsigned int readInt(int adr)
{
  return (EEPROM.read(adr+1) << 8) | (EEPROM.read(adr+0));
}

// EEPROMにintを書き込む
void writeInt(int adr, unsigned int dat)
{
  EEPROM.write(adr+0, (dat ) & 0xff);
  EEPROM.write(adr+1, (dat >> 8) & 0xff);
}







Arduinoスーパーナビゲーション しくみと応用テクニック
サンハヤト株式会社 Arduino愛好会 河連 庸子 山崎 文徳 神原 健
リックテレコム
売り上げランキング: 92670



Arduinoで電子工作をはじめよう!―たのしい電子工作
高橋 隆雄
秀和システム
売り上げランキング: 71354



Arduino 1.0 リリース

Posted by arms22 on 2011年12月19日 0  0

arduino-1_0-screenshot.png

11月30日にArduino 1.0がリリースされました。1つの節目としてさまざまな変更が加えられおり、標準ライブラリや内部構造が大きく変更されています。既存のスケッチやライブラリは少なからず手を入れないと動作しない場合が多いようです。。僕が公開しているスケッチやライブラリも修正しないと動かないもがほとんどです。。順次対応していきます。

Arduino Software
http://arduino.cc/en/Main/Software

Arduino Software Release Notes
http://arduino.cc/en/Main/ReleaseNotes


開発環境


  • 新しい拡張子
    従来の .pde から .ino に変わりました。"Arduino"の最後の3文字、"ino"の部分だそうです。
  • 新しいツールバーアイコンに新しいカラースキーム
  • 選択されているボードとシリアルポートの表示
  • プログレスバーの追加
    コンパイルとアップロードの進捗が画面右下に表示されます。また環境設定で compilation と upload にチェックを入れておくとコンパイルとアップロードの詳細情報がコンソールに表示されます。


コア/標準ライブラリ

  • Serial送信の非同期化
    Serial.print()などデータの送信はバックグラウンドで行われるようになりました。Serial.flush()は受信データを破棄する処理から、送信データがすべて送信されるまで待つ処理に変更されました。
  • Serial.print(byteVal)は数値を文字として送信
    byte型を数値のまま送信したい場合は Serial.write(byteVal) を使います。あわせてBYTEキーワードも廃止されました。
    From:
    Serial.print(val, BYTE);
    or
    Serial.print(byteVal);
    To:
    Serial.write(byteVal);

  • Streamクラスに文字列パース関数を追加
    データを検索する find() と findUntil()、文字を数値に変換する parseInt() と parseFloat()、タイムアウト付きの読み込み関数 readBytes()とreadBytesUntil()が追加されました。setTimeout()を使ってタイムアウト時間を設定します。
      find(target);
    findUntil(target,term);
    readBytes(buffer,length);
    readBytesUntil(term,buffer,length);
    parseInt();
    parseFloat();
    setTimeout(timeout);

  • SoftwareSerialクラスの再実装
    NewSoftSerial が標準ライブラリとして取り込まれました。NewSoftSerialは複数のシリアルポートを制御することができます。受信できるのは1度に1つのポートだけです。
  • プログラムメモリに格納された文字列のプリントに対応
    次のように F() マクロで文字列をかこってやるとプログラムメモリから文字列が読み出されます。
    Serial.print(F("hello world")).

  • Stringクラスの再実装
    より安定したメモリ効率の良いバージョンになりました。
  • EthernetライブラリにDHCPとDNSのサポート追加
    begin(macAddress)とするとDHCPでIPアドレスを割り当てられます。localIP()でDHCPで割り当てられたIPアドレスが取得できます。Clientの接続はホスト名を指定して接続することができます。またいくつかのクラスにEthernetプリフィクスが追加されました。ClientはEthernetClient、ServerはEthernetServer、UDPはEthernetUDPに変更さました。IPアドレスを表す IPAddress クラスが追加されました。
    DHCPによるIPアドレスの割り当て
    Ethernet.begin(macAddress);
    クライアントの接続 From:
    Client client(server, 80);
    if(client.connect())
    To:
    EthernetClient client;
    if(client.connect("www.google.com",80))

  • UDP API変更
    他のストリーム系ライブラリと同様 write()、print()、println() に統一されました。データの送信はbeginPacket()とendPacket()で囲む必要があります。受信パケットのチェックはparsePacket()。送信元情報を取得する remoteIP() と remotePort() が追加されました。
    EthernetUDP udp;
    udp.beginPacket(ip,port);
    udp.write(data);
    udp.endPacket();

  • Wire API変更
    send()→write()、receive()→read()。Streamクラスを継承しているので print() や println() なども使えます。
    From:
    Wire.send(0x10);
    Wire.receive();
    To:
    Wire.write((byte)0x10);
    Wire.read();

  • SDライブラリの複数ファイルオープン対応
    ディレクトリを操作するための関数 isDirectory()、openNextFile()、rewindDirectory() が追加されました。


内部

  • Arduino APIを定義したヘッダの名称変更
    WProgram.h→Arduino.h に変更されました。以下のようにARDUINOマクロをチェックするコードを入れることでArduino 0022以前のバージョンと互換性を持たせることができます。
    #if defined(ARDUINO) && ARDUINO >= 100
    #include "Arduino.h"
    #else
    #include "WProgram.h"
    #endif

  • Printクラスのwrite()、print()、println()の戻り値をvoid型からsize_t型に変更
    write() は書き込まれたサイズを返します。Printクラスを継承するクラスは次のようにwrite()の戻り値を書き換え必要があります。
    From:
    void write(uint8_t);
    To:
    size_t write(uint8_t);

  • ネットワークアクセス用の抽象クラスClient、Server、UDPを追加
    EthernetClient、EthernetServer、EthernetUDPはこれからのクラスを継承しています。
  • Arduinoボードのピン定義ファイルを追加
    harware/variantsディレクトリ以下にArduinoボード毎のピン割り当てを定義したファイルを配置しています。
  • pins_arduino.h にArduinoボードの仕様に関する情報を追加(デジタル・アナログピンの数やSPIやI2Cの位置など)
    #define NUM_DIGITAL_PINS
    #define NUM_ANALOG_INPUTS

    const static uint8_t SS;
    const static uint8_t MOSI;
    const static uint8_t MISO;
    const static uint8_t SCK;

    const static uint8_t SDA;
    const static uint8_t SCL;
    const static uint8_t LED_BUILTIN;



関連情報


Arduino 1.0 now available.
http://arduino.cc/blog/2011/11/30/arduino-1-0-now-available/

Arduino IDEが新しくなりました(その2)
http://www.eleki-jack.com/FC/2011/12/arduino-ide2.html

Arduino IDEが新しくなりました(その1)
http://www.eleki-jack.com/FC/2011/12/arduino-ide1.html

オープンソースの自作マイコンシステムArduino、ソフトウェアバージョン1.0がリリースされる
http://sourceforge.jp/magazine/11/12/02/0444216

Arduino 1.0 is Out: Here’s What You Need To Know
http://blog.makezine.com/archive/2011/12/arduino-1-0-is-out-heres-what-you-need-to-know.html

Initial Review ? Arduino v1.0 IDE
http://tronixstuff.wordpress.com/2011/12/10/initial-review-arduino-v1-0-ide/


「いいね!」っぽいボタンの作り方(外箱編)

Posted by arms22 on 2011年12月13日 1  0

目次


イントロダクション


「いいね!」っぽいボタンの作り方を写真つきで解説するよ。作り方って言っても、中はこんなんですよーというお話です。この記事をベースに色々と魔改造アレンジしてみてください。

材料


作り方


「いいね!」っぽいボタンの作り方

化粧箱の蓋に10x10cmの穴をあける。化粧箱の蓋は中のスイッチになっている部分を押さえるためのフレームの役割を担っている。穴のサイズは使用する化粧箱のサイズに合わせて変更してください。

「いいね!」っぽいボタンの作り方

化粧箱の蓋を外すとスイッチの押す部分がでてくる。これはスチレンボードを2枚重ねたものに、カラープリントした紙を、紙のりで貼り付けてある。プリンタを持ってない人はnetprint を使うと良いよ。

「いいね!」っぽいボタンの作り方

スイッチ部分をはずとArduinoとスイッチのバネが見える。

「いいね!」っぽいボタンの作り方

スイッチのバネは0.5mmのプラバンを2cm幅にカットしたもの使う。0.5mmのプラバンは想像以上にスイッチのバネとして使える。プラバンの幅を変えればバネの跳ね返りの強さがかわる。

「いいね!」っぽいボタンの作り方

スイッチの裏の4隅には押し下げ時のガイドとして、竹ひごを2cmに切ってものを接着する。

「いいね!」っぽいボタンの作り方

ガイドの受けにはスタバのストローを2cmに切ったものを使う。ガイドがあるとスイッチを押したり離したりした時にスムーズに動作するようになる。

「いいね!」っぽいボタンの作り方

Arduinoへのスイッチの入力には少し大き目のマイクロスイッチを使う。マイクロスッチの「カチッ」というクリック感が「いいね!」っぽいボタンにもいい感じのクリック感をもたらす。

「いいね!」っぽいボタンの作り方

キャラクタディスプレイのワイヤリングを行う。ユニバーサル基板にピンコネクタを立てて、ワイヤをはんだづけする。蓋を閉めた時にきつくならないように柔らかいワイヤを使うと良い。

次回は回路図とスケッチを公開するよ。


Make:Projectsの新刊。XBeeを使い倒したい方にオススメです。

XBeeで作るワイヤレスセンサーネットワーク (Make: PROJECTS)
Robert Faludi
オライリージャパン
売り上げランキング: 1475


Make: Tokyo Meeting 07に出展してきました。

Posted by arms22 on 2011年12月08日 0  0

IMGP1010

ほぼ1年ぶりにMake: Tokyo Meetingに行ってきたよ。早いもので今回で7回目。回を重ねるごとに出展者数と来場者数が増えていたけど、今回とうとう大台にのったらしい。僕のブースにも沢山の人が来て、キットを買ってくれたり、「ブログ見てますよ」と声をかけてくれたりしてくれた。僕はいつもみたいにスタバカップアンプを展示して、キットを販売して、来てくれた沢山の方と話をした。僕がサボってる間に来てくれた人も沢山いたみたいで、、、留守にしてゴメンナサイ。

キットの方は順調に売れてスタバカップアンプは初日にほとんど売れてしまった。Dotsduinoも持って行った数の4分の3ぐらい売れた。残った分はまたスイッチサイエンスさんで販売してもらうので、買えなかった人はスイッチサイエンスさんへ(笑)

2011/12/14
少量ですが、スイッチサイエンスさんで販売再開しました。
http://www.switch-science.com/products/detail.php?product_id=510


そうそう「いいね!」っぽいボタンのプレゼント、色々小細工したり、連打する子供と戦ったりしたけど、なんとか無事に2人の方に渡すことができた。スタバカップアンプキットは”自作好きおじさん”、Dotsduinoキットは ytsuboi さんにプレゼントした。半ば強引だったけど沢山の「いいね!」をありがとう!

恒例の写真でふりかえるMake: Tokyo Meeting。

IMGP0900 IMGP0688
(写真左)yuna_digickさんのバーグラフニキシー管オーディオスペクトラムアナライザ。相変わらずまとめがうまいです。部品の配置からワイヤの取り回しまで芸術的ですな。コンデンサが横一列に並んでいるところが一番好きかも。(写真右)jh3kxmさんのちっちゃいーのとちゅーくらいーの。机に反射した色が本来の色なんだけど、カメラでうまく撮れない。。

IMGP0683 IMGP0672
(写真左)芋虫みたいな抵抗ストラップ。(写真右)大きなルービックキューブ、自分で回転しやがります。

IMGP0684 IMGP0667
(写真左)自作のパタパタ時計の一部。(写真右)デルタUFOキャッチャー、Android端末で操作する。

IMGP0662 IMGP0663
ペーパーコネクト玩具。フックをつないで色々な形状のモノを簡単につくることができる玩具。パーツセットを買ったので後でこのLEDランタンっぽいやつを作る。

IMGP0980 IMGP0977
(写真左)懐かしいサッドマック。ハッピーマックもあるよ。(写真右)もふもふコミュニケーション。片方の尻尾をにぎるともう片方のしっぽがブルブルする。

IMGP0966
24脚スケートボード。残念ながら試乗できませんでした。。



ペーパーコネクト玩具「Pekone(ペコネ)」をつくるまで
http://g-i-f.jp/2011/09/09/781/


Dotsライブラリ003リリース

Posted by arms22 on 2011年12月05日 25  0

IMGP1044

Dotsduinoのソフトウェアライブラリ「Dots」の新しいバージョン003をリリースしました。変更点はArduino 1.0 の対応と新しいドットマトリクスの対応です。

MTM07で販売したDotsduinoからドットマトリクスが新しくなり(写真)、ピン配置が変わりました。その為、Dotsライブラリのピン割り当も変更しています。このDotsライブラリは新しいドットマトリクスと旧ドットマトリクスを自動的に判別するので従来のDotsduinoでもそのままお使いいただけます。

Dots 003
http://code.google.com/p/arms22/downloads/detail?name=Dots-003.zip

Arduinoソフトウェアはバージョン1.0以降をお使いください。Arduinoソフトウェアは以下のURLからダウンロードできます。

Download the Arduino Software
http://arduino.cc/en/Main/Software


変更点

  • 新しいドットマトリクスに対応
  • Arduino 1.0 に対応
  • 新しいサンプルを追加(UFOとカニ)


関連URL
該当の記事は見つかりませんでした。