NEO-6M GPSモジュール(NEO-6M-0-001)を使って緯度経度・時刻を取得してみた
ajjax.hatenablog.com
を参考にさせていただきました。
ただし、初心者の私はそもそもmacでシリアル通信をどうやったらいいのかもよくわからず…
ということで初心者のmacユーザー向けに解説していきます^^
接続方法
まずこのGPSモジュールを使うにはFTDIケーブルが必要です(Arduinoなどでもできると思いますが、とりあえずシンプルにこちら)
[スイッチサイエンス] FTDI USBシリアル変換アダプター Rev.2
- 出版社/メーカー: スイッチサイエンス
- メディア: その他
- この商品を含むブログを見る
Vcc→Vcc、GND→GND
なのはいいのですが、注意すべきなのは、
Rx→Tx、Tx→Rx
であることです(当然のことのようですが初心者にはわからず…)
接続ができたら準備完了です
ターミナルからのアクセス
次に、mac のターミナルからUSBポートにアクセスしていきます
qiita.com
こちらを参考にscreenします
そうすると、
$GPRMC,084129.00....
みたいな感じのものが帰ってくると思います^^
こちらの意味は
5.出力データ【GM-38:マーキュリー取扱説明書】
でも解読できますし、
NMEA Decoder. Using this free tool you can decode (parse) your NMEA log.
というめちゃくちゃ便利なものも。
ただし、私の場合緯度経度のわかる接続状態になるまで20分ほどかかりました…^^;
安物だから仕方ないかな
(2回めからは30秒程度に!最初はセットアップ的なことがあるんでしょうか…?)
konashi (bluetoothモジュール)をswiftで動かしてみる
bluetoothをかんたんに試せると聞いてkonashiというモジュールに挑戦。
と思ったのですが、公式のドキュメントはobjective-cしかないんですね…
ありがたいことにswiftでやってくださった先人がいらっしゃったので、参考に。
SwiftからKonashi SDKのクラスを使うkazz12211.wordpress.com
大雑把に言うと、
- 以下と全く同じように5まですすめる。6からちょっとだけ違う。
- 以下に従って{product-name}(KonashiGettingStartedとかですかね)-Bridging-Header.hを作成。
場所は私の場合プロジェクトファイル直下でした
SwiftからKonashi SDKのクラスを使うkazz12211.wordpress.com
- 上のHeaderファイルを少し書き換えます
#defineと#endifの間に
#import "Konashi/Konashi.h"
を加えるだけ。(以下を参考にさせていただきました)
qiita.com
- Story Boardにボタンを作ってViewController.hの@IBActionとコネクト。
- あとは以下の7以降のSTEPに従うだけ
意外とかんたんにLED光って一安心。
google cloud speech api を使ってスクリプトだけを抽出する
こちらで動かしたサンプルコードだと、音声認識した結果のディスクリプション(候補とか候補ごとの可能性とかでてきちゃう)しか出せない。
スクリプト、つまりしゃべった内容の1番もっともらしい文を抽出する方法について意外と日本語の解説がなかったので、書き残しておきます。
サンプルコードの
response.description
のところを
((response.resultsArray[0] as! StreamingRecognitionResult).alternativesArray[0] as AnyObject).transcript
にします。
素直にドキュメントを読んだら割りとすぐにわかりますね^^
Package google.cloud.speech.v1 | Google Cloud Speech API | Google Cloud Platform
google cloud speech api を使ってサンプルを実機iphone 6で動かしてみた
google の音声認識APIの精度が大幅にあがったと聞いてiphoneで試してみたくなりました.
swift, objective-Cに関する知識は皆無ですが,公式の解説が親切そうだったのでチャレンジ.
まずはこちらのサイトにアクセスしてみます.
クイックスタート曰く,
- Clone this repo and cd into this directory.
- Run ./INSTALL
- Build and run the app.
らしい.
環境は
- An OSX machine or emulator
- Xcode 8 beta 6 or later
- Cocoapods version 1.0 or later
があればいいらしい.
Macなので2個目,3個目は特に問題ないです.
手順は以下です.
- APIキーの取得
- cocoapodsのインストール
- リポジトリをクローン
- run ./install?よくわかんないのでpod install
- xcodeプロジェクトのAPIを書き換える
- エラーの出るところを書き換える
- 日本語にする
- 実機で動かす
- 実機に繋いでローンチ!
- エラーが出た場合はiphone側でアクセスを許可
APIキーの取得
google cloud platformに登録します.登録の詳しい手順は除きます.
さて,登録ができたらAPIキーの取得です
取得の順序はこちらの方の手順の3番の途中までを参考にさせていただきました。
2番までできたら,3番で「サービスアカウントキーの取得」ではなく「APIキー」を選びます.
現れたキーコードをコピーしてください.
これで取得完了です.
リポジトリをクローン
先程も挙げた
をクローンするわけですが,gitをインストールしている人はターミナルで
git clone https://github.com/GoogleCloudPlatform/ios-docs-samples.git
でOKと公式に(優しい).
一瞬でした.
run ./install?よくわかんないのでpod install
こちらできませんでしたが,やらなくても動作しました.
代わりに,というわけではないですが,/ios-docs-samples/speech/Swift/Speech-gRPC-Streamingにターミナルでcdして
pod install
をしました(podのファイルをアクティベートしてる感じかな?)
[追記]
もう一回やってみたらpod updateできなかった。
github.com
こちらの2/3のsamskiterさんの書き換えに従ったらできた
xcodeプロジェクトのAPIを書き換える
/ios-docs-samples/speech/Swift/Speech-gRPC-Streaming/Speechにある,SpeechRecognitionService.swiftを書き換えます.
このファイルを開いて,
let API_KEY : String = "YOUR KEY"
のyour key の中に先程取得したAPIキーをコピペしてセーブで完了です.
エラーの出るところを書き換える
エラー出たらswiftのわからない私には結構ピンチですが,出ました.
こちらの方のSTEP2を参考にさせていただき,
google/........./~~~~.h
のようになっているところを
googleapis/~~~~.h
に書き換え.
ビルド→エラーの出たところをこの法則で直す→ビルド→エラーの出たところをこの法則で直す...と繰り返してエラーがでなくなったらシミュレータでローンチできました!
日本語にする
できた!start streamingをクリックして話すと,認識された
…あれ,英語だ,,ということで日本語に直したい.
言語のサポート | Google Cloud Speech API | Google Cloud Platform
こちらによるとlanguageCodeをja-JPに書き換えればいいらしい!
そこでSpeechRecognitionService.swift内をxcodeのfindでlanguageCodeと検索し,
recognitionConfig.languageCode = "ja-JP"
に書き換え.
もう一度ビルドすると,かなりの精度で認識されました!
実機で動かす
でもなんとなくシミュレータでは味気ない,,,
ということで実機で動かしたくなりました,が,ここかなり手こずりました.
でも無料で実機テストできるのはいいですね,Androidを使う必要なくなりそうです
消臭センサ&スプレーをハックしてみた①
アロマディフューザー的なもの自作への第一歩.
前回の「解体してみた」でなんとなく仕組みがわかったのでいよいよPCから制御してみることに.
minoritytech.hatenablog.com
今回は簡単にPCのシリアルモニタの入力からArduinoを介してスプレーを「シュッ」とさせることを目標にします.
まず,もう一度前回の「解体してみた」から仕組みを思い出す.
「シュッ」がモーターの回転で起こっていることはわかったので,モーターを制御しようかとまずは電圧を計測することに.
ちなみに基板はこんな感じ.
スイッチが入ったときのモーターの挙動はこんな感じ.
コマでみたところ,600ms程正電圧がかかって正回転したあと,200ms程負電圧がかかって逆回転してます.
…逆回転させるにはモータードライバが必要だ,めんどくさい.
ということで,ボタンスイッチのところをArduinoから制御することにしました.
こんな感じでスイッチ部から導線を出して,
http://www.hakodate-ct.ac.jp/~moriya/class/2Ssensing/text/006_01transistor.pdf
こちらのサイトを参考にして
ベースをarduinoの2番ピンに,エミッタをarduinoのGNDに,
コレクタとエミッタを先ほどスイッチから出した導線に
接続しました.
トランジスタはこちらを使用.
arduinoのコードはこちら.
int mot = 2; char ser; void setup() { // put your setup code here, to run once: pinMode(mot,OUTPUT); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: while(Serial.available()>0){ ser = Serial.read(); Serial.write(ser); } if(ser=='1'){ digitalWrite(mot,HIGH); delay(100); digitalWrite(mot,LOW); ser=0; } }
これでシリアルモニタで1を入力するとそれが仮想スイッチとなって,モーターが駆動します^^
PC入力でシュッができました!
次はかっこいいインターフェイスをProcessingとかでつくって無線でとばしたいな
vba で まとめてcsv読み込み
大量のcsvを読み込んでExcel処理したかったので手動は面倒くさくてvbaに初挑戦したメモ。
OpenTextではなぜかセミコロン区切りのものをうまく読み込んでくれず、手動でやってるときはクエリを使っていたことを思い出しQueryTableを使用。
vba入門はこちらを、
color-chips.net
複数ファイルの読み込みはこちらを、
color-chips.net
QueryTableの使い方はこちらを
water2litter.net
参考にさせていただきました。
Sub QueryMultiCSVFiles() ' [[ 変数定義 ]] Dim varFileName As Variant Dim FileName As Variant Dim CSVWorkSheet As Worksheet Dim NewWorkSheet As Worksheet Dim SheetName As String Dim qt As QueryTable ' [[ 複数ファイルパス名を取得 ]] varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", Title:="CSVファイルの選択", MultiSelect:=True) ' [[ ファイルパス取得できなかったら ]] If IsArray(varFileName) = False Then Exit Sub MsgBox "Isarray Error" End If ' [[ ファイルパス取得できたら ]] For Each FileName In varFileName ' [[ ファイルパスからファイル名を取得 ]] SheetName = Dir(FileName) ' [[ ファイル名で新しいシート作成 ]] Set NewWorkSheet = CreateWorkSheet(SheetName) Set CSVWorkSheet = ActiveSheet Set qt = CSVWorkSheet.QueryTables.Add(Connection:="TEXT;" & FileName, Destination:=CSVWorkSheet.Range("A1")) With qt .TextFilePlatform = 932 ' 文字コードを指定 .TextFileParseType = xlDelimited ' 区切り文字の形式 .TextFileSemicolonDelimiter = True ' カンマ区切り .RefreshStyle = xlOverwriteCells ' セルに上書き .Refresh .Delete ' CSV との接続を解除 End With Next End Sub ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ' [[ ]] ' [[ ワークシート名を指定したワークシートの作成 ]] ' [[ ]] ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] Function CreateWorkSheet(WorkSheetName As String) As Worksheet ' 変数定義 Dim NewWorkSheet As Worksheet Dim WS As Worksheet Dim iCheckSameName As Integer ' ワークシートの作成 ' ※一番最後に挿入 Set NewWorkSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count)) ' 同じ名前ワークシートが無いか確認 iCheckSameName = 0 For Each WS In Sheets If WS.Name = WorkSheetName Then MsgBox "ワークシート名:" + WorkSheetName + " この名前は既に使われています。" iCheckSameName = 1 End If Next '同じ名前のワークシートがなければ If iCheckSameName = 0 Then NewWorkSheet.Name = WorkSheetName Set CreateWorkSheet = NewWorkSheet End If End Function
消臭センサ&スプレーを解体してみた
アロマディフューザーを自作できないかなあと思って色々調べていたのですが、
超音波式は意外と構造が複雑そうだし、
アロマやるなら普通にアナログなやつでいいかなという結論になってしまい、
たどり着いたのがこの製品
グレード 消臭・芳香剤 人感スプレー式 お部屋・トイレ用 消臭センサー&スプレー リフレッシュスプリングの香り ペット&タバコ用 本体 18ml
- 出版社/メーカー: ジョンソン
- 発売日: 2016/09/13
- メディア: ヘルスケア&ケア用品
- この商品を含むブログを見る
構造が気になったので解体してみた。
見た目はこんな感じ。
カバーが開くようになってて、開けると
こんな感じで電池にカセットが挟まれてます。下のところがボタン兼センサかな
これは解体しやすい、早速ねじを外してみました
意外とアナログでかわいい!
まだねじがあるのでとりあえず外してみる。
歯車の部分と、回路とモーターの部分に分解できます
青丸の所が、スプレーの上の押すところに引っかかって、
そこがモーター駆動で押し下げられるというなんとも原始的なつくり^^
歯車の部分はこんなかんじ
次は回路いじってちょっとハックしてみたい。
>>ハックしてみたはこちら↓↓