2550コネクタ(QIコネクタ)の圧着を動画に撮った

投稿日:

IMG_3290 このブログは、なぜか「2550コネクタ」で検索して見に来る方が多い。

 なにかニーズでもあるのかしらん、とも思うので、圧着方法を動画に撮って解説してみた。ピンボケだが……

● 過去記事

● 2550コネクタ、QIコネクタの圧着
● 2550コネクタ、またはQIコネクタ

2550コネクタ、QIコネクタの圧着

投稿日:

IMG_3612 なぜか、標記「2550コネクタ(QIコネクタ)」について調べる方が多い。

 以前にこんな記事を書いたのだが……

……この記事を見る人が非常に多い。多分、電子工作をするときにこのコネクタの圧着で、うまく行かない方がけっこういるのかもしれない。

 私はこのコネクタを作るのは、得意だ。他のサイトでも詳しく書いておられるところがあり、私がいろいろと書くのは余計な気もするが、少しばかり知っているコツもあるので、ひとつ、世の中への奉仕のため、それを書き留めておこう。

  •  被覆の剥き長さ
  • IMG_3608_2mm QIコネクタの金属のカシメ部分は2ミリほどの長さがある。電線の芯線がちょうどここに収まるように被覆を剥くのが基本だ。しかし、日曜工作で電線の被覆を2ミリピッタリに剥くのは難しい。被覆に弾力があって伸び縮みするからだ。それで、私は4ミリほど剥いている。この4ミリ、私が使っている「大西工業(株)No.150 MINIクリンピングプライヤー」の場合、工具の厚みが3ミリほどであり、また、被覆を剥く刃の部分の、斜めになったところが4ミリほどなので、これに電線をあてて4ミリの目安にしている。

    4ミリの目安IMG_3605_4mm

  •  圧着工具に、先に金具だけを噛ませる
  •  金具に電線をつけて工具に噛ませようなんてしても、絶対にうまく行かない。金具だけを先に工具に軽くかませる。

    IMG_3608

     その時、この金具はちょっと力を入れても、すぐにカシメられてしまうので、やさしく工具を握る。

     私の持っている工具の場合は、一番手前の、「AWG22/0.3mm^2」のダイスが2550コネクタ用である。ダイスの中央部分に、金具のカシメ部分がちょうど乗るように良く見て噛ませる。

    噛ませたところを左から見る
    IMG_3609

    右から見る
    IMG_3610

    真上から見る
    IMG_3611

  •  電線はダイスに金具を正しく噛ませてから差し込む。
  •  写真のようにする。

    IMG_3612

     あとは、おもむろに「キュッ」と握ってカシメると、ポリッ、と手ごたえがあってしっかり締まる。

     被覆部分の「巻き締め」は、以前にも引用したデジットのブログを参考にするとよい。

    うまく付いた金具(被覆はまだ巻き締めていない)
    IMG_3613

    被覆を巻き締めたあと、ハウジングを付けたところ
    IMG_3614

2550コネクタ、またはQIコネクタ

投稿日:

 Raspberry PiのGPIOに何かをつなごうとして、何の用意もしていないと戸惑うのが、

「Raspberry PiのGPIO端子は、オスだ」

……ということかも知れない。

 Raspberry Piの端子は、2.54mmピッチのピンヘッダだ。このピンヘッダには、2550、あるいはQIとも言われるコネクタを使うと接続することができる。

IMG_3290

上段左からQIコネクタメス端子、同オス端子。
下段左から6列のQIコネクタハウジング、同5列、同4列、バラの1列。
もちろん、2列も売られている。

 上の写真はそのQIコネクタ類だが、それで言えば、一番左のメスの端子を切り外し、適切な電線に圧着してハウジングを取り付ければ、それをRaspberry Piに接続できるようになる。

 ところが、どうもこの「QIコネクタ」、情報が少ない。作り方にも多少のコツがある。それで、私が書こうか、と思ったら、既に詳しく紹介されているサイトがあった。

 もう、このサイトが書いておられること以上には付け加えることなどないが、工具については、5年前に私のブログでも紹介しているので、参考にする方がいるならお役立ていただきたい。エントリは5年前のものだが、昨日(平成27年8月15日(土))千石電商本店の1階に立ち寄ったところ、まったく同じ工具がほぼ同じ値段で売られていたことを付け加えておきたい。

 私のエントリで紹介している工具は、大西工業株式会社の「No.150 MINI クリンピングプライヤー」である。この工具を使う場合は、一番手前の「AWG22・0.3mm^2」のダイスで導線をかしめ、被覆は一つ隣の「20・0.5」のダイスで半分だけかしめて、残りを普通のラジオペンチで締めあげるとよい。

その工具(大西工業(株)No.150 MINIクリンピングプライヤー)
IMG_3291

 私のエントリでも触れている通り、QIコネクタは、Raspberry Piや電子工作だけではなく、PCの内部など、いろいろなところで使われている規格なので、覚えておけば何か修理や改造の必要に迫られたときに役立つと思う。

 QIコネクタやそのハウジングは、秋葉原千石電商本店なら、入り口から見て左側の、一番奥より少し手前の小さい抽斗の中段くらいに入っている。

 5年前当時は、使い方が良く分からなかったので、レジの店員さんに「このコネクタ、カシめ方と、使う工具を教えてもらえませんでしょうか」と頼んだら、得たりとばかりの落ち着いた態度で、実際の使い方とコツ、注意点を、店のディスプレイ用にとっておいてある端子だと思うが、それで実演してくれたものであった。若い店員さんだったが、その該博な知識と技に驚嘆したものであった。

 先日、八潮の秋月電子の初老の店員さんは、「これにハウジングみたいなモンは存在しませんよ」と言っていたが、千石電商にはあるので、秋月に行って見つからなければ、千石電商で買うとよいと思う。

 私も、秋月電子八潮店で、「いや、ありますよ」と店員さんに直接教えて上げられればよいのだが、私は素人なので、プロに対してそこまでする義理はないだろう。

ブレボー亀の子

投稿日:

 ブレッドボードに小さいプロトタイプを作るとき、この「プロトタイピングシールド」も捨てがたい。だが、しばらく使ってみての感想なのだが、小さくて不便だ。また、電源ラインもどうも使いづらい。シールド上の赤ソケットには実は5Vは到達していないので、自分で配線しなければならないのだ。

便利だが、小さいところが難
IMG_3031

 と言って、大きい方だと、Arduinoに重ねるわけにもいかず、昨日のようになってしまう。

たかが7セグLED2個のためにゴチャつくブレッドボード(笑)
IMG_3240

 何かいいことないかな、と思ってネットを漁っていたら、ある方がブレッドボードの脇に直接Arduino用のピンヘッダを接着剤で取り付けて、目的を達成しておられるのを見つけた。ほほー、なるほどなるほど……。

 つまり、大抵のブレッドボードは、同じメーカーの物なら、こういうふうに脇を取り外したり組み合わせたりできるのだが、電源ラインを一つ外すと、Arduinoの上下のピン幅とピッタリなのである。

IMG_3252
IMG_3253

 チナミに、このようにバラしたり組み合わせたりするには、ブレッドボード裏の両面テープの、つけ外しする部分をカッターナイフでスーッと切ると良い。

 しかし、接着剤でピンソケットを付けてしまう、てのも、なあ……。他のことにブレッドボードが使えなくなってしまうし……。

 で、考えてみたら、私は次の写真のようなArduino用のプラスチックケースを使っているが……

IMG_3254

……この上に電源ラインを一本外したブレッドボードを亀の子にし、輪ゴムか何かで縛っておけば、目的は達成できるではないか。

IMG_3255

 どうして今までこうしなかったかと言うと、そのままだとプラスチックケースの上下に細く開けてあるピンソケットにアクセスするためのスリットがふさがり、Arduinoから信号線が出せないからである。しかし、電源ラインを外すと、上下ともちょうどピッタリ、スリットが隠れずにすむのだ。

 ほうほう、なるほど、というわけで、この前作ったビーズのLEDなど植えてみる。Arduinoの「Arduino AT HEART♥」みたいな感じで、ハートですな、男のくせにw。

IMG_3256

 動かすとこんな感じ。

 このLチカはシンプルで、スケッチはこう。

//
//  differSin.ino
//    サインカーブをちょっとづつずらしてLチカ
//    佐藤俊夫
//    27.08.11(火) 1100~
//    
void setup() {
  pinMode( 9, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop() {
  static float x1 = 0.0, x2 = 0.0;
  x1 = x1 > (2.0 * PI) ? 0.0 : x1 + (2.0 * PI / 1000.0);
  x2 = x2 > (2.0 * PI) ? 0.0 : x2 + (2.0 * PI / 1100.0);
  analogWrite( 9, (int)((sin(x1) + 1) * 128));
  analogWrite(10, (int)((sin(x2) + 1) * 128));
  delay(2);
}

 そう言えば、以前、「なんとっ!Arduinoって3項演算子ないのかッ!?」「ううっ、あったらなあ」などと書いたことがあったが、これは早とちりで、私の間違い。ちゃんとありました。上記スケッチでご覧のとおり(苦笑)

ついでにこれもマネして

投稿日:

 ついでに、これも武蔵野電波のマネをしてみた。

IMG_3193

 これは、100円ショップのビーズを買ってきてLEDを埋め込み、紙コップに「LED生け花」をしてみたものだ。

 この中身には、小さいブレッドボードにLEDの電流制御抵抗と、3端子レギュレータで電源回路が仕込んである。

IMG_3195

いよいよ多機能リモコン

投稿日:

 LEDを強力に光らせることが出来たので、いよいよWebサーバつき多機能リモコンを作成する。卓上などに置いておき、ネットワークにつないで、スマホなどから複数の電化製品を操作できるというものだ。

 ここでは、いくつかのテクニックを使った。

 一つは、フォームが大きくなってしまい、ハードコーディングするとメモリが足りなくなる。そこで、SDカード内にHTMLを置き、これを読み出すようにした。

 同様に、リモコンから読み取った数値データが大きくなって、普通にハードコーディングしたのではメモリが不足する。そこで、「PROGMEM」というキーワードを使って、フラッシュメモリ内にデータを置き、これを読み出すようにした。

IMG_3134 ETHERNET SHIELD 2を遺憾なく使う。SDカードを取り付けられるから、そこにHTMLを書き込んでおけばよい。FETをつけたブレッドボードと一緒に、買っておいたSparkfunの基盤に固定する。

 SDカード内には、次のようなHTMLを置き、ファイル名を「irform.htm」とする。

<html>
 <head>
  <meta name="Editor" content="Notepad.exe">
  <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS">
  <title>Webリモコン</title>
  <basefont size=4>
 </head>

 <body bgcolor="#ddffdd">
  <center>
   <h1><b>Webリモコン</b></h1>
     <table>
      <tr><td> 作成者   </td>
       <td align="right">佐藤俊夫</td></tr>
      <tr><td> 作成日時 </td>
       <td align="right">27.07.19 (日) 1835</td></tr>
     </table>
  </center>
  <hr>
  <center>
    <form method="get" name="irremote">
    <table border=1>
      <tr><th>機器</th><th>ボタン</th></tr>
      <tr>
        <td rowspan=4>扇風機</td>
        <td><input submit type="submit" value="入/風量" name="fan_on"></td>
      </tr>
        <tr><td><input submit type="submit" value="タイマー" name="fan_timer"></td></tr>
        <tr><td><input submit type="submit" value="首振" name="fan_swing"></td></tr>
        <tr><td><input submit type="submit" value="切" name="fan_off"></td></tr>
      </tr>
      <tr>
        <td rowspan=5>テレビ</td>
        <td><input submit type="submit" value="入/切" name="tv_on_off"></td>
      </tr>
        <tr><td><input submit type="submit" value="音量大" name="tv_volup"></td></tr>
        <tr><td><input submit type="submit" value="音量小" name="tv_voldown"></td></tr>
        <tr><td><input submit type="submit" value="チャンネル>" name="tv_chup"></td></tr>
        <tr><td><input submit type="submit" value="チャンネル<" name="tv_chdown"></td></tr>
    </table>
    </form>
  </center>
 </body>
</html>

irform 上のHTMLの見た目はこんな感じだ。

 スケッチは次のようになる。

//
//  Web2IRremote.ino
//    リモコンをウェブで操作する。
//    27.07.25(日) 1930
//    佐藤俊夫
//
#include <SPI.h>
#include <Ethernet2.h>
#include <SD.h>
#include <IRremote.h>
#include <avr/pgmspace.h>
//
byte mac[] = {  0x90, 0xA2, 0xDA, 0x0F, 0xF6, 0x74 };
IPAddress ip(192, 168, 1, 129);
EthernetServer SERVER(80);
EthernetClient CLIENT;
IRsend irsend;
PROGMEM
  const unsigned int
    fan_on[]     = {4500,2150, 600,500, 650,500, 600,500, 600,500, 600,1650, 600,1600, 650,1550, 650,500, 600,1600, 650,1600, 600,1600, 650,450, 600,1600, 650,500, 600,500, 650,500, 600,1600, 600,500, 650,500, 600,500, 600,500, 600,500, 600,1650, 600,500, 600,500, 600,500, 650,1600, 600,1600, 600,1650, 600,1600, 600,500, 650,500, 600,0},
    fan_timer[]  = {4500,2150, 550,550, 550,600, 550,550, 600,500, 550,1700, 500,1700, 550,1650, 550,600, 550,1650, 550,1700, 500,1700, 550,600, 500,1700, 550,550, 550,550, 550,600, 500,1700, 550,600, 500,600, 500,600, 500,600, 550,550, 550,1700, 550,600, 450,600, 550,550, 550,600, 500,1700, 550,1650, 550,1700, 550,1650, 550,600, 500,0},
    fan_swing[]  = {4450,2200, 600,550, 550,500, 600,550, 550,550, 550,1700, 550,1650, 550,1700, 550,550, 550,1650, 550,1700, 550,1650, 550,550, 600,1650, 550,550, 550,550, 550,550, 600,1650, 550,550, 550,550, 600,550, 550,550, 550,550, 600,1600, 600,550, 550,550, 550,1650, 600,1550, 650,1700, 550,1650, 550,550, 550,550, 600,550, 550,0},
    fan_off[]    = {4450,2250, 550,550, 600,550, 550,500, 600,550, 550,1650, 600,1650, 550,1650, 600,550, 550,1650, 550,1650, 600,1650, 550,550, 550,1700, 550,550, 550,550, 550,550, 550,1700, 550,550, 550,550, 550,550, 600,550, 550,550, 550,1650, 550,550, 600,550, 550,1650, 600,1650, 550,550, 550,1700, 550,500, 600,550, 550,1650, 600,0},
    tv_on_off[]  = {3400,1750, 400,500, 350,1350, 400,500, 350,500, 400,500, 350,500, 400,500, 350,450, 400,500, 400,500, 350,500, 400,500, 350,500, 350,1350, 400,500, 400,500, 350,450, 400,500, 400,500, 350,450, 400,500, 400,500, 350,500, 400,1300, 400,500, 400,450, 400,500, 400,500, 350,500, 350,500, 400,450, 400,450, 400,1350, 400,500, 400,1300, 400,1350, 400,1350, 400,1350, 400,450, 400,500, 400,1300, 400,500, 400,1300, 400,1350, 400,1350, 400,1350, 400,500, 350,1350, 400,0},
    tv_volup[]   = {3400,1750, 400,500, 400,1300, 400,500, 400,500, 350,500, 450,400, 400,500, 350,500, 400,500, 350,500, 350,500, 400,500, 350,500, 400,1300, 400,500, 400,450, 400,500, 350,500, 400,500, 350,500, 400,500, 350,500, 350,500, 400,1300, 450,450, 400,500, 350,500, 400,500, 350,500, 400,450, 400,500, 350,500, 400,500, 350,450, 400,500, 400,500, 350,500, 450,1250, 400,500, 400,500, 350,500, 400,450, 400,500, 350,500, 400,500, 350,1350, 400,450, 400,1350, 400,0},
    tv_voldown[] = {3400,1750, 400,500, 350,1350, 400,500, 400,450, 400,500, 350,500, 400,450, 400,500, 400,500, 350,500, 350,500, 400,500, 350,500, 350,1300, 450,500, 400,500, 350,450, 400,500, 450,450, 350,500, 400,450, 400,450, 400,500, 400,1300, 450,500, 350,500, 350,500, 400,500, 350,450, 400,500, 400,500, 350,500, 400,1300, 400,500, 400,450, 400,500, 400,500, 350,1350, 400,500, 350,500, 400,1300, 400,500, 400,500, 350,500, 350,500, 400,1300, 450,500, 350,1350, 400,0},
    tv_chup[]    = {3400,1750, 400,500, 400,1350, 450,400, 400,450, 400,500, 450,400, 400,450, 400,500, 450,450, 450,400, 450,450, 400,400, 400,500, 450,1250, 450,500, 350,450, 500,400, 450,400, 400,500, 350,500, 450,450, 350,500, 450,450, 450,1250, 400,500, 450,400, 400,500, 400,450, 450,400, 450,450, 350,500, 450,400, 450,450, 350,500, 450,1250, 400,500, 450,1250, 500,1250, 500,400, 450,450, 350,500, 450,450, 350,1350, 450,450, 400,1300, 450,1250, 500,450, 400,1250, 450,0},
    tv_chdown[]  = {3500,1650, 450,500, 400,1300, 400,500, 450,400, 350,500, 400,450, 500,400, 450,450, 350,450, 400,500, 400,500, 350,500, 400,450, 450,1300, 450,450, 350,450, 450,500, 350,500, 450,400, 450,400, 400,500, 350,500, 450,400, 400,1350, 450,400, 500,400, 450,450, 450,400, 400,500, 350,500, 350,500, 400,500, 350,1350, 450,450, 350,1350, 400,500, 350,1350, 500,1250, 450,450, 450,400, 450,1250, 500,400, 450,1300, 450,450, 400,1300, 450,1250, 450,500, 350,1350, 450,0};
////
void setup() 
{ 
  const int chipSelect = 4;
  Ethernet.begin(mac, ip);
  SERVER.begin();
  if (!SD.begin(chipSelect)) {
    return;
  }
} 
 
void loop() 
{ 
  //  Webサーバの動作
  char c;
  String rstr = "";
  CLIENT = SERVER.available();
  if (CLIENT) {
    while (CLIENT.connected()) {
      if (CLIENT.available()) {
        c = CLIENT.read();
        rstr += c;
        if(rstr.endsWith("\r\n")){
          break;
        }
      }
    }
    if(rstr.indexOf("fan_on=") >= 0){
      unsigned int buf[sizeof(fan_on) / sizeof(*fan_on)];
      for(int i = 0; i < sizeof(fan_on) / sizeof(*fan_on); i++){
        buf[i] = pgm_read_word(fan_on + i);
      }
      irsend.sendRaw(buf, sizeof(buf) / sizeof(buf[0]), 38);
    }
    else if(rstr.indexOf("fan_timer=") >= 0){
      unsigned int buf[sizeof(fan_timer) / sizeof(*fan_timer)];
      for(int i = 0; i < sizeof(fan_timer) / sizeof(*fan_timer); i++){
        buf[i] = pgm_read_word(fan_timer + i);
      }
      irsend.sendRaw(buf, sizeof(buf) / sizeof(buf[0]), 38);
    }
    else if(rstr.indexOf("fan_swing=") >= 0){
      unsigned int buf[sizeof(fan_swing) / sizeof(*fan_swing)];
      for(int i = 0; i < sizeof(fan_swing) / sizeof(*fan_swing); i++){
        buf[i] = pgm_read_word(fan_swing + i);
      }
      irsend.sendRaw(buf, sizeof(buf) / sizeof(buf[0]), 38);
    }
    else if(rstr.indexOf("fan_off=") >= 0){
     unsigned int buf[sizeof(fan_off) / sizeof(*fan_off)];
     for(int i = 0; i < sizeof(fan_off) / sizeof(*fan_off); i++){
        buf[i] = pgm_read_word(fan_off + i);
      }
      irsend.sendRaw(buf, sizeof(buf) / sizeof(buf[0]), 38);
    }
    else if(rstr.indexOf("tv_on_off=") >= 0){
     unsigned int buf[sizeof(tv_on_off) / sizeof(*tv_on_off)];
     for(int i = 0; i < sizeof(tv_on_off) / sizeof(*tv_on_off); i++){
        buf[i] = pgm_read_word(tv_on_off + i);
      }
      irsend.sendRaw(buf, sizeof(buf) / sizeof(buf[0]), 38);
    }
    else if(rstr.indexOf("tv_volup=") >= 0){
     unsigned int buf[sizeof(tv_volup) / sizeof(*tv_volup)];
     for(int i = 0; i < sizeof(tv_volup) / sizeof(*tv_volup); i++){
        buf[i] = pgm_read_word(tv_volup + i);
      }
      irsend.sendRaw(buf, sizeof(buf) / sizeof(buf[0]), 38);
    }
    else if(rstr.indexOf("tv_voldown=") >= 0){
     unsigned int buf[sizeof(tv_voldown) / sizeof(*tv_voldown)];
     for(int i = 0; i < sizeof(tv_voldown) / sizeof(*tv_voldown); i++){
        buf[i] = pgm_read_word(tv_voldown + i);
      }
      irsend.sendRaw(buf, sizeof(buf) / sizeof(buf[0]), 38);
    }
    else if(rstr.indexOf("tv_chup=") >= 0){
     unsigned int buf[sizeof(tv_chup) / sizeof(*tv_chup)];
     for(int i = 0; i < sizeof(tv_chup) / sizeof(*tv_chup); i++){
        buf[i] = pgm_read_word(tv_chup + i);
      }
      irsend.sendRaw(buf, sizeof(buf) / sizeof(buf[0]), 38);
    }
    else if(rstr.indexOf("tv_chdown=") >= 0){
     unsigned int buf[sizeof(tv_chdown) / sizeof(*tv_chdown)];
     for(int i = 0; i < sizeof(tv_chdown) / sizeof(*tv_chdown); i++){
        buf[i] = pgm_read_word(tv_chdown + i);
      }
      irsend.sendRaw(buf, sizeof(buf) / sizeof(buf[0]), 38);
    }
    rstr = "";
    sendform();
    delay(1);
    // close the connection:
    CLIENT.stop();
  }
  delay(20);
}
void sendform(){
  //  フォームを送る。
  CLIENT.println("HTTP/1.1 200 OK");
  CLIENT.println("Content-Type: text/html");
  CLIENT.println("Connection: close");
  CLIENT.println();
  CLIENT.println("<!DOCTYPE HTML>");
  File html = SD.open("irform.htm");
  if (html) {
    while (html.available()) {
      CLIENT.write(html.read());
    }
    html.close();
  } 
}

IMG_3135 勿論、ただのWebであるから、このようにスマホの他、タブレットなどからも操作可能である。また、ルータでポートフォワードすれば、外出先からの操作も可能である。

赤外線LEDをもっとビカビカ光らせる

投稿日:

 さて、前回のこのエントリでは、赤外線LEDでリモコンを作る基礎が整ったが、50mA定格のLEDに5mAしか流していないので、いまいち光り方に根性がなく、電気製品の受光部にかなり近づけないと厳しい。

 そこで、どっぷり50mA近くまで電流を流し、赤外線LEDをして「ご主人様もうお腹いっぱいゲフォア」と言わしめたい。

 運よく、以前にソレノイドを動かした時のFET「2SK2232」がある。

 50mA近く流すには

R=\cfrac{5V}{50mA}=100\Omega

……ということで、100Ωかましてやればいいが、ちょうど100Ωの抵抗は持っていない。で、330Ωがあるから、これを3本並列にして

\cfrac{1}{\cfrac{1}{330\Omega}\times 3}=110\Omega

 110Ωに5V流せば

\cfrac{5V}{110\Omega}\fallingdotseq 45mA

……というわけで、じゃぶじゃぶ流せる。2SK2232のドレイン電流は25Aなので、余裕でオッケーである。

IMG_3133 と、いうわけで、回路図とブレッドボードはこうなる。

 スケッチは前回と同じでいい。

 動かしてデジカメのモニタで観察すると、もう、ビカビカにLEDが光る光るッ!。そんなに受光部に近づけなくても、ばりばり扇風機のスイッチがオンオフできるようになった。

日々思い通りにはいかぬもの

投稿日:

 帰宅。

 今日は日本ITストラテジスト協会関東支部の月例会があったが、仕事と用事が重なり、行けなかった。今回の月例会のテーマ別ディスカッションもぜひ聞きたいと思っていた内容だったので、残念である。人生、なかなか、こうしたいああしたい、と、思ったようには運ばぬものだ。

 忙中有閑。仕事は朝に引けたから、帰りに秋葉原へ寄り、挨拶がわりにヨドバシのスタインウェイをちょっと弾く。

media-20150621

 いつものショパン3曲弾くなど。

 千石電商と秋月電子で少し買い物をする。2000円ほども使えばたっぷり楽しめる。我ながらなんとささやかなこと。

IMG_3029

 今回買ったもののうちでも、出色の傑作は、このたった250円の小さなキットだろう。

IMG_3030

 これは、TTL5VでAC100Vを扱うためのリレーなのだが、昔のリレーとは違って、機械電磁式ではなく、電子式の無接点で、部品点数も極めて少ない。しかも100Vで25Aも流せる。これは、この方のブログ記事で見て知ったのである。

 それから、もうひとつはこれだろう。Arduinoのシールド基盤に小さなブレッドボードを載せることができるもの。

IMG_3031

 帰宅してみると、先週作った「メールサーバお知らせランプ」、赤い点滅で、100通以上の未読がある。

 電子メールを読み出すと、動画のように緑色の点灯に変わる。

 さて、一週間、誤動作なく動いていた「メールサーバお知らせランプ」だが、さっさと回路をバラしてしまい、次の作品を作ることにする。

 秋葉原で買ってきたものを取り出し、半田鏝を温めて、なにやらごそごそと活動する。

IMG_3038
なにやら組み立てる

IMG_3039

 このちっぽけな基盤がAC100VをTTLで扱うためのキモである。

 これを、Arduinoにつなぐ。先日買った超音波センサを、今日買ったブレッドボードシールドに取り付け、回路はこんな具合にする。

IMG_3043

 スケッチを書く。こんな感じだ。

//
//  superSonic2AC100.ino
//    27.06.21(日) 1500~
//    SatoToshio
//      Arduino + 超音波センサ + ソリッドステートリレーで、
//      人が近接したら扇風機などを回す。
//
const int TRIG = 8, ECHO = 9, SSR = 10;
float ranges[10];
int arrcount = 0;
const float THRESHOLDRNAGE = 100.0;

void setup() {
  Serial.begin(9600);
  pinMode(TRIG,OUTPUT);
  pinMode(ECHO,INPUT);
  pinMode(SSR, OUTPUT);
  digitalWrite(SSR, LOW);
}

void loop() {
  float range = 0.0;
  delay(1000);
  range = ranging();
  ranges[arrcount++] = range;
  if(arrcount >= 9){
    arrcount = 0;
  }
  //  THRESHOLDRANGE以下が何割かを調べる。雑音除去のため。
  int rangecount = 0, i = 0;
  for(i = 0; i <= 9; i++){
    if(ranges[i] < THRESHOLDRNAGE){
      rangecount ++;
    }
  }
Serial.println(range);
Serial.println(rangecount);
  if(rangecount >= 6){
    digitalWrite(SSR, HIGH);
  }else{
    digitalWrite(SSR, LOW);
  }
}

float ranging(){
  float time = 0.0, range = 0.0;

  digitalWrite(TRIG,LOW);
  delayMicroseconds(1.1);
  digitalWrite(TRIG,HIGH);
  delayMicroseconds(1.1);
  digitalWrite(TRIG,LOW);
  time = pulseIn(ECHO,HIGH);
  if (time > 0.0) {
    range = (time / 2.0) * 340.0 * 100.0 / 1000000.0;
    if(range > 500.0){
      range = 500.0;
    }
    return(range);
  }else{
    return(9999.0);
  }
}

 で、これで何をするかというと、「人が近づくと部屋のミニ扇風機が回る」というのをやりたかったわけだ。暑いから(笑)。

IMG_3041

 組み付けたプロトはこんな感じだ。100円ショップで買ったアクリルの仕切りグッズにスペーサーで取り付けてある。

IMG_3042

 自分の部屋に入ると、扇風機が回り出し、涼しい。