メカニカル-メモリアル~めかめもっ!~

東京工業大学.rogy.ROBO-ONE,メカトロ技術系ブログ

ESP32で照明をつけてみた(ハード編及び総括)

してみました。実際の動作はこの動画を見てください(動作は1分3秒から)。


[ESP32]スマホから部屋の電気をつけてみる

 こちらのブログ記事のために作った作品です。実用目的ではありません。 http://titech-ssr.blog.jp/archives/1067443012.html 全体のソースコードは当面非公開の予定です。
当記事は制作する上で必要となった技術や考えを書いています(ハード編)。

電動と手動の両立について

 今回必ず達成しようとした部分です。このため、アルミ角と曲げ板の組み合わせの不思議な形になってしまいました。all 3Dプリンタも考えたのですが、両面テープでフレームが壊れてしまうこと、製造時間とコストの点でフレームは金属製にしました。

フルカラースイッチの固さ

 動画にも出したフルカラーのスイッチ。
fullcolorswitch
 最近は軽い力で,しかも押す場所が広いコスモシリーズが普及しつつあります.多分コスモシリーズの方が押しやすいです(on-offの区別が難しいですが)。動画では新規性といっていますが、部室がコスモシリーズだったらそっちに対応した作品を作っていたと思います。
 さて、フルカラースイッチの押す固さですが,私の感覚で試してみたところ、10 N(ばねばかりの引張り具合と比較)あればスイッチを押すことはできるだろうと考えました(部室のスイッチはやや固めです)。futabaのRS304(トルクは5.0 kg・cm)はロボワン用に購入したものがあったので使いました。UARTの練習にもなりますし。過剰スペックな気もしますが、弱いサーボだとフレームとスイッチの固定の甘さ次第では厳しそうです。

減速して弱いサーボを使用することについて

 上にも書きましたが、今回スイッチを押すのに十分強いトルクのサーボを使いました。しかし、今回使用したサーボの移動は15 °程度で,サーボの可動域のごく一部しか使いません。であればもっとトルクの弱いサーボを減速して使えばいいのですが、スペースを取るので止めました(途中まで設計していましたが、装置の高さが50 mmほどになったので断念しました)。IoTにサーボ1つ以上の大きさのものをつけるのは難しそうです。

フレームを両面テープで取り付けることについて

 ユーザーインターフェース(スイッチとかタッチパネルとか)にアクチュエータをとりつけるには両面テープが手っ取り早いと多くの人は考えると思います。今回は初IoTなのでありふれたアイディアの両面テープを採用しました。 www.monotaro.com 今回使用した両面テープです。粘着テープの長さは100 mm程度,片面はアルミニウム,片面は汚れたステンレスです。monotaroの粘着力の定義がよく分からないですが,片面が50 N、もう片面が83 N程度,面に水平方向の力に耐えられるということでしょう。今回まさしく知りたいのは面に垂直方向な力ですが、参考程度に見ておきます。スイッチを押すのが10 Nですから,作用反作用を考えても余裕に思えます。
 が、実際はどんどんはがれていきました。10回もスイッチのon-offをしないうちに全体がはがれはじめ,自重すら支えられなくなります。これは ステンレス面の汚れが強く影響していると考えられます。
 ハードによる対策として考えられるのは、
・相手が磁性体であれば磁石で取り付けること
・平らな面を周囲に確保できるのであれば吸盤で力の一部を支えること
・面以外に固定できる部分を確保すること ・部室をきれいにする
あたりでしょうか。粘着力を上げるのは部屋を壊しかねないので厳しそうです。

つまみのデザインについて

 動画にも載せていますが,持ち手がアルミ角のままではそっけないということで3Dプリンタでチーズを作り,アクリル絵の具で色を付けました。
つまみのデザインがチーズ つまみだからチーズwwwと部室で言ったらレバーなんだからレバー(肝臓)でいいのでは? と返されました。センスのある人ばかりの部室です(自分だってセンスあるよ!)。

総括

 今回の作品の完成までをたどっていくと,
3月下旬:評価ボードを買う、今作品の着想を練る、SDカードの通信とwifiへの接続ができる
4月:別のものを作成(いつか記事にしたい)
5月:進級して忙しい。string型に悩む 6月:進級して忙しい。htmlをちょこちょこ弄る
7月:ハード設計開始、完成、動画撮影
8月:動画編集、ブログ記事
 ……動画編集とブログ記事化だけで1カ月かけたのはいけなかったなあ……。いやしかし、少しも実用しようとか考えていないのに、よくもまあこんなに長い期間頑張れたものです。むしろ褒めてほしい。
 esp32の学習自体は優秀なサンプルのおかげでやりやすく、C++をある程度理解した上ならソフト的には2週間もあればこれくらいは作れる気がします(C++を理解していないので辛かった)。そういえばMFTに行ってきたのですが、esp32はすごく流行っていましたね。高校生にも使っている人がいて、今後の電子工作界隈が楽しみです。
 IoTとサーボの組み合わせについて。一応今回作ったものはIoTなわけですが、実用には程遠い作品です。何が厳しいというとハードが厳しい。ビジュアルが美しくないですし、固定が甘くて安定しない。既存の装置の拡張は、通常の使用の妨げになりかねないですし(今回はレバーを用意して両立を目指しましたが、やはり機能性は落ちていると思います)、難しい。じゃあIoTで明かりをつけるのが間違いかというと、あまりそうだとも思わない(家帰ったら自動で家の明かりがついて、パソコンもついて、レンジでご飯が温まり始めてちょうどいいタイミングでお風呂が湧いて欲しいじゃないですか)。
 で、私が思うIoTの正解は、IFTTT対応の家電を使う、ではないでしょうか。もちろんIFTTTでなくとも、そういうサービス、そういう機能があればいいのです。最初から拡張性を持たせた個々の装置を用意して、能力が比較的高いサーバー(ローカルでも外部でも)がその管理を行う。これが今後10年程度でできる適当な段階のIoTなのかなあと。

 などと戯言を述べつつ。今回の「ESP32で照明をつけてみた」プロジェクトは一旦終了にしようと思います。さて、次は何をつくろうかしらん?(ロボワンをしろ)

ESP32で照明をつけてみた(ソフト編)

してみました。実際の動作はこの動画を見てください(動作は1分3秒から)。


[ESP32]スマホから部屋の電気をつけてみる

 こちらのブログ記事のために作った作品です。実用目的ではありません。 http://titech-ssr.blog.jp/archives/1067443012.html 全体のソースコードは当面非公開の予定です。
 当記事は制作する上で必要となった技術や考えを書いています(ソフト編)。

 秋月のESP32評価ボードについて、Arduino IDE環境によるSDカードの使い方、複数のUARTの使い方(コマンドサーボの使い方)、htmlのメインプログラムからの独立、wifiを介した時刻の取得、あたりをしていく方法を書いていきます。

SDカードの使い方

 基本はESP32 Dev Module用のスケッチ例の中のSD_Testを流用。とりあえずスケッチを開くと

/*  
 * Connect the SD card to the following pins:  
 *  
 * SD Card | ESP32  
 *    D2       -  
 *    D3       SS  
 *    CMD      MOSI  
 *    VSS      GND  
 *    VDD      3.3V  
 *    CLK      SCK  
 *    VSS      GND  
 *    D0       MISO  
 *    D1       -  
 */  

とあるのでそれに従って線を繋ぎます。ESP32の配線の記載は(自分の環境だと)arduino-1.8.2/hardware/espressif/esp32/variants/esp32/pins_arduino.hにありました(私の同輩のけり君に教わりました。優秀マンです)。SDカード側は、例えば
akizukidenshi.com
なら取扱説明書に書いてあるのでそれに従います。GNDとVCCはボードに書いてあるところに素直に繋ぎます。
 SD_Testを実行すれば一連の動作はわかると思います。基本的にはappendFileを使え今回の目標(スイッチのon-offのログとその時間を記録する)はできました。

複数のUARTの設定(コマンドサーボの使い方)

 地味に大変な内容でした。サーボはFutaba RS304をコマンドモードで使っています。なのでこの項目を読んでもPWMは出てきません(ちなみにESP32は標準だとanalogWriteが使えなく、過去にひっかかりました)。逆に、複数のUART通信をESP32で行いたい場合は有用です(RS304を使う如何にかかわらず)。

UARTの設定

結論だけ書くと
UART1.cpp

#include<HardwareSerial.h>  
#include"UART1.h"  
HardwareSerial  Serial1(1);  
void UART1_Configuration() {  
  Serial1.begin(115200, SERIAL_8N1, 32, 25);//speed,config,Rx,Tx  
}  

と書けばOK。どこにそんなことが書いてあるかというと、arduino-1.8.2/hardware/espressif/esp32/cores/esp32/HardwareSerial.h とHardwareSerial.cpp です。ここにパソコンと繋ぐ標準のSerial(Serial.beginで使い始められるやつ)の設定のようなものがあるのでそれに準じるだけです。
 もう少し細かく説明すると、

HardwareSerial Serial1(1)  

 C++に詳しくないので適当な解説ですが、Serial1という名前でUARTの1番を使えるようにします。esp32には3つのUARTが付いていて、当然名前は(クラスにつけられるものであれば)なんでもいいので、ここは例えば

HardwareSerial servo(2)  

でもいい(はず)です。esp32には3つのUARTがついていて、うち1つ(0番)はパソコンと繋がっているの基本的にはいじりたくないです。

Serial1.begin(115200, SERIAL_8N1, 32, 25);//speed,config,Rx,Tx  
}  

 先ほど名前をつけたものの初期設定です。1つ目は通信速度。115200とか9600とかのそれ。2つ目が「8bit,non parity,stopbit = 1」の意味。変える必要があればSERIAL_7E2とかにするだけ。
 3つ目がRx、4つ目がTx。テストボードと繋ぎたい番号を書きます。なんでこのピンにしたかは忘れましたが、データシートとにらめっこしていい感じのものを選びました。
 あとは

 Serial1.write((uint8_t)sendbuf, (uint8_t)numofsendbuf+1);

とかで完成! Serial1.printfとかも必要に応じて使っていきましょう。

サーボの設定

 futabaのコマンドサーボRS304は公式のサンプル(arduino用)が落ちているのでそれを真似れば動きます。ただ自分は自作したものがあるのでそれを使ってちょちょいとしました。載せようかと思ったのですが、可読性が悪いので載せません。
 今回試運転中はusbから駆動していましたが,wifiに接続したうえでサーボを1つ動かすのは安定してできました。

NTP時刻を取得する

 wifiに繋ぐところはESP32 Dev Module用のSimpleWifiServerを使えばいい感じです。中身のyourssid(パソコンでネットに繋ぐときに一覧で出てくるやつ)とyourpasswordを適当なものを入れればOKです。注意点として「GET /H」はスペースが入っていることがあります。更に脆弱性として、この「GET /H」とかの文字はpost機能を使っているので、例えばurlの末尾に直接「/GET /HGET /L」とか書いたら両方実行してしまいます。postを使うのが悪いというより自分の実力不足ゆえの脆弱性な気がしますが、とりあえずはいいかなあと今回は無視しました。
 で,NTP時刻を取得する方法はまたしてもけり君のサイトから。この方法だと時間も日にちも取得できます。
kerikeri.top
 これのTime.cppとTime.hをそのまま拝借しました。しばらくは独学で頑張っていたのですが、聞いたらスマートに解決しました。感謝。

htmlを外部に書く

 完全に他人の成果物ですが。みずほというこれまた同輩(優秀)が勝手にやってくれました(感謝してます)。arduino IDE(というかCとかC++)の#include"hoge.h"はhoge.hの中身をそのまま写したことと同じになります(プリプロセス)。それを使って、
好きなようにhtmlを書く→rubyコンパイルできる形に変更→お目当ての場所でincludeする
を行います。これによって通常のhtmlでデザインを調整し(勿論ブラウザも利用できる)、簡単にesp32に実装できるようになりました。
具体的なソースを以下にぺたり。
html.rb

#!/usr/bin/env ruby  
# coding: utf-8  
  
  
html = <<-"HTML"  
HTTP/ontent-type:text/html  
  
#{File.read(ARGV[0])}  
HTML  
  
htmldat = <<-"C"  
char* html = #{  
  html  
      .inspect  
      .gsub(/(\\n)/, "\\1\\\n")};  
C  
  
puts htmldat  
File.write("html.h", htmldat)  

使用方法はコマンドライン
./html.rb hoge.html
と打ち,出力されたhtml.hを利用するだけ。htmlを更新するためにはコマンドを叩かなければならない不便さこそありますが、デザインの修正がより柔軟にできるようになりました。特に複雑なhtmlを書きたい人にこそ有用な変更だと思います(今回の1ページだけの簡単htmlですら楽さを実感できたのですから)。

フォームに入ってきた数字をint型に収める

 別の記事にまとめます。

第15回ROBO-ONE Conferenceに参加してきました

www.robo-one.com

 行ってきました! 楽しかったです!

 ……自分は学生無料での参加な訳ですが,一般参加者は1,000円の参加費がかかっているので,あまり内容に言及するのはいけないのかなあ,と考えると何も書けないのです. いずれ話された内容を実践して,自分の血と肉になったら書こうかな.

 感想を言うと,MATLAB最高! Pythonしたい! 機体作りなおしてえ! ROS!ROS!ROS!

 ……製作欲をかぎたてさせる内容でしたが,とりあえず次回大会までに通信だけなんとかする時間を確保しないと.

Fusion 360の不都合な点

序論

お久しぶりです.3日坊主と言います.いやあ,これはいけない.既に1カ月ぶりの更新ですよ.まあ1カ月なら可愛いもんなのかもね.

別に遊んでいて更新を怠ったのではなく,作業をしていたから更新ができなかったわけですが(モノつくりは趣味なので遊びなのでは),何をしていたかというと謎のメカを作っていたわけです.謎のメカについてはまた別の記事で.

今回いつもより設計に手間取った理由として,Fusion 360を使っていた点があります.今まで自分が使ってきたCADはAutodesk Inventor,SolidWorks,あとちょっとだけCreo Parametricくらいで,Fusion 360は以前インストールして以来使っていなかったのです.Autodesk社イチオシのソフトですし,せっかくだからここで慣れておくのも悪くないかな? ということでこれで設計しました.

使っていると,様々ないい点があります.gitライク(もしかするとgitそのもの?)なバージョン管理,一部よくなったインターフェース,アセンブリの順序の明確化など…….一方で不便になった点や未解決な点も多くありました.今回の記事は,現時点で不都合な点を羅列しておいて,いつか解決したときにそのリンクでも貼る,そういうものの試験として書いています.試験だから途中で飽きてもいいよね?

以下本題

死ぬほど重い

グラフィックカードがあるといいよみたいな話を信頼できる友達から聞きました.検証とかしている人もいるみたいです. Autodeskの「Fusion 360」を快適に動かすためのPC仕様を探る | パソコン工房【公式通販】 自分の環境だとInventorの方が5倍くらい早いです.

asmファイル内で拘束が再表示されてしまう

fusion 360では,asmデータにおいて 適切なジョイントのみが表示されている図 のように,各ジョイントを左の豆電球をクリックすることで表示非表示できます(デフォルトは表示).また,表示されているジョイントをダブルクリックすることでその値を変更することができます(できない場合はエラーではなく無視される).モーションスタディするとき不必要な表示を消すことでスムーズな作業ができるわけです.しかし,このasmデータ(以下小asm)を更に別のasmデータ(以下大asm)に挿入すると 全てのジョイントが表示されてしまっている 全てのジョイントが表示されてしまっています.

現時点での解決方法

大asm内で逐一ジョイントの表示を編集する.asmデータを入れ子にしない.

小asmの更新で大asmが崩壊する

(2敗) 最初にあったように,Fusion 360はバージョン管理が強いです.しかしバージョンを弄ることはオススメしなません.あまり再現性がないのですが,小asmを弄ると大asmがエラーを吐きまくります.エラーを見るとパーツの初期座標が変わったのなんの.ジョイントの表示非表示の変更だけでもこの状況になったので,今のところは何もわからないです.

とりあえず

これだけ.何よりも更新する事実が大事なのです.

USBCNC V4で過去に使った.ncデータを再利用する方法

f:id:amoto3333:20170306214331j:plain 画像の下部F2のLOADボタンを押せばいけます.

ついでに,USBCNCの操作画面における下部のボタンは主に自動切削操作メニューとメインメニューがありますが,それぞれリターンっぽいボタンとAUTOボタンを押せば行き来できます.切削中にAUTOボタンを押しても何の問題も無いですな.

STM32F4discoveryのCoIDEによる環境構築

 当ブログを立ち上げるにあたりとりあえず書こうと思っていた記事です(でした).

導入

 CoIDEとはいい感じの統合開発環境(IDE)です.Eclipseライクで,フリーで,機能に制限がない.今までROBO-ONE Lightのプログラムは全てこれで書いてきました.ただその時参考にしていたページがチカラの技術というサイトで,今はリンクが切れていてそのままだと勝手がよくない.
 じゃあリンク調べなおしてまとめておけば需要あるやん? っていうのがブログの生い立ち.

既にある

 ホクホクしながらST-Link Utilityとか調べていたら見つかりました,先駆者の数々.その一例をペタリ. yuki-sato.com リンク先生存確認済み(2017年3月)(先生ではない)

というわけでした

 そりゃCoIDE結構便利ですもの.日本人ユーザーだってそこそこいますよ…….数年前と環境が変わったのか,あるいは数年前自分がググらなかっただけなのか…….ああ悲しや(でも備忘録なので記事にはする). このブログの運命やいかに.

はてなブログの画像にalt属性を付ける

 はてなブログを選んだ理由にMarkdown形式が使えるというのがあったのですが,さっそく躓きました.画像のtitleがぐちゃぐちゃでalt属性を付けられないんですね.険しい.解決方法を調べたらすぐ出てきたのでリンクを張ります.
staff.hatenablog.com  結局は非常にシンプルで埋め込み画像の[f:hoge:id:fuga:….]の最後に[:title=piyo:alt=foo]とすればいい,割と単純な話でした.
 ただこういうブログサービスのみで記録を残そうとすると画像周りは酷いことになってしまいそう.いやー,参った参った…….

P.S.ていうかこれ1週間くらい前に実装された機能なんですね.そりゃ皆変な対応策を考えるわけだ.いやいや,改善されるサービスはいいサービスですよ.