このブログを検索

2015-01-31

AliExpressに注文した結果(到着日数編)


2015/02/14追記:さらに注文した結果どのくらいで届くかをこちらにまとめた。

Arduino関係のパーツはAliExpressで買うのが安いことがわかり、いくつか注文してみた結果。
「国際特殊通常書留」なるもので発送してくれた業者は、だいたい12日で到着することがわかった。

例1

2015/01/14にオーダー

2015/01/26に到着
(到着に要した日数:12日)

例2

2015/01/18にオーダー

2015/01/30に到着
(到着に要した日数:12日)

ただし、どれも書留なので平日に受け取るのは困難。実は、現時点ではどっちも受け取ってなくて不在票が投函された日を到着日としている。実物は週末受領予定。

2015-01-24

秋月のHDC1000(温度湿度デジタルセンサー)を動かしてみた

これを秋葉原で見つけたので買ってみた。
もともとVSTONEで間違えて買ったDHT11という温度湿度センサーでちょっと遊んでいたが、単線シリアルのよくわからないインターフェースだし、精度も良くないらしい

その点、HDC1000とやらはTI製なのでなんとなく安心感がある。

最初は自力でコードを書いてみたがまともに動かず、Google先生に聞いてみたところ中国だがサンプルコードを見つけた

このセンサーはI2C接続で、I2Cアドレスが秋月と違う以外はそのまま動いた。値を見る限り、湿度は問題なさそうだが温度は高めに出てる気がする。


//Copy from  http://will-123456.blogspot.jp/2014/12/hdc1000-arduino.html

#include <Wire.h>

#define addr 0x40
uint16_t readingT,readingH;
void setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("HDC1000 Test");
  sethdc();
}

void loop()
{
  readhdc();
  delay(1000);
}

void sethdc(){

  Wire.beginTransmission(addr);
  Wire.write(0x02);
  Wire.write(0x10);   //14 bit 14bit
  Wire.write(0x00);   //14 bit 14bit
  Wire.endTransmission();
  Wire.beginTransmission(addr);
  Wire.write(0x02);
  Wire.endTransmission();
  Wire.requestFrom(addr, 2);
  if(2 <= Wire.available())   
  {       
    readingT=0;
    readingT = Wire.read(); 
    readingT = readingT << 8;   
    Serial.print(" Config:");
    Serial.println(readingT,BIN);   
  }
  Wire.beginTransmission(addr);
  Wire.write(0xFB);
  Wire.endTransmission();
  Wire.requestFrom(addr, 3);
  if(3 <= Wire.available())   
  {       
    readingT=0;
    readingT = Wire.read(); 
    readingT = readingT << 8;   
    Serial.print(" ID:");
    Serial.print(readingT,BIN);
    Serial.println( Wire.read(),BIN);
  }

}


void readhdc(){
  Wire.beginTransmission(addr);
  Wire.write(0x00);
  Wire.write(0x00); 
  Wire.endTransmission();
  delay(20);

  Wire.requestFrom(addr, 4);
  if(4 <= Wire.available())   
  {       
    readingT=0;
    readingH = 0;
    readingT = (Wire.read()<<8);
    readingT+=Wire.read(); 
    readingH = (Wire.read()<<8);
    readingH+=Wire.read();
    Serial.print(" Temp:");
    Serial.print(readingT);
    Serial.print(" =>");
    Serial.print(readingT/65536.0*165.0-40.0);   
    Serial.print("  RH:");
    Serial.print(readingH);
    Serial.print(" =>");
    Serial.println(readingH/65536.0*100.0); 
  }



}



2015-01-20

HC-SR04(超音波センサー)の使い方を間違えると壊れる?

Amazonとかaitendoで安く売ってるを買ったが、速攻で壊した。
最初サンプルコードは動いていたが...
高サイクルで読みだすように変更するとお亡くなりに。
おそらく超音波の送信側スピーカーが、長時間超音波を出し続けるのに対応していないと思われる。

↓のサンプルコードを見る限り50msの間隔をあけて使ってる。それくらいだと壊れないのか??
https://code.google.com/p/arduino-new-ping/wiki/Simple_NewPing_Example

2015-01-19

ショートカット専用キーボード:ケースへボタン装着が完了

ボタンを装着するための箱の加工が完了。こんな感じです。
まあ素人レベルとしてはきれいにできたのでは。リーマーではなく切削で開けたので穴の円はいびつですが、ボタンの縁取りがいい感じに隠してくれる。


ボタンへの結線は、そのままはんだ付けしてやろうかと思っていたが、よくよく見ると110の平型端子のサイズっぽいので、圧着端子にしてみようと思う。挿抜できれば保守性も上がるし。


この穴あけには予想以上に時間がかかった。

  1. このケースはOP-125というやつだが、図面が公開されてるのでそれをもとに穴あけの図面を作って会社で印刷してそれを下地に使うつもりだったが、印刷して実物と合わせてみると全然サイズが合わないのである。たとえばこのケースは図面上横幅が125あるが、実際に定規を当ててみると123くらいしかない。それを印刷倍率で補正したりしながら作った。
  2. また、穴の径を適当に3cmとしたがこの縮小処理とそもそも小さ目だったせいで少しずつ広げていく必要があった。

ケースの加工は、あとUSBケーブルを引き込む穴あけが残っている。

2015-01-14

Arduino Uno互換機の値段

AliExpressだとすごい値段で売ってる
送料込みでも$5.27 (約645円)。いろいろワナがありそうだがとりあえず注文してみてもいいかと思う値段。


2015-01-10

死蔵してたXBee開発キットを引っ張り出してきた

Arduinoの"ゆめがひろがりんぐ"っぷりに感化されて、昔買うだけで満足して死蔵していたXBee開発キットを使ってみることにした。

同梱されてる説明の紙は「2006.04.28」と書いてある。。。 9年寝かせた基板、果たしてどうなっているか。。。 手持ちのキットは一番下の「XBee Starter Kit」。

PCと接続してみたところ。この開発キットには、シリアル接続用とUSB接続用、2種類のインターフェースボードが同梱されている。USBのもので接続し、開発キットやドライバをインストールしたところ、正しく動いていることを確認した。

開発キットの画面。とりあえず、2枚のモジュールのリンクが確立すていることがわかる。
ファームアップを試してみたところ、正常に成功した。激古のモジュールだが、いまでもちゃんとサポートされてるみたい。

シリアル基板側にデータを送れる人を接続したら、データの送受信も確認できるが、そういうのがないのでとりあえずはここまで。

Arduinoに接続してみようとしたが。。。 ブレッドボードとピンピッチが合ってない!
XBee接続対応しているシールドを買うか、ピンピッチ変換のボードを入手する必要がある。。。


追記:適当なデータを投げると受信側の基板のLEDが点灯するので、どうやら正しくデータは到達しているっぽい。

2015-01-05

Arduino Micro買ってみた

masaruさんがいろいろやってたのに触発されてみた。作りたいものはキーボードショートカットを一発入力する専用キーボード。




買ったもの(@VSTONE ROBOT CENTER):

買ったもの(@千石電商)

いろいろ試してみたところ、いくつか購入品に失敗があったが所望のソフトウェア設計は一瞬でできた。Arduino恐るべし。ただ複雑なモノの設計は逆に難しそうな感じはした。しかし、これだけ簡単にできると、人間側のアイデアの有無が露骨に問われる感じ。

失敗した点は以下
  • LED Brickと間違えて温湿度計を買ってしまった
  • OctopusのBrickは3ピンのケーブル接続が標準になっているが、Microにはそれに対応するピンがないので簡単接続できない。ブレッドボードとジャンパピンで接続するしかない
  • ADキーとかボタンスイッチとかは不要だった。Arduino側に内蔵プルアップ抵抗があるので、短絡するだけでキーが実現できる
とりあえず下記のような感じでコードを設計。ループ毎にウエイトが入っているのは、デジタル入力にチャタが生じてしまうため。

/*
 Shortcut Keyboard for Arduino Leonaldo/Micro
 written by Keiji Okamoto
 
 Based on following sample:
 http://www.arduino.cc/en/Tutorial/InputPullupSerial
 */

void setup(){
  //start serial connection
  Serial.begin(9600);
  //configure pin2 as an input and enable the internal pull-up resistor
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(13, OUTPUT);
  //initialize keyboard
  Keyboard.begin();
}

void loop(){
  //read the pushbutton value into a variable
  int firstkey = digitalRead(2);
  static int last_first_key = -1;

  int secondkey = digitalRead(3);
  static int last_second_key = -1;

  //print out the value of the pushbutton
  
  // Keep in mind the pullup means the pushbutton's
  // logic is inverted. It goes HIGH when it's open,
  // and LOW when it's pressed. Turn on pin 13 when the 
  // button's pressed, and off when it's not:
  if (firstkey == HIGH && last_first_key != firstkey) {
    //key released
    digitalWrite(13, LOW);
    Keyboard.releaseAll();
    last_first_key = firstkey;
    
    Serial.print(F("FirstKey="));
    Serial.println(firstkey);
  } 
  else if(firstkey == LOW && last_first_key != firstkey) {
    digitalWrite(13, HIGH);
    Keyboard.press(KEY_LEFT_GUI);
    Keyboard.press('m');
    last_first_key = firstkey;

    Serial.print(F("FirstKey="));
    Serial.println(firstkey);
  }

  if (secondkey == HIGH && last_second_key != secondkey) {
    //key released
    digitalWrite(13, LOW);
    Keyboard.releaseAll();
    last_second_key = secondkey;

    Serial.print(F("SecondKey="));
    Serial.println(secondkey);
  } 
  else if(secondkey == LOW && last_second_key != secondkey) {
    digitalWrite(13, HIGH);
    Keyboard.press(KEY_LEFT_GUI);
    Keyboard.press('l');
    last_second_key = secondkey;

    Serial.print(F("SecondKey="));
    Serial.println(secondkey);
  }
  
  delay(33);
}
ソフトはこれくらいでいいので、次はハードの加工(ケースを加工してボタンを入れる)に取り組む予定。