electronics

スイッチマトリクスを使ってマイコンの入力ポートを節約する話

目的単純なスイッチ(ON/OFF)を判定する際に、できるだけマイコンのIOポートを節約するための方法を考えるなぜ単純なスイッチでは駄目なのか単純なON/OFFであれば下記の様な単純なスイッチでも問題ないです。※GPIO23は入力ポートとする単純なスイッチ(1スイッチ/1ポート) GPIO23はプルアップされていて、常にHIGHとなっている状態です。ここでスイッチが押されるとGNDに接続されてLOWになる感じですね。個人的にこの設計はシンプルで好きです。迷うこともないし。しかしこれで例えばキーボードなんて実装しようとしたらIOポートの数の壁にぶち当たるのは想像できますね。同時押しを考えないでいいのならアナログ入力少し複雑になりますが、原理はわかりやすい。アナログ入力で判定する(nスイッチ/1ポート)GPIO23をアナログ入力とすると、プルアップされているので常に3.3V付近です。SW1が押されるとGNDに落ちて0V, SW2が押されると分圧回路が成立して半分の1.65V付近になります。(誤差や熱による変化が考えられるため)なのでアナログ入力で電圧値を読み取ってやれば1ポートで複数のスイッチの状態が得られるというわけです。ただし、この方法だと同時押しに対応できません。対応できないというか、上記の場合は同時押しなのかSW1なのかを区別できません。

  • zienchan
    zienchan
3 min read
linux

Ubuntu 18.04.2 LTS (Bionic Beaver)がある日突然、真っ暗になって起動しない件

現象深く考えずにアップデート適用して再起動したら突然、画面が真っ暗になってログイン画面が表示されなくなって詰んだ環境VMWarePlayer上にUbuntu 18.04.2 LTSをインストール済解決策セーフモードで起動して下記のファイルを編集してWaylandを無効化するvi /etc/gdm3/custom.conf #WaylandEnable=false これのコメントを外して、 WaylandEnable=false こうする 結果再びログイン画面が表示されるようになる参考Ubuntu 18.04 LTSが起動しない?Waylandを無効にすれば起動するかも!

  • zienchan
    zienchan
1 min read
electronics

AliExpressで格安ヒートガン(ホットガン)買った話

事の始まり普段から海外の修理系の動画(ex. https://www.youtube.com/user/mymatevince)をYoutubeで見ているわけですが、よくこのヒートガン(ホットガン?)と呼ばれるツールが登場します。この道具は主に熱風を当ててソルダリング(リ・ソルダリング?)するものです。半田ごてとは違って、小手先を対象物に物理的に接触してなくてもはんだを溶解することができるので表面実装部品(SMD)などを剥がしたり、接着することができます。なので主に修理などで用いられるのですが、私は表面実装ICを取り付けたいことが結構あるのでICの裏面に全面GNDとかあるIC(ESP32)を使う場合に欲しくなりました。なお、こういった表面実装ICのリフローには、はんだでなくて、はんだクリームを使うはずなのですが、どうも修理動画を見ている限りでは再接着とかであれば溶解したはんだでもいけるっぽいですね。目的AliExpressで下記を満たす良さげなヒートガンを買う温度調節可能なことスタンド式で安全に手を離したりできること細かい作業もできるようにノズルの経を調節可能なこと持ちやすく、作業中の手元が見やすい形状であることAmazonでも下記のような製品は見つかりますが、上の修理動画にあるような細かな作業に向いたヘッド&

  • zienchan
    zienchan
5 min read
fusion360

秋月のユニバーサル基板(ブレッドボード)のケースを作った

目的 下記のユニバーサル基板がぴったり収まるケースが欲しい ※クリックすると商品ページへ 背景 ESP32とカラーセンサを使ったLED発光検知&通知のおもちゃを作成する際に、 きっちり収まる汎用のケースが欲しくなったため 解決策 3Dプリンタで作成する STLも配布するので必要な方は下記からどうぞ ケースモデル一式(STL) header.stl -> 上部(蓋) body.stl -> 下部(本体) 基板の寸法に互換性があれば、他のものでも使えると思います 仕様 梱包可能サイズ 名前 mm 長辺 800

  • zienchan
    zienchan
2 min read
fusion360

Fusion 360で押し出した後の位置を修正したい場合

目的 Fusion 360で押し出しツールを適用したが、その後に押し出す値を変更したくなった 背景 今回のケースでは3Dプリンタヘッドの最小幅が0.4mmだったのを知らずに厚さ0.35mの壁を作成してしまったため、これを0.4m以上に修正したくなった ※この手前の上部にある凹みを修正したい 解決策 下記のようにパラメータ変更を使用するだけで一度適用した制約を変更することができる メニューの"修正"→"パラメータ変更"を選択 対象の押し出しパラメータを任意の値に修正 とてもよくできている ただ個人的にプロパティはメッシュなどを選択したら表示してくれた方が直感的かな パラメータの概念を一度理解してしまえばもう迷わないとは思う 失敗談 まず真っ先に思い付いた修正方法は、対象メッシュのスケッチ寸法ツールでの移動だった しかし、これを適用しようとすると過剰拘束(制約の競合)とのエラーが表示されて変更できない では、

  • zienchan
    zienchan
1 min read
python

pythonでzipファイル判定する

目的 pythonでzipファイルか否かをチェックする 環境 python3.6 解決策 判定方法は主に下記の2つになる ファイル名の拡張子からの判定 バイナリファイルのヘッダ(識別子)から判定 ファイル名からの判定は手軽だが、アーカイブ情報を事前チェックする用途には適用出来ないため、はじめからバイナリで判定したほうが後々を考えると都合が良い そのため、ここではバイナリ判定を行うことにした zipfileモジュールを使わなくてもヘッダを読むだけなので、下記でも可能 ただしエラーハンドリングは必要だし、冗長になるので後述のzipfileモジュールを使う方法のが良いと思われる input_file_path = "a.zip" with open(input_file_path, "

  • zienchan
    zienchan
1 min read
electronics

rosbagファイルからjpegを抽出する方法

目的 分割されたrosbagファイルから、対象のセンサノード(ここでは受光センサ)の全フレームをjpegとして出力する なおファイル名はフレーム番号の他、受信時間(ナノ秒)も付与する 環境 Ubuntu 18.04.2 LTS https://www.ubuntulinux.jp/download/ja-remix ROS Melodic http://wiki.ros.org/melodic/Installation/Ubuntu 方法 UbuntuにROS Medlodicをインストールする

  • zienchan
    zienchan
1 min read
python

pythonでpandasからmatplotlibで散布図を作ろうとしたら警告が出る問題の対処

目的 pandasであるデータの一覧を読み込んでいって散布図的なものを出力するってことを下記のような感じで行った結果、下記のエラーが出力された /home/vm/.local/share/virtualenvs/***/lib/python3.6/site-packages/matplotlib/pyplot.py:514: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`

  • zienchan
    zienchan
1 min read
android

ERROR: The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.0 and higher.の修正

問題 Anroid Studio 3.2.1を使っていたが更新があるというので3.3へアップデートしたら ERROR: The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.0 and higher. と言われてアーハイハイとgradleファイルのプラグインのバージョンを更新した(つもりだった)がダメだった 対策 build.gradle dependencies { implementation fileTree(dir:

  • zienchan
    zienchan
1 min read
java

TensorFlowLiteのJavaインタプリタでハマった話

環境 学習はKeras(back-endはTensorFlow)を使用 スマートフォン上のランタイムはTensorFLowLiteを使用 TensorFlow(PBモデル)からTensorFLowLite(FBモデル)へ変換(変換には公式のものを使用) 入力は8bitグレースケールの画像配列、出力はXY座標とした単純な回帰モデル 現象 下記のように8bitグレースケールで入力バッファを用意してXY座標を取得しようとした。 255で割っているのは、正規化しているため。 public synchronized void recognize(byte[] aImageBytes) { for(byte px : aImageBytes) { mInputBuffer.putFloat(px / 255f); } ... } しかし、推定結果のXY座標が誤差どころではなく、

  • zienchan
    zienchan
1 min read
android

Androidアプリにjavascriptエンジン(DuktapeAndroid)を乗せる

目的 AndroidアプリにJavascriptエンジンを搭載する 背景 ユーザーがアプリ上の機能を自由に拡張できるような仕組みを作るため 解決策 Java上でJavaScriptを実行(eval)させる方法はいくつかあるが、下記のサイトを参考にDuktape Androidを使うことにした comparison-shopping-searching-for-javascript-engines-for-android duktape-android 基本的には上記の公式に従って導入すれば良い 依存関係の追加 build.gradleの変更 implementation 'com.squareup.duktape:duktape-android:1.3.0' とりあえずjavascriptを実行させる 自分はkotlinで書いているので下記になる Duktape.create().use { x -> Log.

  • zienchan
    zienchan
2 min read
docker

[Warning] InnoDB: Table mysql/innodb_table_stats has length mismatch in the column name table_name. Please run mysql_upgradeを何とかする

環境 mysqlのdockerコンテナ 現象 mysqlイメージをpullしてコンテナへ展開したらいつのまにか下記の警告がわらわら出るようになった 2018-08-28T23:11:54.474791Z 0 [Warning] InnoDB: Table mysql/innodb_index_stats has length mismatch in the column name table_name. Please run mysql_upgrade 2018-08-28T23:11:54.474878Z

  • zienchan
    zienchan
1 min read
wordpress

WordPressでテーマ適用時に初期コンテンツを自動的に登録する方法

目的 カスタムテーマを適用すると同時に、必要な固定ページなどを一括で登録する 背景 企業向けサイトを作成するときに、いつでもコンテンツをリセットできるような環境を作りたいから 他の環境に移行するなどしたときでも簡単にセットアップできるようにしたいから 解決策 1. 初期コンテンツの作成 下記のようにテーマディレクトリの下にinitializeディレクトリ配下に初期コンテンツを配置する mytheme/initialize/index.page.html mytheme/initialize/contact.page.html mytheme/initialize/form.wpcf7_contact_form.html ... ここではタイトルとページ情報(固定なのかcontact-formなのか)をファイル名に付与してある 実際のコンテンツには色々種類があるため、それらの情報をファイル名にドット区切りで持たせておく

  • zienchan
    zienchan
1 min read
java

jcodecでお手軽にbitmapをmp4にする

目的 BufferdImageに展開されたBitmapをコンテナに追加してmp4動画を作成する 背景 連番PNGや画面キャプチャしたBitmapを動画に変換したい 環境 言語: Kotolin エンコード形式:H264 フレームレート:30FPS 解像度:VGA 解決策 SequenceEncoderを使えば簡単でした メモリ上のBitmapから生成する場合でもBufferedImageのラスタのByteArrayに突っ込んでやるなりしてBufferedImageを作ればそのままいけるはず val tDestinationFile = File("destination.mp4") val tEncoder = SequenceEncoder.create30Fps(tDestinationFile) //とりあえず30枚(1秒)分を生成する for(i

  • zienchan
    zienchan
1 min read
fusion360

Fusion360の延長コマンドとは

Fusion360の延長コマンドについてまとめます 環境 Windows向け v2.0.4343 目的 延長コマンドは名前から察するに、付け足すコマンドなのは推測できますが挙動がよくわからなかったので調べました 結果 ある線が線の向きに対して交差する場所まで延長するコマンドなのがわかりました 下記の画像はそれぞれ、延長コマンドによって赤線部分が追加されることを意味します こんな感じで、異なる線と交差する箇所までが延長の対象となるようです また、線分には向き(?)があるようで、延長可能な向きとそうでない向きがありました 課題 ここまでで、ある線が線の向きに対して交差する場所まで延長できることがわかりました でも下記が何故延長できるのか説明できません/^o^\ 公式のヘルプも見たのですが、 線分を延長しても別の線分に直接接続されないことがありますが... とあります これがどんな時なのかわかりませんでした...orz

  • zienchan
    zienchan
1 min read
android

Googleのマテリアルアイコンセットを使う

アプリケーションを開発しているとなにかと困るアイコンですが、Googleが提供しているオープンソースなマテリアルデザインのアイコンを使うと捗るよというお話 目的 ソフトウェア開発で使うかっちょいいアイコンリソースが欲しい 解決策 GoogleのMaterial design iconsを使う どんなのがあるのか? GoogleのMaterial design iconsを参照するとリストが表示される ライセンスは? Apache License Version 2.0なので使いやすい 色を変更したいんだが白と黒しかないの? git clone https://github.com/google/material-design-icons して、SVGとかベクトル形式のものを動的に変更するなり変換してやればOK それ以外だとAndroid 5.0以降で使えるDrawable tintingを使う方法で色を変更できる もしAndroid

  • zienchan
    zienchan
1 min read
ghost

GhostでAmazonアソシエイト広告の機能を追加する

デフォルトではaタグ(リンク)で貼り付ければ可能ですが、タグ毎に関連する書籍等を表示したい場合、テーマを拡張する必要があります 環境 Ghost v1.25.2 CasperTheme Version 2.3.3 目的 投稿記事に設定されたタグに該当するAmazonの商品を列挙して表示する ただしGhostのプラグインとしては実装せず、単純なjsonpとすることで他プラットフォームへ容易に移植できるように実装する 背景 お勧めの書籍等をタグ毎にまとめたい コンテンツと広告をできるだけ別として管理したい 将来的にGhostから移行しても楽にしておきたいからGhostに依存するコードは書きたくない 解決策 Ghostに依存しないように実装するため、今回は単純なjsonpのモデルとjqueryによるレンダリングで実装する やることは、投稿を表示する際に投稿タグに紐付いたamazon商品を表示するだけ 1. テーマのダウンロード [Design]から対象のテーマをダウンロードする デフォルトのcasperテーマは管理画面上からは上書きできないため、

  • zienchan
    zienchan
6 min read
wordpress

WrodPressでサイト制作するその前に考慮したいこと

"WordPressで企業向けのサイトを作ることになった" なんてこと、よくあると思います ...ありませんか?(白目) さて、世の中には沢山のWordPressテーマを使ったサイト制作の話がありふれていますが、技術的なアプローチ?に関する説明を見かけなかったので今回はWordPressで企業向け、または個人向けサイトを制作して公開、運用することになった場合の俺的ベストプラクティスをまとめました 本当は独自テーマを適用したら初期コンテンツが自動投入されるとか、テーマが依存するプラグインをどうやって通知するとかまで書きたかったんですが、長いのでこれらは次回にまとめます 突っ込みとかあったらコメントでお願いします そもそもWordPressでの実装が正しいのか? さて突然ですが、めでたく(?)WordPressでのサイト制作を依頼されたあなた 早速、WordPressでどう構築するかを考え始めま....せん まず初めは要件を見直すことをお勧めします お客さんは何もわかっておらず Webサイト作成 = WordPress なんて場合が結構あります(マジで) 話を聞くと、コンテンツを管理したくない(管理できる人材がいない)

  • zienchan
    zienchan
3 min read
fusion360

Fusion360のオフセット機能について

オフセットコマンドは名前から察するに、大体予測はつきますが挙動としては移動して複製です もう一度言います 普段からAdobe Illustratorを使ってると少し違和感があるかもしれませんが、オフセットだけど移動ではありません 移動&複製です 下を見てもらうとわかりますが、オフセットは選択オブジェクトからの相対的な座標に対象を複製するみたいですね また"チェーン選択"とは、接続された線を一括で選択する機能のようです 例えば下記の図のように"チェーン選択"を外して任意の線を選択から外す(クリック)すると下記のようにオフセット対象から除外されます オフセット値に負の値でオフセットしたい、つまり相対的にマイナスの値を入力して反対に適用したいことがあると思いますが、位置に負の値を入力できないのでその時はパネルから"反転"をクリックして適用します 注意点としては、下記の画像を見てわかるとおり、

  • zienchan
    zienchan
2 min read
android

Androidアプリでjava.lang.ClassNotFoundExceptionエラーになる

今までは普通に動作していたあるアプリがAndroid 8系からデバッグで起動しなくなったので調査しました 環境 Android: 実機のAndroid 8系 Android Studio: 3系 proguard:有 言語:Java, C++(NDK) 現象 アプリを実機に転送して起動するタイミングでクラッシュする Logcatは下記の通り java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException:

  • zienchan
    zienchan
1 min read
fusion360

Fusion360のショートカットキー

Fusion360のショートカットキーをよく忘れるのでメモ ここにあるのは2018/07/26現在のものです 最新の情報については公式ヘルプを参照してください 2018/07/30 追記 タイムリーでしたが、2018年07月27日(金)にリリースされたv2.0.4343からCKS(カスタムキーショートカット)に対応したみたいです 但し、まだ割り当てたられたキーボードショートカット全体の一覧と変更機能は提供されていないようなので、ちまちま変えていくしかありません 使い方は、対象の操作の右側の展開ボタンを開いて、"キーボードショートカットを変更"から変更します なお、下記はシステム予約されており、割り当ては不可です 元に戻す: [Ctrl]+Z、[Command]

  • zienchan
    zienchan
3 min read

Fusion 360でスケッチの寸法を設定する方法

実際、一度覚えてしまえば簡単なのですが、それまではちょっと探してしまったのでまとめます 環境 Fusion360(Windwos版) v2.0.4285 目的 一度確定したスケッチの任意の寸法について変更したり、寸法の位置を変更する 背景 ものすごく必要な機能だから 解決策 スケッチの任意の2点について新たに寸法(サイズ)を適用する方法 スケッチ寸法ツール(ショートカットキー:D)を使う 画像の説明には スケッチジオメトリの寸法を作成します。寸法を使用して、スケッチオブジェクトのサイズまたは位置をコントロールします。 寸法を記入するスケッチ曲線を選択し、寸法を配置する領域を選択します。 とあるがちょっとわかりづらい 要は新規の場合、開始点と終了点をクリックして寸法を決めたい範囲を選択、あとは寸法を配置する場所をマウスカーソルでぐりぐりしたら良い 適用すると、

  • zienchan
    zienchan
1 min read