入手しやすいデバイスを使って作業効率アップ

M5StackやM5Paperなどを使って効率アップデバイスを作ります。

エクセルとWEBカメラで7セグの読み取り

以前、エクセルVBAの「Cells(,).interior.color」を使ってワークシートにビットマップ画像を表示するという記事を見つけて、「ActiveMovie control type library」でWEBカメラの画像をワークシートに表示させる物を作りました。

(画像を全部処理すると時間がかかり過ぎるので、適当に間引きました。また、画像設定中はワークシートを非表示にしておかないと、とても時間がかかります。)

これで簡単な画像処理は、VBAで出来るようになります。

画像処理はOpenCVがすでにあったのですが、アプリ間の連携が面倒なため他の手段を探していたので、大変助かりました。

参考にしたURLは忘れてしまったのですが、上記のキーワードで検索すればヒットしました。

直近に使用予定は無かったので、「画像処理ブック」が出来てしばらくは放置していたのですが、ある時、調整にとても時間のかかる製品の自動化案件が発生しました。

対象の製品はコスト的な制約で、通信ポートを設ける事が出来ず、生産ライン用のプログラム(ファクトリーモード)の搭載も出来ませんでした。

そのため、作業者が手順書に従って、7セグ表示と操作用タクトスイッチで動作テストを行うのですが、ミスしやすい上に大変時間がかかりました。

しかも見積で失敗しており、標準の工数を適用した出荷価格になっていました。

特にこの場合、以下のように損失が2重に発生します。

  1. 当該製品の製造コストを回収できない
  2. 本来できるはずだった他の作業が出来なくなる

自動化の話が持ち上がるのも当然です。

しかし、見積に自動化のコストは含まれていないので、経費はほとんどかけられません。

そこで「画像処理ブック」が役に立ちます。

7セグの画面を取り込んで、特定のセルの色を調べれば表示されている数字を認識することができます。

タクトスイッチは製品のキースキャンをエミュレートすればOKですが、タイミングがシビアだったのでArduinoを使いました。

WEBページのテーブルはエクセルに取り込める

前回、M5StackでWEBサーバーを稼働させて測定データをダウンロードできるようにしたのですが、WEBページのテーブルデータはエクセルのデータソースとして扱えるという事を知り、早速試してみました。

 

実装は簡単で、ページ更新のタイミングでテーブルデータも更新するようにするだけです。(テーブルのHTML記述方法はBingで教えてもらいました。)

エクセルの方は、データリボンの「データ取得」「その他のデータソースから」「Webから」と選択します。サーバー選択してテーブルを選択すればワークシートにテーブルが表として取り込まれます。

実際に使う時は、M5Stackのサーバーを立ち上げておいて、データリボンの「更新」をクリックすれば、データが更新されます。

サーバーへの接続からだと、更新に少し時間がかかりますが、データをダウンロードしてコピペするより使い易いです。

これならBLEキーボード機能も出番はないでしょう。

 

M5Stackを使った点検作業の効率化ですが、今まではデータの取得ミスがなくなる事以外はあまりメリットが無かったのですが、今回の改善でかなり使える物になってきました。

バイスを使った効率化は、「手間をかけた割には...」「せっかく作ったのだから...」という感じになることが多いのですが、今回はそうならなくて良かったです。

 

M5StackにWEBサーバー機能を追加

いつも業務で使用しているBLE受信用のM5Stackですが、予備機がもう1台欲しいと考えて、少し古いM5Stackにソフトを書きこんで動作テストをしました。

ところが、BLEデバイスと接続しようとすると、リセットがかかってしまいます。

原因は今年に入ってから追加した、BLEキーボード機能でした。

消費電力とか電源電圧の関係でしょうか?

BLEキーボード機能は、測定したデータをパソコンに転送するために追加しましたが、予備機なので無くてもいいことにしました。

 

予備機とは別の問題ですが、最近になって測定項目が増えてきて、BLEキーボードで送信しても時間がかかるようになってきました。

データ取得が時短できたので、ついつい測定ポイントを増やしてしまいました。

私の担当している設備は古い物が多いので、この事自体は悪い事ではありません。

 

そこで、WEBサーバーを搭載して、パソコンにCSVとしてダウンロードする機能を追加する事にしました。

私はHTMLやJAVAScriptに関する知識があまり無いので、何かないかと検索したのですが、GitHubに目的にぴったりの物がありました。

ESP32-ESP8266-File-Download-Upload-Delete-Stream-and-Directory

です。

5年前の物ですが、SSIDなどを設定すれば、ほぼそのままで動作しました。

HTMLはソースコードに含まれていて、CSSも付いています。

ESPmDNSも追加したので、パソコンからの接続も簡単です。

 

eKクロスEVの走行モード

私の場合、ecoモードで走行しています。

回生があまり効かないようで、アクセルを離しても惰性で結構走ります。

電動アシスト自転車に近いかもしれません。

私が移動する時間帯は車が少ないので、後続車がいない時は、下り勾配で加速して惰性で走行する方法で電費をかせげます。もちろん常識的な速度の範囲で実行します。

 

他にノーマルモードとスポーツモードがあるのですが、ノーマルはecoより回生が効きやすいようです。スポーツは試していません。

 

最近の車は久しぶりです。

今までに付いて無かった機能がいくつか搭載されていますが、一番うれしかったのはオートライトです。

オートライトは便利装備というより安全装備です。

 

走行時の音はそんなに静かではありません。

ガソリン軽自動車の時と同様に、走行時はタイヤの音?が普通に聞こえてきます。

乗り換えたのに違和感がほとんど無いのですが、これが原因かもしれません。

 

EVの充電コンセント

業務用の軽自動車が三菱のEVになりました。

航続距離は180kmなのですが、一番遠い工場でも往復60kmなので、

トラブルが同日に複数発生しない限り問題ないでしょう。

ガソリン車の時も、2週間に1回程度しか給油していませんでした。

いざとなれば高速充電スタンドがあります。

近所の三菱自動車は24時間使えるそうですが、他はどうなのでしょうか?

 

通常充電用コンセントは専用の物になります。

プラグ形状は接地付きの200Vで、充電電流は15Aだそうです。

専用のキャプタイヤケーブルには何かコントローラのような物が付いていて、結構重いです。

指定されているEV用コンセントには、プラグの抜け防止機構が付いています。

充電ケーブルはカーゴスペースの床下に収納できるようになっていますが、

私の場合はカーゴスペースは工具やら掃除用具やらが常時満載なので使えません。

 

車の電源スイッチをオフにすると、充電終了時刻が少しの間表示されます。

充電ケーブルを接続すると、充電ケーブルと車内の充電中のランプが点灯。

終了予定時刻に見に行ってみると、充電終了していました。

 

車の給電口側をロック解除して外します。

充電ケーブルのコンセント側は抜け防止機構を解除して外します。

 

M5StackでAC36V以上の電圧測定

M5Stack用Grove接続の電圧計ユニット(3000円くらいです)があります。この電圧計ユニット(電流計ユニットも)は入力側が端子台なので、圧着もはんだ付けも不要です。

 

最大入力電圧はAC36Vで、それ以上を測定するにはトランスなどが必要です。

私はユーアールディの電力測定用PT、APT-2S (2400円くらい)を使っています。変圧比1:200で、かなり小型です。

 

ちなみに電流測定用CTは、ユーアールディのCTU-22-CLF(3500円くらい)を使っています。センサーはクランプ式で出力は電圧です。

負荷抵抗200Ωで、1mA~40Aまでの電流を0.01mV~4Vに変換できます。出力が電圧なのでマイコンA/Dコンバータで直接読み取りできます。

 

これらはAC50Hz/60Hz専用です。

 

M5StackのBLEクライアントスケッチにBLEキーボード機能を追加

BLE搭載の測定器からのデータを、BLEクライアント機能を使って受信しています。

今まではパソコンへのデータ転送は手入力でしたが、色々な所で使うようになって、データ転送手段を考えなくてはならなくなりました。

シリアル通信とかSDカードを使う方法も考えられますが、接続とかしてる間にキーボードで手入力した方が速いでしょう。

業務で使用するツールは面倒くさいとすぐに使われなくなってしまいます。

 

そこでBLEキーボードの機能を追加してみることにしました。

パソコンに転送したいデータを選んで、BLEキーボード機能で転送できたら使い易いかもしれません。

BLEキーボード機能はクライアントとの共存はできないだろうと思って試した事はありませんでしたが、サンプルスケッチから必要な部分をコピペしたらあっけなく動作しました。以下が実装例です。

使い始める前にはBluetoothの接続登録を整理しておかないと、測定器の接続が先にパソコンに取られたりします。

 

BleKeyboard bleKeyboard;

void setup() {
{
    bleKeyboard.begin();

}
void loop() {
    if(!doConnect) //元ソフトのクライアントとしての処理
    {
        //以下を追加
        if (bleKeyboard.isConnected())
        {
            if (kbConnected==false) //接続状態表示を追加
            {
                M5.Lcd.printf("KBON");
                kbConnected = true;         
            }
        }
        else
        {
            if (kbConnected)
            {
                kbConnected = false;
                M5.Lcd.printf("KBOF");
            }
        }


        if(M5.BtnA.isPressed())
        {
            if(kbConnected==true) //接続されていたら8バイトの数字データを送信
            {
                for(int i=0;i<8;i++)
                {
                    int c=dat[i];


                    if(c=='0') bleKeyboard.write('0');
                    if(c=='1') bleKeyboard.write('1');
                    if(c=='2') bleKeyboard.write('2');
                    if(c=='3') bleKeyboard.write('3');
                    if(c=='4') bleKeyboard.write('4');
                    if(c=='5') bleKeyboard.write('5');
                    if(c=='6') bleKeyboard.write('6');
                    if(c=='7') bleKeyboard.write('7');
                    if(c=='8') bleKeyboard.write('8');
                    if(c=='9') bleKeyboard.write('9');
                    if(c=='/') bleKeyboard.write('/');
                    if(c=='.') bleKeyboard.write('.');
                    delay(100);
                }
            }
        }
    //以下は元ソフトのまま
 }