忍者ブログ

設備のマニアどっとこむ

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

12/09

Sat

2017

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

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




arduinoに赤外線センサーと赤外線LEDをつけてリモコンの信号を読み取り、リモコンを作ってしまうというもの。
他のメイカーズブログでコードを拾ってきたので詳細はお教えできないが、arduino含めて2千円~3千円でできてしまった。(ググッてもらえればいろんなブログがでてきます)

そもそも赤外線の信号はパルス幅を変化させて送っているものでその信号の時間が読み取れれば複製は簡単にできてしまう。

これならあらかじめリモコンの信号を記録しておけば壊れてもarduinoで代用できる(笑)

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

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

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








拍手[0回]

PR

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回]

01/04

Wed

2017

【arduino】電流監視ロガーの制作【DIY】

あけましておめでとうございます。今年も設備のマニアどっとこむをよろしくお願いいたします。
今年一発目の記事ですが、タイトルの通り電流監視ロガーを作ってみました。

データセンターのラックなどの電流を管理するのは非常に重要なことです。電源の異常を素早く察知し、顧客へ連絡することで被害を最小限にすることができます。

今回は電源ケーブルにCTを取り付け、arduino へとりこみマイクロSDカードへログを書き込んでみました。

まず準備するのはarduinoに加えてethenetシールドが必要になります。

これをガキーン!とくっつけます。

そしてマイクロSDカードをさします。


電流センサーは秋月電子通商で購入しました。
交流回路を直流にし、なおかつarduinoのアナログ入力である0~5Vにする必要があります。
CT比は3000:1(実電流3Aで2次側1mA)です。抵抗100Ωにて電圧回路にしています。特性表の電圧を10倍してください。3Aで0.1Vとなります。

回路例は写真の通りです。念のため、可動鉄片型の電流計にてわかりやすいように比較できるようにしています。



arduinoの入力はA0ピンとグランドを使い、LEDは5、6、7ピンを使っています。
注意しなければならないのが、ethenetシールドを使用する場合11、12、13、4ピンをつかうと
うまく動きません、それ以外のピンを使うようにしてください。



ソースコードはスケッチの例にデフォルトで入っているSDフォルダのなかのDateloggerを少しいじったものになります。
#include <SPI.h>
#include <SD.h>
// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 4;
void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
    
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);
  }
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  // pinMode(10, OUTPUT);
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
}
void loop()
{
  // make a string for assembling the data to log:
  String dataString = "";
  // read three sensors and append to the string:
  for (int analogPin = 0; analogPin < 1; analogPin++) {
    int sensor = analogRead(analogPin);
     
    dataString += String(sensor* 0.146484);
   
    if (analogPin < 1) {
      dataString += "A";}
if (sensor > 68.266) {
 digitalWrite(5, HIGH);
 delay(500);
 digitalWrite(5, LOW);
 digitalWrite(6, HIGH);
 delay(500);
 digitalWrite(6, LOW);
 digitalWrite(7, HIGH);
 delay(500);
 digitalWrite(7, LOW);
 
}  
else {digitalWrite(5, LOW);
 digitalWrite(6, LOW);
 digitalWrite(7, LOW);}  
     
  }
  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // print to the serial port too:
    Serial.println(dataString);
  }
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  }
}
arduinoの入力電圧は0~5Vを1024分割した入力になります。それを電流にするため、
入力電圧×3000(CT比)÷100(抵抗)×1024÷5
=入力電圧×0.146484という定数をかけています。
これで実電流を表示する事ができます。センサー類を使う場合、この様な換算が必要になってきます。

警報が出るしきい値は10A以上としていますが、こちらは逆に10÷0.146484でセンサーの電圧にしています。

10A以上電流が流れる機器としてドライヤーを使用しました。
ヒーターを使うとLEDが点滅し、送風だと10A以下なのでスルーします。


aruduino IDEのシリアルモニタに電流が出力されていますがすべてマイクロSDカードにログが保存されていきます。



↑マイクロSDに作成されたファイル

これで電流監視ロガーができました。
arduinoははじめからさまざまなケースのスケッチの例があり少しいじれば簡単にいろんなことができます。業者にウン十万払って工事するよりも、意外と安くできる・・・かも。






拍手[0回]

12/14

Wed

2016

aruduino搭載PLC M-Duinoでマグネットスイッチを動かす

ここ最近arduino関連の記事が続いていて、「あれ?設備はどうなっちゃったの?」と思っている方も多いかもしれません。 しかしついにデジタル回路でシーケンスを動かすシロモノを手に入れました!!


arduinoの搭載のPLC、M-Duinoです!!

PLCってのはプログラマブルロジックコントローラの頭文字をとったもので、シーケンス回路をプログラムで組んでいて記憶しておくことのできる優れものなのです!!
これがあれば100V制御電源で盤内配線をぜんぶIV線でする必要も無いし、回路変更も簡単です。

と、いいつつ実は昔からPLCはありました。じゃあこれは何がすごいのかというと、

arduinoの組み込みプログラムであるarduino IDEで回路が組めるのです!!

↑↑↑こんなやつです。

PLCは三菱、オムロン、東芝、富士電機といろんなメーカーが出していますがそれぞれ独自のアプリケーションが存在し、一般の設備員では扱うのが困難です。(バリバリ組める人もいますが…)

それに比べarduino IDE はググればタダでダウンロードできますし、そこら中にサンプルソースがアップされています。

つまり、ノートPCとUSBケーブルがあれば簡単にPLCのプログラムがいじれてしまうんです!!


では早速ですがマグネットスイッチのON、OFFをやってみます。


電源は直流12V~24Vです。写真ではトランスで100V→12Vにしてなおかつ整流していますが、お金があったら一体ものの直流安定化電源を買って下さい。またM-Duinoのリレー出力の接点容量は5Aもあるのでマグネットスイッチのコイルなんて余裕です。

IDEのソースはこちら↓↓
void setup() {
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
  pinMode(25,OUTPUT);
}
void loop() {
if(digitalRead(A0) == HIGH){
  digitalWrite(25,HIGH);
}
 if(digitalRead(A1) == HIGH){
  digitalWrite(25,LOW);
 }}
デジタル入力A0とA1のみを使用しそれぞれ押しボタンの信号を受けます。
ONスイッチであるA0を受けて25番の付属のリレーを動作させます。
A1が入力されるとリレーはOFFになります。


デフォルトでリレー出力(緑)、ボタン入力(赤)がLEDで確認できます。

↓動画はこちら


今回はデジタル入出力のみを使用しましたが、これだけでもフロートスイッチによる水位制御や照明のタイマー回路などのシーケンスは簡単にできてしまうと思います。

 

他にもアナログ入出力やEthernet用のコネクタがあっていろいろできそうな雰囲気を出しています。3万~4万円ぐらいなのにスゴイ(普通のPLCは一式そろえると10万円は余裕で超える)

これは制御盤に革命が起こる予感!!!!








拍手[0回]

AD

シェアしてね

プロフィール

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

カウンター

お問い合わせ

忍者アクセスランキング

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

TemplateDesign by KARMA7

忍者ブログ [PR]