渋滞にひっかかってしまったことを知らせるボタンを作ってみた!
SORACOM Advent Calendar 2019の23日目の記事です。
休日、趣味でIoTやAIを勉強しています。初学者でまだまだ至らないところもありますが、少しずつですが手を動かしながら色々作ってみたいなと思います。よろしくお願い致します。
概要
友達と待ち合わせしてるのに、不運にも渋滞にひっかかってしまった。運転中のため携帯操作(メールやLINE、電話など)が出来ない状況である。そんなとき、遅れそうなことを待ち合わせ相手に知らせ、もう少しだけ待っていて欲しいことを伝えるためのボタンを作ってみました。
作ろうと思ったきっかけ
香川で開催されたハンズオンイベント"JAWS-UGうどん県xSORACOM四国 勉強会2019夏"に参加し、そのときLTE-MButtonをはじめて使いました。すごく面白い!、めっちゃ便利!って思いました。
私も何か作ってみたい、日常で困った出来事をこのLTE-MButtonを使って解決できないかなって考え、今回、SOSボタンの記事を参考に、渋滞にひっかかってしまったことを知らせるボタンを作ってみました。
参考にした記事
必要なもの
各種設定
① Amazon Connectの準備
a) 電話番号の取得ボタンを押す
b) 好きな電話番号を選択し、保存して電話番号を取得する。
c) 問い合わせフローの作成ボタンを押す。
d) 問合せフローを作成する。
ちなみに、"プロンプトの再生"に入力したテキストが、電話で流れることになります。
e) 問い合わせフロー作成後、”保存して公開” ボタンを押す。
② AWS lambdaの実装
(a) 各項目を入力しlambda関数の作成ボタンを押し、基本的な情報を入力する。
(b) ロールの表示で、インラインポリシーの追加をクリックし、サービスにConnect、書き込みにStartOutboundVoiceContactを選択後、ポリシーの確認ボタンを押す。
(b) AmazonConnect-SOSをクリックし、index.jsを書き換える。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
'use strict' ; const AWS = require( 'aws-sdk' ); AWS.config.update({ region: 'ap-northeast-1' }); const connect = new AWS.Connect(); const params = { ContactFlowId: process.env.CONNECT_CONTACT_FLOW_ID, DestinationPhoneNumber: process.env.DEST_PHONE_NUMBER, InstanceId: process.env.CONNECT_INSTANCE_ID, SourcePhoneNumber: process.env.SOURCE_PHONE_NUMBER }; exports.handler = async (event) => { console.log(JSON.stringify(event)); try { const res = await connect.startOutboundVoiceContact(params).promise(); console.log(res); } catch (err) { console.error(err); } }; |
(c) 書換後の画面
(d) 環境変数を設定する。
CONNECT_CONTACT_FLOW IDはAmazonConnectの問い合わせフローに記載されています。
CONNECT_INSTANCE_IDは以下から取得できます。
a) AWSのサービスからIoT 1-Clickを選択する。
b) デバイスを登録する。
c) プロジェクトの作成ボタンを押す。
d) プロジェクト名を入力する
e) Lambda関数を呼び出すを選択し、入力後、プロジェクトの作成ボタンを押す。
f) 適当なプレイスメント名を入力し、デバイステンプレートを選択後、プレイスメントを作成する。
動作確認
無事、動きました!
作ってみた感想
機械で一方通行的に謝られるのって正直なところどうなの?ボタンの押し方変えたりすることで別の登録先も入れといたほうがいいのでは?とか、色々と議論・改良の余地があって実用には至っておりませんがとりあえず動くものができました。
色々な人の意見を聞き、役に立つものを作っていければなと思います。
PSoC5LPを使ってレベルメータを作ってみた!
これはPSoC Advent Calendar 2017の23日目の記事です。
本投稿にて私もAdvent Calendarデビューします。初心者ではありますが一生懸命書きましたので、どうか宜しくお願いいたします。
概要
PSoC 5LPに搭載されているコンパレータを使い入力電圧の大きさに応じてLEDアレイが段階的に光るレベルメータを作ってみました。①バー表示と②ドット表示の2種類の光らせ方を試しています。
今回使ったもの
目次
1.バー表示型レベルメータの試作
a) 回路図作成
b) ピンの指定
c) ブレッドボード上で組立・配線
e) プログラミング
f)ビルド&実行
2.ドット表示型電圧レベルメータの試作
3.まとめ
4. 最後に
1.バー表示型レベルメータの試作
a) 回路図 (Schematic)作成
下図の回路を作成しました。
ちなみにPin0とPin1~4、 VDAC8、Compは以下のように設定しています。
回路の要点を説明します。
①ポテンショメータの電圧値(Pin_0の電圧値)とVDAC8の電圧値をコンパレータ(Comp)により比較
②VDAC8の電圧値よりも高ければ1を出力(LED点灯)、低ければ0を出力(LED消灯)
上記①、②のルールに基づいて地道に各入力電圧値に対する出力電圧値を計算していくと下図のようになる。バー表示になっていることが確認できる
b)ピンの指定
空いてているポートにPin_0 ~ Pin_4を適当に割り振ります。
(今回はPin_0をP3 [0]に、Pin_1を P2[0]、Pin_2をP2[1]、Pin_3をP2[2]、 Pin_4をP2[3]に割り当ててみました。)
c) ブレッドボード上で組立・配線
回路図、ピン情報をもとに、抵抗、LEDアレイ、小型ボリューム、PSoCをブレッドボード上に組立・配線しました。
d) プログラミング
回路のVDACとCompを使えるようにするため、下記のコードを追加します。
VDAC8_1_Start();
VDAC8_2_Start();
VDAC8_3_Start();
VDAC8_4_Start();
Comp_1_Start();
Comp_2_Start();
Comp_3_Start();
Comp_4_Start();
e) ビルド&実行
電圧値が上がるにつれてLED点灯数が増えていきます。
バー表示型電圧レベルメータの完成です☆
2.ドット表示型電圧レベルメータの試作
ドット表示型にするため、先ほどのバー表示型電圧レベルメータの回路図(Schematic)に少々変更を加えました。
お分かりでしょうか??
XOR(排他的論理和)をCompの後に追加しました。
XORは入力の値が一致しない(”1と0”もしくは”0と1”)ときのみ1を出力します。入力が”1と1”の場合や0と0”の場合は0を出力します。
XORを使うと、1と0が隣り合う部分のみ1に変換し、他の0と0、1と1の部分は0にすることができるので、下図のようにドット表示型を実現できます。
ビルド&実行しました。
電圧上昇に伴いLEDのドットが右に移動するのを実際に確認でき、所望の電圧レベルメータが出来ました☆=
3.まとめ
PSoCのコンパレータを使ってレベルメータを作ってみました。
今回はポテンショメータを使って電圧変化を確認しましたが、色々なセンサをつなげてみたりしてみてもいいかもと感じました。
4. 最後に
実は試作しているときに色々と失敗してしまったことがあります。
同じような問題で困った人が出てくるかもしれないので、何らかの参考になればということで、情報を共有させて頂きます。
①本当は10個のLED全部光らせるつもりでした...
最初はコンパレータを10個回路図にドラッグ&ドロップして回路を作っていたのですが、ビルドしたところエラーが出現しました。PSoC5LPで使用可能なコンパレータ数は4個だけなので10個は無理ですという内容のエラーです。今回はMax4個のLEDが光るレベルメータに仕様変更することで対応しましたがやはり、事前にPSoCのデータシートを見とかないかんなと痛感しました。
②プログラムのコードエラー
大文字と小文字を間違えて、エラーが出現しました。
5分くらいなんでーって悩む羽目になってしまいました。
③ADコンバータを使って入力電圧値を取得し、プログラム(IF文)で各ピンを1(LED点灯)、0(LED消灯)切り替えれば、10個光らせられると思うのですが、今回はハード的に作ってみたかったので、あえてやってないです。
色々と手を動かしていると時には失敗することもありますが、新たな知見を得たり、できたときの楽しさを実感じたりできるので、たとえ失敗しても手を動かすことはプラスになる気がしました。PSoC5LPも以前よりは慣れ、またPSoC4 BLEも購入したのでより一層色々と遊んでいけたらなと思います☆