I2C接続LCDのテストライブラリ

LCDはマイコン内部の変数をリアルタイムの表示し、設定値の変更やデバッグなどによく使います。そこでよく使う2つのLCDのライブラリを整理しました。
この二つのLCDは視認性の違いや使用できる電圧の違いなどがあり、めりっどデメリットがあります。
また、接続がI2Cという点から接触不良などから応答待ちでマイコンがフリーズしてしまうデメリットもあります。
Youtubeも用意しましたので合わせてご確認ください。

ソフトウェア

マイコンソフトは下記よりダウンロードできます。LCDのテストを行うために各種HEXファイルを作っていますので動作確認するだけであればそのまま使用できます。 また、このソフトを元にソフトを作り上げていくこともこのファイルから可能です。 zt-16f1825-soft_lcdtest.zip

ハードウェア

使用しているLCDは下記の2機種です。接続に関してはI2Cとして接続するだけですので割愛といたします。ちなみにマイコン基板側には2.2kの抵抗がついています。

・有機ELキャラクタディスプレイモジュール 16×2行 3.3V
黄色 SO1602AWYB-UC-WB-U

・I2C接続小型キャラクタLCDモジュール(16×2行・3.3V/5V)
ピッチ変換キット AE-AQM1602A(KIT)

ロードセル・ロードセルアンプのライブラリ作成

質量を計測する代表的な方法として圧力センサーを使う方法と、ロードセルを使用した金属のひずみによる計測方法があります。
圧力センサーの方法では荒い計測の代わりに高速な計測が可能で、ロードセルの場合は最低でも0.1秒以上の遅延を考慮しなければならない代わりに高精度というメリットがあります。
そこでロードセルを使用した計測のライブラリをまとめました。

ライブラリはマイコンソフトと動作テストするためのアタッチメント、その3Dデータを作りましたので紹介します。

ライブラリファイル一式

3Dデータもプログラムソースもファイルを一式まとめましたのでご自由にどうぞ。

マイコンソフト

ライブラリは2つに分かれていてスタートアップに入れるhx711_reset()と計測リクエストと値の取得を行うhx711_read()となります。
ライブラリのテストでは0.1秒サイクルで値を取得していますが、まれに唐突に大きな値を取得してしまう事があり、その値をどう処理するかは用途によって検討する必要があります。
一応ソフト内では唐突に大きな値が入った場合にその値を反映しないようにしていますが、計測終わり時の動作による荷重の抜けに関しては大きく値が変わるのが普通の流れと考えられ、3回取得したらその大きな差も有効とするなどの細かい調整が必要と思われます。

//	解説
//スタートアップにhx711_reset()を入れる
//loadcell_oneを0.1secサイクルで更新し、一定時間ごとにhx711_read()を実行
//
int loadcell_one = 0;//一定時間ごとに計測値を取得するタイミングフラグ。タイマー内に設置して使用。
int32 loadcell_value = 0;//ロードセルからの値
float loadcell_weit = 0;//ロードセル値からの質量
float loadcell_offset_value = 0;//ロードセル値の初期値
float loadcell_adjust_weit = 0;//ロードセルの質量からの調整値

//起動時に謎のパルスが出てくるので回避
void hx711_reset(){
	output_bit(PIN_A6,1);
	delay_ms(11);
	output_bit(PIN_A6,0);
	delay_ms(12);
}

//ロードセル値を取得
void hx711_read(){
	int tmp1 = 0;
	int tmp2 = 0;
	int32 tmp_data = 0;
	float tmp_volt = 0;
	float tmp_weit = 0;
	float tmp_difference = 0;
	float tmp_value = 0;

    //値を取得
	for(tmp1=0;tmp1<24;tmp1++){//48us
		output_bit(PIN_A6,1);	delay_us(1);
		output_bit(PIN_A6,0);	delay_us(1);
		tmp_data = (tmp_data<<1)|(input(PIN_A7));
	}
	output_bit(PIN_A6,1);	delay_us(1);
	output_bit(PIN_A6,0);	delay_us(1);
	tmp_data = tmp_data^0x00800000;

    //取得した値から質量に変換
	tmp_volt = tmp_data*(4.2987/16777216/128);
	tmp_value = tmp_volt/(0.001*4.2987/20000);
	tmp_weit = tmp_value - loadcell_offset_value;

    //フィルタリング
	if(tmp_weit <= 20000 && tmp_data!=0x007fffff){
		if(loadcell_adjust_weit==0){
			loadcell_adjust_weit = tmp_weit;
		}else if(loadcell_adjust_weit!=0){
			tmp_difference = fabs(loadcell_adjust_weit-tmp_weit);
			if(tmp_difference>10000){
				//差が大きすぎるときは反映させない
			}else if(tmp_difference>100){
				loadcell_adjust_weit = (loadcell_adjust_weit+tmp_weit)/2;
			}else{
				loadcell_adjust_weit = tmp_weit;
			}
		}

        //値がOKなら外部変数に反映
		loadcell_value = tmp_value;
		loadcell_weit = tmp_weit;		
	}

    //オフセット値が無ければ保管
	if(loadcell_offset_value==0 && tmp_data!=0x007fffff){//
		loadcell_offset_value = tmp_value;
	}

}

信号は右のオシロの絵のように25回のクロックに対してHX711が応答してきますのでそれを読み取っています。

ハードウェア

ロードセル及びロードセルアンプは秋月電子で購入したもので、接続はDOUTとPD_SCKの2本だけです。入手に関しても接続に関しても特に深い説明はいらないと思います。

アタッチメント

このライブラリをテストして運用上熟考するには簡易的に使用してみる必要がある。そのためには物理的に安定よく設置できる何かが必要です。
そこで3次元CADを使ってアタッチメントを作ってみました。

下のスペースにはロードセルアンプを入れ、信号線と電源をマイコンと接続できる形状としました。
安定よく設置できるため、使用用途を想定した計測値の監視及び組み込む機器への元図としても利用できます。
Youtubeにもアップしましたので合わせてご確認ください。

マルチマイコン制御 ~使い方編~

サンプルソフトの使い方

使い方といってもマスター側マイコンではスイッチの処理は何も行っておらず、電源を入れる以外のことは何もできない。ただLCDに表示されるスレーブ側マイコンの状況を確認するだけにとどまる。

スレーブ側マイコンの設定

一方、スレーブ側マイコンはマスター側マイコンのソースコードに書かれたスレーブ側マイコンの指定に合わせて設定する必要がある。

スレーブ側マイコンで行う設定は2点で、入力用なのか出力用なのかという項目と、アドレスが1~8のいずれにするかという項目のみ。

設定方法はスレーブ側マイコンのエンターキー(ピン番号:RA0をLow)を押しながら電源を入れると設定モードで起動する。
起動直後で入力または出力の設定となり、「+(ピン番号:RA3)」と「-(ピン番号:RA4)」を押すことで変更となる。確定はエンターキーで押すとアドレスの設定に移行する。続けて「+」と「-」でアドレスを変更し、エンターキーを押すと入力・出力に戻り、同時に設定内容が保存される。

再起動することによって先ほど行った設定で稼働し、LCDを接続していれば設定内容が確認できる。設定が完了すると通常運用時には使用しないため、LCDとスイッチは取り外してOK。その際にはスイッチ入力となるRA0~RA3はプルアップする必要がある。

各スレーブ側マイコンの設定が完了すれば分岐基板、マスター側マイコンとも接続し、スイッチの入力が出力側にすべて反映されるか確認できれば配線も含め問題ない事が確認完了となる。

最後に

サンプルソフトによる配線が確認できればそこからが実際の用途に合わせた作り込みとなります。ソフトウェア編で説明したようにメインループの作り込みにより、多くのスイッチやLEDの制御に展開することができ、こんなチープなマイコンでも一段と守備範囲が広がります。

このライブラリが多くの方に活かされると幸いです。

マルチマイコン制御 ~ソフトウェア編~

サンプルソフト

まずはサンプルソフトとしてプロジェクトファイルを含む一括ファイルを下記よりダウンロードできます。筆者と同じ開発環境(MPLAB IDE 8.92 + CCS 4.132)の方はそのまま転用できます。
圧縮ファイルにはマスター側とスレーブ側の両方が入っています。

ZT-PIC18F46K2201_MultiPic.ZIP

ライブラリ内の関数について

マルチマイコンのソースに関してはprocess_multipic.cにまとまっており、その中の関数に関してはそれぞれコメントが記述されおり、詳しくはそちらを参照願います。main.cのどこに追加すべきかもソース内で確認願います。

マスター側マイコンで行うスレーブマイコンの設定

スレーブのマイコンの設定についてだけ特記しますが、ハードウェア編で説明があったようにマスター側にスレーブ側マイコンの設定を行う必要があるという点については、process_multipic.cのmultipic_startup関数内で設定する必要があります。

下のソースの下側8行がそれにあたり、1の値で入力、2の値で出力と設定しています。スレーブ側マイコンの構成を変更する場合はここを編集したうえでスレーブ側も設定変更する必要があります。
また、スレーブ側の設定はソース上ではなく電源を入れてスイッチで行います。

以下はprocess_multipic.c内の抜粋

//マルチマイコンの初期値設定
void multipic_startup(){
    int tmp1 = 0;    

    //端末側の起動を待つ
    //ウォッチドッグタイマーリセットとウェイト
    restart_wdt();  delay_ms(250);
    restart_wdt();  delay_ms(250);
    restart_wdt();

    //初期値設定
    pic_target_add = 1; 
    for(tmp1=0;tmp1<16;++tmp1){
        pic_life[tmp1] = 0;
        pic_port3[tmp1] = 0x0000;
        pic_port4[tmp1] = 0x0000;
    }

    //各スレーブのマイコンの仕様を割り当て(スレーブ側の設定と合わせる必要がある)
    pic_mode[1] = 0x02;//端末はすべて出力
    pic_mode[2] = 0x02;//端末はすべて出力
    pic_mode[3] = 0x02;//端末はすべて出力
    pic_mode[4] = 0x02;//端末はすべて出力
    pic_mode[5] = 0x01;//端末はすべて入力
    pic_mode[6] = 0x01;//端末はすべて入力
    pic_mode[7] = 0x01;//端末はすべて入力
    pic_mode[8] = 0x01;//端末はすべて入力    
}

通信プロトコル

先にプロトコルって何?2進数って何?という人は先にグーグル先生に聞いてから読み進めることをお勧めします。

通信手順としてはマスター側マイコンからの問いかけに対して該当するスレーブ側マイコンが応答する流れとしており、マスター側マイコンは何も接続されていなければひたすら応答依頼のコマンドを送信し続けます。
スレーブ側マイコンは自分に割り当てられたアドレスと一致するコマンドが取得できた場合のみ応答します。

マスター側マイコン送信コマンド
コマンド説明
0x01SOH ヘッダ開始
0x05ENQ 照会
0x01Address スレーブマイコンアドレス
0x04EOT 転送終了
入力用スレーブマイコン(アドレス番号1)への値応答依頼
コマンド説明
0x01SOH ヘッダ開始
0x11DC1 装置制御1
0x05Address スレーブマイコンアドレス
0x34DATA PORT3の下2桁
0x12DATA PORT3の上2桁
0x78DATA PORT4の下2桁
0x56DATA PORT4の上2桁
0x04EOT 転送終了
出力用スレーブマイコン(アドレス番号5)への値(0x1234と0x5678)を送信
スレーブ側マイコン送信コマンド
コマンド説明
0x01SOH ヘッダ開始
0x06ACK 肯定応答
(入力データとしてきた場合は否定応答として0x15 NACを返す)
0x01Address 自機アドレス
0x00NULL 空データ
0x00NULL 空データ
0x00NULL 空データ
0x00NULL 空データ
0x04EOT 転送完了
自機(アドレス番号1)が出力設定で出力データが来た場合
コマンド説明
0x01SOH ヘッダ開始
0x06ACK 肯定応答
(出力データとしてきた場合は否定応答として0x15 NACを返す)
0x05Address 自機アドレス
0x34DATA PORT3の下2桁
0x12DATA PORT3の上2桁
0x78DATA PORT4の下2桁
0x56DATA PORT4の上2桁
0x04EOT 転送完了
自機(アドレス番号5)が入力設定で1234と5678のデータを送る場合

通信速度について

シリアルの設定については下記のとおりです。おそらくこのマイコンでは限界かと思います。

  • 速度115200bps
  • データ8bit
  • パリティ無し
  • ストップビット1
  • フロー制御無し

マスター側マイコンからのコマンドは10mSec単位で送信されています。
右の図ではマスター側マイコンのUSARTのTXに2ch(水色の線)を接続しています。対して1ch(オレンジの線)はRXに接続しています。
マスター側マイコンからのコマンドに対して各スレーブ側マイコンがすべて応答されている事を表します。
また、スレーブ側マイコンを8個とした場合、80mSec単位(12.5回/秒)で更新されていることになります。

対して1chはそのままマスター側マイコンのUSARTのTXに接続し、2chはスレーブ側マイコンのTXに接続しています。ダイオード1N4148が分岐基板上にあるため、他の信号は影響受けず、自身の出力した信号だけを取得しており、マスター側マイコンからの8回の要求に対して自身のアドレスに該当する1回にだけ応答している事がわかります。

一つのコマンドを見てみると1.5mSec以内に完了しています。マスター側マイコン内でのI2C処理やほかの処理を考えると10mSec間隔で各スレーブ側マイコンに要求を出すのは妥当な数字と思います。
試しに5mSec間隔で試してみましたがデータの取りこぼしが解決できず安定しませんでした。

メイン処理について

筆者の場合状況に応じて処理をまとめるためにmode(又はstep)という変数を元に全体の処理を管理しています100未満はスタートアップ処理として例えば各機器が問題なく稼働するかのチェックを行う処理を行い、900以下では異常事態を想定した停止処理を入れたりしています。
サンプルプロジェクトのファイルでメイン処理ではスレーブ側マイコンのアドレス5のデータを1に入れるという感じで全ての入力値を出力側に移しているだけになっています。
実際にはここで複雑な処理を追加していくことでハードウェア編で記述したように多くのスイッチや表示灯の処理が行えます。

以下はmain.cの抜粋

if(mode >= 0 && mode < 100){
	mode = 100;
}else if(mode >= 100 && mode < 200){
	//

	if(multipic_process_one != 0){
		multipic_process_one = 0;
		
		//マルチマイコン用
		multipic_process();

		//テスト用に取得した入力値をそのまま出力値として設定する
		//※スタートアップのmultipic_startupで入力用、出力用マイコンのアドレスを指定している。
		//※1~4は出力用マイコン、5~8は入力用マイコンとして指定している
		pic_port3[1] = pic_port3[5];	pic_port4[1] = pic_port4[5];
		pic_port3[2] = pic_port3[6];	pic_port4[2] = pic_port4[6];
		pic_port3[3] = pic_port3[7];	pic_port4[3] = pic_port4[7];
		pic_port3[4] = pic_port3[8];	pic_port4[4] = pic_port4[8];
	}
}else{

}

マルチマイコン制御 ~ハードウェア編~

試作概要

一つのマイコンでは入出力ポートに限界があり、点数を増やしたい場合があります。そこでUSARTポートを利用したシリアル通信で複数のマイコンと通信するライブラリを作りました。
USARTの信号は変換基板を使うことでRS-232Cとして利用でき、RS-485への変換なども可能となります。
速度は115200bpsとこの時代から考えると非常にロースピードですが、多くのスイッチや表示灯を使用する場合など、機器内の省配線には大きく貢献できそうです。

この試作では様々なシステムに展開することを想定し、ライブラリ化しており、なるべく簡素にまとめて関数を数か所追加するだけで実装できるようになっています。尚、ライブラリを含むサンプルソフトはソフトウェア編で記述とします。

試作全体の仕様

マイコンはすべてZT-PIC18F46K2201を使用していてマスター側とスレーブ側の2種類に分かれます。
設定に関してはスレーブ側に入出力とアドレスの項目のみで、どのアドレスのマイコンが出力なのか、入力なのかはマスター側のプログラム上で記載する必要があり、スレーブマイコンの設定はそれに合わせる必要があります。
マスター側に送っている信号は面実装タイプのタクトスイッチ又はLEDが接続されている20点でプロトコル内では1バイトのアドレスと4バイトのデータを送信しています。プロトコル上では未使用部分がありますのでアナログ値を追加するなども可能です。(面倒なのでやってませんが)つまりデータ量は4バイトなので32ビットの信号のうち20ビットしか使用しておらず、12ビット分は追加してもレスポンスは変わらず使用できることになります。

マスターマイコンの仕様

マイコンは上に書いた通りZT-PIC18F46K2201を使用。78M05のレギュレータを実装しているが今回の電源は5Vとしているため関係なく、5Vラインにそのまま電源を供給して実験しました。

スレーブ側の電源はマスター側のUSARTからの供給としたため、裏面のジャンパーはシリアル通信で使用するUSARTの電源を短絡。
ほか、PORT3の1pinも短絡されているが今回は使用していないため関係はありません。

マスターマイコンではスレーブ側のマイコンが接続されているかの管理とスレーブマイコン同士のデータの受け渡ししか行っていないためスイッチ基板とPORT3の配線は余計だが手元に転がっていたのでこれを使用。
出ている配線は5V入力用の電源ジャックとシリアル通信を行う4ピンのストレートのみ。
LCDは秋月電子のAE-AQM1602A(KIT)を使用。

スレーブマイコンの仕様

スレーブのマイコンもマスターと同じくZT-PIC18F46K22を使用。レギュレータは使用しないため無実装。電源はシリアルからの供給としているためUSARTの電源を短絡しています。

設定時にはマスターと同じAE-AQM1602Aとスイッチを取り付けて行います。入出力の設定とアドレスの設定が完了すると使いませんのでプルアップ配線したXHコネクタをスイッチの代わりに接続します。
設定の詳細については後記。

ユニバーサル基板の使い方が間違っているというど正論は不要です。いつもユニバーサル基板を使うときは実装と配線を同じ面に行っています。電源だけ裏に回す事も気が向いたらやりますが・・・。

下の写真は出力側の基板でPORT3とPORT4のピンのマスターからの制御ピンすべてをLEDに接続しています。

入力側も同じく設定が完了するとプルアップ抵抗のついたXHコネクタを突き刺して完了。

入力に関しては面実装のタクトスイッチを用意しており、プルアップ接続しています。解放でHi、押してLowとなります。

プルアップ抵抗はXHコネクタのコンタクトピンにカーボン抵抗を直接圧着し、RA0~RA3を5Vピンに接続しています。

抵抗は4.7k~10kΩ程度がいいと思いますが、無ければ100kでもOKです。

分岐基板の仕様

マスター側のシリアル信号を8個のシリアルポートに並列接続し、スレーブのTXラインに関してはほかのスレーブマイコンの信号の影響を避けるため1N4148を追加しています。
基板に関しては秋月電子のパワーグリッド・ユニバーサル基板AE-C3 RoHSを使用しています。
各コネクタ部分には5Vを赤、GNDを黒(無着色)、信号線を白に色分けしています。

この基板の場合、電源は近くのパッドと短絡するだけで完了するのでとても便利です。60円高くてもその効率を考えると十分に価値はあります。

配線はラッピング線?(言い方古い?)鈴メッキ線を使用しています。

スレーブ基板と配線は少しごちゃつくので廣杉計器のBSB-310Eでジョイントしました。USARTのケーブルはすべてストレート接続です。

電源ON

スレーブマイコン8個とマスターマイコン1個、うちスレーブマイコンの半分は出力としてすべてにLEDを接続しています。

消費電流は待機状態で150mA以下。LEDをすべて点灯しても計算上では場合550mA以下。
スレーブマイコンをすべて出力に置き換えた場合、950mAとなり、このテスト環境では1A出力のADアダプターで行けそう。もちろん長期的にテスト環境を維持したい場合は2A出力のACアダプターを使用することが望ましい。

マスターのLCDにはスレーブのマイコンがつながっているかの表示のみ。
電源が入ったままでも接続、切断はOKなので試してみるとよくわかるが物理的につながって通信の応答がある状態で「1」となり、接続など何らかの問題があって通信できない場合は「0」と表示される。
1が8個あるのはアドレス設定1~8のスレーブマイコンがすべて通信できているという事になり、アドレス番号1のスレーブマイコンが無反応の場合、一番左の数字が「0」となる。

LCD表示の右下の1文字は常に表示が変化し、マスターマイコンがフリーズしていない事を意味する。

ちなみにマイコン基板自体にも唯一基板実装されているLEDが1秒間隔で点滅しているのもマイコンがフリーズしていない事を意味し、スレーブ側ではこのLEDで判断する。

動作確認

細かい動作に関してはソフトウェア編で後記するとして、簡単に動きをまとめることとします。

全てのスレーブマイコンのデータはマスター側にまとめられ、入力に設定されたマイコンの入力信号はそのまま出力に設定されたマイコンに送られていて、スイッチを押すごとに出力側のLEDが点灯し、そのレスポンスを確認することができます。
つまり入力側マイコン(アドレス1)のPORT3の一つ目に接続されたスイッチの信号はマスターマイコンを介して出力側マイコン(アドレス5)のPORT3の一つ目に渡され、スイッチの動きは連動しています。同じようにすべてのスイッチは出力側のLEDと連動しており、入力側と出力側の動作確認ができます。

続いてソフトウェア編をご覧ください。

Windows10の致命的パフォーマンス低下について

2020年9月のことである。

いつの間にか慢性的に2年ほど使用しているPCのパフォーマンスが低下していることに気が付いた。ファイルを整理していても比較的軽い図面を修正していても使用時間半分程度の割合で常にカクカクしている。ブラウザがなかなか起動されない現象やマウスが2秒間フリーズするなどの減少もあり、ついにハードウェアが壊れ始めたかと模索し始めた。

ハードウェアのスペックは低くはなく、新規で用意しても自分の使い方では同じ状況に遭遇する可能性も高いと思い、問題解決に時間をかけて対応することとした。
ちなみにWindowsのバージョンは1909、OSビルドは18363.1139。

現状把握とハードウェアの確認

ストレージやメモリーの検査を行い、電源ユニットの交換なども対応したが変わらず、ハードウェアが原因とは考えにくい状況に至った。

そういえば先日Windowsのアップデートや不要なソフトの削除など定期的なメンテナンスを行ったのをふと思い出し、それからパフォーマンスの低下が起こったのではないかと模索し始める。

DefenderSmartScreenが気になる

日常的に使用している時からタスクマネージャに出てくるWindowsDefenderSmartScreenというのが気になっていて、数日間常時表示させてちょくちょくCPU占有率を観察していた。パフォーマンス低下を感じているときは大体20%ぐらいを占有しており、見てのとおり高負荷となりそうなアプリは起動していない。

上記のプロセスの時にパフォーマンスを見てみると1コアを完全に使い切っており、パフォーマンスが悪いのも納得できる。
ブラウザすら起動していないのにパソコンを使用しているときの半分ぐらいの時間がこの状況になるのは、使い物にならないともいえる。

DefenderSmartScreenというのは何なのか?ぼんやりとは名前から察知できるが具体的にどのようなことを行っていて停止してもよいものか?設定は無いのか?などを調べてみるとどうやら悪意あるサイトからのファイルに対し、保護する事を行っているらしい。ちなみにカスペルスキーを入れてもDefenderSmartScreenは停止せず意図的に停止させなければパフォーマンス低下は解決できなかった。

DefenderSmartScreenをオフにして解決

WindowsnDefenderSmartScreenの設定先はOSの「設定」-「更新とセキュリティ」-「Windowsセキュリティ」-「アプリとブラウザーの制御(アプリとブラウザーコントロール)」を開き、「アプリとファイルの確認」を「オフ」にすることで解決した。

右の画像はデフォルト時

上でも書いたがウィルス対策ソフトを入れ替えてもこの機能は停止できず、意図的にここでオフにしなければパフォーマンス低下は解決できませんでした。

右の画像はオフ設定後

設定後すぐには改善されず、再起動する必要がある。

設定後の確認

DefenderSmartScreenをオフにし、再起動して数分後にはアクセスも落ち着き、タスクマネージャではバックグラウンドで2桁のCPU占有率は見られなくなった。

パフォーマンスを見てもこの通り。何も起動しなければ静寂そのものである。

DefenderSmartScreenをオフにすることでパフォーマンスは改善はされた。しかしその機能は別のアプリで代用できないか?不要なのかという点が懸念として残る。
ブラウザを使用したWebサイトからの保護に関してはChromeにお任せするとして、他のアプリによるWebからの保護に関してはファイアーウォールなどのリアルタイムスキャンにお任せすることとし、様子見することとした。

ゲームボタン(OBSAT-60UMQ)をテスト

アーケードゲーム機でよく使用されるゲームボタンのメーカーである三和電子から他とは違うタイプが出ていたので試してみました。正式な型番はOBSAT-60UMQ-G-HSW-12Vで筆者購入時の価格は2750円でした。

三和電子のこのような大きなボタンは裏側にオムロンのマイクロスイッチ(V-10-1A4)とウエッジ球が実装され、結構大きいために何らかの機器に組み込む場合は必然と大きくなってしまう。しかしこのボタンは無接点スイッチとLEDの基板によりコンパクトな形状となっている。しかもZHコネクタによって組立作業にも配慮されている。

試した回路、基板は下の写真のとおり。回路図は無く、ユニバーサルに適当に配線しています。試作は修正することも多いので片面に部品も配線も行っています。抵抗やコンデンサは基本的にチップを使っています。
ピンヘッダやすずメッキ線に色を塗っていますがATX電源の規格に準拠しており、黄色が12V、赤が5V、黒がグランド、白が信号線としています。

このタイプのボタンは12V用しかなく、電源には12Vが必要となります。さらに接続するマイコンの信号用に5V又は3.3Vなどのレギュレータが必要になります。
LEDの制御にはマイコンの信号電圧と電流の関係でフォトカプラを入れています。今は亡きTLP-521が手元にありましたので使用しています。コレクタ電流値がギリなので少し気になりますが・・・。
右側のSW OUTはプルアップしていますので待機でHI、押してLOWとなります。LED INはHIで消灯、LOWで点灯となります。

LEDには定電流ダイオード?が入っているので直接12Vかけても大丈夫です。点灯させてみたところウエッジ電球のタイプと比較すると少し暗い感じで実際に使用するには5V回路にする点も含めて基板を改造したほうがよさそうでした。

気になるスイッチ部分ですがフォトインタラプタを使用しているので無接点スイッチで接触不良の心配が軽減できます。そもそもこれ以外のモデルで使用されているマイクロスイッチはオムロンの資料で電気的耐久性が30万回と書かれており、かつ1分間に30回と記載されています。ゲーム用としてのボタンのスイッチ部分としては少々性能不足に思いますがこのモデルは無接点ですのでこちらのほうが耐久性は期待できます。三和電子の資料では電気的耐久性1000万回以上と記載されています。

また、通常スイッチ回路にはチャタリング防止として10μFのコンデンサを入れたりしますがその点は無接点なので不要です。

無意識に押したときのオシロとなりますが、約0.1msecとなっています。が、押す速度に依存しますので連打した場合はもちろんさらに短くなりますし、ゆっくり押すと傾斜がなだらかになってしまいますので手の震えが秒妙にある場合などを想定すると可能性は低いですがマイコン側ではチャタリングとなってしまう可能性はあります。

また、スイッチ部分には0.1mA程度流さないと接触不良を起こす可能性もあるが非接触であればその点も心配は不要と思われる。

まとめとして、下記の特徴があげられる。

良い点

・高耐久
・奥行きが短い
・ZHコネクタを採用
・見た目が以前からの物と変わらない

よくなかった点

・LEDが少々暗い
・クリック感が無い(スイッチのクリック感は客先によっては重要視される)
・12Vしかない

以上の点で設計上での置き換えは進めたいと考えるものの、少し注意しながらの置き換えが望ましいと思われる。

BigShot(レトロゲーム)を修理できる?

~ある日修理できませんか?と持ち込まれました~

BigShotとは?

高砂電器産業のビッグショット。人によっては非常に懐かしい超レアなゲーム機で、100円を入れて遊ぶゲーム機です。この機械は100円に設定されていましたが、物によっては10円だったりすると思います。コインを判別する部分は取り替え可能になっておりましたので・・・。

今尚健在なゲームセンターにある競馬ゲームの発端?ともいうべきゲーム機で賭けたいビット数だけコインを投入し、枠のボタンを押します。スタートボタンを押して外れればそのまま終了し、当たればあたった枚数のコインが出てきます。
その当たり枚数が10枚とか15枚とか出てくるので、子供にとってなけなしの小遣いで当たった日には間違いなくギャンブル中毒にはまるでしょう。

故障内容

持ち込まれた際には遊技可能ですが、ランプが消えて点かない、又は暗いという問題がありました。症状的には1ブロック丸ごとだったので初見では単純にランプが切れているのではなく、断線によるものと推定いたしました。

早速開けれる箇所を開けて点検してみました。右の写真は表示パネルの裏側ですが、結束している箇所を解き、断線していないか?問題の線はどのように接続されているのかを手繰っていきました。この部分に関してはおそらくは30年以上経過しているにもかかわらず問題ありませんでした。
しかし点くべきランプの配線には通電しておらず、下から来る配線のどこかで断線しているような感じです。

次に正面下側の扉を開け点検してみることにしてみました。

問題の線を手繰っていくとどうやらこの基板(右側写真)の上側につながっているようです。基板を外し(非常に硬かったです)ついでに端子部を接点復活材などで磨きました。するとやはり断線している線を見つけました。ちょうどランプが消えている問題の線(青の線)でした。

断線している線を再度はんだし、接続してみましたが復活できず・・・。

この基板周辺の配線も点検してみましたが他に断線は見られませんでした。余計に壊してしまうという恐れもあってこれ以上手を加える勇気はありませんでした。

とりあえずは遊べるのでここら辺であきらめることとしました。

故障原因

修理は断念してしまったので推測でしかありませんが、断線によって使用していたため、ランプに対しての接触不良が頻繁にトランジスタへの過電流(突入電流)を招き、トランジスタ(基板左上のどれか)が焼けたものと思われます。

基板を外した状態で電源を入れてオシロスコープで動きが見れれば修理は出来そうな気はしますがそれには相当な労力が必要であきらめてしまいました。

また、基板を外してわかったのですが、基板の裏側は湿気がひどい?のが原因でしょうか?ほぼ全面のレジストが浮いていてすごいことになっていました。コレが原因?では無いと思います。

最後に

さて、昔懐かしいレトロゲーム機の修理に挑戦してみましたが、残念ながら完治は出来ませんでした。が、修理してみたくてインターネットで検索している方へ少しでも貢献できればと公開してみました。
また、この記事を見て問い合わせしてみようと考えるのは結構ですが、あまり期待できませんのであしからず・・・。

レーザー加工機(Smart Laser CO2)買いました

※すでに売却済みで手元にはありません。

レーザー加工機(Smart Laser CO2)とは?

樹脂や紙など、レーザーによって切断したり焦げ目をつけるための機械で、モノづくりの現場では多用されています。レーザーの出力がワット数で表現され、1000Wクラスとなると金属も切れるようです。今回購入したのは40W。5mmのアクリルぐらいなら簡単に切れます。

どうせ買うなら3Dプリンターの方がいいのでは?という考えもありましたが、3Dプリンターは出力サービスが増えており、そちらに出す方が多種多様なパーツがすぐに作れます。さらに100万円以下の多くの3Dプリンターでは樹脂を積層していく方式なので出力後のざらざらとした感じと裏面のぐちゃぐちゃ感、サポート材を削ってきれいにする作業は必ず残ります。つまり3Dプリンターは仕上げ作業が必要な事が多い点がネックとなります。また、加工時間も長く、マウスぐらいのサイズでも5時間とか8時間とかかかります。その生産性と比較し、レーザー加工機は基本切るだけなので仕上げ作業も少なく、生産性は高いと考えたからです。

機械は割と大きいので狭い事業所では設置場所に少々困ります。別のパソコンとモニター、マウス、キーボードは兼用して窓際に設置しました。切断時の煙が結構出ますので、何らかの排煙は必須です。

Smart Laser CO2

・加工エリア:600×440mm
・レーザー方式:CO2レーザー 40W
・対応加工方式:ベクター加工、ラスター加工
・対応OS:Windows7、Windows8、Windows8.1、Windows10、
Mac OS X、Linux、Raspberry Pi
・対応ブラウザ:Chrome、FireFox
・対応ファイル:SVG、DXF
・付属品:保護メガネ、USBケーブル、ACケーブル
・電源:AC100V
・サイズ:910×820×380mm
・使用時温度:30度以下
・連続使用時間:30分以下
・重さ:約42kg

組み立て

注文後、約1ヵ月で大量の資材が届いた。開封し、欠品がないか確認する・・・が、部品点数が多くて確認には1時間以上かかった。

組み立ては正直丸1日かければ大体組みあがるかとなめていたが、実際には丸3日(24時間)ほどかかった。組み立てマニュアルは付属せず、ネット上に公開されている。画面で見ていると作業性が悪いのでその都度印刷していたら本のような枚数になった・・・。ちなみに、GoogleChromeの簡易版ページで印刷すると見やすくなった。

組み立て・操作マニュアル(ネット上のみ)

組み立てには六角レンチ、組スパナも必要だが電動ドライバとエルボがあると非常に効率的。それでも3日かかったので電動ドライバが無い場合はそれなりの労力が必要となる。

組み立て後、調整を行いつつ試験使用。試しに色々加工していくと、調整不足に気づき、少々分解して調整しなおすの繰り返し。レーザー加工機を熟知していれば組み立てながら調整はスムーズに行えると思うが、筆者はレーザー加工機が初めてで、結局調整と大体の勝手がわかるまで1週間ぐらいかかった。

※後にSmartLaserCO2はFABOOL LaserCO2と改名されたようです。ボランティアで組立てに行く機会がありましたので、オフラインでも組立マニュアルが確認できるようにPDF化したファイルと必要なドライバ関係一式を残しておきます。尚、ブラウザの問題なのか最後までPDF化できていないファイルがいくつかあるようです。普通のレーザープリンターに変えても同じでした、謎です。

FABOOL Laser CO2組立てマニュアル等一式 fabool_laser_co2_offline_document.zip(2017年7月20日作成)

加工してみました

アクリル板をカットしてみました。写真上の方に見える集光レンズ(黄色のレンズ)の上からレーザー光が照射され、材料に当てて加工します。左側に見える青いチューブのつながったところからはエアーが出ていて材料から火が出ないように吹き消しているという感じです。これがなかったら紙などは簡単に燃え上ってしまいます。

2mmの方では2枚重ねて会社のロゴとなるキーホルダーを作ってみました。

加工用データ

 テストキーホルダー
(SVGファイル、DXFファイル)

 20mm丸(DXFファイル)

右の写真はアクリル5mm板を20mmの直径でカットした断面をさらにカットした写真です。円を切ったカット面はまっすぐ?ちょっと斜め?という感じです。少々調整しにくいのかまだまだ調整方法に工夫が必要なのか現状こんな感じです。

印象としては意外と早く切れるという感じです。しかしカット面の直角を出すのが難しい点から10mmぐらいの細かい部品を作るのは微妙です。

注意点

筆者の知識不足によりご指摘をいただきました。ここを読まれる方も十分にご注意ください。
ご指摘頂いたのは塩ビ系素材にレーザーを当て、加熱加工することにより、塩素ガス、塩化水素ガス、ダイオキシンが発生するという事でした。よって、塩ビ素材、消しゴムについての記事は削除及びYoutubeも削除いたしました。
筆者も塩素の含まれる素材を燃焼など高温で処理した場合、ダイオキシンが発生するという知識はありましたがその話を聞いてから年数もたっており、うっかりと忘れておりました。大変申し訳ありません。
ダイオキシンは体に悪い事は2000年ごろだったか少々社会問題となり、認識はあると思いますが塩素ガス、塩化水素ガスは金属・樹脂の区別なく腐食させ、人体の粘膜にも損傷させるそうです。また消しゴムのレーザー加工も一般的な消しゴムは「塩ビに可塑剤を混ぜたもの」で塩ビ素材そのものほどではない物の同様に危険な行為だそうです。皆さんも十分に認識し、ご注意ください。

Q&A

この製品は機器の組み立てに関してある程度慣れた方向けの商品。さらに、プラモデルの延長のレベルではないとこが驚いた。組み立てながらも「よくこんな物を一般向けに販売してるよなぁー・・・、クレームとか低レベルな質問が大変そうやなぁー」と呟いていた。サポート等は無く、自力で頑張ってくださいというスタンスに共感したので・・・、人柱的にも気づいた点をQ&A形式で残していこうと思います。内容が間違っているとか、追加情報いただければ更新いたします。
また、実物を見たいという方はお問い合わせ頂ければ対応いたしますが、そこはボランティアですのでご配慮願います。

  Q.設定値はどれぐらいでしょうか?
 

A.パワーを30%で速度を調整して厚みに対応するという感じです。 こんな素材を試してほしいなど、ご要望あれば試します。また、外気温やレーザー管や電源の経年劣化?によってここまでの性能が出ない場合があります。購入してから2か月以内のデータとなりますので、参考とお考え下さい。当社でも半年使用するとここまでの性能は出なくなりました。

切削加工
材料 厚み 速度 仕上がり
アクリル(透明) 1mm 400 良好
アクリル(透明) 2mm 200 良好
アクリル(透明)※1 5mm 80 良好
アクリル(透明)※1 8mm 35 良好
アクリル(透明)※1 10mm 25 良好
木材 シナベニヤ 4mm 100 良好
木材 シナベニヤ 5.5mm 40 貫通できず
木材 桧(ひのき) 6mm 100 まあまあ
木材 桧(ひのき) 9mm 40 貫通できず
木材 栂(つが) 12mm

40

貫通できず
木材 杉 9mm 40 貫通できず
木材 ファルカタ 6mm 80 良好
木材 ファルカタ 13mm 40 貫通できず
木材 アガチス 3mm 700 良好
木材 アガチス 10mm 40 貫通できず
木材 MDF 5.5mm 20 貫通できず
ゴム NRスポンジゴム 5mm 200 切り口汚い
ゴム ゴムシートGS-05 1mm 200 切り口汚い
アルミ 0.2mm 20 無傷
※パワーはすべて30%です。
※木材は所々残ってしまうことが多く、速度を遅めても焦げが大きくなるだけで貫通できない場合があります。押しぬく前に裏面を確認し、抜けていない箇所はカッターなどで補修が必要です。逆に速度を極端に速めて何十回も加工することで下まで抜けるようです。(試していませんので他の方からのアドバイスです。)
※1アクリルで厚みがある場合はカット後、くっついてしまうのかスポッとは抜けない場合があります。ドライバーの柄やプラハンマーなどで軽くたたいて抜きとる必要があります。

※パワーはすべて30%です。
※木材は所々残ってしまうことが多く、速度を遅めても焦げが大きくなるだけで貫通できない場合があります。押しぬく前に裏面を確認し、抜けていない箇所はカッターなどで補修が必要です。逆に速度を極端に速めて何十回も加工することで下まで抜けるようです。(試していませんので他の方からのアドバイスです。)
※1アクリルで厚みがある場合はカット後、くっついてしまうのかスポッとは抜けない場合があります。ドライバーの柄やプラハンマーなどで軽くたたいて抜きとる必要があります。

彫刻加工
材料 速度 仕上がり
アクリル 800 1mm程度カッターで
彫った感じ
アクリル 1200 0.5mm程度カッターで
彫った感じ
アクリル 2000 ルーターで削った感じ
コルク 4000 良好

※パワーはすべて30%です。
※速度に関してはもう少し上げられると思いますが横に走るローラーとベルトが稀に滑りますのでこの程度にしています。
※アクリルに関しては加工箇所の周辺が白くなります。気になる方は紙やすりなどで仕上げた方が良いです。塗装するとほぼ分からなくなります。
※MDF材は2回、3回加工しても貫通できませんでした。

 

Q.真円、直角が出ません。

 
  A.X方向とY方向のフレームの直角が出ていない可能性があります、この作業を正確に行うには根気よくやるしかないと思いますが、直角の差し金または対角に計測しながら組みなおすしかないと思います。  
     
  Q.ラスターデータで加工する際に、レーザー加工機のソフトでバックエンドエラー又はno data loaded to generate previewと出てデータが読めない。  
  A.明確に原因が特定できているわけではありませんが、SVGファイルを作成する前の画像データで縦横1000px以下にしなければならない様です。また、解像度も読み込む時の値に合わせ、72pixel/inchにしなければなりません。  
     
  Q.外気温は影響しますか?  
 

A.影響します。寒い方が良いようです。真夏の加工は難しいような気がします。サポートにお聞きしたところ30度を超えたら性能が明らかに落ちるとの事でした。当社でも冷却水がお湯状態なると性能が激落ちで使い物にならなくなるのでレーザー加工機のオプションで購入したラジエータは取り外し、熱帯魚用のクーラーを付けました。ゼンスイのZR-miniです。冷却水はクーラーで十分冷えて加工性能は改善しましたが何故か4月ごろの性能は発揮できません。

 
     
  Q.レーザーが弱い気がします  
 

A.集光レンズの高さ調整はできていますか?集光レンズは対象物の厚みに合わせて調整する必要があります。1mmのアクリルを調整してカットした後、5mmのアクリルをそのままカットしても切れ味は悪く、意外とマメに調整する必要があります。

 
     
  Q.やっぱりレーザーが弱い気がします  
 

A.反射ミラーの調整を確認してください。反射ミラーの確認は照射位置が手前の左、手前の右、奥の左、奥の右の4カ所で確認してください。左手前の第2ミラーの位置と右側の第3ミラーのセンターが合っていない場合は手前の右で合っていても手前の左で合いません。同じく、第1ミラーのセンターと第2ミラーのセンターが合っていなくても奥と手前でずれてしまいます。ミラーの向きだけでなく位置も確認してください。

 
     
  Q.でもやっぱりレーザーが弱い気がします  
 

A.蝶番でついている上蓋の奥にある蓋を開けてレーザー管を確認してください。レーザー出力しているときにピンク色に見えるレーザーは安定よく出ていますか?レーザー管の冷却が足りないとき?は安定が悪いように思います。レーザー管にたくさんの空気が残っていたり連続稼働が長すぎたり出力が強すぎたりしている可能性があります。

 
     
  Q.もう嫌になってきた、レーザーが弱いです!  
 

A.反射ミラーやレンズは汚れていませんか?反射ミラーを調整する際にミラーの上にマスキングテープを貼り、レーザーで焼く作業を繰り返しているとその煙の影響でレンズや鏡が汚れます。調整後にはレンズや鏡をティッシュ等で綺麗に掃除してください。

 
     
  Q.冷却装置の気泡が消えません  
 

A.まず、冷却水はレーザー管の出力側から排水させます。逆につないでしまっている場合は電源を切って接続しなおしましょう。
流水方向があっているのにレーザー管に多くの空気が残っている場合は排水口の向きを確認してください。下に向いていたり横向いている場合は空気が抜けきりません。レーザー管を固定しているアクリルのビスを緩め、排水口が上向きになるように回して下さい。ホース内についてしまっている小さな気泡は気長に回し続けることで勝手になくなります。気泡がなくなってくると水も減ってくるので、途中でつぎ足すことを忘れずに・・・。

 
     
  Q.冷却装置のラジエータがビリビリします  
 

A.通常はビリビリ来ませんが、何が悪かったのか一時的にこのような症状が出たことがあります。レーザー照射時にレーザー管の電気が水を伝ってきていると思います。冷却装置と接続しているホースに金属製のカプラ等を取り付けた場合も同じく照射時にはカプラがビリビリしますので感電に注意してください。ちなみにアースには接続しない方がいいと思います。

 
     
  Q.組み立て後部品が余りました  
 

A.当社で組み立てた時も余りました。使っていても組み忘れという感じもなく、おそらく製造ロットによって必要部品数が変わっていると思います。用意する方も足りないのは問題だけど余るのは予備にもなるしいいんじゃない?という感じでしょうか・・・。

 
     
  Q.アルミはアルミホイルぐらいに薄くても切断できませんか?  
 

A.無理です。いくら遅く試しても無傷でした。

 
     
  Q.加工エリアって仕様書どおりできますか?  
 

A.ミラーとかが当たるので無理と思います、謎です。組み立てマニュアルの写真と届いたものが少々違う点から考えると、改良はちょくちょくやられているようです。その際に当初よりも狭くなってしまったのか、レーザーはそこまで行かないけど材料を置けるエリアとして記載しているのかどちらかだと思います。
当社の場合の加工エリアは580×390で、レーザーが届く範囲です。

 
     
  Q.レーザー加工機が突然反応しない時がある  
 

A.原点に戻った時なのか、リミットが働いた時?なのかレーザー加工機がパソコンからのコマンドを受け付けなくなる時があります。おそらくはそんな仕様なのか、レーザー加工機についているマイコンボードがバグっているかどちらかだと思います。電源を切ってリセットしてください。
ちなみにリセットはレーザー加工機の電源を入り切りしてもダメみたいです。USBケーブルからの電源供給でマイコンボード電源が入ったままのようです。加工機の電源を切ったときにUSBケーブルも抜き差ししましょう。

 
     
  Q.レーザー加工機が加工を途中で止める  
 

A.弊社でもこの症状は出ました。コマンドを送っているパソコンのデバイスマネージャを開いてみていると一瞬マイコンボードのシリアルポートが消えたのが確認できたのでおそらくノイズが激しと思われます。付属より短い1mのUSBケーブルを用意し、フェライトコアを2つ取り付けました。フェライトコアは大きいものしかなかったのでそれぞれ2回巻きと3回巻きして取り付けたところ、症状は消えました。

 
     
  Q.デバイスマネージャにマイコンが認識されているのに「接続」ボタンをクリックしても繋がらない  
 

A.マイコンボードと認識されているシリアルポートの番号が大きすぎる可能性があります。当社でも組みつけた時にCOM22と認識され、この症状になりました。強制的にCOM1に変更したら問題なくつながりました。FTDIのチップを使った機器が周辺にある方はご注意を。

 
     
  Q.臭い!  
 

A.当社では92mmのパソコンケース用のFANを6個(1600rpmが3個と2000rpmが3個)使って専用の換気扇を作りました。が、それでも手前から少し出てきているようです。もう少し強力にしておけばよかったとすこし後悔しています。
後にさらにファンを強化しました。80mm各の100V用でさほどきつくないものですが、16個付けました。加工中は臭いませんが加工後蓋をすぐに開けるのでその時は少々臭いが室内に入ります。新規で設置される場合は換気扇を直付けするかダクトファンを検討した方がいいと思います。

 
     
  Q.Y軸方向に動き始めたとき、ベルトが滑る  
 

A.いくつかの問題点はあると思いますが、ベルトがきつ過ぎるかローラーに緩み又はずれの原因があると思われます。ベルトはラジオペンチなどで引っ張りながら締めるとパンパンに張ってしまいますが、手でフレームを動かしたときに緩いときと同じぐらいスムーズに動くけばOKとしています。
もう一つ、直角が出ていない可能性があります。100mm程度の正方形を加工したときにひし形になっていれば再調整が必要と思います。Y軸の直角に関係する六角ボルトを緩め、左右の位置を巻き尺で確認しながら締め、手動で軽く動かして均等に動けば完了としています。

 
     
  Q.加工ベースが粗くて小さい物が加工しにくいです  
  A.当社ではマス目の小さいハニカムコアテーブルを別途購入しました。注文先はモリシン工業(http://www.morishin.com/ 0576-26-2200)です。仕様はアルミハニカムコア 1/4inch t6 x 500 x 700で、1枚1万円ちょっとでした。  
     
  Q.来てもらえますか?  
 

A.夢のレーザー加工機を思い切って購入し、組み立てにチャレンジしたところ組み立てがうまくいかない、調整がうまくいかない、加工がうまくいかないなどなど、サポートが無いためにゴミになりそうな方が多くいそうな気がします。決して上から言っているつもりではありませんが、同志として思い切って買った物が期待に沿えず眠ってしまうのは耐えないほどの残念な思いに共感を覚えます。
そこで、モノづくりが好きな仲間に協力すべく、ボランティアでなら対応いたします。ボランティアですので壊しても文句は無しです。旅費交通費(弊社は大阪です)は請求しますが日当は頂きません。必要な工具類は持参します。作業しやすいようにできるだけ周辺に物は無い状態でお願いします。良識ある作業環境の提供、宿泊先で願いします。当然ですが、かび臭い宿泊先や真夏でエアコンの無い場所を提供されて事故が起こった場合、トラブルの元となります。

以上の心得でよければinfo@zeatec.jpの方にお問合せ下さい。モノづくりの楽しさを共感できればと思います。質問、相談などもお気軽にどうぞ。

ソリッドワークスで棚を作りました

ソリッドワークスとは?

近年3Dプリンターの影響で3次元CADが流行りつつあります。使えるかも?と思えるようなフリーソフトも出てきたので大変気になるところです。

フリーで使える3D-CADソフト

市販の3次元CADは数十万レベルから数千万の物まであります。当社では電子機器類の設計を頻繁にやっているのでソリッドワークスを選択しました。

ソリッドワークスにはフリーのビューアであるeDrawings用に出力ができます。そのファイルをiPadに入れ、iPad用eDrawingsで読み込むことでAR機能を使うこともできます。
AR機能を使えば現物を作らなくてもCGで確認できるのでより使い勝手をリアルに検証できます。

組図 banngai7-1f

ソリッドワークスのデータ banngai7-1