ラベル Programming の投稿を表示しています。 すべての投稿を表示
ラベル Programming の投稿を表示しています。 すべての投稿を表示

2024-06-03

撮影場所を Map で開きたい (GeotagToMap)

 去年の今頃、オートポリスへ走りに行った。帰路はフェリー使ったけど、往路は観光しながら陸路でのんびり。
せっかくなのでカメラの 位置情報を ON にして写真撮りまくった。
懐かしいのう...。

けどさ...昔の写真見てて、場所を地図で開きたいなと思ったとき、適当なアプリがねぇな。(探し方)

例えば「右クリックしてメニューを選択すると場所を Google Mapで開く」みたいな小規模なアプリがあると良いんだけど。
時が経つと「これ何処で撮ったっけ」みたいなのが増えるし、都市開発とかされちゃうとランドマーク名で記憶しても場所が判らなくなるよね。

Windows で動作する簡単なアプリ作った。
GeotagToMap (日本語限定)

■使い方
  1. 画像ファイルを右クリックしてメニューを開く
  2. 「送る」 メニューの中から「GeotagToMap」を選択
  3. 撮影場所が Google Map で開く
■内部動作
  • 画像ファイルの Exif 情報からジオタグ(緯度/経度)を読む
  • 経緯度情報から Google Map の URL を作成する
  • URL をブラウザで開く
※ 当然ながら画像にジオタグが無いときは無動作~

撮影場所が表示される
写真を選んで GeotagToMap

2020-11-14

自作 デジタルスピードメーター (設置)

メーター表示部
果たしてコレを自作と呼んで良いものか...。
けどまぁ、ほぼほぼ完成に近づいたので車両へ設置しました。

ソフト屋さんは、ハードウェアに予算をつぎ込めば、ラクができる事を知っています。が、今回はちょっとラクし過ぎたカモ。

使った部品は、基本的には前回、8月のテスト時から変更なし。OBDの延長ケーブルを別のものに変えたり、タカチのプラスチックケースを使ったり。
んで、書いたプログラムは...
  1. 各種初期化
  2. OBD-II アダプタのライブラリを叩いて、スピード値を読み出す
  3. スピード値を 7seg LED に表示する
  4. 手順 2--3 を 100ms毎に繰り返す
これだけ。
車速パルスの計算とか、面倒は一切ナシ!しかも OBD-II から車速を拾ってるから、(誤差も含めて)純正メーターと表示が一致!

樹脂ネジでリセットボタンを付けた
タカチの SW-65B ケース

ラクし過ぎて申し訳ない感じですが、ちょっとした問題点もありました。

◆バッテリーあがり問題 (修正済み)
電源線をACCに変更
マイコン含めて、すべての電源は OBD-II コネクタからの給電なんですが...これが 常時電源 なんですよね。
待機時の消費電流が気にはなったんですが、時計と同じ程度だろとタカをくくってたら...ある日、バッテリー上がりで帰れなくなりました。そんなに電流喰うのかよ...。
調べてみたら、OBD-II の電源線は 16番ピン独立なようなので...その線を切断、代わりにアクセサリー電源を取り込むよう変更。
修正後、しばらく乗っていますがコネクタ刺しっぱなしで問題なし。

◆パワーオンリセット問題 (対策中)
おおよその原因は判明してるんですが...現状では、アクセサリー電源 ON 後にマイコンのリセットスイッチを1回押さないと表示が出ません。
なので、とりあえずの回避策として、ケースに入れたままでもリセットボタンを押せるように小細工。
樹脂ナット内側の山を削ってからプラスチックケースに接着。押し込みピン替わりに樹脂ネジをハメ込んだ簡単なもの。
おそらく、回路にリセットICを追加すれば、うまく行く...ハズ。


ちょっと動作テスト。機能は問題なし。反射板は要調整。

##追記
今回の配線~。
・Freematics OBD-II UART Adapter
・Arduino Nano Every
・MAX7219

2020-08-02

デジタルスピードメーター (テスト)

全体図
作り直ししているスピードメーター。一応、配線作業が完了したので、ドキドキの動作確認をしました。

◆配線
  • OBD2端子延長ケーブル
  • Freematics OBD-II UART Adapter V2.1 (for Arduino)
  • Arduino Nano Every
  • 表示部 (7seg LED + MAX7219)
ユニットに分けると、だいたいこんな感じ。
OBD2アダプタ~Arduino間は、電源線 2本+信号線 2本。この電源線は、Arduinnoへの電源供給用 5V なので、配線スッキリ。
Arduino~表示部間は、電源線 2本+信号線 3本。

◆動作確認
とりあえず、クルマが停止してても動作を確認できるように、今回は車速じゃなくエンジン回転数を 3桁の 7seg LED に表示。(値は 1/10 して表示)

エンジン回転数の上位桁を表示 (暫定で 500ms 毎の更新にしてるんで追従は遅い)

Low-technology Lab さんの情報にある通り、Freematics のライブラリ(OBD2UART.h)内の enum 値を、デフォルトの「PROTO_AUTO」から「PROTO_CAN_11B_500K」に書き換えないと動作しませんでした。
ND5RC で使う場合、「PROTO_CAN_11B_500K」で OKっぽい。

とりあえず動作してヨカッタ。
ここまで動けば...あとは、車両のイルミ信号を拾って、表示の輝度を下げたり、HUD用(鏡文字)の切り替えスイッチをつけたり...かな。

2015-01-05

CANUSB (CAN to USB Dongle)

CANUSB
猫様と暮らしているため、泊りでのお出かけは基本NG。
年末年始は、部屋に籠って CANUSB で遊んでました。一昨年の夏に買ってから、一度も袋から出さずに死蔵してたのを漸く開封。

CANUSB。
簡単に言えば、NCロドの OBD-II コネクタに接続。PCからはUSB経由でデータが見られるというもの。
Windowsタブレットを買った事もあり、車内でデータ見る環境が手軽になったので、やっとイジってみる気に。

◆ハードウェア
PCの他に必要なモノ。
  • CANUSB
  • OBD-II → D-Sub9pin ケーブル
共にコンパスラブで買えます。ケーブルは自作しても良いけど、どうせ製品のようなクオリティは出せないから、買ったほうが満足すると思います。

2013-02-25

MBR GPT 変更

MBRで初期化したDisk4を元に戻す
先日、2TBのデータディスクが逝ってしまいました。んで、中身を他のドライブ2台へ分散して退避させてたんですが、残容量が枯渇してきたので、新しく3TBのHDDを購入。
ハードディスクと言えば、IBM 時代より使い続けてHGST派だったんですが、まあ、時代の流れと言いますか...買ったのは WESTERN DIGITAL のヤツ。

HDDをPCへセットして起動。 「ディスクの管理」から初期化を実施...した時に、うっかりMBRを選択してしまいました。3TBなんでGPTが正解ですね。

さてさて、MBRで初期化され、"2TB+残り" と表示されているディスクをGPTで初期化しなおすには?
Win7 とかだとGUIでやり直す手順が用意されているようですが、Vistaの場合はなさげ。
んだよMS! と思って検索してみました。

Change a Master Boot Record Disk into a GUID Partition Table Disk
http://technet.microsoft.com/en-us/library/cc725671.aspx

マイクロソフトのサイトは直リン張ってもすぐにデッドリンクになるので、あまり役に立ちませんが...。
要は、コマンドラインから diskpart コマンドを使って元に戻せと。おおせのままに。

2009-10-15

Native WiFi API (Wlanapi)

Windows のプログラミングのネタです。
最近、お仕事で必要になり、今更ながら Study したのですが、これ関連のキーワードを検索しても日本語の情報が少なかったので、この機会に書き留めておきます。

開発環境: Visual Studio 2005 (Visual Studio 8)
開発言語: C
対象OS: Windows XP SP3
Embedded な仕事が多いので、C++ ではなく、C がメインです。

◆ Native WiFi API 概要 (Wireless LAN API)
PC にワイヤレスのネットワークアダプタをつけていると、ワイヤレスネットワーク接続 というメニューが使えて、SSID のリストを更新したり、接続/切断 といった操作が可能になりますが、それらをネイティブなプログラム言語から簡単に操作できるようにしたもの。
※ UWSC 使ってラクしてたんだけど、XPスタイルだったり、クラシックだったり、[スタート]メニューのオプション差異だったりで、対応が大変なことになったので、Native WiFi を使うことにしました。

Native Wifi (Windows) -- MSDN
http://msdn.microsoft.com/en-us/library/ms706556%28VS.85%29.aspx
Native WiFi API は、Windows XP SP3 以降から対応 との事なんですが、それは Wlanapi.dll が(System32 の中に)入ってます...という事らしいです。
開発するには、Wlanapi.lib, Wlanapi.h が必要です。

◆Windows SDK 6.0 のインストール
ワシの環境 (VS8) には、Wlanapi 関連のファイル(.lib/.h) はありませんでした。最新の Windows SDK (旧:Platform SDK) に含まれているらしいです。
早速ダウンロード。
Windows SDK 6.0 (EN)
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=4377f86d-c913-4b5c-b87e-ef72e5b4e065

Windows Vista および .NET Framework 3.0 ランタイム コンポーネント用 Microsoft Windows Software Development Kit
http://www.microsoft.com/downloads/details.aspx?FamilyID=7614fe22-8a64-4dfb-aa0c-db53035f40a0&DisplayLang=ja
MS の英語サイトからでも、日本語サイトからでもダウンロード可能。日本語サイトだとバージョン表示が 1.0 とかになってるけど、ファイル名をみると 6.2.600... とかなので OK のようです。ワシは、日本語サイトからダウンロードしました。Vista とか言ってるけど、XP に入れて良いものです。
※ MS のサイトはすぐにデッドリンクになるので、困ったら [Windows SDK] で検索してみてください。

ダウンロードしたファイルは、CD/DVD のイメージファイル(*.img) なので、仮想CD/DVDドライブソフト(DAEMON Tools Lite など)でイメージをマウント。インストールウィザードに従いインストールを完了させます。

インストールの途中、HDD のアクセスランプが点きっぱなしになり、プログレスバーが固まった...ように見える時がありますが、そこは耐えて待ってください。CPU: Core2 Duo 2.4GHz/HDD: SATA2 (会社PC)なんですが、インストールの終わる気配が無いので、何度キャンセルボタンを押しそうになったか...。しかし、寝て待ってたら、無事に完了しました。

◆環境設定
Windows SDK は、下記のフォルダにインストールされたハズ。
  • C:\Program Files\Microsoft SDKs\Windows\v6.0\
で、この後はどうするのか?→Visual Studio が上記フォルダパスを認識するよう、プロジェクトのプロファイルをセットアップする必要があります。
また、Native WiFi のプログラムを書く場合は、上記フォルダ配下から、Wlanapi.lib, Wlanapi.h を(Native WiFi API を利用したい)自分のプロジェクトのフォルダへコピーして来ます。

プロジェクトを立ち上げ(Visual Studio 2005 起動)、プロジェクトのプロファイルを修正します。
「C/C++/全般/追加のインクルードディレクトリ」に Windows SDK の Include フォルダを指定し、パスを通します。
C:\Program Files\Microsoft SDKs\Windows\v6.0\Include

「リンカ/入力/追加の依存ファイル」 に wlanapi.lib を追加します。
自分のプロジェクトの Native WiFi API を利用するモジュールで、以下の宣言を追加
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <windows.h>
#include <winnt.h>
#include "wlanapi.h"
...と、これでコンパイルが通るハズ。
プロジェクト全体に WIN32_LEAN_AND_MEAN を適用すると問題がでる場合もあるかも。Wlanapi を使うモジュール内でのみの宣言が吉。

◆使用する
API 利用のサンプルコードは、Windows SDK のインストールフォルダ階層に含まれてます。
Native Wifi API Sample
C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\NetDs\Wlan

追記:適当なネットワークに接続するコードを書いてみました。