3色LEDをパルス幅変調

投稿日:

 Arduinoの入門キットには3色LEDがついているので、これを光らせて遊ぶ。チカチカでは面白くないから、各色にパルス幅変調をかける。変調は正弦波でかけ、各色の位相をちょっとづつずらしていろんな色にする。



メール・メーターはこのように作る。

投稿日:

 さて、一部の変わったユーザ様(ヲイ)のために、Arduinoを使用した未読メールメータの作成方法を書いておきたい。入門キットについてくるサーボを使用する。

 プログラムは次のような簡単なものでよろしい。

 まず、Arduino側には次のように書く。

//
//  シリアルからサーボを制御
//    佐藤俊夫
//    27.05.02(土) 1028~
//
#include <Servo.h>
//
Servo meter;
const int METER_0 = 5;
const int METER_100 = 175;
const int METERMIN = 0;
const int METERMAX = 100;
const int STRLEN = 10;
char buf[STRLEN];
int i = 0;
//
void setup() {
  meter.attach(9);
  meter.write(METER_0);
  Serial.begin(9600);
}

void loop() {
  int v = 0, deg = METER_0;
  if(Serial.available() > 0){  //  もし受信したデータが存在したら
    buf[i] = Serial.read();
    if(i >= STRLEN - 1 || buf[i] == '\n'){
      buf[i] = '\0';
      i = 0;
      Serial.flush();
      //  針をナニする処理
      v = atoi(buf);
      (v > METERMAX) ? v = METERMAX : v;
      (v < METERMIN) ? v = METERMIN : v;
      deg = METER_0 + (int)(v / ((float)METERMAX / (float)(METER_100 - METER_0)));
      meter.write(deg);
// Serial.println(deg, DEC);
// Serial.write('\n');
      delay(1000);
    }else{
      i++;
    }
  }    
}


 テストしてうまく動いたら、次に、POP3サーバにたまっている自分のメールの本数を知る工夫をする。

 私は次のようにした。まず、手近のLinuxマシンにexpectを入れる。

# yum -y install expect
(中略)

 そうすると、telnetなどでPOP3サーバに自動ログインできる環境が整う。

 シェルでこんなのを書く。まあ、遊びなんでrootで。

# ls -Fla pop2arduino
-rwx------ 1 root root 415 2015-05-02 13:58 pop2arduino*
# cat pop2arduino
#!/bin/sh
#  pop2arduino
#    Sat May  2 12:53:57 JST 2015
#    Sato Toshio
#
expect -c "
set timeout 5
spawn telnet pop.hogehoge.ne.jp 110
expect \"+OK POP3 ready\"
send \"USER fugafuga@hagefuge.hogehoge.ne.jp\n\"
expect \"+OK\"
send \"PASS passpass\n\"
expect \"+OK server ready\"
send \"STAT\n\"
expect -re \"\\\+OK (.+) .+$\"
send \"QUIT\n\"
" | egrep "\\+OK ([0-9]+) .+$" | sed -r "s/\\+OK ([0-9]+) .+$/\1/g" >/dev/ttyACM0

 で、このシェルは、まあ、なんだっていいんだけど、安直にcronで定期実行する。

# crontab -e
(以下crontab内)
*/5  *  *  *  *  /hoge/pop2arduino
(crontabおわり)
/etc/rc.d/init.d/crond restart
(出力略)

……で、メールが届くのを待っていると、こういうふうに動く。

IMG_2768



工作

投稿日:

 一部のマニアックなユーザ様(誰?)(笑)の声にお応えし、もうすこし一生懸命に物品を作ることにする。

 取り出だしましたるは、媒体のチープ化によりどこのご家庭にも余っているCDのケースでござい。

IMG_2752

これをば、プラカッターでごりごり切断するので御座候。

IMG_2753

 そうすしますと、こういう美しいスチロール板が手に入るわけでござるよ。

IMG_2754

 コイツに、細いマジックで寸法を入れる。

IMG_2756

 マジックで入れた線を切り抜く。いろいろな方法がある。金工ドリルの細いやつでたくさん穴をあけて割り抜いたり、「ハンドニブラー」でかじったりするやり方があるが、私の場合、世のプロ電子工作派が「なんてことをするんだ!工具が傷むじゃないか!!」と怒り出すという樹脂加工の邪道!!(笑)、「半田鏝で溶断」という方法をよく使う。

IMG_2758

 線の内側を溶断したら、やすりで削り拡げてきれいな穴にする。

IMG_2760

 次に、ネジ穴をあける。アクリル板と違ってスチロール板はすぐにヒビが入ったりするから、やさしく工作しなければならない。なので、電動工具もよいが、ここは一番、ピンバイスに2ミリの歯を噛んで、ウリウリとやさしく切る。

IMG_2761

最後に、ちょいと大技。このスチロール板を曲げる。凝る向きはニクロム線の曲げ工具などを持っていると思うが、私はめったに樹脂工作をすることはないので、持っていない。そこで、余っているアングルを適当に木の台にネジ止めし、これをガストーチで炙る。

IMG_2763

 で、ほどよく温まったら、これにえいやああ、とスチロール板を当て、曲げる。

IMG_2764

 さて、これで完成。これは何かというと……。

IMG_2765

IMG_2767

 ハイ、サーボモーターの取り付けブラケットですよ。ええ、Arduinoで遊ぶために作ったんです、朝っぱらから(笑)。

よしッ!……次はッ!

投稿日:

 次は、自宅の便器をインターネットに接続するッ!!!

……と考えて荒い鼻息をついたが、1秒でやめた。

 だって、品がないし、変なものを便所に取り付けると妻におこられるもん。

 しかし、ヘルスケアのためには、ちょっとありえるよな。「iToilet」。

  •  温度
  •  重さ・量・密度
  •  色合い
  •  におい
  •  座っていた時間
  •  音量

……これらをツイッターに全自動投稿。甘えるんじゃねえ、パーミッションは恥も外聞もなく、全部パブリック。忍辱の精神なくして健康なしッ!!

 重量センサー、かなあ、ネックは。耐水性で、度重なる洗浄に耐え、コンマ1グラム単位の精密度、傾きに左右されないことも必要だ。

 においセンサーは、まあ、なんとかなるだろ、市場をあされば。



次にまたバカなものを

投稿日:

 これが、メールサーバに残る未読メールの数を表示させるという逸品(笑)のプロトタイプである。

IMG_2749

……我ながらズサンなつくりだなあ。こんなモノをIoTだなどと言っていていいのだろうか。



ポテンショメータをつないで

投稿日:

 次は、ポテンショメータをつないで、アナログ入出力をマスター。

 9番ピンを使用したパルス幅変調もわかったし、ついでに、さっきシリアルへのアクセス方法が分かったから、IDEに式ウォッチ機能がない代わりに、出力をシリアルにタレ流して観測する方法も会得。

IMG_2748

//
// ポテンショメータとLEDのPWM制御
//  佐藤俊夫
//  27.05.01(金)1604~
//
const int LED = 9;
const int POTENTIOMETER = 0;
//
void setup() {
  pinMode(LED, OUTPUT);
  pinMode(POTENTIOMETER, INPUT);
  Serial.begin(9600);
}

void loop() {
  int bright = 0;
  bright = analogRead(POTENTIOMETER) / 4;
  Serial.println(bright, DEC);
  analogWrite(LED, bright);
}