忍者ブログ

設備のマニアどっとこむ

設備、資格、DIYのブログ!

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万円は余裕で超える)

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





↓↓電験3種の公式集を作りました↓↓



拍手[0回]

PR

12/10

Sat

2016

arduinoでクリスマスイルミネーション

aruduinoでクリスマスイルミネーションを作りました。


↓↓ソースはこちら↓↓
#define LED_PIN 14
#define LED_PIN2 15
#define LED_PIN3 16
#define LED_PIN4 17
#define LED_PIN5 18
#define LED_PIN6 19
void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(LED_PIN2, OUTPUT);
  pinMode(LED_PIN3, OUTPUT);
  pinMode(LED_PIN4, OUTPUT);
  pinMode(LED_PIN5, OUTPUT);  pinMode(LED_PIN6, OUTPUT);
  
}
void loop() {
   digitalWrite(LED_PIN, HIGH);
   delay(3000);
   digitalWrite(LED_PIN, LOW);
   
   digitalWrite(LED_PIN2, HIGH);
   delay(3000);
   digitalWrite(LED_PIN2, LOW);
   digitalWrite(LED_PIN3, HIGH);
   delay(3000);
   digitalWrite(LED_PIN3, LOW);
   digitalWrite(LED_PIN4, HIGH);
   delay(3000);
   digitalWrite(LED_PIN4, LOW);
   digitalWrite(LED_PIN5, HIGH);
   delay(100);
   digitalWrite(LED_PIN5, LOW);
   digitalWrite(LED_PIN5, HIGH);
   delay(100);
   digitalWrite(LED_PIN5, LOW);
   digitalWrite(LED_PIN5, HIGH);
   delay(100);
   digitalWrite(LED_PIN5, LOW);
    delay(100);
   digitalWrite(LED_PIN5, HIGH);
   delay(100);
   digitalWrite(LED_PIN5, LOW);
    delay(100);
    digitalWrite(LED_PIN5, HIGH);
   delay(100);
   digitalWrite(LED_PIN5, LOW);
    delay(100);
    digitalWrite(LED_PIN5, HIGH);
   delay(100);
   digitalWrite(LED_PIN5, LOW);
    delay(100);digitalWrite(LED_PIN5, HIGH);
   delay(100);
   digitalWrite(LED_PIN5, LOW);
   digitalWrite(LED_PIN6, HIGH);
     delay(1000);
       digitalWrite(LED_PIN5, HIGH);
      delay(1000); 
      digitalWrite(LED_PIN4, HIGH);
      delay(1000);
      digitalWrite(LED_PIN3, HIGH);
      delay(1000);
      digitalWrite(LED_PIN2, HIGH);
      delay(1000);
        digitalWrite(LED_PIN, HIGH);
      delay(1000);
   digitalWrite(LED_PIN6, LOW);
     delay(1000);
 digitalWrite(LED_PIN5, LOW);
      delay(1000); 
      digitalWrite(LED_PIN4, LOW);
      delay(1000);
      digitalWrite(LED_PIN3, LOW);
      delay(1000);
      digitalWrite(LED_PIN2, LOW);
      delay(1000);
     digitalWrite(LED_PIN, LOW);
      delay(1000);
     digitalWrite(LED_PIN, HIGH);
   delay(800);
   digitalWrite(LED_PIN, LOW);
   
   digitalWrite(LED_PIN2, HIGH);
   delay(800);
   digitalWrite(LED_PIN2, LOW);
   digitalWrite(LED_PIN3, HIGH);
   delay(800);
   digitalWrite(LED_PIN3, LOW);
   digitalWrite(LED_PIN4, HIGH);
   delay(800);
   digitalWrite(LED_PIN4, LOW);
   digitalWrite(LED_PIN5, HIGH);
   delay(800);
   digitalWrite(LED_PIN5, LOW);
   digitalWrite(LED_PIN6, HIGH);
   delay(800);
   digitalWrite(LED_PIN6, LOW);
   digitalWrite(LED_PIN5, HIGH);
   delay(800);
   digitalWrite(LED_PIN5, LOW);
    delay(800);
   digitalWrite(LED_PIN4, HIGH);
   delay(800);
   digitalWrite(LED_PIN4, LOW);
    delay(800);
    digitalWrite(LED_PIN3, HIGH);
   delay(800);
   digitalWrite(LED_PIN3, LOW);
    delay(800);
    digitalWrite(LED_PIN2, HIGH);
   delay(800);
   digitalWrite(LED_PIN2, LOW);
    delay(800);digitalWrite(LED_PIN, HIGH);
   delay(800);
   digitalWrite(LED_PIN, LOW);
   delay(2000);
    digitalWrite(LED_PIN, HIGH);
       digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);
    digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100);
    digitalWrite(LED_PIN, HIGH);
      digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100); digitalWrite(LED_PIN, HIGH);
     digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100); digitalWrite(LED_PIN, HIGH);
       digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100); digitalWrite(LED_PIN, HIGH);
       digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100); digitalWrite(LED_PIN, HIGH);
       digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100); digitalWrite(LED_PIN, HIGH);
       digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100); digitalWrite(LED_PIN, HIGH);
       digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100); digitalWrite(LED_PIN, HIGH);
       digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100); digitalWrite(LED_PIN, HIGH);
       digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(100); digitalWrite(LED_PIN, HIGH);
       digitalWrite(LED_PIN2, HIGH);
    digitalWrite(LED_PIN3, HIGH);
    digitalWrite(LED_PIN4, HIGH);
    digitalWrite(LED_PIN5, HIGH);digitalWrite(LED_PIN6, HIGH);
   delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(LED_PIN2, LOW);
    digitalWrite(LED_PIN3, LOW);
    digitalWrite(LED_PIN4, LOW);
    digitalWrite(LED_PIN5, LOW);
    digitalWrite(LED_PIN6, LOW);
     delay(1000);
   
  
}


↓↓電験3種の公式集を作りました↓↓



拍手[0回]

11/23

Wed

2016

【NODE js / arduino】簡易監視システムを作る 後編

前回の続きとして今度はarduino側の回路と組み込むスケッチについて解説する。

使用する部品はこれだけ
 
 温度センサ LM35
 抵抗内蔵5mm赤色LED(5V用)
 arduino UNO
 その他ブレッドボード&ケーブル

まず、温度計の入力はアナログの0番ピン、LED用の出力はデジタルの4番ピンを使用し、
LM35は素子の平らな方から見て左から5V、A0、GNDの順につなぐ。
出力のLEDは長い脚のほうをデジタルの4番ピン、短い方をGNDにつなぐ。
※保護抵抗内蔵なので抵抗はナシ



続いてarduinoのスケッチはこのようになる。
char incomingByte;
boolean sw = false;
float a_in;          // 温度計アナログ入力値
float temp_c = 0;  // 摂氏値( ℃ )
 
void setup(){
    Serial.begin(74800); //index.jsの値と同じにすること
    pinMode(4,OUTPUT);
}
void loop(){
    a_in = analogRead(0);
  // 入力値を摂氏に換算
  temp_c = ((5 * a_in) / 1024) * 100;
  
        int rnd = temp_c;
        delay(500);
        Serial.println(rnd);   //PCへ温度を出力
        if(Serial.available() > 0){
        incomingByte = Serial.read();
        if(incomingByte == '1'){  //1が来たらLEDを光らせるif文
        sw = !sw;   
        if(sw == true){
        digitalWrite(4,HIGH);
         }else{
        digitalWrite(4,LOW);
         }
         }
        }
}
最後はこれらをNODEjsで動かす。


コマンドプロンプト画面でNODEコマンドをたたく

node index.js

listen 3000 portが出力されればOK。続いてウェブブラウザでhttp://localhost:3000/を
呼び出すと下の画面のようになる。





arduinoからの温度がリアルタイムで表示される。また、ONボタンでarduinoへデジタル信号を送ることができ、押すたびにLEDが点滅する。※ラインファンはイメージのためコードには入っていません。

これで温度を監視しながらファン等を動かすシステムが完成した。デジタル出力1ポイントとアナログ入力1ポイントのみの簡易のものだがarduinoのポテンシャルの高さを感じた。

NODEjsやJavascriptなどのプログラムははっきりいって素人レベルのアルティメットだが今後もarduinoで設備関係の記事にチャレンジしたい。


↓↓電験3種の公式集を作りました↓↓



拍手[0回]

11/14

Mon

2016

【NODE js / arduino】簡易監視システムを作る 前編

工場や商業施設など大規模な現場の場合、遠隔・集中監視のため設備員用の監視システムが使用されている。メーカーとしては横河電機やアズビル、富士電機製のものなどがあり、それぞれ自社システムにて構築されているものがほとんどだ。しかしさまざまなものがオープンソース化されている現在、メーカーでなければ構築できない、という時代は過ぎ去るのでないかと考えている。

今回、arduino、NODE js、Javascript等を用いて簡易的な監視システムを作ってみることにした。

まず一般的な監視システムの一例を紹介する。

現場機器からの信号をI/Oカードで受け取り監視サーバとデータのやり取りをする。
そしてクライアントPCから監視サーバへアクセスし監視、操作を実施する。
クライアントPCは通常複数あるのが一般的で、一台壊れても監視そのものには影響がない。


続いて今回構築する簡易の監視システムはこのようになっている。

監視サーバの代わりにPC内でNODEjsを動かす事にした。これによりarduinoとシリアル通信しつつjavascriptを用いてウェブブラウザでやりとりができる。ローカルの機器とはarduinoと接続する。ちなみにOSはウインドウズ10で実施。


手順としてはまず、NODEjsをインストールするところから始める。
http://nodejs.jp/よりダウンロードできる。
下記のようなコマンドプロンプト画面で操作する。

NODE JSはさまざまなモジュールをダウンロードできる機能がある。
シリアル通信などをするための準備段階として下記コマンドでインストールする。

npm install  express
npm install  serialport
npm install  socket.io

続いてJavascriptファイルと監視画面のhtmlファイルを作っていく


ファイル名:index.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var SerialPort = require('serialport');
var serial = new SerialPort('COM3',{   //MACだとポート名が異なる
    baudrate:74880    //alduinoとの通信速度
});
app.get('/',function(req,res){
    res.sendfile('index.htm'); //htmlファイルを呼び出す
});
serial.on('open',function(){
    console.log('open'); //コマンドプロンプトへ出力
});
serial.on('data',function(data){
    io.emit('recvmsg',data.toString());  //温度データ取り込み
});
io.on('connection',function(socket){   //alduinoへ信号出力
    socket.on('sendmsg',function(msg){
console.log('socket.on');
        serial.write(msg,function(err,results){
        });
    });
});
http.listen(3000,function(){ //http://localhost:3000/へ出力
    console.log('listen 3000 port');
});
続いて監視画面となるHTMLの作成

ファイル名:index.htm
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8" />
  <title>arduino control</title>
  <style>
   article, aside, dialog, figure, footer, header,
   hgroup, menu, nav, section { display: block; }
  </style>
 </head>
 <body>
 <script>
document.write("temperature");
</script>
<h1>hello</h1>
<br></br>
<button>on</button> 
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var socket = io();
$('button').click(function(){
socket.emit('sendmsg','1');//ブラウザのボタンから1を出力
});
socket.on('recvmsg',function(data){
$('h1').text(data);//ブラウザへ温度を出力
});
</script>        
</script>
 </body>
</html>
これで準備はOK、かなり簡単なインターフェースだが、PC側の準備はこれで問題ない。
あとは後編にてarduino IDEのプログラムと回路構成について説明する。

→後編はこちら

↓↓電験3種の公式集を作りました↓↓



拍手[0回]

11/04

Fri

2016

arduinoで自己保持回路をつくる

以前にシーケンス回路の入門編の記事を書きましたが、今回電子回路で自己保持回路を作ってみました。 

盤内のすべて強電の回路で盤を組むと回路の変更ができなかったり、リレーの数が多くなり高額になってしまっています。そのため、制御回路が複雑な場合はシーケンサーをつかったりします。

そのシーケンサーをプログラムの書き込める電子回路モジュールarduinoで代用してみました。


左がarduinoUNOで右がブレッドボードです。

押しボタンスッチ黒、赤の片側をそれぞれデジタル入力7番、8番ピンと10kΩをはさんでGNDへ、スイッチのもう片方をarduinoから出力されている5Vへ接続しています。

プログラムのソースはこちら↓↓

int val = 0;


int val2 = 0;


int state = 0;


int old_val;



void setup() {


pinMode(13,OUTPUT);


pinMode(7,INPUT);


pinMode(8,INPUT);


}


void loop() {


val = digitalRead(7);


val2 = digitalRead(8);


if((val == HIGH)&&(state==0))


{


state = 1 - state ;


}


if((val2 == HIGH)&&(state==1))


{


state = 1 - state ;


}


old_val;


if(state == 1){


digitalWrite(13,HIGH);


}else{


digitalWrite(13,LOW);


}}




黒いボタンを押すと13番ピンへ5Vが出力され続けLEDが点灯します。
OFFにするときは赤のボタンを押します。

これを応用し出力にSSRリレーをつなげれば強電の回路を組み合わせることができます。
例)スマフォで家電を遠隔操作する方法
  自動点滅器について
  音に反応する照明

今回つかったarduino UNOはデジタル入出力が14個しかありませんが、価格が3千円程度と安くプログラミングも比較的簡単なのでウン十万するシーケンサーを使うより賢いかもしれません。
メンテもプログラムミングしたarduino基板を交換すればイイだけなのでメーカーを呼ぶ必要もありません。耐久性は疑問ですがなかなか使えそうです。
まだまだarduinoでいろいろできそうなので今後も紹介していきたいと思います。お楽しみに~

12/15追記
ガチの自己保持回路はこちら



↓↓電験3種の公式集を作りました↓↓



拍手[0回]

AD

シェアしてね

著書

プロフィール

HN:
アルティメット雅史
性別:
男性
自己紹介:
製油所、データセンター、化学工場を渡り歩いた設備安全評論家
取得資格は電験3種、消防設備士甲4、2級ボイラー技士、危険物乙4、電工2種、技術士一次試験合格(電気・電子)、フォークリフトほか

カウンター

お問い合わせ

忍者アクセスランキング

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

TemplateDesign by KARMA7

忍者ブログ [PR]