忍者ブログ

設備のマニアどっとこむ

設備、電子工作、DIYのブログ!

01/04

Thu

2018

【arduino】コップを運ぶコースター

年末年始にarduino unoとarduino nanoを使って動くコースターと電磁弁を組み合わせた給水機を作ってみた。ほとんど赤外線リモコンで制御させたので操作はラジコン感覚。



秋月で買ったリモコンセット

arduino nanoはピン数が少ないものの、こういうときは使い勝手がとても良かった。

サーボモーター×2個とモバイルバッテリーを積んでいる。


給水機は5Vで動くリレーと100V仕様の電磁弁を組み合わせている。
実は超音波センサーで電磁弁の下にコップが来ると赤外線の停止信号が発信されるのだが、地味すぎて動画からはほぼわからない。(必要ないかも??)


電磁弁はセンサーで自動にするのも検討したがarduino nanoが濡れてしまいそうなので手動操作にした。ペットボトルのタンクに水をいれとくのも結構ドキドキする。

じょぼじょぼじょぼ・・・。

なんとか自動制御にしてみたいが、いろいろハードル高そう。
今の自分の技術ではこれが限界かな・・。







拍手[0回]

PR

12/16

Sat

2017

arduinoでエアコンを動かす

回の記事でリモコンの信号が受信できた。今回はエアコンのリモコン信号を取り込んで
室温の上昇をきっかけに自動起動できるようにしてみた。


赤外線LEDL12170を13ピン 
温度センサー LM35DZのアナログ信号をA0ピンに接続

スケッチはこちら
#define PIN_IR      13
#define DEBOUNCEDELAY 500
float a_in;          
float temp_c = 0;
short ARRAY_HIGHLOW[] = {4440,4444,512,1660,496,560,520,1652,440,1712,520,560,516,572,492,1656,516,568,512,576,500,1644,520,568,456,632,496,1656,512,1652,500,568,512,1652,512,1660,500,568,520,1644,440,1712,520,1648,484,1688,496,1660,516,1644,444,648,492,1656,512,572,492,568,528,560,480,608,492,568,516,568,508,1660,500,1652,524,564,436,648,492,568,520,568,492,568,520,564,520,560,440,648,500,1644,516,1660,496,1656,524,1648,492,1652,524,1676,492,5252,4452,4432,488,1688,492,564,528,1648,436,1708,524,564,484,600,492,1656,524,560,488,600,492,1652,528,560,480,608,512,1632,512,1660,492,568,528,1644,512,1660,492,568,528,1644,480,1672,520,1644,508,1668,492,1660,512,1660,476,588,540,1628,512,572,488,572,528,560,504,584,484,576,544,536,512,1660,492,1660,520,568,476,580,528,560,512,568,492,576,524,564,516,564,476,588,520,1648,512,1660,496,1656,516,1648,500,1660,540,1652,492,
};
void setup()
{  Serial.begin(9600);
  
  pinMode(PIN_IR, OUTPUT);
}
void loop()
{ a_in = analogRead(0);
  
  temp_c = ((5 * a_in) / 1024) * 100;
  
  Serial.println( temp_c );
  
  delay(1000);
  static int s_iButtonState_prev = LOW;
  static unsigned long s_ulTime_prev = 0;
  int iButtonState = digitalRead(PIN_PUSHBUTTON);
  
  if( temp_c>23 )
  { 
    unsigned long ulTime = millis();
    if( DEBOUNCEDELAY < (ulTime - s_ulTime_prev) )
    { 
      sendSignal();
    }
    s_ulTime_prev = ulTime;
  }
  s_iButtonState_prev = iButtonState;
}
void sendSignal()
{
  int iTimeLength;
  unsigned long ulTimeStart;
  
  int iCountHighLow = sizeof( ARRAY_HIGHLOW ) / sizeof( ARRAY_HIGHLOW[0] );
  for( int iIndexHighLow = 0; iIndexHighLow < iCountHighLow; iIndexHighLow++ )
  {
    iTimeLength = ARRAY_HIGHLOW[iIndexHighLow];
    ulTimeStart = micros();
    do
    {
      digitalWrite( PIN_IR, 1 - (iIndexHighLow % 2) );  
      delayMicroseconds(8); 
      digitalWrite( PIN_IR, 0 );
      delayMicroseconds(7);
    } while( iTimeLength > micros() - ulTimeStart );
  }
}
室温が23度以上になると赤外線LEDが働きエアコンを始動させる。
動作確認はガラケーで確認


これでリモコンいらず・・。
と思いきやONはできるがOFFは信号が違うらしく停止はできなかった。
ボタンは同じなんだけど。


出力が高いLEDを使おうとするとラズパイの3.3V出力では少々きつい。このあたりの動きはarduinoの得意とする分野かもしれない。しかしながらなぜか9Vバッテリー電源では動作しなかった。 設備との相性で今後もarduinoとラズパイを使い分けていきたい。







拍手[0回]

12/09

Sat

2017

arduinoで赤外線リモコンを作った話

電子工作をはじめて3年くらい経つんだけど今回作ってみたものが一番衝撃だった。




arduinoに赤外線センサーと赤外線LEDをつけてリモコンの信号を読み取り、リモコンを作ってしまうというもの。
今回arduino含めて2千円~3千円でできてしまった。

ちなみにセンサーはPL-IRM0101を使用
左 7番ピン 真ん中 GND 右 5V


そもそも赤外線の信号はパルス幅を変化させて送っているものでその信号の時間が読み取れれば複製は簡単にできてしまう。
スケッチ例はこんな感じ
const int READ_PIN = 7; 
int state = 0; 
unsigned long now    = micros(); 
unsigned long change = micros(); 
void setup()
{
 
  Serial.begin(57600);  
  pinMode(READ_PIN, INPUT);
  state = digitalRead(READ_PIN);
}
void loop()
{
    if (state != digitalRead(READ_PIN)) {
      now = micros();
      Serial.print((now - change) / 10, DEC);
      Serial.print(",");
      change = now;
      state = !state;
    }
}
シリアルモニタから下記のような信号が抽出できる
4440,4444,512,1660,496,560,520,1652,440,1712,520,560,516,572,
492,1656,516,568,512,576,500,1644,520,568,456,632,496,1656,512,
1652,500,568,512,1652,512,1660,500,568,520,1644,440,1712,520,
1648,484,1688,496,1660,516,1644,444,648,492,1656,512,572,492,
568,528,560,480,608,492,568,516,568,508,1660,500,1652,524,564,
436,648,492,568,520,568,492,568,520,564,520,560,440,648,500,1644,
516,1660,496,1656,524,1648,492,1652,524,1676,492,5252,4452,4432,
488,1688,492,564,528,1648,436,1708,524,564,484,600,492,1656,524,
560,488,600,492,1652,528,560,480,608,512,1632,512,1660,492,568,
528,1644,512,1660,492,568,528,1644,480,1672,520,1644,508,1668,
492,1660,512,1660,476,588,540,1628,512,572,488,572,528,560,504,584,
484,576,544,536,512,1660,492,1660,520,568,476,580,528,560,512,568,492,
576,524,564,516,564,476,588,520,1648,512,1660,496,1656,516,1648,500,
1660,540,1652,492,
これならあらかじめリモコンの信号を記録しておけば壊れてもarduinoで代用できる(笑)

残念ながら買った赤外線LEDの出力が低すぎて、TVと5cmぐらい近づけないと動作しなかった・・・。しかも動作で範囲が狭く1.35~1.6Vぐらいでarduino出力5Vから手持ちの抵抗で減圧するのが大変だった。(買うときは注意してください)

これなら、エアコンのリモコンを読み取って部屋の温度調節できそう。

今、高出力の赤外線LEDを手配してます・・・。

エアコンを動かしてみます







拍手[0回]

11/25

Sat

2017

【DIY】超音波で顔認証をやってみた話【arduino】



データセンターのセキュリティ設備なんかで生体認証をよく見かけたりするんだけど、生体認証は個人でしか持ちえないものなので、事前に登録しておけばその人しか認識しない。 サーバールームのドアを開錠するのに指の指紋や静脈をつかったり、顔で認証したり、様々なやり方がある。今回久々にarduinoを引っ張りだして、顔認証ができないか頑張ってみた。

とりあえず顔の凹凸の距離を超音波で計って、認識したらLEDが光る様に設計した。


鼻の高さを図る為、超音波センサーをふたつつけることにした。



なぜarduinoを使ったかというと超音波センサーのVcc(電源電圧)が5Vだったから。
ラズパイは3.3Vなのでそういう使い分けをしている人も多いかもしれない。


あらかじめ鼻の高さを計算に入れておいて、超音波センサーの距離の差がその距離になったとき、LEDが点灯する様になっている。
arduinoのスケッチはこちら↓
 int interval = 0;
    double distance = 0;
int interval2 = 0;
    double distance2 = 0;
    int x = 0;
    unsigned long duration;
    void setup() {
        pinMode( 2, OUTPUT );
        pinMode( 3, INPUT );
        pinMode( 4, OUTPUT );
        pinMode( 5, INPUT );
         pinMode( 7, OUTPUT );
        Serial.begin( 9600 );
    }
    void loop() {      
            digitalWrite( 2, HIGH );
            delayMicroseconds( 100 );
            digitalWrite( 2, LOW );
            interval = pulseIn( 3, HIGH );
            distance = interval * 0.017;        
            Serial.println( distance, 1 );
             delay(100); 
            digitalWrite( 4, HIGH );
            delayMicroseconds( 10 ); 
            
            digitalWrite( 4, LOW );
           
             interval2 = pulseIn( 5, HIGH );
              distance2 = interval2 * 0.017;        
            Serial.println( distance2, 1 );
            Serial.println("cm");
         delay(1000); 
         
   x = distance - distance2;
      if (x < 2.5  && x>1.5) {digitalWrite( 7, HIGH );
      
      }
       else  {digitalWrite( 7, LOW );
      }
         
    }
本来ならばパイソンか何かで画像を認識させるプログラムを駆使すればいいんだけど、そんな技術はもっていないので簡易的なサムシングでなんとかしてみた。
もっとセンサーを増やせば正確になるかもしれない。しかしながら超音波センサーのブレがすごいので閾値の幅を増やさないと動作は厳しかった。

よく考えると人間固有の情報は無数にあるから、センサー類が安くなっている今日、いろいろな方法で生体認証は可能かもしれない。こういうのはアイデアしだいでいくらでも作れそうな気がするけど精度を考えるとやはり自作するのは限界があるかなあと今回感じたアルティメットだったのであった・・・。







拍手[0回]

08/28

Mon

2017

arduinoでターンテーブルの連続再生を行う

十数年前、社会人になってすぐの頃、テクニクスのターンテーブルとヌマークのミキサーのセットを大枚をはたいて買ったのだが、今では全然使わなくなって箱にしまいっぱなしになっている。
30枚くらいはレコードも買っていたが、あまり聴く事もなかった。ちょっともったいないが、こういう人は結構いるんじゃないかな?と思ってる。


使わなくなる原因をよくよく考えてみるとターンテーブルにはいくつか弱点があることがわかる。

1.再生中は次の曲をかけるのにターンテーブルの前にいなければならない。
2.設置状況によるが多くの場合、立ちっぱなしになる。
3.音楽をかけてなにもしないと最後の曲が終わり、無音になる。
4.次の曲はどうしようか、どうつなぐか、悩む。
5.音楽を聴きながら何か別の作業(勉強など)をすることができない。

まあ当然といえば当然なのだが、なんとか連続再生をして放置できないか考えてみた。
今回音センサーとサーボモーターをaruduinoで制御してみた。

とりあえず出来は微妙だが、なんとか針を巻き戻すことに成功した。



音センサーをスピーカ前に設置して無音になったら、巻き戻るようにする。

ミキサーのボリュームにもサーボモーターをつけて、針の移動中は音が出ないようにした。


スケッチはかなり苦労したが以下の様になります。
#include<Servo.h>
int val=0; 
int ledVal = 0; 
Servo servo1;
Servo servo2;
void setup() {
  servo1.attach(4);
servo2.attach(5);
Serial.begin(9800); 
}
void loop() {
val=analogRead(5);
ledVal = val
Serial.println(ledVal); 
if(ledVal < 80){
servo1.write(120);
delay(500);
servo2.write(60);
    delay(1000);
    servo2.write(70);
    delay(1000);
    servo2.write(80);
    delay(1000);
    servo2.write(90);
    delay(1000);
    servo2.write(100);
    delay(1000);
    servo2.write(102);
    delay(1000);
    
    servo2.write(104);
    delay(1000);
    servo2.write(106);
    delay(1000);
    servo2.write(108);
    delay(1000);
    servo2.write(110);
    delay(1000);
         servo1.write(111);
    delay(1000);
    servo2.write(112);
    delay(1000);
    servo2.write(113);
    delay(1000);
    servo1.write(114);
    delay(1000);
    servo2.write(115);
    delay(1000);
    servo1.write(116);
    delay(1000);
    servo2.write(117);
    delay(1000);
    servo2.write(118);
    delay(1000);
    servo2.write(119);
    delay(1000);
       servo2.write(120);
    delay(1000);
}
else{
servo1.write(60);
delay(500);
servo2.write(0);
}
delay(5000);
}
要約すると音センサーの値を読み取って、音の信号がなくなると、ミキサーのサーボモーター1を動かしボリュームをゼロにしてもう一つのサーボモーター2でターンテーブルの針を移動させる。一気に動かすと針が飛ぶので段階的に動かすスケッチになっている。
音センサーは無音になると反応するので、曲の最中で無音になると曲の終わりでなくてもまきもどってしまうのはご愛敬。

これでとりあえず放置しても曲を連続再生する事ができた。もう少し頑張ればジュークボックスみたいにできるかもしれないが、このクオリティでもかなり苦労したのでここで終わりにしたい笑。とりあえずターンテーブルを箱から出すのに成功したので良しとすることにした。
※針をかなり痛めるのでマネするのであれば覚悟してください。





拍手[0回]

翻訳(Translate)

AD

シェアしてね

プロフィール

HN:
アルティメット雅史
性別:
男性
自己紹介:
製油所、データセンター、化学工場を渡り歩いた設備のマニア
最近はarduinoあたりの電子工作にハマる。
取得資格は電験3種、消防設備士甲4、2級ボイラー技士、危険物乙4、電工2種、技術士補(電気・電子)、エネ電、フォークリフトほか

カウンター

お問い合わせ

忍者アクセスランキング

Copyright © 設備のマニアどっとこむ : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]