2019年9月5日木曜日

マルチファンクションシールドで時間計測

Arduinoで遊んでいるといつも電源で悩みます。だいたいモバイルバッテリーをつないで済ますのですが、結構大きくて邪魔だったりします。で、なにかいいものないかなと思っていたのですが、部品箱を漁っていたらLIR2032を2個入れる電池ボックスを発掘しました。
 
お!これは行けそうだということでVINにつないでみるとちゃんと動作\(^_^)/でもどのくらいの時間もつかなぁと調べようとしたのですが、じっと見張っているのも馬鹿らしい…
 
ちょうどマルティファンクションシールドというのが余っていたので、信号がHIGHになってからLOWになるまでの秒数を7セグLEDに表示するのを作りましたw(写真右)
 
計測してみると5分程度しかもたないみたいです…ただ、ボタン電池が購入してから1年以上放置していたものなので劣化してしまっている、あるいは、中華なので最初から不良なんて可能性もあります^^;
 
ちなみに動作させた左側のArduinoは孫の夏休みの自由研究用にと用意したFMラジオです。元は宿題用にバラックだったのですが、興味を示さなかったのでボツ。ジィジの記念用にケースというかワーキンベースというかを3Dプリンターで印刷しました^^;

時間計測しかできませんが意外と便利だったのでソースを公開します。

/**
 * 時間計測器
 * 
 * filename:  Uno-Timer.ino
 * 
 * @version   1.0.0
 * @copyright Copyright (C) 2019 Yoshio Kiya All rights reserved.
 * @date      2019-09-01
 * @author    木屋 善夫
 */
#include <TimerOne.h>
#include <Wire.h>
#include <MultiFuncShield.h>

enum
{
  WAITING,
  STARTED,
  STOPED,
};

uint8_t mode;
unsigned long startTime;
unsigned long offTime;
unsigned long stopTime;

#define PIN_INPUT 5

void setup() {
  Timer1.initialize();
  MFS.initialize(&Timer1);    // initialize multi-function shield library

  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(PIN_INPUT, INPUT);

  int pin = digitalRead(PIN_INPUT);
  digitalWrite(LED_BUILTIN, !pin);
  MFS.write(-1);

  mode = WAITING;
}

void loop() {
  int pin = digitalRead(PIN_INPUT);
  digitalWrite(LED_1_PIN, !pin);
  unsigned long now = millis();

  // モードごとの動作
  switch (mode) {
    case WAITING: {
      // 起動前
      if (pin) {
        // スイッチがオンになった
        mode = STARTED;
        startTime = now;
        digitalWrite(LED_2_PIN, LOW); // 点灯
      } else {
        digitalWrite(LED_2_PIN, (now >> 9) & 1);
      }

      break;
    }
    case STARTED: {
      if (!pin)
      {
        // スイッチがオフになった
        mode = STOPED;
        stopTime = millis();
        digitalWrite(LED_3_PIN, LOW); // 点灯
      } else {
        digitalWrite(LED_3_PIN, (now >> 9) & 1);
      }

      int sec = (int)((now - startTime) / 1000);
      int min = sec / 60 * 100;
      sec = sec % 60;
      MFS.write(min + sec);
      break;
    }
    case STOPED: {
      if (pin) {
        mode = STARTED;
        digitalWrite(LED_4_PIN, HIGH);  // 消灯
      } else {
        digitalWrite(LED_4_PIN, (now >> 9) & 1);
      }
      break;
    }
  }

  delay(100);
}


使い方は、マルチファンクションシールドの右下の方にある A5 ピンに信号線をつなぎ、GND どうしを接続してください。

マルチファンクションシールドの右にあるLEDの意味は上から

  1. ウォッチドク:動作中は約0.5秒間隔で点滅します。
  2. スタンバイ:信号線が HIGH になるのを待っています。
  3. 計測中:最初に信号が HIGH になってから最後に LOW になるまでの時間を7セグLEDに「分分秒秒」で表示します。
  4. 計測終了:信号が HIGH になると 3. に戻ります。

参考資料

2019年8月9日金曜日

TPU での印刷設定

TPU でスマホケースを作りたいなと思い随分前に購入しました。ダイレクトエクストルーダの Pxmalion CoreI3 というのを持っているのでそれで試してみたのですがまともに印刷できない><;ダイレクトエクストルーダで駄目ならボーデンタイプの ANYCUBIC I3 MEGA じゃ無理だろうと放置していたのですが、ふと試してみたくなり、ドライブギアとの隙間を狭めたアッパーハンドルに交換して印刷してみるとすんなり印刷できました\(^_^)/

最初の印刷品質はあまり納得できるものではなかったのですが、あれこれと試してきれいに印刷できるようになったので備忘録。

右が最初、左が納得できた印刷です。

PLA のデフォルト設定から、下記の変更を行い印刷しました。スライサーは Cura 4.2.1 です。

最初の設定(写真右端)

  • インフィル: インフィル密度 15%
  • マテリアル: 印刷温度 210℃
  • マテリアル: ビルドプレート 50℃
  • マテリアル: フロー 120%
  • スピード: 印刷速度 20mm/S

フローが多すぎるようで穴が小さくなってしまっていますし、温度も高すぎるようで糸引きとエア噛みも激しく白っぽくなっています。

次の設定(写真中央)

  • インフィル: インフィル密度 15%
  • マテリアル: 印刷温度 195℃
  • マテリアル: ビルドプレート 50℃
  • マテリアル: フロー 100%
  • マテリアル: 引き戻し有効 チェックを外して無効に
  • スピード: 印刷速度 30mm/S
エア噛みは少なくなり透明度が出てきました。糸引きもかなり少なくなりました。印刷速度も上げてみましたが特に問題ないようです。ただ、最上部がガタガタになっています???

この最上部、よく見ていると一番最後だけなんかはみ出すくらい大きくヘッドが動いていてそのせいで変な形になってしまっています???
こいつの原因がわからずこの動きは何なんだとしばし考え込んだのですが、そういえば以前アイロンという設定を見たことがあると気づきこれを外してみました。

納得の設定(写真左端)

  • 外郭: アイロン有効 チェックを外して無効に
  • インフィル: インフィル密度 15%
  • マテリアル: 印刷温度 195℃
  • マテリアル: ビルドプレート 50℃
  • マテリアル: フロー 100%
  • マテリアル: 引き戻し有効 チェックを外して無効に
  • スピード: 印刷速度 30mm/S
ビンゴでした。最上部まできれいに整って印刷されました\(^_^)/

印刷終了後ノズルにフィラメントたまができているので、印刷終了後にアイロンがけしている際にフィラメントたれて無駄なバリを作ってしまうのではないかと思います。

2019年6月17日月曜日

Ubuntu 18.04 DNSでの名前解決エラー

どうも、開発サーバーへのアクセス時に通信エラーを起こすことが多いです。勝手に仮想マシンの設定の問題と決めつけていたのですが、どんどんひどくなっていっていよいよ Ajax のデバッグがほとんどできない状態に… 以前 syslog を見たときに Apache がコア吐いているのを見つけていたので、いよいよデバッグするしか無いかと再度 syslog を開いてみました。

あれ?なんか下記のようなエラーがいっぱい出ている…

systemd-resolved[864]: Server returned error NXDOMAIN, mitigating potential DNS violation DVE-2018-0001, retrying transaction with reduced feature level UDP.

おかしいなぁとよく見ると、あ!開発用の CentOS じゃなくて開発マシンの Ubuntu の syslog 見てた…う〜ん、とするとエラーを起こしているのは Ubuntu の方か?とぐぐってみると出てきました。

New alert keeps showing up: Server returned error NXDOMAIN, mitigating potential DNS violation DVE-2018-0001

でこれによると、シンボリックリンクの /etc/resolv.conf がおかしなところを指しているのでこれを直せとのこと。

kiya@ubuntu:~/$ ll /etc/resolv.conf
lrwxrwxrwx 1 root root 34  6月 17 14:01 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

ん?stub って言葉が気になる…

kiya@ubuntu:~/$ ll /run/systemd//resolve/
合計 8.0K
drwx------ 2 systemd-resolve systemd-resolve  80  6月 17 14:04 netif
-rw-r--r-- 1 systemd-resolve systemd-resolve 733  6月 17 14:04 resolv.conf
-rw-r--r-- 1 systemd-resolve systemd-resolve 715  6月 17 14:04 stub-resolv.conf

ということで

kiya@ubuntu:~/$ cd /etc
kiya@ubuntu:/etc$ sudo unlink /etc/resolv.conf
kiya@ubuntu:/etc$ sudo ln -s ../run/systemd/resolve/resolv.conf resolv.conf

再起動すると、エラーが出なくなりました。

2019年4月24日水曜日

キャンピングトレーラーのバッテリーの維持

フロート充電について

年に数回しか出動しないキャンピングトレーラーのバッテリーのメンテが大変です。ディープサイクルバッテリーを使えば空にしても大丈夫なんでしょうがなんせ高い。そこで、普通の自動車用バッテリーを使うわけですが、そうすると最初に書いたようにきちんとメンテしてやらないとあっという間に駄目になってしまいます。

いろいろ調べたらどうやらフロート充電というのをしてやればいいらしい。内容的には自己放電量と同程度の少ない電流で充電し続けるってことらしいです。そう言えばいまから40年ほど前、自動車整備学校の授業でバッテリーの充電方法を習った時「教科書には載っていないが実習用のバッテリーは微電流で充電し続けている。我々は細流充電法と呼んでいる」なんて教師が話してたのを思い出しました。

充電器その1 定電圧定電流

最初に作ったのは定電圧定電流DC-DCステップダウンコンバーターを使ったもので、ポテンションメータが3つ付いていて電圧と電流に加え、充電中LEDが消える電流を設定できるタイプのものです。

ダイオードやモジュールをつなぐコネクタをユニバーサル基板に搭載し、その基盤に上記のデコデコモジュールと電圧/電流計、コネクタ類を接続して、3Dプリンターで印刷した自作ケースに収めました。

まぁ、割とよくできたとは思ったのですが、それなりにサイズが大きいのと逆接続保護用ダイオードをバッテリーにつなぐコネクタの手前、電圧計のあとに付けたので Vf で数字が信用できないのではないかと…テスターで測ってやるとそれほど狂ってもいません…そのへんは素人なのであまり良くわかっていませんm(_ _)m

Flameer DC-DC 電源モジュール ステップダウン 電子部品 降圧 LM2596S

DC電源モジュール 7V-35V→1.25V-30V 3A 【降圧型・定電圧定電流】
モジュールの設定方法が詳しく書かれています。

充電器その2 定電圧 LED電圧計付き

次に作ったのがDC-DC定電圧ステップダウンコンバーターモジュールを用いたもので最大充電電圧を13.7Vほどに制限しています。今回は7セグLEDの電圧計付きのモジュールにしました。過熱保護と短絡保護も付いているとのことです。

LEDの左右のボタンは電圧計の表示を入力と出力に切り替えるためと、それぞれのキャリブレーション用です。LED左右の穴は表示が入力か出力かを示すLEDののぞき穴、上部の穴は出力電圧調整用のポテンションメータ用です。

このバッテリーはホンダのディオ用に購入したのですが購入直後に廃車となってしまったので取り外してABSのアセトン蒸しに使っています。アセトンが漏れ出したときのこと考えて屋外で蒸すのですがいちいちAC電源を引いたりするのが面倒なのでバッテリーでやっています。12V 40mm のファンは定格電流100mAなので一晩やっても1Ah程度のはずなのですが、充電器にかけると12.5Vから始まります。見ているとどんどん電圧があがってゆくので順調に充電しているようで、そのまま放置したら13.6と13.7を行ったり来たりするようになりました。

13.7V時の電流をテスターで測ってみると20mAくらいなのでフロート充電となっているようです。

こいつはかなりコンパクトにできたので割とお気に入りです。ちなみに電源は24V/1AのACアダプタ使いました。


このケースの.stlファイルは下記にて公開しています。
https://www.thingiverse.com/thing:3572054

電源モジュール パワーモジュール 調整可能 ステップダウン 電圧計 5A 75W DC-DC

充電器その3 定電圧 LCD 電圧・電流計付き

Aliexpressでデコデコを物色していたらLCDが付いていて電圧と電流が表示されるものを発見しました。なかなかおしゃれなので早速ポチ、2週間ほど経つと届きまして早速作成。といっても、線をつなぐだけなのでもっぱらCADで筐体の作成。

LCD左右のボタンは出力電圧調整用です。

13.7Vに調整して充電開始。ここで大問題が発生!最初は問題なく充電していたのですが、しばらく経って見にゆくと電圧が低い???ポテンションメーターを回しても全然電圧が変わらない???

まぁ、中華パーツに不良はつきものなので仕方ないかと^^;こんな時のために基本的中華パーツは2個単位で注文しているのです。早速予備に交換して充電開始、しばらくすると同じ現象…え〜、なんで〜とAliexpressの商品ページを開いてしげしげ見ると入力電圧が5〜23V、しかも20V以内で使えと書いてある…24V入れちゃったから壊れたのね(;´д`)

仕方がないので再注文、2週間後に再組み立て、今回は余っていたノーパソ用のACアダプタ16.5V/3Aを使用しました。

13.7V時の電流は100mA、このバッテリーは軽自動車用の44B19L。こんなもんでいいのかな?翌日見たら0.01AになっていたからOKでしょう。

PS:キャリブレーション方法を探していたら「バッテリー充電には使用しないでください」と書いてあるショップがありました><;ダメなんだ…

2019年4月12日金曜日

IONIC4 で Android用がビルドできない。

またまた、ハイブリッドアプリを作ることになり IONIC の登場です。

IONIC に限ったことではありませんがOSSのソフトってガンガンバージョンアップするのはいいのですが互換性が…もっとも仕様変更よりもバグで動かなくなることが多々あるとは思うのですが…

前回の IONIC3 を使ったハイブリットアプリ作成時も Android Studio のバージョンがあがってあれこれ小細工しないとビルドできず苦労しました。なんとかリリースにこぎつけたのですが、その後、変更以来が来てちょこっと直してビルドしようとしたらエラー><;自分が普段使っているマシンはどんどんバージョンアップしてしまいます…

いやはや…ということで、それからは開発環境をまるごと仮想マシン化して環境をそのまま保存することにしました。

今回ははじめから仮想マシン上に Xubuntu 18.04 で開発環境を作りビルドはこの仮想マシンにて行い、コーディングとデバッグは sshfs にて接続して普段遣いのマシンで行うことにしました。

さて本題です。諸々を新規インストールして空のアプリをビルドすると「Could not find an installed version of Gradle either in Android Studio, or on your system to install the gradle wrapper. Please include gradle in your path, or install Android Studio」

あらあら、例によって Android Studio の Gradle が見つからないと…
find で探してみます。

[kiya@coins-dev coins]$ find / -name "gradle" -type f 2>/dev/null
/snap/android-studio/73/android-studio/gradle/gradle-4.10.1/bin/gradle
/home/kiya/.gradle/wrapper/dists/gradle-4.10.1-all/455itskqi2qtf0v2sja68alqd/gradle-4.10.1/bin/gradle
/home/kiya/.gradle/wrapper/dists/gradle-4.10.3-all/81msde2dx9p4vji0mjgtvxkcb/gradle-4.10.3/bin/gradle

なんか変なところにあるけど ~/.profile にパスを追加
# ちなみに /snap の方は実行権

# Android SDK のパス
export ANDROID_SDK_ROOT=${HOME}/Android/sdk
# avdmanager, sdkmanager
export PATH=${PATH}:$ANDROID_SDK_ROOT/tools/bin
# adb, logcat
export PATH=${PATH}:$ANDROID_SDK_ROOT/platform-tools
# emulator
export PATH=${PATH}:$ANDROID_SDK_ROOT/emulator
# gradle
export GRADLE_ROOT=${HOME}/.gradle/wrapper/dists/gradle-4.10.3-all/81msde2dx9p4vji0mjgtvxkcb/gradle-4.10.3
export PATH=${PATH}:$GRADLE_ROOT/bin

無事ビルドできました。