OGIMOノート~家族のためのモノづくり~

OGIMOテックノート ~家族のためのモノづくり~

重度障害の息子を持つ父親エンジニアの備忘録。自作の電子工作おもちゃ/リハビリ器具/ロボット関係の製作記録、思った事を残していきます

【2020/3/27】毎日新聞 掲載 ~脳性まひの子供のために、支援機器を自作で50個~

我が家で取り組んでる
『息子や家族・友人のためのモノづくり』活動
が、3/8(日)に毎日新聞様Webサイトに公開されました。

mainichi.jp

また、近畿版は昨日(3/27)夕刊に掲載されました!

当日に突然の連絡やったので、
慌ててコンビニで買って帰りましたが、
予想以上に大きく取り上げられてた!(^^;
テレビ欄の裏、4コマ漫画横の記事欄を
半分近く占めてる(笑)
なんだか感慨深い~

障害を持つ息子の「できる」を引き出すサポート機器の自作取組みの様子です。
人にサポートして貰う事が多く、受け身になりがちな息子。


その息子の好奇心を掻き立て、「自分の力でやってみよう」という子供の意志を楽しく引き出そうとするちょっとした工夫の形。
「50個」という数字そのものがタイトルで強調されてますが、作ったモノの数よりも、その頻度で試行錯誤(「作る」→「子供に使って貰う」→「改善する」)を繰り返してこれた体験そのものに価値があったのかなぁ、と思ってます。
市販品がうまく使えない部分は、身近な人・支援できる人達がその子に合わせてカスタマイズ&アップデートして、「我が子専用」にしてやればよい。

ちなみに、取材自体は1月上旬でしたが、そこから1ヶ月半で息子用の移動練習車椅子は更にアップデートされてます(笑)
すぐ目の前に使ってくれる人がいるからそこのスピード感。
この2年間、とにかく手を動かし続けて、最近ようやく、息子や子供達の興味を引き出すモノをタイムリーに提供できる様になってこれた気がします。
また、これから少しずつですが、息子向けに開発した技術ノウハウを他のお子様・友人に展開していく事も意識してやっていきたい。もちろん、必要としてくれる人達に届けたいという想いもあるし、その一方で、友人向けに開発したノウハウ・使い方・アドバイスが我が子向けにも良いフィードバックに繋がる事もこの2年で分かってきた。
そんな良い循環ループが生まれそうな気配を形にしていければ、と思ってます!
記事の最後では
『モノやテクノロジーだけですべての困り事を解決する事は現時点ではできないかもしれないけど、、その子に合わせた工夫をすれば何とかなるかもしれない!
そう思える機会を重ねる事で、未来は明るく前向きに思える! そのために自分はモノを作り続けてる』

的な事を書いてもらってます。(ちょっぴり自分で加筆w)
これからも頑張って&楽しく子供達の「できる」を引き出していくモノづくりをしていきたいです

おぎモトキ (廣瀬 元紀) プロフィール

「家族のためのモノづくり」
をテーマに、障害を持った息子や家族、大切な人のための発明&モノづくり&実践活動に取り組んでいます!


【更新情報】
★New★ 2024/2/11(日) 日本テレビ真相報道バンキシャ!」の特集で我が家(廣瀬/おぎモトキ)家を密着取材頂きました!

【密着】息子に贈る発明品、試行錯誤の日々 障がいある息子と…ある家族の物語
www.youtube.com

 

自己紹介

■ 名前: おぎモトキ (廣瀬 元紀)

主要SNSはこちら


 
 
 
 

製作依頼・相談、講演依頼、取材依頼などは各種SNSのDMよりお願いいたします


■ 家族

妻 (まほともオカン) : 専業主婦、ゲーマ 時々 ピアニスト。
  ピアノ&ゲーム実況配信サイト: まほともオカン - YouTube
娘 (まほとも) : 息をするかの様に毎日イラスト描きに没頭中。
息子 (ともかつ/トモくん) : マイペースでこだわり強いおもちゃ研究家

   
■ 息子の障害について


・ 在胎24週で生誕した超低出生体重児(体重865g)
 生後2か月で水頭症と診断、VPシャント手術済
小脳低形成、中重度の脳性麻痺(失調型)
・ 身体面
 バランスを取るのが難しく、6歳時点で座位保持/立位が困難
・ 知的面
  知的遅れあり (現時点で1~2歳程度)、発語は困難。
 簡単なジェスチャーで意思は表現しようとしている
 好きなものへのコダワリが強く、パニック(号泣/叫び)を起こしやすい

活動概要

障害を持った息子や家族のため、そこから障害を持った人達の「できる」に繋げられる様に、大きく3つの領域で活動を展開しています。

①「息子・家族のため」(父親エンジニア)
②「目に見える周りの誰かのため」(OGIMOテック開発室)
③「将来の社会に繋げるため」(本業ロボット開発)

個人活動としては、①及び②の領域で取組みを加速しています。

■個人活動:息子・家族のためのモノづくり

 障害を持った息子や家族の日々の困りごとを自分の得意な電子工作スキルを駆使して解決しようとする『家族のためのモノづくり』 活動に取り組んでいます。
息子用リハビリ機器、おもちゃ改造、息子用モビリティ等の自作・改造が中心。

 「本人の好奇心を引き出す遊び心 × スピード感× 日常使用」をモットーに、モノを通して子供達の「できる」「楽しい」を引き出す体験を作ろうと奮闘してます。


 

■個人活動:障害当事者/支援者など誰かのためのモノづくり

家族向けや、コミュニティ活動の中で、製作してきた研究開発品。
これを同じ様な境遇を抱える当事者、家族、支援者など必要としてくれる人に届けたい!
この想いで、主に「これまで開発してきた発明品をベースにしたカスタマイズ量産製作&提供活動」を行っています。

本活動の屋号「OGIMOテック開発室」

ロゴ製作 : Daichi Sugimoto


製作依頼などは、facebook、X(旧Twitter)や InstagramのDM等でご連絡頂ければ嬉しいです。

■個人活動 : コミュニティ活動

本職や家族向け開発とは別に、コミュニティ活動も行っています。家族向けに開発したモノ&技術を活かし、困っている人の悩みを解決できる事が出来ればと思っています。

オリィの自由研究部 (β)
community.camp-fire.jp



ロボットコミュニケータの吉藤オリィさんのオンライン研究会に副部長として参加させて頂いています。
困っている人の課題を元に解決アイデアをワイワイと検討する「発明検討会」、そのアイデアを元にしたプロト製作、実際に困りごとユーザーに使ってもらう等、実践重視の自由研究コミュニティです。

メンバーの皆様と一緒にワクワク&ワイワイ取り組み中。ご興味あれば是非ともご参加ください





製作物一覧

代表的なモノ


 


 





 
 

2018年から始めた制作活動のうち、
以下のサイトに2019年での製作物をまとめています。
【2023年製作物】
ogimotokin.hatenablog.com
【2022年製作物】
ogimotokin.hatenablog.com
【2021年製作物】
ogimotokin.hatenablog.com
【2020年製作物】
ogimotokin.hatenablog.com
【2019年製作物】
ogimotokin.hatenablog.com


個人製作品に関する製作相談などについては、TwitterアカウントよりDMください。


受賞歴

■ヒーローズリーグ2021
作品名:子供用成長支援モビリティ ToMo-bility
・MAヒーロー賞 (プレゼン部門優勝)
・CIVITECH賞 (CIVITECH部門優勝)
・ベストドリーマ賞 (個人賞)

protopedia.net

勝戦プレゼン動画 (開始24:15辺り)


■ヒーローズリーグ2022
作品名:歩行リハビリエンタメシステム Melody Shoes
・CIVITECH賞 (CIVITECH部門優勝)

protopedia.net

勝戦プレゼン動画(開始38:08辺り)


■M5Stack Japan Creativity Contest 2021
M5Stackデバイスを活用したモノづくりコンテストにて、応募2作品を両受賞。
2位 : M5ポータブル エレベータ操作パネル ~外出できない子供達に向けた自分だけの専用エレベータ体験~
protopedia.net

特別賞(意義深いで賞) :
protopedia.net

■M5Stack Japan Creativity Contest 2023

特別賞(研究アイデア賞) :
protopedia.net

書籍

■アイデアをカタチにする! M5Stack入門&実践ガイド[M5Stack Basic/M5StickC対応] (2022/3)
「大切な人に向けたM5stack自作支援機器」として一部を執筆させて頂きました






メディア掲載

■■【New!】 日本テレビ真相報道バンキシャ!」 (2024/2/11 放送)
息子に贈る発明品、試行錯誤の日々 障がいある息子と…ある家族の物語
ogimotokin.hatenablog.com

■■【New!】 Webメディア「エンジニアType」 (2024/2/22 掲載)
ユーザーに刺さるものは「申し訳ない気持ち」から生まれる。エンジニア・おぎモトキが家族のためのものづくりで得た学び
type.jp


■■ フジテレビ系列「めざましテレビ」 (2019/8/26 放送)
~歩けない息子のため…”父の発明品”~
www.youtube.com


■■ Webコンテンツ Daily Portal Z (2019/9/16掲載)
dailyportalz.jp



■■ 毎日新聞Webサイト (2020/3/8掲載)
mainichi.jp



■■ フジテレビ系列「めざましテレビ」 (2020/8/14 放送)
~息子のため…父が“天井にゲーム”開発~
www.youtube.com

きっかけになった開発Tweet


■■ 朝日新聞 (2020/10/8掲載)
www.asahi.com


■■ JSME(機械系に進む中高生を応援!)サイト (2023/10/25)
介護向けロボットの事例紹介の中で、子供成長支援モビリティ"ToMo-bility"を紹介頂く
https://www.jsme.or.jp/career-mech/juniornews-m2310/www.jsme.or.jp




■■その他関連

●M5Stackで「エレベータ操作パネル」を自作 (2021/9掲載)
protopedia.net

複数のメディア記事で掲載
fabcross(2021/09/29掲載)
grape(2021/09/29掲載)


●ねとらぼ:「白衣が最高になびく至高の乗り物」(2021/12/4掲載)
ロボット研究者の吉藤オリィさんとの共同製作開発品
nlab.itmedia.co.jp



●オンラインボッチャ(2020年8月~)
※オンライン研究会「オリィの自由研究部(β)」及び 一般社団法人オンラインボッチャ協会と共に推進。
私は本装置の開発 及び 技術担当顧問として活動

www.youtube.com

ロボットスタート:企業スポンサー付き公式大会を開催(2021/8)
バイオジェン : オンラインボッチャ全国大会 開催(2022/4)
読売新聞 2022/9/21 : 全国大会決勝戦 紹介
NHK WORLD-JAPAN放送 (2022/10/3)
www3.nhk.or.jp


NHK World-JAPAN (2023/3/25)
ロボット研究者の吉藤オリィさんの特集の中で、
私の開発したOriHime車椅子システムを使った遠隔移動販売の様子や、オリィの自由研究部(β)メンバで取り組んだOriHimeキッチンカーや楽器演奏装置も紹介頂いています。

www3.nhk.or.jp





外部講演・登壇イベント

・ユニバーサル事務次官PJ勉強会@東京・霞が関(2024/2/14)
ogimotokin.hatenablog.com

・東海特別支援教育カンファレンス@岐阜(2024/2/11)
ogimotokin.hatenablog.com

・福岡県立糸島高校 糸学志向 工学ゼミ講師アドバイザ(2024/1/31)

NPO法人ぷれいふる様 キッズツールディ(2024/1/21)
ogimotokin.hatenablog.com

・埼玉県越谷支援学校 全社研修会(2023/12/25)

Panasonic DEIイベント (2023/11/25)

・株式会社かなえるリンク 研修会(2023/3/19)

・ヒーローズリーグ2022 キックオフベント (2022/9/5)
youtu.be

兵庫県尼崎市 地域講演会 (2021/2)

・プロトペディアの時間 vol.83 (2022/6/22)
youtu.be

・世界ALSデーin NAGOYA みんなでゴロンしよう (2022/6)
2022「世界ALSデー in NAGOYA みんなでゴロンしよう!」Full動画 - YouTube

・福岡エンジニアカフェ「だれかのためのモノづくり」(2021/2,10)
www.youtube.com








展示会出展

本当の可能性に、アクセスする (2024/1/13)

第4回関西キッズ機器展 (2023/11/11-12)
ogimotokin.hatenablog.com

アートパラ深川 (2023/10/22)

Maker Faire Tokyo 2023 (2023/10/14-15)

M5Stack User Meeting in Osaka 2023 (2023/5/1)

Maker Faire Kyoto 2023 (2023/4/30)

GUGEN2022 (2022/12/17)

Maker Faire Tokyo 2022 (2022/9/3-4)

Maker Faire Tokyo 2022 (2022/9/3-4)

子供福祉機器展 Kid Festa2021 (2022/4)

子供福祉機器展 Kid Festa2020 (2021/4)

Maker Faire Tokyo 2020 (2020/10/2-3)

Maker Faire Kyoto 2020 Online (2020/5/2)

Maker Faire Tokyo 2019 (2019/8/2-3)

Maker Faire Kyoto 2019 (2019/5/4-5)










本業

Panasonic にて黒物家電の開発エンジニア。
しかし、息子が障害を持って生まれた事をきっかけに、
「障がいを持つ子供達の成長や未来に直結するモノを作りたい」
と決意し、2018年にロボティクス機器の研究開発に社内転職

歩けない子供達の手足の代わりをサポートできるロボット技術開発
を作るべく研究開発しています。


本業での公開情報
① 追従型ロボット車椅子Piimoの開発/商品化
youtu.be

開発者インタビュー記事(本人出演)
recruit.jpn.panasonic.com


本プロジェクト取組みの一環で、以下の受賞を頂いています。
第67回電気科学技術奨励賞並びに電気科学技術奨励会会長賞 (2019/11)

日本ロボット学会 実用化技術賞 (2020/10)




② 屋外公道走行可能な搬送ロボット開発
2020年12月~現在(2023年3月時点) 藤沢SSTでのロボット配送実験取組み

2022年4月 つくば市でのロボット配送取組み

2022年12月 東京・丸の内でのロボット移動販売取組み

開発者インタビュー動画(本人出演)
www.youtube.com


本業と個人活動のコラボともいえる共創活動
2023年7月  自動配送ロボット"ハコボ”×分身ロボット”OriHime”の融合による遠隔タウンツアー実証


note-moonshot.jst.go.jp


[取得資格]
・エンベデッドシステムスペシャリスト[IPA]
・プロジェクトマネージャ [PA]
・家電製品エンジニア [家電製品協会]

「家族のためのモノづくり」のきっかけ&想い

息子が4歳になった頃、
「この先、家族の「障がい」と向き合う上で、
果たして自分は父親として何ができるのだろう」

とぼんやり考える様になりました。

自分は何のために働くのか、
何のためにものを作るのか、と
社会人10年目の節目で改めて自分を見つめ直しました。
自分のため?
家族のため?
社会のため?

そうだ、自分はと目の前にいる家族の未来のために働きたい。
それは単にお金を稼いで養うという意味ではなく、
自分の持つ技術を通して家族の抱える困りごとを解決したい。

生きていく上での日々の生活の様々な不便さを、
一人の父親として、
一人のエンジニアとして、
自分の持つ技術や関連するテクノロジーの力を組み合わせて解決に導きたい!

という想いにたどり着きました。

では、どんなテクノロジーが家族の未来に繋がるかを模索していく中で、
不自由な身体動作の代わりを出来るロボティクス技術
の可能性に魅せられ、
業務として息子の手足の代わりとなるロボット技術の研究開発にジョブチェンジする事にしました!


しかしその一方で、
企業として取組みだけでは、息子の「ダイレクトな困りごと」を解決をするのは難しい事も感じていました。
特に固定費が高い大企業では対象母数が広い世界を目指したがる傾向があり、
息子の様に症例が少ないマイノリティ事例を対象にするとビジネスとして成立しづらいためです。

更に、商品機器の開発スパンが最短でも1年以上かかってしまいますが…
子供の成長は著しい訳で、仕事として開発したものが、ほんとうにその時の子供に最適かどうか分からない。
その間に、息子はどんどん成長してしまい、本当に必要な時期に必要なテクノロジーを提供できない!

子供にとって大事なのは「今」なのです。



そう考えた結果、

「本業活動として難しい部分は、
個人でやればいい!」

という発想にいきつき、

特に息子や家族のダイレクトな困りごとを解決しようと、
個人でのモノづくり活動を始めました!


障害を持っているが故に人にサポートして貰う事が多く、受け身になりがちな息子。
その息子の好奇心を掻き立て、
「自分の力でやってみよう」
という子供の意志
を楽しく引き出そうとするための工夫の形。
そして、市販品がうまく使えない部分は、
身近な人・支援できる人達がその子に合わせてカスタマイズ&アップデートして「我が子専用」にしてやればよい。

大量生産社会から個人最適社会へシフトしようとしてるこの世界において、
身近な家族・友人達で「その人のために」カスタマイズし合える
『当事者×エンジニア(メイカー)』による暖かい世界こそ、これからの個人が幸せに感じるポイントになると自分は信じています!

また、息子や家族のために作ったモノを、同じ困りごとを抱えた当事者や支援者に一人でも多く届けたい。
その想いで、製作提供活動も進めています。

その想いを描いたブログ記事(2023/11)
ogimotokin.hatenablog.com

10歳を迎えた息子


モノやテクノロジーだけですべての困り事を解決する事は
現時点ではできないかもしれないけど、
その子に合わせた工夫をすれば何とかなるかもしれない!
そう思える機会を重ねる事で、
不安感を解消し、未来を明るく前向きにとらえる事ができる!

そのために自分はモノを作り続けていきたいです


これからも頑張って&楽しく子供達の「できる」を引き出していくモノづくりをしていきたいですし、
そういう活動に興味のある方にとって、
本ブログなどが何か良い影響に繋がればとても嬉しいです!


※本自己紹介の記事に対して、2020/5/1時点で15個の星を頂いていたのですが、URLを修正した際に不手際で消してしまった様です。(頂いた方大変申し訳ありません)

一旦、自分アカウントで当時の個数分を更新させていただいておりますので、ご容赦頂けますとありがたいです

ワンスイッチ操作で演奏できる 「打楽器ハンド(効果音付)」を作ってみた

f:id:motokiinfinity8:20200301215940j:plain

はじめに

今年の目標の一つである
『友達と一緒に楽器演奏するためのサポート機器作り』

製作のきっかけは、障害を持ったお子さんのご家族・友人らのSNS投稿。
「お友達と一緒に楽器演奏をしたがっている」
「手を上手に使えなくても、タンバリンやドラムを叩ける様になりたい!」
「自分の力でリモコンのスイッチを押したい」

を実現すべく市販機器を改造して試行錯誤されている様子を何度も拝見してきました。

「自分の意志でモノを押したい、自分で音を奏でる体験を作りたい」

当たり前にモノを押せる人達には気づきにくいニーズ。だからなのか、、、それを実現する様な市販品ってあまり見かけない……


一方で、電子工作の世界では、モノを叩く技術ってサーボモーターという基礎技術で実現できる可能性があります
(電子工作のスタートでLEDの次に使うのがサーボモーターだと思ってるくらい)

せっかくMaker業界では当たり前に実現可能な技術があるのに身近な生活の場面に浸透していないのが課題、と思って……

それならいっそ作ってしまおう!

というのが、製作モチベーションでした!

そこで、様々な楽器の中でも、まずは一番シンプルかつ全身でリズムを感じらる打楽器にチャレンジしたいと思います!


要求仕様

ただ「楽器を叩く」だけではなく、
「キレイな音を出せる」「設置設定がかんたん」「子供がつい遊びたくなる」体験を目指して
・重いバチも保持できる様な強力さ
・楽器&本体を簡単に取り付け & 位置調整できる
・叩いたときに、面白い効果音や光効果を加える遊び心

を実現ターゲットにしたいと思います。


完成品

上手に手が動かない子供でも、スイッチを使ってタンバリン・ハンドベル等を演奏できる簡易打楽器ハンドを作ってみました!

アーム部のアタッチメントを変更すれば
・タンバリン
・ドラムセット
・ドラム缶
ハンドベル

など、比較的 重たい楽器でも叩いたり振ることも出来ます!

また、音を奏でる楽しさを感じて貰うため、叩く瞬間に【楽しい効果音】を加える様な遊び心も加えてみました♪
効果音をうまく使えば、笛やブブゼラ、法螺貝など実際に吹くのが難しい楽器も雰囲気吹いてる感も出せるかも(笑)


あとは、設置の工夫として、
・楽器の位置調整を簡単にするため、アームの打点位置を調整する機能を追加
車椅子用ユニバーサルアーム/ビックグリップ/カメラ用三脚を取り付け出来る様にして、自由な角度・位置調整を簡単に出来る様にした
・車椅子に取付けできる様に単3電池駆動に変更
など、「使いやすさ」を意識して改良してみました。


また、あわせて、OriHimeと組み合わせた『遠隔楽器演奏システム』への活用も検討中です。
一旦、Blynkアプリを使って 4G回線経由でスマホから遠隔操作できる様にしてみましたが、我が家以外で活用してもらう事を想定した場合、ソースコード内にアカウント情報を埋め込まなければならない現手段では限界があるので、そこは改善を検討しています。
今後をお楽しみに(^-^)

全体システム

まず、「叩く機能の根幹であるサーボモータは以下を選定しました。

akizukidenshi.com

11kg/cm(6.0V)で価格1000円台というコスパの良いサーボモータ。ただし、副作用としては動作時に大電流(1A)を流してしまうので、マイコンと同一電源にした場合にラッシュ電流により電圧降下が発生してしまい、マイコンハングを起こしてしまう事が実際に起こります。
それを防ぐため、マイコン電源にピークホールド回路(電圧を長時間保持する回路)を組みます。
具体的には、マイコン側電源にダイオード追加+1000uF以上(今回は4700uF)のコンデンサ追加」を実施します。


[参考記事]
hiyokko-hard.com


マイコンは今回、スマホ非対応版 : Arduino Pro Mini(3.3V)」「スマホ対応版: ESP32 Dev-Kit C」を使用しました。
音源再生は、いつもの「DFPlayer Mini+スピーカ」になります。


回路図イメージは以下になります。

f:id:motokiinfinity8:20200302014951j:plain


ハードウェア

今回工夫したのは筐体設計です。使い方としては、以下の様な車椅子に取り付け可能なユニバーサルアームへ付ける事を想定しました。

調査した結果、取り付け先端としては大きく以下の3つに対応したら良さそうです。
・車椅子用アームスマホホルダー
横幅110mm以内
・大型クリップを付ける事ができる
厚み25mm以内
・カメラ用三脚ネジ
三脚ネジ(メス)を追加できるスペース

上記を満たす形になる様にFusion360で筐体を製作しました。

f:id:motokiinfinity8:20200302021042p:plain

なお、三脚ネジは以下を使用して、インサートナットの様にして埋め込みます。


スマホホルダーへ取り付け
f:id:motokiinfinity8:20200301220237j:plain
f:id:motokiinfinity8:20200301220251j:plain

・大型クリップへの取り付け
f:id:motokiinfinity8:20200301220325j:plain

・カメラ三脚ネジへの取り付け
f:id:motokiinfinity8:20200301220351j:plain

・筐体内部の手作り基板
f:id:motokiinfinity8:20200301220514j:plain




まとめ

息子氏に使って貰ってみたところ、いろんなモノを楽器にして叩いて遊んでくれていました!
また、モニターとして数名の方(障害を持ったお子さんの家庭)へ試作品を提供して、実際に効果検証を進めているところです!

身体をうまく使えず楽器を上手く鳴らせなくても、この様な支援機器を使えば、
「できない」を「できる」に変える
「友達と同じ体験を共有できる嬉しさ」を作る可能性を秘めた、
『シンプルなHuman Augmentation技術』なのかもしれないなぁ、と思います。


そして、最初は「サーボーを動かしたら簡単に実現できるんだろうな」と思って始めましたが、
実際は「キレイな音を鳴らす」「簡単に設置できて使える」には多くのハードルがある事もよく実感出来ました!
頭の中の想像で終わらせるのでなく、実際に手を動かしてみたからこそ分かる課題、この積み重ねがノウハウになるんだと思います。
(やはり、「自分の手を動かす事」は大事ですね)


今後ですが、モニター数名による実証効果がありニーズがありそうならば、
キット化などの手段で困ってる方々の手元にご提供できるレベルまで進化させて見ようかと思います! (手段は検討中ですが)


もしご興味のある方がいれば、ご連絡頂けますと大変嬉しいです!

知育玩具「くるくるチャイム」をデジタルおもちゃに改造してみた

f:id:motokiinfinity8:20200215164412j:plain

はじめに

今年の開発テーマの一つである
「息子の好きな斜面転がしを活かした遊びを考える」


現在、リハビリで長期入院中の息子。毎日、自由時間は病院内のおもちゃで遊んでますが、さすがに同じものを繰り返しになると飽きてきてる様子…
   
その中でも、今はボールを転がすおもちゃ等が大好き!!
ただ、息子は好きすぎると興奮してしまい、積み木等で作ったレーンもすぐ破壊、最後までボールが転がらないので、息子もストレスたまる様子。。。
  
そこで、「ボールが確実に転がる(レーンを壊さない)おもちゃ」として目を付けたのが、
『くるくるチャイム』という昔からあるおもちゃ

くもん くるくるチャイム (リニューアル)

くもん くるくるチャイム (リニューアル)

  • 発売日: 2017/05/31
  • メディア: おもちゃ&ホビー
    
これならボールをいれると確実に最後まで転がる!!

しかし……
このおもちゃは ただ転がるだけ、最後にベルが「チーン」と鳴るだけという刺激も少なめな仕様。息子も数回すると飽きてしまっていた……

惜しい!!
これにせめて、楽しい音が鳴れば……

妻と二人で頭を悩ませたところ、妻が「作って欲しいなぁ…」と一言。

そう
なければ自分で作るしかない!!
   
という訳で、「くるくるチャイム」の良さを活かしながら、息子好みの刺激たっぷりのおもちゃにアップデートするべく試行錯誤しました!



要求仕様

刺激を加える要素として、

・「光」と「音」のエフェクトを追加
・ボールの転がり状態を強調した様な演出

完成品

斜面+光+音楽 という、息子の大好物の三コンボを取り込んだ新しいおもちゃが誕生しました!

一時退院中に息子に使って貰ったら、めちゃくちゃ気に入ってくれて、気がつけばエンドレスで遊び続けてくれてた!
なかなかのヒット製品になって、これはすごく嬉しい!
   
こういう個人の好みにダイレクトに突き刺す事ができるのは、イカーものづくりの最大の強みですね!



全体システム

一番の悩みは、くるくるチャイムの限られた空間内でのボール位置検出

本オモチャですが、ボール幅と筐体サイズがちょうどキレイに収まる設計になっています。そのため、レーン沿いに配線一本を追加で通すだけでボールが転がらなくなるという点に悩みました。その結果、ボールの転がらない底面のみで回路系を完結させる手段を取りました。くるくるチャイムの底部にToFレーザー型の測距センサーを埋め込み、ボール高さを検知して、その高さに応じてLEDテープ& 効果音を変更するという追加工作を実施。幸いな事に底面内部は筐体内にスペースあったので、電池以外の全回路を埋め込む様に小型化しました。

f:id:motokiinfinity8:20200215165446j:plain

ハードウェア

回路図は以下になります。

f:id:motokiinfinity8:20200215171402j:plain

技術そのものは過去に製作したモノの組み合わせで、個人的に定番デバイスの組み合わせになります。


・ボール位置検出 : ToFセンサ LX53V0
・音声再生 : DF Player Mini
・LEDテープ : NeoPixel WS2812B

■ToFセンサ/LEDテープを使った過去作成例
ogimotokin.hatenablog.com
■音声再生モジュールを使った過去作成例
ogimotokin.hatenablog.com


これらを束ねるマイコンですが、今回は、
無線非対応でOKな事、筐体内に格納できるコンパクトさを踏まえて
Arduino Pro Micro」を使う事にしました。

その結果、以下の筐体内に収める事ができました。

f:id:motokiinfinity8:20200215173145p:plain

Arduino Pro Micro

私は以下の5V16MHz品を良く使います。安いものであれば、1個500円以下なので気軽に試せるのが魅力です。
マイコンはATmega32U4で、USBコネクタを備えているので、気軽にUSB HIDデバイスを使うのに適しています。

Arduino Pro Microの書き込み方法等は以下のサイトを参考にしています。

ht-deko.com

書き込みはArduino Leonardo」を選択してやればOKです。


ソフトウェア

ソースコードは以下のGithubにアップしてます。

github.com

5つの距離閾値(START_DIST /MODE*_DIST)を設定してやって、その距離閾値を跨いだ場合にモードが遷移するというシンプルな仕組みになっています。

終わりに

普通の市販品おもちゃの特徴・良さを生かしつつ、その子の大好きな音や演出にちょっとだけ手を加えてやるだけで、「その子専用の魅力あふれるおもちゃ」が出来上がります!
市販品がうまく使えない息子がいたからこその、新しいメーカー的なおもちゃの可能性を感じる事をができました。

他のおもちゃでも同じ様な取り組みは展開していけそうなので、おもちゃ屋で色々と次のネタを探してみたいと思います!

【まとめ】2019年ふりかえり ~家族のためのモノづくり~


棚卸しの意味も込めて、作ったモノ観点で 2019年を振り返り。
 
『息子のために、家族のために、誰かのために、
 自分の技術を生かしたモノを作りたい!』

 
という決意をした2年目。
とにかく手を動かし続け、気が付けばメジャーなモノだけで
【29個】ほど作りました。

1カ月で2~3作品というハイペース。ちなみに、2018年は【21個】だったので、去年より製作ペースが上がってる!

たくさん数を作る事自体は目的ではないけど、
子供向け(特に息子向け)の機器は何が本人にヒットするか分からないため、
「作っては試すを高速に繰り返して息子の出来るを見つけよう」
という方針で取り組んできたので、その取り組みに対する一つの定量値と考えると素直に良かったかなぁ、と思ってます


以下、2019年度の製作物について、ジャンルごとに分類してみました。

★は特に思い入れ深いモノ


息子のためのモノづくり ~移動/モビリティ編~

(1-1)歩行リハビリを楽しくするメロディ靴 [1月] ★

息子の歩行リハビリのモチベーションを上げるために開発した「歩くと息子の好きな音が鳴る&光る靴」
2018年初頭から取り組み改良を続けて1年。
何度も試行錯誤を続けた結果、息子が歩行器に乗り足を左右交互に出せる様になりました!!

製作記事は以下
ogimotokin.hatenablog.com

また、本内容に関して、8月放送の『めざましテレビで放送頂きました (別記事にてご紹介)



(1-2) 息子用電動モビリティMottoy改造 [8月]

足の不自由な息子が電動機器を使って自由に動くための練習環境を作る取り組み。
子供用電動機器"Mottoy"を息子が気に入る様に改造。
2月に低速対応改造、6月に電車コントローラ対応、8月にLED+音声搭載 と随時バージョンアップしていった。


製作記事はこちら
ogimotokin.hatenablog.com

製作には、ESP32 dev C を使ってます



(1-3) バギー電動化のための車椅子 on 台車ユニット製作 [9月] ★

息子の電動車椅子の操作練習のため、普段の椅子を電動移動機器にする取り組みをしてみた。
椅子(後輪)を台車に乗せ、無線コントローラで操作すれば、お気に入りの椅子に乗ったまま自分の意志で移動できる!

ずっと作りたかったモノの一つ。モビリティ製作の経験がなく、作り方が分からず手が止まってしまってましたが、後述する『木材DIYで作った車椅子 on 車椅子』の製作に携わったおかげで、心のハードルが下がり、無事に自作製作までたどり着けました! 人とのご縁、本当にありがたい…

製作には、ESP32 dev C を使ってます



(1-4) 電動車椅子のワンスイッチ化ユニット [10月] ★

(1-3)は屋内限定のため、屋外でもスイッチ操作による電動移動機器の練習をするため、市販の電動車椅子の操作スティックを物理ハックするユニットを製作しました!

サーボモータの制御というシンプルテクノロジーで作る新たな価値! 一部では評判になっている様です。
このおかげで息子も少しずつ電動移動に慣れてきた! 良い感触のため、どんどん改良&実証中です!

製作には、Arduino Pro Microを使ってます



(1-5) 動くと光る&楽しい音が鳴るイルミネーション歩行器 [6月~]

(1-1)で製作したメロディ靴の簡易版。こちらは歩行器の移動有無を加速度センサで検出して動いた時だけ音が鳴る&光る機能を搭載。(1-1)で一旦は左右交互に足を出せる様になったものの、モチベーションが上がらない時は相変わらず歩行器は嫌がる息子。歩行器で動きたくなる様なモチベーションを更に高めるための試行錯誤を実証中。

こちらは現在も進行形。メロディを変えたり、光を変えたり、と、奮闘中!
製作には、M5Stack を使ってます




息子のためのモノづくり ~おもちゃ/スイッチ/ゲーム編~

(2-1) 息子の好きなおもちゃ二輪走行ロボットをハック改造 [4月] ★

息子のジョイスティックの操作練習を楽しく進めるため、息子の大好きな二輪走行ロボット「バイリンガルモビ」を無線コントローラで操作できる様に改造しました。

製作して以降、息子は気に入ってくれて、良くスティックを触って、ロボットを動かしてくれてます!
製作には ESP32 dev kitxを使ってます。



(2-2) ジョイスティック以外の操作感実験/ やわらかリモコン[5月]

やわらかい触感のするコントローラでロボット操作を行う実験取り組み。妻の羊毛フェルト製作とのコラボ。息子へのウケはいまいちだったが、MFKにて展示したところ、女性陣のウケは良かった~

製作には、M5Stack + ショッカクポット を使ってます



(2-3) 電車でGo!で動くプラレール[6月]

最近電車&プラレールが好きになった息子が「自分の意志で操作する」機会を広げる事を狙った製作物。改造した「電車でGo!コントローラ」でプラレールの加減速を制御してます!

製作には、M5StickC(プラレール側) + ESP32 dev C (コントローラ側) を使ってます




(2-4) オモチャコントローラの本気ハック [9月]

息子の愛してやまない『ゲームコントローラ風おもちゃ』で、ロボットやモビリティ等を操作できる万能コントローラに改造!

製作には、ESP32 dev C を使ってます




(2-5) 100均グッツで作る自作スイッチ一式 [10月]

スイッチ製作の勉強も兼ねつつ、息子が押しやすいスイッチを色々と試行錯誤してみた。12月には障害児のきょうだいによるスイッチ製作ワークショップの実験もしてみた。

製作記事の一例はこちら
ogimotokin.hatenablog.com




(2-6) ボタンを押すと暴走するワンワン改 [8月]

息子が自分の意志でスイッチを押したくなる様な、刺激倍増のおもちゃ改造!

展示会に出展しても、何気にいつも一番人気だったりします!シンプルテクノロジー万歳。

製作記事はこちら
ogimotokin.hatenablog.com




(2-7) 壊れたおもちゃを再復活!? 二足歩行ベアビーボ君 [2月]

息子が遊び倒して壊してしまったおもちゃを二足歩行できる様に魔改造してみた。残念ながら息子の食いつきはいまいち(笑)しかし、他の子供たちには人気! やはり二足歩行は見てて楽しいよね。

しかし、最終的には、MFK展示会での出展中に壊れてしまい、そのまま部品取りしました。 いつかリベンジしたいなぁ。
製作には、V-duino を使ってます





(2-8) 物理スイッチで操作できるNintendo Switchコントローラ [11月] ★

Nintendo Switch大好きな母&娘に混ざり、息子も一緒にゲームで遊べる事を目指して、色んなスイッチを取り付けれるNintendo Switchコントローラを作った。

ゲームの楽しみ方を広げる可能性の秘めたコントローラ、2020年でも色々と実証してみよう!

製作記事はこちら
ogimotokin.hatenablog.com

製作には、M5Stackを使ってます




(2-9) 楽器の『音』がスイッチになる! タンバリンスイッチ [12月]

(2-8)のNintendo Switchゲームコントローラの楽しい遊び方の実験の一つ。『太鼓の達人』をタンバリンで遊んじゃえ!

リアルな楽器→ゲーム上の楽器音に変換される新鮮な体験が面白い!

製作記事はこちら
ogimotokin.hatenablog.com

製作には、M5StickCを使ってます



家族のためのモノづくり

(3-1) お父さん予定をリビングに表示するスケジューラロボット [3月]

単身赴任中のお父さんの大阪↔東京の滞在予定(google Calendar)をリビングに表示・通知するシステムを作りました。

製作記事はこちら
ogimotokin.hatenablog.com

製作には、M5Stackを使ってます



(3-2) 「今から帰る」の帰宅連絡を簡易化する遠隔通知システム [4月]

会社から帰宅する際の「帰る」のメッセージ連絡を自動化&簡易化するため、スマホから「帰宅ボタン」を押す or GPSで自宅近くに戻ってくるとリビングにある液晶ロボットがお知らせしてくれるシステムを製作しました。

初めてBlynkアプリを使ってみた事例になります。ここからM5Stack+Blynkの連携をいくつか試していく事になりました!

製作記事はこちら
ogimotokin.hatenablog.com





(3-3) 分身ロボット操作時の遠隔呼出しシステム [5月]

昨年11月から使わせて頂いている分身ロボットOriHime。足の骨を折ってしまい外出できなくなった妻に分身ロボットによるMaker Faire Kyotoでの展示説明員をお願いした際、会場から自宅への『呼び出し』を簡易に実施するためのBlynkを使った呼び出しシステムを製作しました。

製作記事はこちら
ogimotokin.hatenablog.com

製作には、M5Stackを使ってます



(3-4) 分身ロボットOriHimeの全方位移動オムニ台車 [6月]

単身赴任先から娘&息子と遠隔操作で鬼ごっこ等をするために製作しました。カメラ&音声通信は分身ロボットOriHimeを使用し、移動台車+遠隔制御部を自作。Blynkを使いスマホで台車を操作できる様にしました。


この機体を使って、Maker Faire Tokyoでサッカーで遊んでみたり、分身ロボットサッカーの集まりに混ぜて貰いました。

製作には、M5Stackを使ってます



(3-5) 息子の刻み食を簡単にするためのハサミ&キャップ

噛む事が苦手な息子の「刻み食」を特に外出先で簡単に調理するための工夫。100均ショップで購入したシュレッダーはさみに加えて、はさみ間に詰まった食材を簡単に取り除けるキャップを3Dプリンタで作りました。

3Dプリンタがあれば、個人のニーズに適したその人専用自助具が作れる! 3Dプリンタによる障害支援具の可能性を感じました!


友達のためのモノづくり

(4-1) ワンボタンで操作できるじゃんけん義手ロボット [1月] ★

スイッチ一つでじゃんけんをする事が出来る義手ロボットを、ご縁あって分身ロボット研究者 吉藤オリィさんと、脊髄性萎縮症 (SMA)の女の子&お母さんと一緒に製作しました。


自分の息子以外のために何かを作る初めての体験。
1ボタンでグー/チョキ/パーを選択できる。手が動かなくても、指一つで自分の意志をロボ義手に表現できる!

2018年末から取組みを始め、実際の使用者(小学生の女の子)のおうちに集まって原理プロトを作ったり、その原理プロトを実際に学校で使って貰ってフィードバックを貰ったり、使い手(ユーザー)と作り手(メイカー)が一緒になってモノづくりする面白さを実感出来た取り組みでした!



(4-2) パーティ映え イルミネーション車椅子 [5月] ★

車椅子ユーザー TK君の「普通の車椅子、カッコ悪い」という一言に対して、パーティ映えする様なイルミネーション車椅子を改造製作してみました。

ただLEDテープで光らせるだけではなく、加速度センサーによる走行検出により走行中のみレインボーに光る、時間に応じてイルミネーションモードを変更する等の工夫を入れています。後の(4-3)へ繋がる取り組み。

製作には、M5Stackを使ってます



(4-3) 車椅子をワクワク新幹線に! WHEELCHAIR TRAIN [8月] ★

8月に開催された特別支援学校の特別おもしろ祭りに向けた製作。普段の車椅子を、少年心をくすぐる新幹線に変身させました!


見た目だけでなく、走行時に電車発射音、走行方向に応じてエフェクトが変わる面白仕様。

製作記事はこちら
ogimotokin.hatenablog.com

こちらのご縁で、8月放送の『めざましテレビで放送頂いたりと、活動の幅が広がった印象的な製作物でした。
また、実際に、本イベントで知り合ったお子さんに個人的に1台製作してお渡ししたところ、大変喜んで貰い、愛用してくれてるとの事、本当に嬉しいです!

製作には、M5Stackを使ってます



(4-4) スイッチを押すと魔法をかけるハロウィンロボット [10月]

息子の通う療育園でのハロウィンパーティで「スイッチを押して子供達を喜ばせたい」という妻の願いに賛同して、前日に製作。

思い付いたら、100均グッツ+手元部品で突貫で作り、子供達に試してもらう! 今年の取り組みを象徴する様な取り組みでした!(^^)

製作には、Arduino Unoを使ってます



(4-5) スイッチで鳴らすハンドベル演奏装置 [12月]

息子の通う療育園のクリスマス会、肢体不自由の同級生8人で想い出になる事をしたいという想いで製作しました。
8個のスイッチを使ってハンドベルを手動/自動で簡単に鳴らせます。


電気回路(ソレノイド) / 筐体設計(3Dプリンタ) / 台製作(木材DIY) など今年の数々のモノづくりで経験したノウハウを駆使して
わずか2週間分(深夜時間のみ)で実現できました。

イベント用として製作した本演奏システムですが、評判良さそうなので、今後のイベントでも活用を検討したいと思います。
機能アップデート検討中。



その他 未発表分(5件)

大人の事情(?)で、公開できませんが

(5-1) 普段の掃除をワクワク楽しくさせる改造掃除機プロト
(5-2) 本業で使っている移動ロボットを遊園地乗り物仕様に改造
(5-3) カレーを食べる際に本格感を拡張させる気持ち拡張プロト
(5-4) 障がい者向けの新調理機器のプロト
(5-5) スイッチで叩くタンバリン演奏マシンプロト

なども個人製作の延長として作ってみました。




製作手伝い

(6-1) 車椅子ごと乗れる視線入力台車システム ver1 [5月]

姿勢保持の困難な重度の方でも自分の車椅子ごと乗車可能な台車システムの試作製作に関わらせて貰いました。

木材DIYの加工自体が未経験だったため、ここで基本的な工具の使い方、台車製作における勘所を学びました。
その結果、(1-3)の製作を個人で実施する事ができました。

(6-2) 車椅子ごと乗れる視線入力台車システム ver2 [9月]

(6-1)で製作した台車システムの改良版の製作にも関わらせて貰いました。

板金やアルミフレームを用いた台車製作を初めて体験し、木材に比べて加工やメンテナンスしやすい事を学びました。
アルミを用いた個人製作は2020年に検討中。息子用モビリティ製作に活かします!

終わりに

とにかく「手を動かして試す」ことを繰り返してきた2019年。手を動かし続けたことで見えた世界がたくさんありました。
2020年も、変わらず 息子や家族、誰かのために手を動かし続けたいと思います!

特に、『音楽演奏』『ゲーム』『電動移動モビリティ』『支援ロボット』を重点に開発を続けたいと思いますので、引き続き暖かく見守って頂いたり、アドバイス等いただければ大変嬉しいです!

M5StickCを使ったタンバリン型スイッチを作ってみた

はじめに

Nintendo Switchコントローラを改造して、手の不自由な息子も一緒に家族でゲームを楽しめるための取り組み!

ogimotokin.hatenablog.com

前記事にて物理スイッチで操作できるゲームコントローラを製作しました。
これにより、様々なスタイルでNintendo Switchのゲームを楽しむ事が出来ます!

息子の操作サポートのために作ったコントローラですが、
単なる福祉用途としてだけでなく、きょうだい達も思わず使いたくなる面白い遊び方の可能性を秘めたコントローラにしていきたいと思い、どんな面白い拡張が出来るかを実験しています。

今回のターゲットは、上の娘がはまりつつある太鼓の達人
最初は体験版で遊んでたらすっかりハマり、普通のコントローラで楽しく遊んでいます。

今年のクリスマスプレゼントは、『太鼓の達人』をサンタさんにお願いしているハマり具合!


その姿を見ているうちに
「太鼓コントローラは実際に音は鳴らない。
 もしこれが、コントローラでなく実際に音の鳴る楽器で遊べたら、、、
 楽しいかも!」


太鼓の達人」は少ないボタンで遊べるので、肢体不自由な息子でも遊びやすいゲームやと思います。
そして、タンバリンは大きな面なので手を当てやすいので、息子の興味を引く事が出来るかもしれない!
楽器演奏がうまく出来ない息子でも、きょうだいで楽しく演奏する体験して欲しい!


という訳で、

Nintendo Switch太鼓の達人」に対応した
タンバリン型スイッチ

を製作してみました。

[要求仕様]
・タンバリンを鳴らすと、それに同期して実際の『太鼓の達人』ゲームに判定が入る事
 またLEDを光らせる等の簡易フィードバックもある事
・他のスイッチ機器でも使える事
・タンバリンのどこを叩いても反応する事
(力の弱い息子でも使える事が望ましい)

製作物

上記要求仕様を踏まえた結果、一番お手軽な実装方法として、
「M5StickCのマイク機能を使った音量反応型スイッチ」
という方針で、スイッチデバイスを開発しました。

f:id:motokiinfinity8:20191224224948j:plain

マイクの入力音量に応じてスイッチON/OFF制御を行うというシンプル構造。
タンバリン音源とチューニング(入力判定閾値の調整)のみで、しっかりとタンバリン音だけ反応してくれます。
また、音検出した際のフィードバックとして、M5StickCのLEDと「どんちゃん(赤い太鼓のキャラクタ)」っぽいイラストも表示してみた(笑)

なお、これを応用すれば、タンバリンだけでなく、例えば「呼び鈴」などもコントローラに出来ます(笑)


非常に広い応用が期待できそう!

ハードウェア

ハードウェア構成は非常にシンプルです。

f:id:motokiinfinity8:20191224235242j:plain

M5StickC内部にマイクが搭載されているおかげで、外部回路としてはスイッチON/OFFのためのフォトカプラがあればOK。
ただし、M5StickCはご存じの様にバッテリー容量が80mAHと少なく、子供が遊びたい時に充電切れてて遊べないのは致命傷になりかねないので、電池パックを取り付けれる様に配慮しました。


上記の様に、3cm×7cmの基板上でM5StickC含めてすべて収まります。

音量反応型のスイッチの場合、当然ながら他の雑音の影響を受けやすいのが欠点なのですが、
 ・タンバリンのすぐ近くにM5Stickを配置
 ・スイッチOFF→ONの音量判定閾値を高めに設定する

工夫により、多少の雑音ノイズの影響を抑える事ができました!

ソフトウェア

実は、ソフトウェアもそこまで開発工数を使いませんでした。
というのも、コードの多くは 以下のサイトにもある様な、M5StickCのマイク入力のサンプルコードを流用しているからです。

lang-ship.com


後は、音量入力の閾値決めになるのですが、ある程度は実験値を使いつつ、合わせて「ON→OFF時の判断音量閾値」と「OFF→ON時の判断音量閾値」を分ける(=ヒステリシス性を持たせる)事で、より精度の上げた判定条件にしています。

#include <M5StickC.h>
#include <driver/i2s.h>
#define PIN_CLK  0
#define PIN_DATA 34
#define READ_LEN (2 * 256)
#define GAIN_FACTOR 1
uint8_t BUFFER[READ_LEN] = {0};
uint16_t oldy[160];
int16_t *adcBuffer = NULL;

#define SWON_MIC_THMAX   2000
#define SWON_MIC_THMIN  -5000
#define SWOFF_MIC_THMAX   0
#define SWOFF_MIC_THMIN  -3000
#define MIC_AVRAGE   -1500
#define PIN_SWOUT 26

bool g_sw = 0;
bool g_sw_old = 0;

void i2sInit()
{
   i2s_config_t i2s_config = {
    .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_PDM),
    .sample_rate =  44100,
    .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, // is fixed at 12bit, stereo, MSB
    .channel_format = I2S_CHANNEL_FMT_ALL_RIGHT,
    .communication_format = I2S_COMM_FORMAT_I2S,
    .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
    .dma_buf_count = 2,
    .dma_buf_len = 128,
   };

   i2s_pin_config_t pin_config;
   pin_config.bck_io_num   = I2S_PIN_NO_CHANGE;
   pin_config.ws_io_num    = PIN_CLK;
   pin_config.data_out_num = I2S_PIN_NO_CHANGE;
   pin_config.data_in_num  = PIN_DATA;
   
   i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
   i2s_set_pin(I2S_NUM_0, &pin_config);
   i2s_set_clk(I2S_NUM_0, 44100, I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_MONO);
}



void mic_record_task (void* arg)
{   
  size_t bytesread;
  while(1){
    //50ms分のバッファを読み出す
    i2s_read(I2S_NUM_0,(char*) BUFFER, READ_LEN, &bytesread, (50 / portTICK_RATE_MS));
    adcBuffer = (int16_t *)BUFFER;
    showSignal();
    vTaskDelay(50 / portTICK_RATE_MS);
  }
}

void setup() {
  M5.begin();
  M5.Axp.ScreenBreath(8);
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(TFT_BLACK);

  // LED ON(GPIO_NUM_10 or M5_LED)
  pinMode(GPIO_NUM_10, OUTPUT);
  pinMode(PIN_SWOUT, OUTPUT);
  digitalWrite(GPIO_NUM_10, HIGH);  //LED OFF
  digitalWrite(PIN_SWOUT, LOW);  //SW出力 OFF

  i2sInit();
  xTaskCreate(mic_record_task, "mic_record_task", 2048, NULL, 1, NULL);
}

void loop() {
  int g_sw_now = g_sw;

  //OFF→ON判定時は「どんちゃん」を表示
  if(g_sw_old == 0 && g_sw_now == 1){
    M5.Lcd.fillCircle(100, 40, 36, 0xFFF0);  //クリーム色
    M5.Lcd.fillCircle(100, 40, 30, 0xF800);  //赤
    M5.Lcd.fillCircle(83,  35,  7, BLACK);  //右目
    M5.Lcd.fillCircle(117, 35,  7, BLACK);  //左目
    M5.Lcd.fillTriangle(90, 45, 110, 45, 100, 65, BLACK);
    M5.Lcd.fillTriangle(93, 48, 107, 48, 100, 62, 0x7800);  //ダークレッド
  }
  if(g_sw_old == 1 && g_sw_now == 0){
    M5.Lcd.fillScreen(TFT_BLACK);
  }

    // バッテリ電圧表示
  float vbat      = M5.Axp.GetVbatData() * 1.1 / 1000;
  //バッテリ残量[%]
  M5.Lcd.fillRect(0, 0, 60, 20, BLACK);
  M5.Lcd.setCursor(6, 0, 2);
  M5.Lcd.setTextSize(1);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.printf("%.2f V",vbat);

  g_sw_old = g_sw_now;
  vTaskDelay(100 / portTICK_RATE_MS); // otherwise the main task wastes half of the cpu cycles
}


void showSignal(){
  int y;
  int s_max = INT16_MIN;
  int s_min = INT16_MAX;
  for (int n = 0; n < 160; n++){
    y = adcBuffer[n] * GAIN_FACTOR;
    // 最大,最小更新
    if(y >= s_max) s_max = y;
    if(y <= s_min) s_min = y;
    
    y = map(y, INT16_MIN, INT16_MAX, 10, 70);
    oldy[n] = y;
  }

  //スイッチ判定
  //OFF→ON判定
  if(g_sw==0 && s_max >= SWON_MIC_THMAX  && s_min <= SWON_MIC_THMIN){
    g_sw = 1;
    digitalWrite(GPIO_NUM_10, LOW);   //LED ON
    digitalWrite(PIN_SWOUT, HIGH);  //SW出力 ON
  }
  //ON→OFF判定
  if(g_sw==1 && s_max <= SWOFF_MIC_THMAX  && s_min >= SWOFF_MIC_THMIN){
    g_sw = 0;
    digitalWrite(GPIO_NUM_10, HIGH);  //LED OFF
    digitalWrite(PIN_SWOUT, LOW);  //SW出力 OFF   
  }

  Serial.print("s_max:");
  Serial.print(s_max);

  Serial.print("  s_min:");
  Serial.println(s_min);
}

終わりに

タンバリンや呼び鈴など、実際の楽器の音を『太鼓の達人』をコントローラにしてしまうアイデアを具現化してみました。
無改造な何のヘンテツもないタンバリンなのに、それがゲームコントローラになる体験は新鮮で楽しかった!

ただ、一番の課題は「入力の遅延」
音が鳴るタイミング=入力判定となるで、少し早めに叩かないといけないので、そこがコツがいりました。(なので、本気の音ゲー用途にはむいておらず、子供の興味を引くため体験用と割り切る必要はありそうです)

ただ、ある意味、楽器演奏という観点としては
【音が鳴るタイミングに拍を合わせるため早めに叩くのが正しい姿】なので、
ある意味 本質的な音ゲーコントローラなのかもしれませんね。

ゲーム以外の用途としても音検出型スイッチとして応用できないか、他にも試してみたいと思います!

Nintendo Switchゲームを物理スイッチで操作できるコントローラを作ってみた

f:id:motokiinfinity8:20191205212426j:plain

はじめに(製作動機)

ゲーム好きな我が家族、妻と娘は時間を見つけてはNintendo Switchのゲーム(スプラトゥーンマリオカートなど)で毎日楽しく遊んでいます! 息子もその横で、楽しそうに画面を見て喜んでいます。

しかし、見てるだけで、操作できない。

ゲーム依存が社会問題になっている様ですが、我が家はゲームから多くを学んでます。
消極的だった娘はゲームをやる様になって、チャレンジ精神、失敗する事の大切さを学び、学校の友達とも積極的に遊ぶ様になりました!

なので、息子にも息子もゲームを通して、
「自分で操作する楽しさ」「失敗してやり直せる楽しさ」を感じて欲しい!


まず最初の関門は、市販のコントローラでは「手の不自由な息子は操作できない」という事。
・ボタンが多すぎて、どれを押せばいいか分からない
・コントローラを持てないので、狙ったボタンを押せない

という訳で、まずは第一歩として

「息子でも操作できる様な物理スイッチで操作できる
 Nintendo Switchコントローラの開発」

の自作に取り組みました!


[要求仕様]
3.5mmジャック対応スイッチで操作できる事
 また、我が家で使っている無線対応ジョイスティックでも操作できる事
・操作ボタンはゲームごとに変更できる事
・操作ボタンは最小限として、
 それ以外の操作は自動 or 介助者による代替操作でフォローできる事
 (ただし、本人が操作してる感覚になれる事)
・介助者によるサポート操作が同時にできる事


製作物

上記要求仕様を踏まえた結果、効率良い手段として、
「市販品のNintendo Switchコントローラを改造して外部ハックする」
という方針で、ハックモジュールを開発・改造しました。

f:id:motokiinfinity8:20191205212259j:plain


操作イメージを以下の動画にまとめました。


今のところ、息子でも遊べそうなゲーム(少ボタンでも出来るゲーム)として、
マリオカート
ゼルダの伝説 ~夢を見る島~
太鼓の達人

に対応しております。

製作方法

材料

改造するコントローラとしては、安価なコントローラとしてHORI製有線コントローラを使いました。

【Nintendo Switch対応】ホリパッド for Nintendo Switch

【Nintendo Switch対応】ホリパッド for Nintendo Switch

  • 作者:
  • 出版社/メーカー: ホリ
  • 発売日: 2017/07/13
  • メディア: Video Game

これに、お馴染みの無線対応マイコンモジュール"M5Stack" 及び 周辺デバイスを使います。
筐体は 3Dプリンタで作成しました。

部品名 個数 購入先 値段
M5Stack Basic 1 Switch Science ¥3575
M5Stack プロトモジュール 1 Switch Science ¥1300
GPIO拡張IC MCP23017 1 秋月電子 ¥110
3.5mmステレオジャック 4 秋月電子 ¥60
全体システム

システムイメージは以下の図になります。

f:id:motokiinfinity8:20191216222436j:plain

市販のコントローラ内の基板上のボタン入力信号&ジョイスティック入力信号に外部から配線を追加接続して、外部マイコンから強制的に信号を切り替えるやり方です。ボタン制御用には8本接続し、ボタン押し制御を実施する際は外部からL(GND)信号を印加してやります。
ジョイスティックの場合、1つのジョイスティックに上下用と左右用の2本を接続します。この場合、ジョイスティックの制御がない場合は、信号は1.65V(中間値)になっていますので、
 上 or 左に設定する場合 → H(3.3V)信号を出力
 下 or 右に設定する場合 → L(0V)信号を出力
 設定しない場合  → Hi-Zにする = 入力設定にする
 
という事で対応しました。これだとアナログジョイスティックならではの中間値が表現できませんが、まぁゲーム精度を求める事が目的ではないので、今回は妥協しました。
(こういう妥協も、スピード感あるモノづくりでは結構大事ですよね)


これは前職(家電関連の電気設計)でのエージング試験用としてよく行っていた手法です。
家電のリモコンを改造して、定期的な信号を発行し続けさせて、耐久性試験の効率化として活用していました。
ここにきて、前職での設計スキルが役に立ったー!

ハードウェア

それでは、HORI製のコントローラを分解してみる。裏側のネジを外すと、緑色の基板が出てきます。
f:id:motokiinfinity8:20191223235302j:plain

この基板の上で、比較的はんだ付けしやすそうな場所を選んで半田をつけていきます。
f:id:motokiinfinity8:20191224001643p:plainf:id:motokiinfinity8:20191224001651p:plain


A/B/X/Yボタンは残念ながら裏面にはんだ付けしやすそうな場所がなかったので、
表面側に直接付けます。(上級者であれば、配線のところのレジストを削る手段を取る方がラクかも)
ただし、ボタン面はコーティングされているので、カッターの刃裏面を使い、コーティング部を削っていきます。
f:id:motokiinfinity8:20191224002134j:plain

キレイな銅のピカピカした色が見えてきたら、その上にはんだを乗せてみて、無事にひっつけばOKです

配線するとこんな感じになります。(汚くてスイマセン)

f:id:motokiinfinity8:20191224002321j:plainf:id:motokiinfinity8:20191224002328j:plain


また、ハックユニット側には、3.5mmジャック用スイッチを4つ筐体に並べます。
残念ながら、M5Stack プロトモジュールの一端面には4つ並ばなかったので、専用筐体を3Dプリンタで製作してみました。

f:id:motokiinfinity8:20191224003358p:plainf:id:motokiinfinity8:20191224003828j:plain

ソフトウェア

GPIO拡張IC MCP23017

今回の様に8本以上のスイッチ入力やON制御出力を実施する場合、信号本数が足りなくなる事が想定されます。
そんな時に便利なのが、『GPIO拡張IC MCP23017』です。

チップの詳細は以下のサイトをご覧ください。

project59.blog.fc2.com


※使う際の注意
 ・ICのリセット端子が必ずPU抵抗になっているか?
 ・アドレス信号(A0/A1/A2)は必ずGND or PU抵抗で接続されているか?

私は上記を忘れていた結果、不安定動作(IC近辺を手で触ると挙動が変わる)に悩まされました…


制御については、Arduinoライブラリとして提供されています。
これを使えば、通常GPIOと近いソフトウェアの記述イメージで製作できます。

github.com

ソースコード

全体を公開すると冗長になるため、必要部のみ抜粋します

#include <M5Stack.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include "esp_system.h"
#include "Adafruit_MCP23017.h"

//MCP23017 (GPIOエキスパンダ)のピン割り当て
#define L_H_JOY  7
#define L_V_JOY  6
#define R_H_JOY  5
#define R_V_JOY  4
#define A_BTN    8
#define B_BTN    9
#define X_BTN   10
#define Y_BTN   11
#define R_BTN   12
#define RZ_BTN  13 
#define L_BTN   14
#define LZ_BTN  15 
#define INPUT1_BTN   0
#define INPUT2_BTN   1
#define INPUT3_BTN   2
#define INPUT4_BTN   3

#define RENDA_JUDGE_TIME 250
#define RENDA_KANKAKU_MS 60

Adafruit_MCP23017 mcp;

void setup()
{
  M5.begin();
  Serial.begin(115200);
  M5.Lcd.fillScreen(BLACK);
  
  mcp.begin();      // use default address 0

  //PIN設定
  mcp.pinMode(L_V_JOY, INPUT);
  mcp.pinMode(L_H_JOY, INPUT);
  mcp.pinMode(R_V_JOY, INPUT);
  mcp.pinMode(R_H_JOY, INPUT);
  
  mcp.pinMode(A_BTN, OUTPUT);
  mcp.digitalWrite(A_BTN, 1);
  
  mcp.pinMode(B_BTN, OUTPUT);
  mcp.digitalWrite(B_BTN, 1);
  
  mcp.pinMode(X_BTN, OUTPUT);
  mcp.digitalWrite(X_BTN, 1);
  
  mcp.pinMode(Y_BTN, OUTPUT);
  mcp.digitalWrite(Y_BTN, 1);
  
  mcp.pinMode(L_BTN, OUTPUT);
  mcp.digitalWrite(L_BTN, 1);
  
  mcp.pinMode(LZ_BTN, OUTPUT);
  mcp.digitalWrite(LZ_BTN, 1);
  
  mcp.pinMode(R_BTN, OUTPUT);
  mcp.digitalWrite(R_BTN, 1);
  
  mcp.pinMode(RZ_BTN, OUTPUT);
  mcp.digitalWrite(RZ_BTN, 1);

  mcp.pullUp(0, HIGH);
  mcp.pullUp(1, HIGH);
  mcp.pullUp(2, HIGH);
  mcp.pullUp(3, HIGH);
}


void loop(){
  
   M5.update();
   if(M5.BtnA.wasPressed()){  
      //現時点では3モードのみ
      game_idx = (game_idx-1)%3;     
   } 
   if(M5.BtnC.wasPressed()){  
      //現時点では3モードのみ
      game_idx = (game_idx+1)%3;     
   }

   
  //ゲームモード選択
  if(game_idx != game_idx_old){
    //モード0 : マリオカート
    if(game_idx == 0){
      M5.Lcd.drawJpgFile(SD, "/mariocart.jpg");
      M5.Lcd.drawJpgFile(SD, "/mc_accel.jpg", 0, 180);
      M5.Lcd.drawJpgFile(SD, "/mc_item.jpg", 80, 180);
      M5.Lcd.drawJpgFile(SD, "/mc_left.jpg", 160, 180);
      M5.Lcd.drawJpgFile(SD, "/mc_right.jpg", 240, 180);
   }
    **** 中略 ****
    game_idx_old = game_idx;
  }

  //外部ボタンからのハック分をマージ
  int jyuji_val_update = jyuji_val;
  int btn_val_update = btn_val;
  int input_val = mcp.digitalRead(INPUT4_BTN)*8+mcp.digitalRead(INPUT3_BTN)*4+mcp.digitalRead(INPUT2_BTN)*2+mcp.digitalRead(INPUT1_BTN);

  // Mode0 マリオカートの場合
  if(game_idx == 0){
    // ボタン入力
    if(mcp.digitalRead(INPUT1_BTN) == 0){
      btn_val_update |= 0b00000001; //Aボタンを1にする
    }
    if(mcp.digitalRead(INPUT2_BTN) == 0){
      btn_val_update |= 0b01000000; //Lボタンを1にする  
    }
    if(mcp.digitalRead(INPUT3_BTN) == 0){
      jyuji_val_update |= 0b0010; //左ボタンを1にする    
    }
    if(mcp.digitalRead(INPUT4_BTN) == 0){
      jyuji_val_update |= 0b0001; //右ボタンを1にする   
    }

    // ボタン表示変更
    if((input_val & 0b0001) != (input_val_old & 0b0001)){
      if((input_val & 0b0001) == 0) M5.Lcd.drawJpgFile(SD, "/mc_accel_on.jpg", 0, 180);
      else M5.Lcd.drawJpgFile(SD, "/mc_accel.jpg", 0, 180);
    }
    if((input_val & 0b0010)  != (input_val_old & 0b0010)){
      if((input_val & 0b0010) == 0) M5.Lcd.drawJpgFile(SD, "/mc_item_on.jpg", 80, 180);
      else M5.Lcd.drawJpgFile(SD, "/mc_item.jpg", 80, 180);
    }
    if((input_val & 0b0100) != (input_val_old & 0b0100)){
      if((input_val & 0b0100) == 0) M5.Lcd.drawJpgFile(SD, "/mc_left_on.jpg", 160, 180);
      else M5.Lcd.drawJpgFile(SD, "/mc_left.jpg", 160, 180);
    }
    if((input_val & 0b1000) != (input_val_old & 0b1000)){
      if((input_val & 0b1000) == 0) M5.Lcd.drawJpgFile(SD, "/mc_right_on.jpg", 240, 180);
      else M5.Lcd.drawJpgFile(SD, "/mc_right.jpg", 240, 180);
    }

   *** 中略 *****
   ////////////////////////////
   // コントローラボタン制御
   ///////////////////////////
   // 上下ボタン
   if((jyuji_val_update & 0b1000) >> 3){ //上の場合
      mcp.pinMode(L_V_JOY, OUTPUT);
      mcp.digitalWrite(L_V_JOY, 0); 
      Serial.println("push UP");
   }else if((jyuji_val_update & 0b0100) >> 2){ //下の場合
      mcp.pinMode(L_V_JOY, OUTPUT);
      mcp.digitalWrite(L_V_JOY, 1); 
      Serial.println("push DOWN");  
   }else{
      mcp.pinMode(L_V_JOY, INPUT);
   }

   
    // 左右ボタン
   if((jyuji_val_update & 0b0010) >> 1){ //左の場合
      mcp.pinMode(L_H_JOY, OUTPUT);
      mcp.digitalWrite(L_H_JOY, 0);
      Serial.println("push LEFT");
   }else if(jyuji_val_update & 0b0001){  //右の場合
      mcp.pinMode(L_H_JOY, OUTPUT);
      mcp.digitalWrite(L_H_JOY, 1);
      Serial.println("push RIGHT");
   }else{
      mcp.pinMode(L_H_JOY, INPUT);
   }

    // X(青)ボタン
   if((btn_val_update & 0b00000100) >> 2){
      mcp.pinMode(X_BTN, OUTPUT);
      mcp.digitalWrite(X_BTN, 0);
      Serial.println("push X");
   }else{
      mcp.pinMode(X_BTN, INPUT);
   }

   // B(黄)ボタン
   if((btn_val_update & 0b00000010) >> 1){
      mcp.pinMode(B_BTN, OUTPUT);
      mcp.digitalWrite(B_BTN, 0);
      Serial.println("push B");
   }else{
      mcp.pinMode(B_BTN, INPUT);
   }

   // Y(緑)ボタン
   if((btn_val_update & 0b00001000) >> 3){
      mcp.pinMode(Y_BTN, OUTPUT);
      mcp.digitalWrite(Y_BTN, 0);
      Serial.println("push Y");
   }else{
      mcp.pinMode(Y_BTN, INPUT);
   }

   // A(赤)ボタン
   if(btn_val_update & 0b00000001){
      mcp.pinMode(A_BTN, OUTPUT);
      mcp.digitalWrite(A_BTN, 0);
      Serial.println("push A");
//   }else if(digitalRead(INPUT1_BTN) == 0){
//      pinMode(A_BTN, OUTPUT);
//      digitalWrite(A_BTN, 0);
//      Serial.println("push A (Outside)");
//   
   }else{
      mcp.pinMode(A_BTN, INPUT);
   }
    // LZボタン
   if((btn_val_update & 0b10000000) >> 7){
      mcp.pinMode(LZ_BTN, OUTPUT);
      mcp.digitalWrite(LZ_BTN, 0);
      Serial.println("push LZ");
   }else{
      mcp.pinMode(LZ_BTN, INPUT);
   }

   // Lボタン
   if((btn_val_update & 0b01000000) >> 6){
      mcp.pinMode(L_BTN, OUTPUT);
      mcp.digitalWrite(L_BTN, 0);
      Serial.println("push L");
   }else{
      mcp.pinMode(L_BTN, INPUT);
   }

    // RZボタン
   if((btn_val_update & 0b00100000) >> 5){
      mcp.pinMode(RZ_BTN, OUTPUT);
      mcp.digitalWrite(RZ_BTN, 0);
      Serial.println("push RZ");
   }else{
      mcp.pinMode(RZ_BTN, INPUT);
   }

   // Rボタン
   if((btn_val_update & 0b00010000) >> 4){
      mcp.pinMode(R_BTN, OUTPUT);
      mcp.digitalWrite(R_BTN, 0);
      Serial.println("push R");
   }else{
      mcp.pinMode(R_BTN, INPUT);
   }

  // データ更新
  input_val_old = input_val;
  delay(20);
}

終わりに

肢体不自由な息子でも簡単にゲームを楽しむ体験を創るためのコントローラハック。
今後は、画像認識と組み合わせて息子の苦手な操作を自動化する事や、視線入力モジュールと組み合わせる等の簡易入力も視野に入れつつ、使いながら必要な応用例を考えてみたいと思います~

合わせて、他のゲームにも対応できる様に応用例を検討中。
できれば、妻&娘が大好きなスプラトゥーンに対応させたいですが…素直にボタンを割合すると数が多くて操作が大変そうなので、どうやって簡易化&マイコンでのサポート機能を使うかは悩み中~

息子でも遊べそう&家族で楽しめそうなおすすめのゲームあれば教えて下さい~(^-^)