黄色いmbedのベータテスタ募集に当たったよ。
Posted by arms22 on 2011年12月26日

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
http://mbed.org/handbook/mbed-NXP-LPC11U24
mbed NXP LPC1768
http://mbed.org/handbook/mbed-NXP-LPC1768
「いいね!」っぽいボタンの作り方(回路とスケッチ編)
Posted by arms22 on 2011年12月25日

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

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

スケッチ
このスケッチでは、キャラクタ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);
}
CQ出版
売り上げランキング: 75421
リックテレコム
売り上げランキング: 92670
秀和システム
売り上げランキング: 71354
Arduino 1.0 リリース
Posted by arms22 on 2011年12月19日

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:
To:Serial.print(val, BYTE);
or
Serial.print(byteVal);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アドレスの割り当て
クライアントの接続 From:Ethernet.begin(macAddress);
To:Client client(server, 80);
if(client.connect())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:
To:Wire.send(0x10);
Wire.receive();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:
To:void write(uint8_t);
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日

目次
- 「いいね!」っぽいボタンの作り方(外箱編)
- 「いいね!」っぽいボタンの作り方(回路とスケッチ編)
イントロダクション
「いいね!」っぽいボタンの作り方を写真つきで解説するよ。作り方って言っても、中はこんなんですよーというお話です。この記事をベースに色々と
材料
- Arduino UNO 1個
DuemilanoveとかUSBにつながるものならなんでも良い。 - 超小型LCDキャラクタディスプレイ(秋月電子) 1個
お好きなサイズで。 - 化粧箱
お菓子とか化粧品とか贈り物とか、わりとしっかりした紙箱が良い。
作り方

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

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

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

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

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

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

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

キャラクタディスプレイのワイヤリングを行う。ユニバーサル基板にピンコネクタを立てて、ワイヤをはんだづけする。蓋を閉めた時にきつくならないように柔らかいワイヤを使うと良い。
次回は回路図とスケッチを公開するよ。
Make:Projectsの新刊。XBeeを使い倒したい方にオススメです。
オライリージャパン
売り上げランキング: 1475
Make: Tokyo Meeting 07に出展してきました。
Posted by arms22 on 2011年12月08日

ほぼ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。
(写真左)yuna_digickさんのバーグラフニキシー管オーディオスペクトラムアナライザ。相変わらずまとめがうまいです。部品の配置からワイヤの取り回しまで芸術的ですな。コンデンサが横一列に並んでいるところが一番好きかも。(写真右)jh3kxmさんのちっちゃいーのとちゅーくらいーの。机に反射した色が本来の色なんだけど、カメラでうまく撮れない。。
(写真左)芋虫みたいな抵抗ストラップ。(写真右)大きなルービックキューブ、自分で回転しやがります。
(写真左)自作のパタパタ時計の一部。(写真右)デルタUFOキャッチャー、Android端末で操作する。
ペーパーコネクト玩具。フックをつないで色々な形状のモノを簡単につくることができる玩具。パーツセットを買ったので後でこのLEDランタンっぽいやつを作る。
(写真左)懐かしいサッドマック。ハッピーマックもあるよ。(写真右)もふもふコミュニケーション。片方の尻尾をにぎるともう片方のしっぽがブルブルする。
24脚スケートボード。残念ながら試乗できませんでした。。
ペーパーコネクト玩具「Pekone(ペコネ)」をつくるまで
http://g-i-f.jp/2011/09/09/781/
Dotsライブラリ003リリース
Posted by arms22 on 2011年12月05日

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