Blog

  • labelImgのインストール方法[2022年12月更新]

    labelImgのインストール方法[2022年12月更新]

    物体クラスタリングを行う上で、元々ある学習モデルだけでなく、自分が作った学習モデルも使いたくなる時があると思います。

    物体クラスタリングで有名なツールとして、YOLOがありますが、その学習データーを作る際に、labelImg(大文字でLABELIMG)は非常に有用なツールとなります。

    そのlabelImgのインストール方法についてご紹介します。

    環境

    OS : Windows 10 (macOS Montereyでもできました)
    Python :3.9.7 (3.6以降)

    インストール方法

    Anacondaを用いて、仮想環境を作り、そこでインストールする方法をおすすめします。
    それによって、他の環境に影響を与えることなく、インストールすることができます。

    仮想環境の名前はわかれば良いので、なんでも良いのですが、今回は”labelimg_env”にします。
    以下のコマンドをAnaconda promptで実行しましょう。

    conda create -n labelimg_env python=3.9

    今回はpython3.9でインストールしていますが、3.6以降であれば特に問題はないかと思います。

    次に、pipとsetuptoolsの更新をおこなっておきましょう。
    これを行うことによって、謎のエラーを防げます(多分)。

    python -m pip install --upgrade pip setuptools

    そして、labelImgをインストールします。

    pip install labelImg

    インストールされたか確認は以下のコマンドで確認できます。

    pip list

    この中に、labelImgがあれば成功です。

    起動

    まず、仮想環境に入ります。

    conda activate labelimg_env

    labelImgを起動します。

    labelImg

    別のウィンドウで画面がひらけばOKです!!

    あとがき

    LabelImgはPyQt5によって、GUIが作られています。
    pythonのバージョンが3.6以降がいいのは、PyQt5のバージョンでPython 3.6以降を必須としているからです(現状)。

    基本的には最新バージョンで問題ないかと思います。

  • [2022年最新版]本当に正しい3Dプリンターの選び方!!重要視するポイントとおすすめ機種4選

    [2022年最新版]本当に正しい3Dプリンターの選び方!!重要視するポイントとおすすめ機種4選

    (*この記事は2021年12月20日に更新しました。)

    こんにちは。
    大学に入ったら絶対3Dプリンター買うぞ!!って言って4年生になった今、やっと購入することができた生物学を専攻している金欠大学生です。

    授業、研究活動で忙しくバイトもそんなできるわけではなく、金欠な中、ずっと夢だった3Dプリンターを購入しようと決意しましたが、お金は無駄にしたくないし。。。。
    妥協して決めても、またいいものが欲しくなったりするし。。。

    納得のいくものが欲しいと思って、ひたすらWeb、そして工学に詳しい大学の人に聞いたりし、調べ抜いた上で購入しました。

    3Dプリンターが欲しい!と思っていざ検索してみると、1万円台のものかた100万円以上するものまで非常に多くの機種があります。
    どれがいいのかなってすごい悩むことがあるだろうし、実際のところどこが違うのかわからないかと思います。

    この記事は、「家庭用3Dプリンターを趣味で欲しいけど、どんな点に気をつけて選んだらいいのかわからない」
    「結局どれ買えばいいの?」
    と悩む人に向けて自分の選んだ理由も含め話していきたいと思います。

    何が違うの?

    値段の幅が数万円から数百万円まで幅広く、何が違うのかというのが非常に疑問に思うと思います。

    まず、前提として、印刷の精度や制作物の綺麗さは3Dプリンターの値段によって大きく変わるということはあまりありません。
    制作物の精度や綺麗さは印刷方式によって大きくは変わりますが、同じ方式であれば極端に変わることはあまりありません。

    基本的に印刷のやり方はFDM方式(熱でフィラメントを溶かして積み立てていく)か光学式(光で固める)かの二種類であり、一般的に光学式の方が綺麗(作った跡が目立たない)で精度が良く、FDM方式は手軽に作れるというメリットがあります。
    この二つの違いについてはまた次回のブログで説明します。

    印刷の精度や綺麗さは、3Dプリンターにどのように印刷させるかの詳細な設定によって決まります。
    なので、安いプリンターでもちゃんと設定すれば綺麗に印刷できますし、高いプリンターで適当に設定をすると印刷すらできないということもよくあります。

    では、値段によってどのような部分が変わってくるのか。
    それはズバリ+アルファにあたる機能です。

    いくつか例を挙げると

    • 使えるフィラメントの種類が多い
    • 印刷できる大きさが大きい
    • wifi機能がついている
    • ステージヒーターがついている
    • フィラメントノズルが二つあり、二つの素材で印刷できる  などなど

    基本性能に加え、どのようなオプションがつくかで値段が変わっていきます。
    自分にはどんな機能がついてて欲しいかを考えて選ぶと自ずと機種が絞られてくると思います。

    選ぶ基準

    でも、そもそもどんな機能があるかわからないし、何があると便利なのかがわからないというのがあります。
    そこで、気にした方がいいポイントをいくつか紹介していきたいと思います。

    印刷サイズ

    何を作りたいのか、どこに置くのかによってサイズが変わってきます。
    大体3Dプリンター本体の大きさは、作りたいサイズ X 1.5倍~2倍 程度の大きさになります。

    小物入れやペン立てであれば小さくても大丈夫ですが、ヘッドフォンスタンドやケースなどを作ろうとする際にはサイズを考えなければなりません。

    購入して思ったのは、大きすぎると印刷するのが大変で時間もかかるのであまり印刷する機会はありませんでした。
    でも、ヘッドフォンスタンドを作った時には、かなりの大きさが必要で、大きいの買ってよかったと思いました。

    大きいと複数のパーツを同時に印刷できるメリットもあります。

    使える素材の数

    素材によって溶かす温度が変わってきます。
    光学式の3Dプリンターだと光で固まるレジンだけしか使えませんが、FDM方式だとよく使われるPLA樹脂、ちょっとPLA樹脂よりも硬いABS樹脂、ちょっとゴムっぽい質感のTPU、さらにはカーボン繊維が使えるものまであります。

    種類が多くなればなるほど、値段も高くなっていきます。
    基本的にはPLA樹脂とABS樹脂が使えることが多いです。

    僕はほとんどPLA樹脂しか使わず、それで不便をしたことがないので、いくつか使えるのは必要ない・・・かも?

    フィラメントを送る機構の数

    機種によってはフィラメントを出すノズルが二つ、もしくはそれ以上ある機種があります。
    これは、複数の素材を使うことができ、制作物の場所によって色分けしたりすることができます。

    また、最近よく使われるのは水溶性フィラメントというものがあり、それをサポート材にし、複雑な形状でも作ることができるものがあります。

    サポートは制作物を作る上で絶対に考えなければならいことですが、水溶性フィラメントを使うことでサポート材の跡が残らず印刷できます。

    ただ、ノズルが複数あることで、制作物によってはノズルが当たってしまうということもあるみたいです。

    ステージが加熱できるかどうか

    この機能は格安の3Dプリンターにはあまりついていない機能です。

    ノズルを加熱し、フィラメントを溶かし形作っていきますが、ステージが加熱されることによって溶けたフィラメントがステージにくっつきやすくなると同時に、制作物が剥がれにくくなります。

    また、制作後は温度が下がるので、ステージから制作物が剥がれやすくなります。

    僕自身、この機能の恩恵は驚くほど受けていて、制作物がしっかりとステージにくっついているからこそ、大きなものを印刷してもずれず、また縦長のものでも印刷することができます。

    本体の構造

    箱型か、剥き出し型か。フレームはアルミ製かプラスチック製か。

    箱型であることによって製作中の匂い(特にABS樹脂)を防ぐとともに、中の温度をある程度高く保つことができるので、制作物が急冷されることによる変形を防ぐことができます。

    剥き出し型である場合には、全方向から確認することができます。また、ノズルが詰まった時などにアクセス性がよく、メンテナンスが非常にやりやすいです。

    フレームの合成に関しては、3Dプリンターの動作の安定性に関与していきます。
    金属で作られたフレームなどであれば剛性がしっかりしており、非常に安定しています。
    ただ、重くなるので、動かしたりするのは結構大変になります。

    操作性

    結構忘れてはならないのは、3Dプリンターの操作性です。

    ただのボタンしかないものから、液晶とボタンのタイプ、タッチパネルのものまで幅広くあります。

    安い3Dプリンターにありがちなのは、タッチパネル式と書いてあって操作しようとすると、タッチパネルの操作感があまりにも悪いということがあります。
    これはこれでストレスになりやすいです。
    タッチパネルの操作感は口コミを見て、微妙な評価があったら警戒しましょう。

    個人的にはタッチパネルは非常に触りやすく、説明書などなくても直感的に操作できるのでおすすめです。

    その他

    その他として、wifi機能とカメラ機能を紹介したいと思います。

    wifi機能は、3Dプリンターで印刷するデータをwifiを通じて転送することができます。
    基本的にはUSBやSDカードに入れて、直接3Dプリンターに差し印刷しますが、wifi機能があればそう言った手間を省くことができます。

    カメラ機能は、3Dプリンター内にカメラが設置されてあり、外出先などで、制作物の状態を確認することができるというものです。

    外出中に何時間も3Dプリンターを動かすことになる人にはカメラ機能はあると良いかもしれません。

    おすすめ機種

    Creality Sermoon D1

    実際に僕が使っている機種です。

    この機種は周りが囲われているタイプでありながら、周りが透明なので全方向から制作物を確認することができます。
    フレームはアルミ製なので、非常に剛性もしっかりしています。

    ステージがZ軸方向に動くため、制作物が印刷中にずれるといったことがなく、また動作音も非常に静かです。
    ベッドの横に置いていますが、動作しながら昼寝ぐらいなら問題なくできます。

    印刷サイズも280*260*310mmなのでかなり大きいものも印刷することができます。
    操作はタッチパネルです。非常にわかりやすいです。

    使える素材はPLA, ABS, TPUであり、wifiなどの機能はないため、シンプルに性能のいい3Dプリンターという印象です。

    問題点は、フィラメントをノズルに差し込むときに少しコツがいります。
    初めてやると10分ぐらい悪戦苦闘するかもしれません。

    それ以外に関しては特に不自由なく使っているのでとても満足しています。

    値段は10万円しないぐらいの値段で家庭用としては少し高いですが、性能としては十分値段以上です。

    製品情報

    Creality Ender-3 V2

    おそらく5万円以内で購入できる機種で最も性能が良く、かつ使い勝手のいい製品だと思います。

    印刷サイズは220x220x250mmであり、対応素材はPLA、TPU、PETGです。

    基本的な性能は揃っており、ステージは加熱機構があり、操作もタッチパネルです。

    本体は金属製で、剛性もしっかりしています。
    ステージ下には収納があり、そこにいろいろなツールをしまえるのもこっそり嬉しい機能の一つ。

    本体価格は5万円以下であり、家庭用3Dプリンターの中でも安いものの中に入ると思います。

    これを購入すればとりあえず不満はないだろうという機種であり、とりあえず3Dプリンターを買ってみようという人はこれをぜひ買ってみてはいかがでしょうか。

    製品情報

    Original Prusa i3 MK3S+ 3D printer

    Prusa i3というチェコの会社が作っている3Dプリンターです。

    ここでは3Dプリンターを3Dプリンターで作っているというのが特徴で、会社の工場が自社製の3Dプリンターで溢れているそうです。

    世界的に有名な3Dプリンターであり、10万円程度の3Dプリンターの中では最もおすすめされる最強の3Dプリンターです。

    組み立てキットと組み立て済の二種類があり、組み立てキットの方が10万円程度で購入できます。

    基本性能に関しては、文句なしで、ステージの加熱、印刷時の動作音も静かです。
    印刷サイズは250×210×210 mmと大体事足りるぐらいの大きさです。

    この機種のすごいところはノズルの加熱温度が非常に高く、使える素材が非常に多いです。
    PLA, PETG, ASA, ABS, PC (Polycarbonate), CPE, PVA/BVOH, PVB, HIPS, PP (Polypropylene), Flex, nGen, Nylon, Woodfill などなど。

    個人的な唯一の難点は、操作性です。
    実際に操作してみたことはないのですが、タッチパネルではなく、ダイアルでの物理ボタン操作。
    画面は文字しか表示されません。

    操作に慣れるまで、少し時間がかかりそうです。

    基本スペックだけで言えば、20万円以上する3Dプリンターを優に超えていると思われます。
    僕もSermoon D1かこの機種かで非常に悩みました。

    ちなみに、Amazonにはありませんが、PrusaのホームページにはOriginal Prusa MINI+もあり、これも印刷サイズは小さい分、値段も5万円程度に抑えられていて非常にいい商品です。

    製品情報

    Flashforge Creator Pro

    Flashforgeは日本で結構人気な3Dプリンターの会社であり、調べてみるといろいろなところで紹介されています。

    その中でも今回はCreator Proという機種をお薦めにあげます。

    この機種は2つのノズルがあるため、先ほど述べた二種類の素材を同時に印刷で使うことができます。
    しかも本体価格は約8万円ほどと、家庭用としては決して高くない値段設定がなされています。

    使える素材はABS、PLA、HIPSなどであり、印刷可能サイズはW:227×D:148×H:150mmと少し他の機種と比べると小さいです。

    フィラメントを置くところは後ろ側にあり、前面からは目立たないです。
    ただ、ちょっとフィラメントを変えたりするのがちょっと大変です。

    操作は物理ボタンと文字のみ移る液晶で、操作性はタッチパネルほどよくはなさそうであるが、慣れれば十分につかえるのと、日本語サポートや、日本で使っている人が多いことから調べればずぐに操作方法などは出てくるので、あまり困ることはないでしょう。

    前面覆われているため、温度管理は非常に行いやすいですが、印刷物の確認が一方向からしかできないのと、メンテナンスは少しやりにくいです。

    しかし、この値段で二つの素材が使えるというのは非常に魅力的です。

    製品情報

    ここに紹介した以外にもいい機種がたくさんあります。
    ぜひ参考にしていただければと思います。

  • コーヒー豆の焙煎が自宅で簡単にできる最強の焙煎機 LITHON ホームロースター

    コーヒー豆の焙煎が自宅で簡単にできる最強の焙煎機 LITHON ホームロースター

    LITHON ホームロースター RT-01

    コーヒーを自家焙煎するのはなかなかハードルが高いと思われがちですが、実は2万円程度で簡単に自家焙煎ができる機械が世の中にはあります。

    今回紹介するのは、LITHON(ライソン)ホームロースター RT-01です。

    手軽に本格的なコーヒー焙煎ができる機械としては最も有名なホームロースターの一つです。

    機会があって、このホームロースターを購入し、しばらく使ってみた感想を今回まとめていきたいと思います。

    良い点

    生豆は値段が安い
    焙煎したての新鮮なコーヒーを飲める

    少量からできるので、消費に困らない

    生豆でコーヒー豆を仕入れると、焙煎した豆を買うよりも約1/4ぐらいの値段で買うことができます。
    また、焙煎した豆の賞味期限は1~2ヶ月と言われている中、生豆では2年ほど持つと言われています。

    つまり、気に入った豆があったら生豆で仕入れることで安く、そして焙煎したての最も美味しい状態で飲むことができます。

    コーヒー豆は焙煎後3日~2週間ぐらいが最も美味しいとされています。
    コーヒー屋さんで豆を買うと100g単位で大体販売されており、焙煎から早くても1日や2日は経っているので(コーヒーチェーン店等はもっと)、美味しいコーヒーを飲もうとするのであれば、かなりすぐ100gを消費しなければなりません。

    100gというと大体10杯分であり、毎日飲んだとしても一人だと結構大変な量です。

    この焙煎機は40g ~ 60gのコーヒー豆を焙煎できるので、無理なく消費できる範囲でベストな状態のコーヒー豆を飲むことができます。

    焙煎という結構自分でやると大変な作業を、手軽に放っておくだけでできるので、非常に僕個人としては気に入っています。

    悪い点

    音がまあまあうるさい
    焙煎の匂いが結構する
    焙煎度の細かい調節ができない

    まず使ってみて最初に驚くのは、動作音のうるささです。
    隣で動かしながらYouTubeを見るのはちょっときついなぐらいのうるささです。

    響くような音ではないので、マンションとかでも使えないことはないですが、結構音がするので、最初驚くと思います。

    焙煎の匂いが結構するというのは、どのマシンでやってもそうだと思いますが、焙煎をすると本当にコーヒー屋さんのような匂いに部屋がなります。

    換気をしながらやったほうがいいレベルですし、換気をしていても匂いは一日残ります。
    コーヒーの匂いなので、コーヒーが好きな人にとっては悪い匂いでは全然ないし、部屋の芳香剤的な感じになりますが、人が家に遊びに来る時などに焙煎をするのは控えたほうがいいかもしれません。

    焙煎度の細かい調整ができないことについて

    モードが二つあり、Medium とDarkがあります。
    Mediumモードは中煎り焙煎ぐらいの程度で、Darkは深煎り焙煎ぐらいの程度です。
    (画像は上がMedium, 下がDark)

    もっと細かくいうのであれば、Mediumはミディアムロースト、Darkはシティもしくはフレンチローストぐらいです。

    最も好みの人が多いと思われる焙煎程度である中深煎りはこの機械ではできないので、そのコーヒーを飲みたい人は少し工夫が必要かもしれないです。

    総評

    コーヒー豆の焙煎はコーヒー好きにとって一度はやってみたいことの一つだと思います。

    悪い点はありつつも、僕自身は結構気に入って使っています。

    生豆からコーヒー豆を選ぶ楽しみであったり、焙煎の様子をじっくり観察できたり、非常にコーヒーの楽しみが広がります。

    万人におすすめとはいいませんが、コーヒー焙煎を始めてみたい人、興味ある人にとっては手軽に比較的低価格で始められるので、そういった方におすすでです。

  • Kindle(無印)って実際どうなの?

    Kindle(無印)って実際どうなの?

    夜本読みたいなと思って、Amazonブラックフライデーもあるし、Kindleを購入しようと思いました。

    ただ、Kindleには4つぐらいバリエーションがあります。

    前まで数年前のKindle paper whiteを使っており、画面の質感がずっと見てても目が疲れなくて非常によかったのでそれを選ぼうかと思いましたが、Kindleも結構いいという評価を見て、使い倒すだけだし、夜読むだけだから安いやつでいいかという気持ちでKindleを選びました。

    ブラックフライデーで約9000円から約5000円への値引きをしています。
    そして、Kindle端末を買うと、月額980円のKindle unlimitedが3ヶ月分無料なので、実質2000円ぐらいで端末を買ったことになります。
    安い!!!!

    実際のKindleがこちら

    箱が届いてまず思ったのは、めっちゃ薄いということです。

    箱の中身はシンプルで、充電コードと本体、説明書です。
    充電コードはmicro-usbなので、type-Cが普及している今としてはちょっと不便ですが、でも充電は一週間に一回ぐらいでいいので、全然マイナスポイントではありませんね。

    画面はkindle paperwhiteと違って、フロントライトで、スペック上解像度は劣りますが、それは比べてみた時にわかることであり、実際には本を読むには十分すぎる画質です。

    また、反射はかなり抑えられているし、夜読んでも画面は目が疲れず、思っていた以上によかったというのが第一印象でした。

    昔のKindle paperwhiteの一番嫌だったところは動作が非常に重く、本を調べたり、めくったりするのも結構ストレスでしたが、今回のKindleはそれよりは結構動作速度は上がっていて、ちょっと前のスマホ使っている気分ぐらいでした。

    値段差を考えても、他の機種がこれの二倍以上お金を払って買う価値があるのかどうかは結構人によるかと思いますが、Kindle無印もコスパとしては非常に良く、普段使いできる機種でした。

    また、値段が安いからとことん使い倒せるし、非常にいい買い物をしたなと思います。

    ぜひみなさんもkattemitekudasai.

  • ピアス開けるのって痛いの?

    ピアス開けるのって痛いの?

    はじめに

    左耳の耳たぶにピアスを開けました。
    その感想をこれから開ける人たちの参考になるかと思って、ブログに残したいと思います。

    今回は自分でピアッサーで開けたのではなく、クリニックに行って、ピアスを開けてもらいました。

    今回行ったのは名古屋市の栄駅の近くにあるクリニックビザリアに行きました。
    ホームページ
    ここにはピアスセンターというのがあり、名古屋でピアスを開けに行く時に病院を調べたら必ずと言っていいほど候補に上がる場所です。

    ここの特徴は非常に値段が安く、今回片耳の耳たぶのピアスでファーストピアス込みで1600円でした。
    ドンキでピアッサーが大体1000円ぐらいなので、600円プラスぐらいで人に相談でき、そしてつけてもらえるという非常に破格の値段です。

    ファーストピアスも色々選ぶことができるため、最初からピアスをちょっとおしゃれにつけることができます。

    ただ、ピアスセンターの評判を調べてみると、いい評判と悪い評判の両方があり、結構日によって人が違い対応が異なるみたいです。
    基本的にピアスをつけるのは流作業的な感じでやられるので、特に対応がどうのこうのとかはありませんが、ピアスを開ける場所とかを相談する際には気になるところかもしれません。

    いざピアスを開ける

    実際にピアスセンターに行ってからピアスを開けるまではトータルで20分程度でした。

    受付を行い、ピアスを選び、簡単な説明を受けました。
    自分の耳たぶがある程度分厚いことは承知していましたが、どの程度他の人と比べてあるのかって意外とわからないものです。
    耳たぶの厚さが分厚い人は、市販のピアッサーで開けるときはサイズに注意しなければならないからです。

    ここのピアスセンターは耳たぶが分厚い人はロングタイプのファーストピアスがあるので、安心です。
    やはり僕は分厚い方だったので、ロングタイプのピアスになりました。

    ピアスを選ぶと鏡でピアスを開けたい位置をマーカーで描いてくださいと言われ、名前ペンを渡されました。

    意外と鏡を見て、自分のピアスを開けたい位置をマークするのって難しくて、めっちゃ適当になっちゃいました。
    耳って結構ふにゃふにゃしてるし、向き的にも結構腕曲げて描くのも安定しないしで、ほんとみんなどうやっているのか・・・・・

    めっちゃ適当ではあったけれど、なんかそれでよかったらしく、消毒され、3、2、1、で打ち込まれました。
    冷やされるとかなく、淡々と開けられました。
    ほんとバンジージャンプするときに怖い思いしないように、台に立ったら淡々と進んでいくような感じで、怖い思いさせないためなのか、単に効率的なだけなのかわからないけれども。

    ピアスを開けた後は場所を確認して、OKだったら帰るという感じです。
    ほんとあっさりと、すんなり終わりました。

    実際ピアスの痛みってどうなの?

    ちなみに、ピアスを開けた瞬間はかなり痛くて、感覚も針が耳たぶを通っていく感覚がありました。
    誰だよ、ピアス開けるの痛くないって言った人

    開けた後も2時間ぐらいは適度に痛く、その後は違和感がずっと付き纏っているぐらい。
    イヤリングに慣れている人はここはそんなに苦じゃないかもしれませんが、ほとんどつけない僕としては結構これも気になる。

    痛みは鈍痛っていう感じで、全然耐えられる痛みでした。
    ピアスは触っても痛くはなく、お風呂に入っても水とかは染みないので、そこはありがたいです。

    ピアスを刺す時の痛みが僕の場合結構痛かったのは、きっと耳たぶの分厚さが原因だと思います。
    なので、耳たぶが薄い人は本当に痛くないかもしれません。

    ただ、痛いのはその時だけですし、その後はアクセサリーとか楽しめると思えば我慢できますし、空いた時は
    あ!開いたわ!って感じなので、つける前の怖がっていた気持ちはすっきり晴れます。

    これからどんなピアスをつけようか考えるのが楽しみです。

    ちゃんとケアして、化膿とかしないようにしたいです。

  • PWM出力を使ってパルス波の周波数, Duty比を変更する [Arduino UNO]

    PWM出力を使ってパルス波の周波数, Duty比を変更する [Arduino UNO]

    PWM出力とは

    PWMとはpulse width modulationの略で、パルス幅変調と日本語では言います。
    波長のデューティー比(Duty cycle)を変えることによって、変調を行う方法です。

    詳しくは前回の記事で説明されています。

    ArduinoのPWM出力

    Arduino UNOではATmega328と呼ばれるMicrochip社のマイコンをメインチップとして使っています。
    Arduinoのプログラムを考える上で、深みにハマっていくとマイコンのデータシートを見ていかなければならなくなりますので、一回見てみると面白いかと思います。(事実今がそう)

    Arduinoには三つのタイマー(Timer/Counter)があります。
    このタイマーはArduinoプログラムの時間に関係しています。
    delay()やtone()などの関数はこのタイマーを使って計測されています。

    Timer/CounterPin番号ビット数役割PWM周波数
    Timer05, 68 bitArduinoの時間を管理
    delay(), millis(), micros()など
    977 Hz
    Timer19, 1016 bitServoライブラリなど490 Hz
    TImer23, 118 bittone()など490 Hz

    今回このタイマーをいじることでPWMの出力を変えるということをします。
    ちなみに、応用するとタイマーの根本を変えるので、delay()などの関数もいい感じに変えたりすることができたりするかも?(どちらかというと影響を受けて狂ったりすることの方が多そう)

    TImer0は基本的にシステム全体に関わることが多いので、TImer1を使用することをお勧めします。

    参考になるサイト集
    https://playground.arduino.cc/Main/TimerPWMCheatsheet/
    https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
    https://atooshi-note.com/arduino-1hz-pwm/
    http://blog.kts.jp.net/arduino-pwm-change-freq/
    http://garretlab.web.fc2.com/arduino/inside/hardware/arduino/avr/cores/arduino/wiring_analog.c/analogWrite.html

    プログラムの概要

     プログラムの全体の方針として、Arduinoのタイマーをレジスタの設定を変えることで自由にPWM出力の周波数を変更することができるようにします。

    目的としては、低い周波数を出力できるようにしたく、10 Hzを出力できるようなプログラムにします。

    今回は10番ピンにLEDを繋いで、その光の周波数、Duty比を自由に変更できるようにするプログラムを作成します。
    10番ピンなので、TImer1を使用します。

    プログラムコード

    //レジスタの設定を変えるためのもの
    #include <avr/io.h>
    int PWMPin = 10;
    
    //関数の定義
    //frq:周波数 (1Hz~指定できる)
    //duty:指定したいduty比
    void HzWrite(int frq, float duty) { 
    
        // モード指定
      TCCR1A = 0b00100001;
      TCCR1B = 0b00010100; //分周比256を用いる
    
      // TOP値指定
      OCR1A = (unsigned int)(31250 / frq);
    
      // Duty比指定
      OCR1B = (unsigned int)(31250 / frq * duty);
    }
    
    
    void setup() {
      pinMode(PWMPin, OUTPUT);
    }
    
    void loop() {
      HzWrite(10, 0.5);
      delay(5000);
      digitalWrite(PWMPin, LOW);
      delay(5000);
    
    }

    プログラムの説明

    まず、レジスタの設定を変えるために、<avr/io.h>をインクルードします。

    #include <avr/io.h>

    次に、delay()と一緒に使って、10 Hzの出力を5秒ごとに繰り返すという関数を作るため、HzWriteという関数を指定します。カッコ内には周波数、Duty比を指定できるようにします。

    void HzWrite(int frq, float duty) { 
    
    }

    次にモードの指定です、。
    今回使うレジスタはTCCR1A/TCCR1Bです。(TCCR: Timer/Counter Control Register)
    ここで1というのはTImer1を示しており、Timer2を使いたければTCCR2A/TCCR2Bを使います。

    PWM周波数を〇〇Hzとして設定するには、TOP値を自分で指定する必要があります。
    TOP値が大きければ大きいほど出力される周波数は低くなります。
    今回は10 Hzで例を取っているので、16MHzというシステムクロックと比べると非常に遅いので、大きなTOP値と分周を指定する必要がある。よって、なるべく大きいTimer1を使用します。


    Timer0, 2の8 bitではTOP値の最大値は255(2^8 – 1)であり、Timer1の16 bitでは65535(2^16 – 1)となる
    (最大値が-1となるのは、0~255もしくは0~65535となるため、数字の数が2^xになるが、最大値は-1しなければならない。)

    システム的には、TOP値までカウンタをインクリメント(0, 1, 2, と数えていく)し、OCRxA/OCRxB(xはカウンタ番号、カウンタについて2つの出力ピンA, Bが割り当てられている。)と一致した時にピンの出力を変化させる(LOW→HIGHのように)。そして、カウンタがTOP値まで到達すると今度は0までデクリメント(65535, 65534, 65533と上から数えていく)し、インクリメントの時と同様にOCRxA/OCRxBと一致した時にピンの出力を変化させます。

    Arduino UNOではこのカウンタのインクリメントするスピードは分周比の設定を変えることによって、ある程度変えることができます。(ある程度とは、1/8/64/256/1024 の中から選択できるということ)
    分周比は周波数を分周(周波数を1/n倍すること)するときの比(n)です。
    つまり、1000 Hzを分周比10で分周すると100 Hzになります。

    ちなみに、分周比1ではArduino UNO(ATmega328)のシステム動作クロックである16MHzで操作します。

    つまり、TOP値とOCRxA/OCRxBの値、分周比を変えることによって、自由に出力の変換点を変えることができます。

    今回は10Hzを指定したいので余裕を持って分周比256で行います。
    1カウントする時間は、Unoなら16MHzなので1 / 16MHz = 62.5ns(分周1)
    分周比を256にすると、TOPまでカウントした際には62.5ns x 256 x 65535 = 1.04856 secなので、1 Hzを指定できるようになる。

    今回このプログラムでは1 Hz ~ 31250 Hzまでの周波数を作り出すことができる。
    しかし、31250に近づくにつれてDuty比の指定ができなくなっていきます。
    Duty比を細かく設定したい際には300 Hz程度までしか作成することができません。

    このプログラムでは分周比の設定を変更することで、自分の使用用途にあった周波数帯を作れるようなプログラムを作ることができます。

    TCCRaA/TCCR1Bには何を指定するのかを書きます。
    ここら辺の細かいところはなんか難しいので、データシートを使って、なんとなく指定していきましょう。

    今回は2進数で示しているので、最初に0bがついています。TCCR1AではCOM1A1, COM1A0, COM1B, 無指定, 無指定, WGM11, WGM10 を 1 か 0 で設定します。
    TCCR1B には それぞれ、無指定(ICNC1), 無指定(ICES1), 無指定, WGM13, WGM12, CS12, CS11, CS10 を設定します。

    TCCR1Aの指定(ATmega328データシートより)
    TCCR1Bの指定(ATmega328データシートより)

    まず、今回はModeはPWMモードがPhase Correct and Frequency Correct であるMode9を指定する。
    今回TOP値OCR1Aに指定する。

    モードの指定(ATmega328データシートより)

    よって、WGM13 / WGM12 / WGM11 / WGM10 はそれぞれ、1,0,0,1 

    出力の指定(ATmega328データシートより)

    COM1B0 / COM1B0 は 0, 0 が 無出力、0, 1 が トグル動作 (一致時の出力を反転)、
    1, 0 は カウンタ がOCR1A/B – TOP間 にある場合 LOW、0 – OCR1A/B間 は HIGH となるよう出力、
    1, 1 は1, 0 の逆です。

    今回は周波数をOUTPUTのLEDをLOWとHIGHで変えるため、1B0 / COM1B0 は1, 0の値を指定します。

    スケッチを書く際にわかりやすいので 1, 0 を選択します。

    分周比の指定(ATmega328データシートより)

    今回分周比は256を指定するため、CS12/CS11/CS10は1, 0, 0を指定する。

    まとめると、以下のようになる。

    TCCR1A = 0b00100001;
    TCCR1B = 0b00010010;

    次にOCR1AとOCR1Bを設定し、周波数とDuty比を指定したもので出力してもらうように指定します。

      // TOP値指定
      OCR1A = (unsigned int)(31250 / frq);
    
      // Duty比指定
      OCR1B = (unsigned int)(31250 / frq * duty);

    今回Phase and Frequency Correct PWMを用いる際には、インクリメントしディクリメントすることから、出力される周波数は以下のように示すことができます。

    周波数frq = IC の動作周波数 / (分周比 * TOP値 * 2)

    逆にTOP値を指定するときは

    TOP値 = IC の動作周波数 / (分周比 x frq x 2)

    今回Arduino UNOで分周比256とした際には

    TOP値 = OCR1A = 16,000,000 / (256 x frq x 2) = 31250 / frq

    LOWとHIGHが入れ替わるタイミングはOCR1A/OCR1B = Duty比としたいため、

    OCR1B = 31250 / frq x duty

    オーバーフローを防ぐため、Unsigned intを指定している。

    出力のメインはこちら

    void setup() {
      pinMode(PWMPin, OUTPUT);
    }
    
    void loop() {
      HzWrite(10, 0.5);
      delay(5000);
      digitalWrite(PWMPin, LOW);
      delay(5000);
    
    }

    PWMPinつまり10ピンをOUTPUTで指定し、HzWrite()で周波数とDuty比を指定する。
    delay()でまった後に、digitalWrite(PWMPin, LOW)で出力をなくし、delay()する。

    以上がプログラムの全貌と解説です。

    後書き

    PWM出力の周波数を変更する方法のブログに関して、Arduinoで検索するよりも、AVRとか、ATmega328, 328Pなどのように検索した方が多く出てきました。

    今回はざっくりとしたブログでしたが、より深く知りたい人は調べてみてください。

  • Arduionoで連続パルス波を作成する方法

    Arduionoで連続パルス波を作成する方法

    はじめに

    Arduinoを使って、連続パルス波を出力したりしたくなる時があると思います。
    LEDを点滅させたり、音を出力したり、タイマーとして使ってみたり・・・

    何かと使うことが多く、そして簡単なようにも思えますが、調べていくと非常に奥深いことがわかります。

    今回は、Arduinoで連続パルス波を出力する方法をいくつか紹介していきます。

    Delayを使って時間を変える

    最もシンプルかつ、簡単な方法で、delay関数を使って出力のONとOFFを切り替える手法です。

    //pinはピン番号
    void loop(){
        digitalWrite(pin, HIGH);
        delay(1000);
        digitalWrite(pin, LOW);
        delay(1000);
    }

    上記のプログラムでは、出力がHIGHとLOWとで切り替えています。
    delayは単位はmsなので、delay(1000)では1秒間待つというプログラムになります。

    つまり、1Hzでついたり消えたりするプログラムになります。

    ただ、周波数の指定にdelay()関数を使うことは問題点が多いです。
    また、この方法では、60Hzの信号を5秒間出力といったように、出力の時間を変更するのが、for構文を使って指定する必要があり、そういった面で不便さがあります。

    ただ、シンプルが故、とりあえずやってみたいという時にはおすすめです。

    tone()を使って指定する

    tone()関数はブザー音などを作成するときによく使われる関数です。
    Arduino公式の解説

    この関数では、周波数、継続時間を指定することができます。
    なので、delayを使った時とは違い、周波数を計算せずとも直接指定することができます。

    //pinはピン番号
    void loop() {
         tone(pin,60);
    }

    tone(pin, frequency)や、tone(pin, frequency, duration) といったように指定することができます。

    durationはms単位で指定するため、delayと同様の記載方です。

    この関数の問題は、指定できる周波数が31Hz以下ではできないという点です。
    つまり、1Hzなどの出力を作ることができません。

    音などの31Hzより大きい周波数を指定する時には非常に簡単に周波数を指定できますし、delay関数を使う時よりも非常に短く、正く指定することができます。

    PWM出力を使って、PWM出力の周波数を変える

    PWM出力を使う方法は最も自由度が高く、そして奥深すぎる原因です。

    PWMとはpulse width modulationの略であり、日本語ではパルス幅変調です。
    詳しくはwikipediaより

    この言葉だけ聞いてもなんのことかよくわかりませんが、簡単にいうと、PWMとはデューティー(Duty)比を変更して色々変調する方法です。
    Arduino公式の説明はこちらから

    LEDの明るさを指定するときに、本来であれば電流値を変えることで明るくしたり、暗くしたりできます。
    しかし、電流値が一定だった時に、でもLEDの明るさを変えたいとなった際に、めっちゃ早い周波数で(人が点滅しているのがわからなくなるのが30~60Hzと呼ばれている)点滅させます。

    そして、ONとOFFが通常であれば1:1(Duty比が50%)となっていますが、これを4:1(Duty比が80%)とか1:4(Duty比が20%)とかにしてみるとどうでしょうか。
    前者では明るく見え、後者では暗く見えるでしょう。

    このようにして、パルスの幅を変えることで出力を変調するというのがPWMによる出力です。

    そして、Arduinoではこの出力ができるとともに、PWM出力の周波数を変えることもできます。
    レジスタ設定と呼ばれる、まあArduinoの元の部分を変えちゃえばPWMの出力周波数を変えることができるっしょっていう考えがこの方法です。
    ちなみにデフォルトでは出力周波数は490Hz、一部のピンでは980Hzです。

    今後の記事でやり方を詳しく説明します。
    「PWM Arduino 周波数 変更」で調べるとたくさん説明が出てきます。

    4回ぐらい読むとなんとなくわかるようになると思います。

    基本的にはこれらの方法で自分の目的にあったプログラムを探してみてはどうでしょうか。

  • Python Video Annotatorインストール方法

    Python Video Annotatorインストール方法

    Python Video Annotatorとは

    Python Video Annotatorとは、撮影した動画を解析、動画内のイベントを時系列的にノートすることができるアプリケーションです。

    神経科学や行動学の研究者が、動物の動画を撮影し、その動物たちの行動を解析、定量するためなどに利用することができます。
    例として、マウスの行動を記録する際に、舌を出す、尻尾を振る、耳を動かすなど、記録したい行動があったとします。
    それが、動画のいつ起こっていて、どれぐらいの時間継続しているのか。
    毎度動画を見て、エクセルに記録するのだと、定義した行動が多いとあまりに大変です。
    こういったツールを用いることで、動画にノートとして記録し、時間情報やイベント情報を取り出すことができます。

    元々、動物の行動を記録するアプリケーションとして、VCodeと呼ばれるオープンソースのソフトがありました。
    しかし、現在のパソコンのOSに対応していないという問題がありました。

    Python Video Annotatorでは、最新のPCに対応し、必要な機能は残しつつ、さらに外部のセンサー情報(圧力計など)やDeepLabCutなどの行動定量ツールと組み合わせることができ、非常に研究を行う人にとって有用なツールとなっています。

    インストール方法

    ホームページにインストール方法は詳しく書かれていますが、僕のパソコンではうまく入れることができませんでした。(多分そのままインストールしたら、元々インストールされているパッケージとの相性が悪かったのかもしれません。)
    そこで、GitHubのサイトに記載されている、Anacondaを使って仮想環境を構築、インストールするという方法を行いました。

    言葉で言うと難しそうですが、やることは非常に簡単です。
    現在(2021年10月20日地点)では最新のmacOS(Big Sur 11.6)には対応していないらしく、近日中に改善されると思われます。
    なので、今回はWindowsを例にとって説明します。

    ただ、macOSでもAnacondaを入れて、condaコマンドを使えるようにしてからは基本的には操作は一緒なので、使えるようになったら参考にしてください。(詳しくは前回の記事より)

    Anacondaをインストールし、Anaconda promptを開きます。
    そして、仮想環境を作成し、仮想環境をアクティベートしましょう。

    conda create -n videoannotator python=3.6
    conda activate videoannotator

    その後、必要なパッケージをインストールします。

    pip install opencv-python-headless pyqt5==5.14.1 pyqtwebengine==5.14.0

    その後、python Video Annotatorをインストールします。

    pip install python-video-annotator

    色々処理が終わったらインストール完了です。

    起動するときは、仮想環境をアクティベートしてから、実行します。

    conda activate videoannotator
    start-video-annotator

    これでソフトが起動したら完了です。

  • macOSでCondaコマンドを使う

    macOSでCondaコマンドを使う

    MacOSでのAnacondaのインストール、ターミナルの環境設定を行いたいと思います。

    Anacondaのインストール

    Anacondaのホームページへと行き、下の方にスクロールするとダウンロードがあります。

    ここでは自分の環境にあったものをインストールしましょう。
    今回は、MacOSの説明なので、64-bit Graphical Installerを選択しましょう。

    インストーラーを起動し、指示に従ってインストールしましょう。

    Macでインストーラーが二つありますが、64-bit Graphical InstallerはGUIによってAnacondaをインストールする方法で、こちらの方が親しみが深く、何もなければこちらでAnacondaをインストールできます。

    64-bit Command Line Installerはダウンロードすると *.shのファイルがインストールされます。
    これはシェルスクリプトによるインストールで、ターミナルを使ってインストールする際に使用します。

    Linuxでのソフトのインストールがターミナルを用いたインストールが基本なので、Linuxに親しんでいる人はこちらの方がインストールしやすいんですかね。(多分)

    コマンドラインの環境設定

    MacOSでインストールすると、ソフト一覧にAnaconda-Navigaterが出てくるだけで、このままだとターミナルでAnacondaやPythonを使えません。

    ソフトのインストールなどで、condaコマンドを使用したい場合には、Anacondaを有効にしなければなりません。
    Anacondaを有効にするには(Conda コマンドを使えるようにするには)

    conda activate

    とする必要があります。
    これでcondaコマンドを使えるはずです。

    いちいちconda環境をアクティベートするのがめんどくさい方は、自動でconda環境を有効にすることもできます。
    その時にはターミナルで、

    ~/opt/anaconda3/bin/conda init シェル名

    とします。
    シェル名は自分の使用しているシェル名を使うのですが、なんだそれ、いじったことないぞという方はデフォルトのシェル(MacOSだとzsh)だと思うので、これをシェル名に代入しましょう。

    ~/opt/anaconda3/bin/conda init zsh

    これで、ターミナルを再起動すると、自動的にconda環境が有効になり、conda activateのコマンドを打たなくても良くなります。

    自動有効をオフにする場合には、

    conda config --set auto_activate_base false

    とターミナルで実行しましょう。

  • ファイルのバージョン管理をするための最強ツール”Git” 初心者向け解説

    ファイルのバージョン管理をするための最強ツール”Git” 初心者向け解説

    Gitとは

    皆さんGitよりもGitHubを先に知っているのではないでしょうか。
    参考にするプログラムや、ソフトを探すときに、よくGitHubのサイトがヒットし、よく使い方がわからないまま、とりあえずダウンロードしたという経験がある人も多いのではないのでしょうか。

    ただ、GitHubはプログラムの共有の場所ではあるが、ただの共有する場所ではなく、Gitとよばれるツールをオンラインで使うためのツールです。

    Gitとは、ファイルのバージョン管理を行うためのツールです。
    ファイルを変更し、その変更を記録することによって、いつでも記録した任意のバージョンへと戻ることができるツールです。

    発表原稿とかを誰かに添削してもらう際に、添削する前のファイル、添削し終わったファイル、添削をもとに修正したファイルなどをそれぞれ別のファイルとして保存すると思います。
    そのような変更をGitと呼ばれるツールを使うことによって、簡単に、そして一つのファイルで行うことができます。

    Gitのリンクはちらから

    Gitの三つの場所

    Gitを使った記録、およびその記録をするという操作を“コミット”と呼びます。

    そして、コミットを貯めていく場所を“レポジトリ”と呼びます。
    つまり、レポジトリは変更履歴を補完する場所とも言えます。
    リポジトリの保管庫は自分のパソコン上では“ローカルレポジトリ”GitHubなどのリモート上では“リモートレポジトリ”と呼びます。

    Gitでファイル管理を行おうとする際には、Gitでファイル管理を行うフォルダーを指定します。
    そしてそのフォルダ内には三つの場所があります。
    ワークツリー、ステージングエリア、Gitディレクトリです。

    ワークツリーはファイルを保持する場所であり、ここにあるファイルを変更しただけではまだ変更履歴をコミットとして保存できていません。

    ステージングエリアはコミットするファイルを登録するための場所です。
    個々のステージにあるファイルも同様に、まだ変更履歴は保存されていませんが、このファイルをコミットしますという宣言をする場所と思ってください。

    Gitディレクトリはコミットを保管する場所です。
    ここにコミットされたファイルは変更されることはないファイルとして格納されます。
    コミットによって記録された内容は、基本的にはあとから変更、消去することができないです。
    Gitディレクトリにコミットされることによって、変更履歴として記録されたこととなります。

    Gitの基礎的な使い方

    詳しい使い方は実際に調べていただくとして、ここでは実際の操作の大まかな説明をします。

    Gitは基本的には、WindowsではGit Bash(Gitをインストールしたときに一緒にインストールされる)、macOS. Linuxではターミナルを使って操作します。(ここでは両行ターミナルと呼びます。)

    皆さんが使い慣れているであろうGUIでの操作もありますが、慣れるとCUIでのGitの利用は非常に便利なので、最初からCUIを使うことをお勧めします。
    1時間で慣れると思います。

    まず、Gitで管理を始めるために、ローカルリポジトリを作成します。
    初めに、Gitで管理したいディレクトリに、ターミナル上で移動します。
    そして、

    git init

    と入力することによって、Gitでのバージョン管理をする準備ができます。

    次に、ステージングエリアに変更を記録するために、

    git add ファイルパスもしくはディレクトリパス

    を実行することで、ワークツリーの指定したファイルをステージングエリアに登録します。

    次に、

    git commit

    でワークツリー内のファイルをコミットします。

    今現在、どのファイルがどの状態であるかを確認するには

    git status

    を実行します。
    コミット履歴は

    git log

    を実行することで確認することができます。

    基本的には、git addして、git commitをすることで変更履歴を作成し、git satusで困ったときに状態を確認するという流れになります。

    下は参考文献です。
    初心者にも非常にわかりやすい本であり、こちらの記事の執筆の参考にもさせていただいています。
    より詳しく勉強したいという方はこちらの本をおすすめします。