katsuhiro.yamashita

未分類

太陽電池/鉛蓄電池の電源システムを自作する(2)

前回の記事で、鉛蓄電池の電源としての実力をテストしました。今回は12V5Ahの鉛蓄電池を太陽電池で充電する回路をテストします。今回使用した太陽電池パネルは、DMiotech 12V 1.5W 115mm x 90mm 小型 太陽電池パネル、でamazonで1,590円でした。12V1.5Wの最大出力で充電し続けたとして、12V5Ahの鉛蓄電池は、12(V)x5(Ah) / 1.5(W) = 40(h)で充電できる計算です。もちろんこれは理想条件なので、天候や太陽の高度、充電効率を考慮すると、日中だけでも効率は50%くらいになってしまうでしょうから、実際には、40(h)/24(h)/50(%)x2(日中だけ) = 6.7(日)となってしまうので、本来ならこれの8倍以上の出力の太陽電池パネルが欲しいところです(amazonでは12V12Wの太陽電池パネルが4000円程度で売ってます)。回路は単純です。太陽電池側の起電力が低いときに電流が逆流しないようにするためのダイオードを入れて並列に回路を組みます。電池系の電圧に影響しないように単三電池4本で電源を供給したPicoWで太陽電池側と鉛蓄電池...
未分類

太陽電池/鉛蓄電池の電源システムを自作する(1)

害獣検知システムのソフトウエア開発に携わったことがきっかけで、屋外でITシステムを動かすための電源システムの自作に挑戦することにしました。屋外でラズパイやラズパイPicoを動かすこと、非常時にスマホを充電すること、などを念頭に5V3AをUSBで供給できる電源デバイスを目指します。スマホ1回充電分が最低限の容量と考えて、暫定的に蓄電池の容量を決めたいと思います。iPhone15のバッテリー容量は3877mAhとのことで、4000mAhを基準に考えてみます。本来バッテリー容量には電圧と電流と時間(つまり電力量)の情報がなければなりませんが、スマホのバッテリー容量には電圧の情報がありません。これはスマホの電源電圧が3.7Vと定められていることが理由のようです。すなわち4000mAh = 3.7(V) x 4.0(A) x1(h) = 14.8Whということになります。最低限この電力量を蓄電できる蓄電池を採用します。さらに太陽電池からの充電なので電流や電圧が変動することを考慮する必要があります。モバイルバッテリーなどに使われるリチウムイオン電池は充電密度は高いですが下手に扱うと発火することもあ...
未分類

ラズパイ+Picoの低電力IoTシステムを自作(1)

太陽電池と鉛蓄電池の電源で屋外にIoTシステムを構築したいと思います。電源については別途シリーズで記事を書きますので、そちらを参照ください。ラズパイは小型ながら高性能コンピュータでIoTシステムを組むのに非常に威力を発揮するのですが、屋外の心細い電源環境で使用するには電力を食い過ぎるのかもしれません。ちなみにラズパイのスタンバイ電力が2.7Wとのことですので、例えば12V5Vhの鉛蓄電池では一日も持たないことになります。一方でラズパイの弟分(?)のラズパイPicoはスタンバイ状態で0.15W、ディープスリープ状態では0.01W程度のようです(ディープスリープでRaspberry Pi Pico Wを低電力化する)。この2つを組み合わせることで低電力かつ高性能なIoTシステムが構築できるのではないか、というのが今回の話題のモチベーションです。例えばラズパイPicoで赤外線センサーを監視し、何かを検知したときにラズパイを起動してカメラ撮影して、撮影が終わったらラズパイをシャットダウンする、というような仕組みです。このシステムを以下の順番で構築してみます。ラズパイの設定:ラズパイの2番ピンに...
画像解析

害獣検知システム

熊、猪、ハクビシン、アライグマなどによる農作物の被害が深刻になってきています。動物が接近したことをリアルタイムに検知して、動物の種類に応じた対応を行うためのカメラシステム(ソフトウエア部分)の開発について紹介します。例えば次のよう赤外線カメラ映像からリアルタイムで動物種類を分析して、動物Aならライト点灯、動物Bなら唐辛子エキスのスプレー、動物Cなら爆竹音、というようなアクションを行う装置です。ちなみに、この画像をオープンソース物体検出AIのYOLOで分析しても何も検出してくれません。また、動物の画像を切り出してYOLOで画像分類すると次のような結果になりました。この動物はアライグマと思われますが、分類結果として最も可能性の高いものは「swab」(綿棒?)と分析され、このままでは使い物になりません。そこで以下のような方針でリアルタイム分析器の開発を試みました。かなりの精度でリアルタイム分析できることがわかりました。
アプリ

LINEアプリサンプル

美容院や整体院などの予約システムを想定したLINEアプリサンプルです。予約すると、LINEよりメッセージが届きます。予約直後に予約が確定したことを伝えるメッセージが送信され、予約が近づいたところでリマインドのメッセージが送信されます。新たな会員登録をせずにメッセージが送れるのはLINEアプリならではの機能です。なお、このサンプルアプリは開発用で、LINEのシステム上、開発者以外はこのまま体験いただくことができません。しかし、このシステムはwebアプリにて構築されていますので、LINEの機能は使えないものの、操作感などは以下のリンクにてご確認いただけます。eQOL予約(webアプリ版)
アプリ

LINEアプリの開発手順(2)-リマインドメッセージ

LINEアプリのメッセージは、ユーザーアクションをきっかけに送信されます。例えば予約完了のお知らせは、ユーザーの予約申し込みアクションに基づいて送信されます。では、予約一日前とか2時間前とかにリマインドメッセージを送信する場合にはどうするのか、解説したいと思います。メッセージの送信は基本的にはユーザーアクションをきっかけにする必要があります。最初のメッセージ送信は「ユーザーによる予約」アクションに対して実行されることになりますが、そのメッセージ送信に対する戻り値として、後続メッセージ送信のための「サービス通知トークン」が得られるので、それを後続メッセージを送信で使うことになります。後続メッセージを送信する際に「チャンネルアクセストークン」(LINEアプリにログインしていなくてもサーバーのみで発行可能)を発行し、このアクセストークンをヘッダーに、サービス通知トークンをボディとして記述することでメッセージ送信が可能になります。一方、「予約一日前」とか「2時間前に送信」にメッセージを送信するアクションの起点は、例えばAWS Lambdaなどを使って(予約データ確認とメッセージ送信を行う)AP...
アプリ

LINEアプリの開発手順(1)-メッセージ送信

LINEプラットフォームを利用したヘアサロン予約ミニアプリを制作する機会がありましたので、手順をまとめておきます。審査については別途記事にまとめたいと思います。LINEミニアプリは、(1)LINE APIと(2)(LINEの外にホスティングされた)webアプリ、の2つの構成要素で成り立っています。ここでは(2)のヘアサロン予約のwebアプリはほぼ構築ずみとし、予約確定時にLINEメッセージ送信する機能を追加する状況を想定しています。LINEミニアプリ チャンネル登録LINE Developersに登録、ログインプロバイダー登録(サービスを提供する主体)アプリ名登録(ミニアプリとして登録)以上を行うと、アプリのチャンネルが生成されます。APIの利用にはLIFF-IDが必要になります。分かりづらいですが、LIFFのタブにあるLIFF URLに記載があるので、これを環境変数に設定しておきます。ちなみにLIFFとはLINE Front-end Frameworkの略称です。LIFF URL: {この部分がLIFF-ID}エンドポイントURLには、作成ずみwebアプリのURLを入力します。これで...
アプリ

Supabase + Next.jsアプリ開発(3)-認証機能

Supabaseで認証機能を実装してみます。Supabase + Next.jsアプリ開発(1)で紹介した以下のスクリプトでアプリを作ると、デフォルトでauth関係のフォルダとファイルが生成されますので今回はその内容を理解することに注力します。npx create-next-app -e with-supabaseこれでlocalhost:3000にアクセスすると、トップ画面の下方に以下が表示されます。この指示通り、Supabaseのプロジェクトを作り(作成済みのはず)、環境変数を.env.localにコピペしてリスタートすると、トップページが以下のように変わります。最初のユーザー登録をしろ、ということですのでやっていきます。supabaseのプロジェクトサイトに行って、SQL Editorで以下を実行しておきます。これでユーザー登録用のテーブルが準備されます。 select * from auth.users;localhost:3000/loginにアクセスすると、emailとpasswordでのユーザー登録が求められますので入力してSignUpします。すると登録したメールアドレス...
アプリ

Supabase + Next.jsアプリ開発(2)-ベクトルDB

各社の自社機密情報を参照するQ&Aチャットボットのようなアプリを想定します。ChatGPTのAPIを使用するとして、ChatGPTの学習データにはない各社機密情報についての回答をさせるには、RAG(Retrieval-Augmented Generation)という技術が使われます。詳細は割愛しますが、この技術を使うには「機密情報」を「ベクトル化(Embedding)」しておいて、ユーザーの要請に関連する情報をベクトル検索してChatGPTに提示してあげることが必要で、このアプリで使用するDBは「ベクトル」を扱えることが必須要件となります。幸いなことに、PostgreSQLにはpgvectorという拡張機能があり、Supabaseでも利用できるようになっています。このTopicではその辺りの設定について公式サイトを元に解説していきます。前回Topicで作成したSupabaseダッシュボードにて左メニューで「Database」を選択左メニューで「Extensions」を選択「Available extensions」から「vector」を探し、有効化以上の準備だけで「pgvector」が...
アプリ

Supabase + Next.jsアプリ開発(1)

アプリ開発においては、Googleが提供するFirebaseというBaaS(Backend as a Service)が有名ですが、最近Firebase代替を謳うSupabaseというオープンソースの名前をよく聞くようになっていました。Firebaseとの最も大きな違いは、オープンソースであることと、リレーショナルデータベース(RDBMS、SQL)であるPostgreSQLがベースであることが挙げられます(FirebaseのデータベースであるCloud FirestoreはNo SQLです)。一般にNo SQLの方が高速でスケール性が良いと言われますが、複雑なデータ構造には対応できなかったり、データの一貫性を保証しない、などのデメリットもあり、今でもデータベースと言えばRDBMSだろう、という風潮を感じます。というわけで、この際少し本気で勉強してみたいと思います。Supabaseに登録して、まずProjectを作ります。test_projectとしておきます。SQL Editorのページを選択すると右のような画面になりますので、SQLクエリでテーブルを作っていきます。テーブル名をmy_...