DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

3DプリンターをOctoPiで制御し、Webブラウザで設定や監視が出来るようにする

3Dプリンターは通常のインクジェットプリンタと違いプリントスピードが遅い

数時間〜時には数十時間かかるものもある。

なので直接パソコンと繋いで動作させているとその間パソコンの電源を落とす事は出来ない

SDカードにG-codeデータを保存しておき、後は3Dプリンターにおまかせという機能の付いたプリンターも存在するしPepRapの自作機でもArduino制御でそのような機能を持たせることも出来る。プリンターの機能としては十分でプリント中にパソコンを付けておく必要が無いので省エネである。

しかしプリントデータの移動や監視は実際のプリンターでダイレクトに行う必要があり、遠隔監視ということは出来ない。

 

ということで、遠隔制御が出来るのか?を調べると

 

・OctoPrintのOctoPiプロジェクト

octoprint.org

 

AstroPrint

www.astroprint.com

 

というものがあるということがわかった。

どちらもオープンソース無料。RaspberryPiをプリンタ制御マシンとして、制御インターフェースをブラウザで提供出来る仕組みだ。

しかもカメラで現在どのような行程なのか見えるのでその場に居なくても良い。

「ブラウザ」から操作出来るということはパソコンが手元に無くてもスマホでもタブレットでも制御可能ということだ。

(僕はお値段の手頃さもありAmazonのFireタブレットを3Dプリンター制御専用機として愛用している。)

 

どちらもRaspberryPi用に予めSDカードにシステムがインストールしているものをキットとして購入出来るという超お手軽仕様の本体自体も提供しているので初心者でも安心だ。

 

僕の所持した3Dプリンターを調べるとOctoPiの実働実績情報が得られたのでOctoPiを使うことにした。

OctoPiはOctoPrintというどんなマシンからでもWeb制御を提供するというプロジェクトのラスパイバージョンのようだ。

 

まずはダウンロードページに行き、OctoPrintのイメージをダウンロードしてくる。

octoprint.org

既存のラズパイがあればそれに機能追加としてOctoPrintをインストールする方法もあるが、プリント中にバックでイロイロ動くより3Dプリントに専念してほしいから専用マシンとして動かすことにした。

RaspberryPiはバージョン1、2、3全て対応しているので1つ余っていた1を使う事にした。

スライスには時間がかかるがプリント中はG-codeを走らせるだけなので1でも充分だ。

インストール方法はこちらのブログを参照させていただいた。

Octoprintのインストール方法

 

ラズパイのシステムインストールに関しては以前に書いた記事の通りなので、コレと同じ。 

dreamerdream.hateblo.jp

 

ーーザッックリおさらいーー

piユーザーでログイン

パスワードは初期"raspberry"

rootとpiユーザーのパスワードの変更(OctoPiのデフォルトユーザーなので消さない)

sudo passwd root

sudo passwd pi

一般ユーザーの追加

sudo adduser [username]

ユーザー権限の追加

visudo

[username] ALL=(ALL) NOPASSWD: ALL

初期sshポート変更
sudo nano /etc/ssh/sshd_config
の22ポートを任意に設定
sudoログイン禁止
PermitRootLogin yes を PermitRootLogin noへ変更

ストレージ容量拡張

sudo raspi-config

アップデート

sudo apt-get update

アップグレード

sudo apt-get upgrade

再起動

sudo reboot

と、ここまでが初期設定

ーーーーーーーーーーー

 

有線LAN接続しておく。

次に、OctoPiの接続設定

sudo nano /boot/octopi-network.txt

の最終行を編集(#を削除)

auto eth0:1
iface eth0:1 inet static
#address ***.***.***.***
netmask 255.255.255.0
#broadcast ***.***.***.255

これでブラウザからラズパイのあるアドレスを入力

http://192.168.0.13

するとラズパイで動いているOctoPiのページが表示されるようになる。

f:id:DreamerDream:20170207130903p:plain

で、このままだと英語。そのままでも使えるけど不安な場合は

GoogleChromeブラウザで開くと自動翻訳が選択出来るので翻訳させる。

f:id:DreamerDream:20170207131225p:plain

直訳だけど日本語化成功!

ログインしてユーザーとパスワードを入力して準備完了。

 

ここまで出来たらプリンタにブラウザから接続出来るんだけど、その前にもう一手間。

 

Raspberry Pi Model B+の場合USBポートの電力量が少ないので安定させるために1.2Aの電力供給を許可する。

sudo nano /boot/config.txt

に次の3行を追加

#USB Port 1.2V Up
safe_mode_gpio=4
max_usb_current=1

 

無線LANのパワーセーブモードを解除

(ここで無線接続の設定は面倒なので割愛)

sudo nano /etc/modprobe.d/8192cu.conf


# Disable power saving
options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1
を追記。

再起動させる。

sudo reboot

 

で、もう一度OctoPiに繋いでログイン

 

参考にさせて貰ったページには

STL形式ファイルやOBJ形式ファイルをインポートすればスライスまで完了してくれる便利機能があるんだけど、CuraEngine というプラグインを入れて STL をスライスできるようにする必要があり、

https://ultimaker.com/en/products/cura-software/list

からver 15.04.x をダウンロードしてARMようにビルドして〜云々〜と書いてあった。

面倒くさいなーと思っていたが今はブラウザ上でプラグインをインストール出来るっぽい。

以下google翻訳を使っての説明です。

右上の「設定」を開いて

f:id:DreamerDream:20170207132555p:plain

インストールされたブラグインを下にスクロールすると

「もっと見る」ボタンがあるので押すと

f:id:DreamerDream:20170207132726p:plain

必要なプラグインを簡単にインストール出来るようになっている。

RepRapで使われるMarlineのEEPROMの値の取得から変更まで可能になる。

試しに作って放置していたMarine基盤に繋いでみた

f:id:DreamerDream:20170207133027p:plain

おおっ!初期値がちゃんと読み出せてる。

かなり高機能だ。

 

これでプリント中もスマホから作業状態をチェック出来るようになる。便利〜♫

 

遠隔監視操作が出来るというメリットは他にもある。

3Dプリンターでプリント中は人体に有害な微粒子が放出される

ABSでは特に顕著で、簡単に言えばあのプラスチックの溶けた「クサイ」臭いである。

3Dプリンターからの排出物の毒性 | Gen Re

3Dプリンターの設置条件によっては気管支炎や喘息などの原因になることもあるので要注意だ。

遠隔監視してプリント中は部屋に入らない。」これだけでも微粒子を吸入するリスクは大幅に減らせるはずだ。

3Dプリンターの選び方 3Dプリンターは大は小を兼ねない!

憧れていた3Dプリンターを購入しました!

購入の際には必要な情報をいろいろ調べ回ったので皆さんにも共有できるよう、選び方を纏めることにしました。

 

3D-CADの使い方やデータは大事だけれど、最終的に満足のいくプリントが出来るか否かは3Dプリンターの基本性能に左右されるので充分吟味して購入することをオススメします。

 

考慮すべき内容一覧

結構たくさんあります。

 

[種類と価格]

一言で3Dプリンターといってもイロイロな種類があります。

熱溶解積層:一番リーズナブルな価格で一般家庭向け、amazon等で原料も手に入り易い。積層ピッチ(解像度)が細かいほど高価になる傾向があります。10万円以下とか自作3Dプリンターといえばこのタイプ。

 

光造形:日本人が発明した古くからあるタイプ。光硬化する樹脂プールの表面にレーザー光を当て、徐々に底を沈めて行く事で出力する。高価だけど10万円以内で買えるモデルも存在します。

プロジェクション形式という、レーザーに変わってプロジェクターの光で造形するモデルもある。光を一気に放てるので当然こちらのほうが高速。

 

粉末焼結:主に工業用。

プラスチック類以外にチタン、スチール等の特殊素材が扱えます。

従来の鋳造等では造形が難しかった入り組んだ部品も出来るのでジェットエンジンの部品製造など既に実用化されていることも。

高価なので一般家庭向けでは無いが特許切れにより50万以下のモデルも登場しています。

i-maker.jp

 

インクジェット:この辺りにくると調べる気にすらならない価格です。

粉末にインクを載せて1層ずつ粉末を置き、またインクを載せるという方法。

光硬化樹脂のインクを出力した直後に紫外線を当てて硬化させて積層させるという方法があります。

お値段は300万円超え。きっとインクも特殊で高価でしょう。

 

 

3Dペン

番外編として、3Dペンという選択肢があります。価格は2000円台からあるのでパソコンやソフトを使わず自らの手だけでちょっと立体造形を味わうには丁度良いし子供のオモチャとしても人気。

 

3Dプリンターと同じ材料、出力方法でありながら同じ物は2つとして作れないというオリジナル作品が作れます。

dreamerdream.hateblo.jp

 

 

様々な種類をまとめましたが、工業向けの製品である粉末焼結やインクジェット大型すぎてまだまだ一般で購入するには現実的ではないでしょう。

ということで、やはり購入するとなると熱溶解積層か光造形でしょう。

そして一般用途で材料が安く情報も豊富となると間違いなく熱溶解積層!

光造形の場合は材料のレジン自体がまだ高価なのとレジンの保存期限など管理が面倒くさい面がネックです。

 

ということで以下からは熱溶解積層タイプについて書いていきます。

 

[サイズ]

 

3Dプリンタの場合は「大は小を兼ねない」。

小さい物を最終的に大きく組み立てるように造形したり方向を工夫するほうがリスクは少ない。目的に応じたサイズを選択すべきです

造形サイズのとんでもなく大きなマシンも存在するけど、造形サイズが大きいもので一発出力しようとするとそれだけ下記のリスクが大きくなります。

 

・大物の造形時には少なからず「反り」が発生します。大物を一発で出力しようとするとまずこの反りに悩まされることになります。

・造形サイズが大きいのにプリントヘッドを支えるフレームが細い貧弱な機種は要注意です。それだけフレームがたわみ易いので必然的に精度が悪くります。

・造形サイズが大きいのにベッドが前後左右に動くような構成のものは避けるべきです。大物を造形する場合、造形物が縦に長くなると慣性でベッドから剥がれ易くなります。

・ヒートベッドのエリアが大きいとそれだけ加熱に時間がかかるし電力が無駄になります

 

 

[使える素材とランニングコスト]

熱溶解積層の場合は主にプラスチック素材、特に直径1.75mmが多くの3Dプリンタで採用されています。マイナーなフィラメントが使われているものを選ばないようにしないと材料の入手が困難になります。

3Dプリンター フィラメント」で検索すると沢山出てきます。

ABSPLAという素材が有名で基本的にその2種類の素材が扱えるプリンタも多いけれど単一素材しかサポートしていないプリンタもあるので注意です。

ABSはフィラメントとしては安く、ある程度弾力もあり、熱にも強いので素材としては良いけれど、プリント中に収縮して剥がれてしまうということが多いのでABSを使うにはベッドが加熱されるタイプのプリンタが望ましいとされます。それとプリント中の臭いがキツイのでプリントする場所を選びます。それとABSは燃えやすい素材なので火災には要注意!

PLAはプリント中の臭いがキツくなく、ABSに比べると収縮が穏やかなのでプリントしやすい素材だけど、熱に弱く60℃程度で変形するので車のダッシュボードに置くような物や食洗器で洗うような物には適さない。また弾力が少ないので割れ易い。欠点があるものの燃えにくいので万が一のトラブルでも焦げる程度で済むのが有り難いです。

ABSが使える用途が多いけれどPLAの方が3Dプリンタ出力には楽だから普段使いの用途にはPLA、熱が心配な場合はABSと使い分けられるプリンタがいいでしょう

その中でAmazonから1Kg2000円弱のPLAが使えるとランニングパフォーマンスは最高です。

フィラメントには変わり種として金属やウッドタイプのものも存在します。

 これらは樹脂素材に金属粉末等を含ませているというだけで実際に金属が出力出来るとうワケではないけど質感が金属っぽく面白い。

但し、金属粉末でフィラメントの送り機が摩耗してしまったという記事もあるので要注意!

そして最も注意が必要なのが「専用フィラメントしか使えないプリンターが存在するということです。

機械自体を安く売ってフィラメントで儲けるという販売戦略でしょう。これらの専用フィラメントは高い!機械が手頃な価格だからといって飛びつくのは危険なので要注意です。

特殊系フィラメントに関してはコチラを参考にどうぞ↓

dreamerdream.hateblo.jp

それと色々な素材をプリントするならヒートベッド」は絶対に外せない条件です。

プリンターによっては「PLAのみ」としている機種でヒートベッド非搭載モデルもあるけど、PLAでもヒートベッドを60℃程度で温めておくと剥がれなどの失敗率が減らせます。

後から付けられる機種もあるけど手間がかかるので是非とも最初からヒートベッドを搭載しているマシンを選びましょう。

 

 

[着色]

出力したものに色を付けるにはフィラメント自体が色着きの物を選ぶか着色することになります。もともと何種類かのフィラメントを色分けで出力出来るプリンタもあるのでそれでプリントするのが最も楽な方法ですがプリンタ本体は高くなります。

ABS素材の着色はプラスチック用の塗料で塗れます。

PLA素材の物は塗料が乗りにくいそうなのでパテマニキュアで表面コーティングしてから着色すると良いらしいです。

僕の場合PLAで出力したものに缶スプレーで直接ペイントしてみたらできたので、何かしら着色する手だてはあるということで用途によっては色はあまり気にしなくても良さそうです。

 

 

[設定の手間]

3Dプリンタを選ぶ時に「オートキャリブレーション」という機能を搭載したプリンタを選ぶと初期設定の手間を省く事が出来ます

3Dプリンタは幅・奥行き・高さの3方向でヘッドが動いてプリントするのでこのヘッドを固定しているレールが少しでもズレていると綺麗なプリントが出来ません。

そこで、激安のプリンタならヘッドとベッドの感覚を手動でネジで調節したりソフトウェア的に軸の移動量を設定してみたりする必要があるのです。

ここで挫折しましたとしてオークションに出品している人もいます。非常に勿体ない話だけどそれぐらい最初は手間のかかる作業なのです。自作するぐらいの意欲のある人ならそのぐらいどうっってことない作業かもしれないけど一般的なインクジェットプリンターのイメージで購入してしまうとXYZ軸方向の意味すらわからず挫折するのでしょう。

オートキャリブレーション機能はその手間を機械にさせるものです。

オートキャリブレーションについて纏めてみました↓

dreamerdream.hateblo.jp

 

 

しかし、オートキャリブレーション機能は絶対に必用な機能ではありません

最初こそ手間がかかる作業だが慣れてしまえば1〜2分もあれば完了するので気にならなければ重要視しなくても良いでしょう。

「あったら便利、けど無くても平気」な機能です。

手動のキャリブレーションの方法はこちら↓

dreamerdream.hateblo.jp

 

 


[造形の精度]

3Dプリンタの精度の1つに積層ピッチがあります。

上に何ミリ厚の素材が載せられるか?というのがこの積層ピッチ。当然細かければ細かいほど側面は綺麗になります。(側面だけ!)

ただ、細かければ細かい程プリントに時間がかかります

例えば0.1mmで出力していたものを0.05mmにすると単純計算で時間が倍になります。

作る予定のものが小さなアクセサリや細かなパーツ等であれば時間がかかっても綺麗にプリント出来るタイプを選び、事務用品のクリップ等ようなあまり細かさを気にしない物であれば積層ピッチの大きめのものを選ぶと完成が早くて良いでしょう。

また積層ピッチが大きくてもヤスリがけしたりパテ埋めしてピッチを隠すという方法もあります。

www.pp3dp.jp

精度は積層ピッチの他、モデルデザインの精度、スライサーと呼ばれるソフトウェアの精度、プリンタ筐体の剛性、モーターの種類や制御方法、ガイドレール等によって様々な要因があります。

極端に安い物にはソフトウェア的には精度の高い出力をしていてもプリンタのフレームが貧弱なものが見られます。フレームが貧弱ということはモーターまでマイクロステップで細かな制御がされていてもプリントヘッドの移動荷重に耐えられず出力先がブレるということです。

とくに重たいヘッドを備えているにも関わらずフレームが細いパイプ製ものはイマイチな性能になってしまいます。

本体剛性、形状についてのお話はコチラ↓ご参考ください。

dreamerdream.hateblo.jp

 

 

[ソフトウェア]

ソフトウェアは専用ソフトウェアから高価なもの、フリーのものまでいろいろあります。

基本的に「モデリング」→「スライス(G-code生成)」→「出力」という流れです。

専用ソフトにはスライスと出力が一体化したものやモデルツールまで含むものまで多種多様です。

 

 

モデリング

デザインするには「3Dモデリングツール」「3D-CAD」とよばれるツールが必要です。

フリーで有名なモデリングツールは無償のBlenderがあります。これは3Dアニメーション等が作れる程高機能なのですが高機能故に扱いは複雑です。他にSculptrisなど有料を含めると沢山のモデリングツールがあります。

3DCADソフトとしては無償のFreeCAD123Dシリーズ(現在サービス終了)、学生・教員無料のFusion360SketchUPなどが有名です。

どのようなツールを使うにしろ、3Dデータ形式の有名所.obj.stlファイル出力に対応していれば次のステップ、スライサーへデータをもっていけます。

ちなみに、CADならJw-cadのように2.5次元表示できるものもあるので2DCADでもいいんじゃないの?と思われるかもしれないけどデータの生成方法がぜんぜん違うのでやはり3D用のツールが必用です。

dreamerdream.hateblo.jp

3Dモデリングツール「Blender」の初歩的な使い方を纏めてみた。

dreamerdream.hateblo.jp

 

 

スライサー

これが3Dモデルをいかに効率良くプリントするか?が決まる肝心なツール。

スライサーでは、3Dモデルを何層にもスライスしていき、3Dモデルの中なのか外なのか?を判断して素材をどのぐらいの量どの位置へ出力するか、また場合によってはサポート材やラフトを含めたデータをG-codeという実際にプリンタのヘッドを動かす情報としてコードを生成します。

Slic3rが簡単で有名。他にCuraやKisslicerなど無償のものも多くあり、格安3Dプリンターはそれらを利用することを推奨しているものが多いようです。

dreamerdream.hateblo.jp

 

 

 

プリンタ制御

 スライサーから出力されたG-codeデータをプリンタへ適切なタイミングで出力するための「ファームウェア」と呼ばれるソフトウェア。

メーカー品として販売されているプリンターではあまり意識しなくても使えるようになっています。

有名なものでは自作プリンタのRepRapプロジェクトでよく使われるArduino用のMarline。

要はこの基盤上に使われているソフトなので自作派の人だけは要チェックです。

 

 

 

 

 

[スタンドアローン駆動や遠隔制御] 

スタンドアローン駆動とはパソコン無しでも3Dプリンター本体にデータを送ると本体だけでプリントをしてくれる機能のことです。

その機能の延長で遠隔操作やプリントの様子をカメラでモニター可能にしたモデルが存在します。

非常に便利な機能なのであると重宝します。「あったら便利、無くても平気」な遠隔制御や監視カメラ搭載モデルはやはり高価な上位機種だけど、実は安い機種でもマイコンボードを制御マシンとすることで後から安価に追加することも可能な機能なのです。

dreamerdream.hateblo.jp

特にABSの出力時には有害な微粒子が放出されるので遠隔制御が望ましいとされます。

 

 

[その他、必要な工具]

スクレーパーペンチ等はバリ取りやサポート材の除去に必要です。

印刷領域の清掃には工業用アルコール。

プラットフォームシートは素材の食いつきが良くラフト不要になるのでフィラメントの節約にうってつけです。

<実際に使ってみた記事> 

dreamerdream.hateblo.jp

 

その他、3Dプリンターと一緒に購入しておくと良いもの↓

dreamerdream.hateblo.jp

 

 

 

現在進行形でイロイロなプリンターがどんどん出ているし、便利な機能も多くなっているので。「コレが一番良い!」と言及することは出来ないけど、1つでも選ぶ際の指標の参考になれば幸いです。

Amazonでも「3Dプリンター」と検索すれば多数出て来ます。

くれぐれも買って後悔することのないよう慎重にお選びください。 

dreamerdream.hateblo.jp

 

3Dプリンターのデータ作成から出力までの大まかな流れも載せています。

dreamerdream.hateblo.jp

 

 

dreamerdream.hateblo.jp

 

dreamerdream.hateblo.jp 

dreamerdream.hateblo.jp

  

 

dreamerdream.hateblo.jp

 

 

 

コンピュータと人の感覚の違い

初めてコンピュータでプログラムを組んで何かを実行させようとするとコンピュータの速度に驚くと思う。

 

f:id:DreamerDream:20191230144318p:plain

例えば、下のpythonプログラムをRaspberryPiで実行すると、1から順番に1足した値が画面出力される。

c = 0
while True:
 c += 1
 print str(c)

実行結果

1
2

(略)

1396

1397
1398
1399

 

RaspberryPiのような非力なコンピュータで速度の遅いスクリプト言語を実行させても一瞬(1秒ぐらい?)で1000回ぐらいループしているのが解る。

 このようにコンピュータの「一瞬」という表現は人の感覚では測れないほど高速なのだ。

これを覚えておかないと電子工作の回路の設計ではまず

チャタリング

というものに悩まされることになる。

チャタリングの概要 | マルツオンライン

 

機械式スイッチ(トグルスイッチ・プッシュスイッチ・スライドスイッチ・機械式リレー)をコンピュータに接続して信号として入力する場合、スイッチのON-OFFの際にほぼ必ず接点がバウンドする状態が作り出されてしまう。

人が「えいっ!」と”一瞬”にしてスイッチを押した瞬間、コンピュータにはON-OFF接点バウンド信号が”しばらくの間”入力されてしまう。

例えば、RaspberryPiのGPIOでスイッチ入力させるプログラムをPythonで書いて実行させ、スイッチを押すと

 

「スイッチ入力回数表示プログラム」

#!/usr/bin/python
#coding:utf-8

import RPi.GPIO as GPIO
import time

Switch = 22
count = 0

def switch_callback(gpio_pin):
  global count
  count += 1
  print "count=" + str(count)

def standby():
  GPIO.setmode(GPIO.BCM)
  GPIO.setup(Switch, GPIO.IN, pull_up_down=GPIO.PUD_UP)
  GPIO.add_event_detect(Switch, GPIO.BOTH)
  GPIO.add_event_callback(Switch, switch_callback)

  while True:
    time.sleep(1)
  GPIO.cleanup()

 

if __name__=='__main__':
  standby()

 

 

結果

count=1
count=2
(略)
count=10
count=11
count=12 

 

1度だけスイッチを押したハズなのに何度もカウントされてしまうのだ。

これを予防する処置としてスイッチ回路の設計やプログラムで暫く待つ(20ms程度)という処理を入れなければ思ったような処理をさせることが難しくなる。

 

このように人にとっての「一瞬」は機械にとっては「しばらくの間」だという感覚でプログラムもしないと予期せぬエラーに見舞われることがあるので要注意だ。

 

 

次に「通信速度」の問題

 

さて「光の早さ」は30万キロメートル/秒。電気信号も光の早さで伝達される。

同軸ケーブルで伝達される高周波信号は若干遅くなるらしいが、ここでは電気信号=光速としておく。

1秒間に300,000kメートルというと地球7週半(一周40,000km)/秒とされ、途方も無く早いイメージだけど。

 

ここで問題

「地球の裏側と通信するのにどのぐらい時間がかかるのでしょうか?」

 

つまり、「地球半周はどのぐらい?」ということ。

※実際には海底ケーブルや衛星通信等でもっと長距離になるのだけど、ここでは単純に直線で結んだ場合を想定するものとする。

地球の円周は40,000kmなので20,000kmは

半周にかかる秒数 = 20,000km / 300,000km = 0.0666....秒

大雑把に計算しても最速で最低66ミリ秒はかかる。ということですね。

受け取った信号に対して返信するとさらに66ミリ秒。

処理速度を入れず、単純に信号の往復で最速132ミリ秒です。

 

この「ミリ秒」というのは機械にとっては「かなりの時間」なのだ。

以前、コンピュータの通信エラーによりロケットの打ち上げ延期になったことがあった。

イプシロンロケット、打ち上げ中止より重要な「失敗」 | 宇宙開発にひとこと

この0.07秒(70ミリ秒)の信号の遅れでコンピュータはエラーを発生させ、国家事業が延期になってしまったのだ。

 

今の時代、小さなマイコンでも10MHzや8MHzという周波数で動いている。

1MHzとは1秒間に1,000,000回命令処理する能力だ。

1MHzで1クロックの間に信号を伝達出来る距離 = 300,000,000m / 1,000,000 = 300m

なんと光の速度でも1クロックの間には300mしか進まない。

10MHzだと30m

1GHzだと0.3mだ。

つまりケーブルが30cm以上あると1GHzのCPUの1クロックの間では通信出来ないということなのだ。

まあ、一般的なPC間の通信なら「通信プロトコル」というものに合わせて組むのでこのレベルの心配は不要だが、マイコンを用いたローレベルでの通信プロトコルを自分で組むには通信ラインの長さも意識しないといけない。

 

ものすごく高速に遠くにデータを伝達しなければいけないようなプログラムを組んだ場合、いかに必用データ量を少なくするか?がキモになってくる。

動画配信サービス等はこの辺りがよく考えられていて動画の形式と視聴する端末によってデータを最小限に抑え、できるだけ近くのサーバーからデータを送れるよう工夫されている。

 

PythonでTwitterAPIを使って投稿する

まず、TwitterAPIを使って投稿するのに参考にさせていただいた記事内に「OAuth認証はややこしいので凡人はライブラリを使う」と書いてあるので僕もpipを利用してインストールしたのが前回の記事

dreamerdream.hateblo.jp

 

 「基本はHTTP Requestを送ってJSONを得るだけなので、わざわざTwitter専用のライブラリを使うことも無いと思って自分で書いてみた。

とあるので自分も練習がてら参考にさせてもらいながらTwitterの投稿、タイムライン取得、検索等のクラスを自分で書いて備忘録として残すことにした。

 importしているfile_mngは以前書いたヤツを利用

dreamerdream.hateblo.jp

 

 

/usr/local/lib/twitter.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

from requests_oauthlib import OAuth1Session
import json
import file_mng


etcDir = "/usr/local/etc/"

#twitter main URL
url_twitter = "https://api.twitter.com/1.1/"
#tweet URL
url_tweet = url_twitter + "statuses/update.json"
#timeline URL
url_time = url_twitter + "statuses/home_timeline.json"
#search URL
url_search = url_twitter + "search/tweets.json"


class Twitter:

    CK = '***' # Consumer Key
    CS = '***' # Consumer Secret
    AT = '***' # Access Token
    AS = '***' # Accesss Token Secert

    def setKeys(self,etcFilename):
        self.keys = file_mng.load(etcDir + etcFilename)
        for s in self.keys:
            sp = s.split(":")
            if sp[0] == "CK":
                Twitter.CK = sp[1]
            if sp[0] == "CS":
    Twitter.CS = sp[1]
            if sp[0] == "AT":
    Twitter.AT = sp[1]
            if sp[0] == "AS":
    Twitter.AS = sp[1]

    def search(self,params = 'test',url = url_search):
        self.spara = {"q":params}
    # OAuth で GET
    self.twitterKey = OAuth1Session(Twitter.CK, Twitter.CS, Twitter.AT, Twitter.AS)
    self.req = self.twitterKey.get(url, params = self.spara)
        self.list =
    if self.req.status_code == 200:
    # レスポンスはJSON形式なので parse する
    self.res = json.loads(self.req.text)
    self.dic = self.res["statuses"]
            for rs in self.dic:
                self.list.append(rs["text"])
    else:
    # エラーの場合
            self.list.append("Error: %d" % self.req.status_code)
        return self.list

    def timeline(self,params = {},url = url_time):
        # OAuth で GET
        self.twitterKey = OAuth1Session(Twitter.CK, Twitter.CS, Twitter.AT, Twitter.AS)
        self.req = self.twitterKey.get(url, params = params)
        self.list =
        if self.req.status_code == 200:
            # レスポンスはJSON形式なので parse する
            self.timeline = json.loads(self.req.text)
            # 各ツイートの本文を表示
            for twt in self.timeline:
                self.list.append(twt["text"])
        else:
            # エラーの場合
            self.list.append("Error: %d" % self.req.status_code)
        return self.list

    def tweet(self,params = "test", url = url_tweet):
        self.tpara = {"status":params}
        # OAuth認証で POST method で投稿
        self.twitterKey = OAuth1Session(Twitter.CK, Twitter.CS, Twitter.AT, Twitter.AS)
        self.req = self.twitterKey.post(url, params = self.tpara) #tweet

        # レスポンスを確認
        if self.req.status_code == 200:
            return ("OK")
        else:
            return ("Error: %d" % self.req.status_code) 

 

CK = '***' # Consumer Key
CS = '***' # Consumer Secret
AT = '***' # Access Token
AS = '***' # Accesss Token Secert

の***部分を取得したキーに置き換えるとそのまま使える。 

/usr/local/etc/(任意のファイル)

CK:***********

CS:***********

AT:************

AS:***********

に認証キーファイルを置き、クラスのインスタンスにsetKeys(任意のファイル名)で認証キーのファイル名を渡し、簡単に置き換えられる仕様にした。

また、タイムラインや検索結果の複雑な辞書形式のものを簡単なリスト形式に変換して取得するようにした。

使い方。

test.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

from twitter import Twitter #インポート

tw = Twitter() #インスタンス生成

#tw.setKeys("(任意のキーファイル名)")#キーファイルを設定

print tw.tweet("テスト投稿")#投稿、成功したら「OK」が返る

timeline = tw.timeline()#タイムラインをリスト形式で取得
for s in timeline:
  print s

search = tw.search("検索")#検索をリスト形式で取得

for s in search:
  print s

 

※  python2.7なので環境によって文字列の変換エラーが出るかもしれない。

 

 

 関連記事

dreamerdream.hateblo.jp

 

 

RaspberryPiからTwitterへ投稿する

以前、RaspberryPiもPythonも弄ってない状態のときに興味でJavaから「Twitter4J」というライブラリを利用してTweetすることに成功したものの、「あ、出来るんだー」という感想だけで終っていた。

 

twitterを少し活用しようかと思い、今回はRaspberryPiからPythonを用いてtweetしてみようと思ったので備忘録。今回は完全に個人の備忘録なので割愛している部分があります。

 

参考にさせていただいたサイトはコチラ

qiita.com

 

このページで説明されている「OAuthのライブラリ」というものが必用なのでGGるとGitHubにあがっていた。

GitHub - requests/requests-oauthlib: OAuthlib support for Python-Requests!

へー、知らなかった。ということでこれまたよく解っていないpipを用いてインストール出来るの?と試してみたら。

sudo pip install requests-oauthlib

 

あら、アッサリインストールされた^^

ということで、以前に取得していた

  • Consumer Key
  • Consumer Secret
  • Access Token
  • Accesss Token Secert

を上記サイトのxxx部を書き換えて書き込みテストしたら、あっさり成功。

 

スクリプト言語なので楽よねー^^ラズパイなので24時間稼働OKだし何かを検索するにはうってつけの環境!

プログラミングって何の約に立つの?

最近、「IT」とか「モノのインターネット」とか「IOT」とか「プログラミング授業」だとかをよく耳にするようになった。

 

Yahoo!知恵袋でもウチの子がプログラミングを習いたいと言い出したんだけど、そもそもプログラミングの勉強って将来何の約にたつの?」「プログラマーって儲かるの?というような質問を見た気がする。

dreamerdream.hateblo.jp

 

 

プロブラミングで何かを作ったことのある親だったら子供の質問に「使えたら便利なんだよー」で完結するのだが、英語や国語の授業と違い全くプログラミングなんて触れた事の無い親からしたら「プログラミングってどこで必用なの??」とチンプンカンプンな世界なのだ。

f:id:DreamerDream:20180608124106j:plain

丁度「数学って将来使う事あるの?」と学生が聞いているような話だ。

 

そこで、

「そもそも、プログラミングって出来て何の約に立つの?」という素朴な疑問をIT職でもプログラマーでも無い僕がプログラミングを勉強してみて解ったこと。役に立ったことを纏めてみることにした。

 

【何に使われているのか】

プログラミングは身の周りでは何に使われているでしょうか?

答「便利な自動で何かをしてくれる電気製品、ほとんど。」

です。

ドライヤーやアナログ時計など単純な仕掛けや昔の製品でない限り、殆どの電気製品に使われています。

 

  • デジタル目覚まし時計
  • エアコン
  • 給湯器
  • IHコンロ
  • レンジ
  • オーディオ
  • TV
  • 信号機
  • スマホ
  • 充電器
  • パソコン
  • プリンター/コピー
  • レジスター

 

朝起きて、夜寝るまでの間に一度もプログラミングの恩恵を受けない生活をしている人はこのブログを読んでいる人の中にはいないと思う。

 

何の約に立つのか】

上記の電気製品で使われるということは、「便利な電気製品を作る」ということも可能なのです。

そう!プログラミングはパソコン内部で動くものは勿論、それだけじゃ無いんです。

「電子工作」という分野になりますが、プログラミングしたICチップを利用することで電気回路を作って外部機器を制御することが出来るのです。

僕が実際に電子工作で作ったもの

  • エアコンの監視システム

ペット用に室温を監視し、異常温度になると自動でエアコンをON、それをメールで通知するシステム。また室温の記録を残すことも出来る。エアコン遠隔操作も可能。

 

dreamerdream.hateblo.jp

 

  • 停電監視システム

真夏などエアコンが動いている状態で停電が起こるとエアコンが停止してしまう。なので停電復旧後に「停電がありましたよ」とメールで通知するシステム。

dreamerdream.hateblo.jp

 

  • オートフィーダー

自動的に時間になると餌をあげる給餌システム。作動後にはきちんと作動しているのか記録映像を残す。

  • ホームセキュリティー

簡単な侵入者記録システム

  • タッチセンサライト

実験で作ったライトをタッチして点けるだけのシステム

 

これらのシステムは既に製品として存在するかもしれないシステムだけど結構高価だったりする。自作することで費用を浮かすことが出来る。そして自分用にカスタムすることでカユイ所に手が届くというメリットがある。

 

次に、パソコン用のソフト

  • 製品管理アプリ

内容はヒミツ。知り合いの事務所で絶賛稼働中のシステム

  • 宛名印刷アプリ

メルカリ用に作ったシステム。注文情報からコピペで丁度良いレイアウトで宛名ラベルや封筒に印刷してくれるシステム

  • メール自動送信アプリ

メールフォームとリストから必用な情報を取得して送信するシステム。シリアルナンバーを個々に送信する時などに利用出来る。

 

これらもカユイ所に手が届くシステムだ。そしてもちろん自分用に作ったものなので既存のシステムとは違って自由にカスタム可能だ。

これらのソフトも外部に発注をすると数万になると思う。自分で自由に弄れるというのはそれだけでメリットだ。

 

ということで、僕の結論

「仕事にしなくても、プログラミングの活用する場はいくらでもある」

「生活をより便利にしてくれるものである」

 

【始める時の障壁】

で、「じゃあやってみようか」と思った時に障壁となるのが自分自信のプログラミングに関してイメージしていることだと思う。

まず、僕がプログラミングを勉強する前に感じていたこと

  • パソコンの中で何か動くもの
  • 専門的なソフトウェアが必用
  • 難しい知識が必用
  • 英語が出来ないと無理
  • 高スペックな機材が必用
  • 電子回路って計算とか難しそう

 

プログラミングに触れた事の無い多くの人が上記の理由で「オレには無理だぁ」と感じていると思う。

確かに、「」はそうだったのかもしれない。

今は先人達が残してくれた遺産が山ほどあるので上記の理由は一つずつ解決出来る。

 

  • パソコンの中で何か動くもの?

これは上の実例を見て頂くと解るように、電子工作として作成することで現実に動作させるものとして出力することが出来る。

検索ワード「シリアル通信」「パラレル通信」「RS232通信」「GPIO」

 

  • 専門的なソフトウェアが必用?

専門的なソフトウェアとして言語に応じた「開発ツール」が必用であるが、無料のものが多く存在する。

パソコンにインストール可能なものをインストールすれば良い。

そしてそれらのインストールガイドはWeb上に広く出回っているのでその通りにインストールすれば良い

検索ワード「無料 開発環境」「無料 プログラミング言語」「(言語) 開発環境インストール」

 

  • 難しい知識が必用?

確かに「難しいことをしよう」と思うと難しい知識が必用。

ただ、簡単なものはサンプルが多くWeb上に出回っているのでそれに手を加えれば良い。

そして簡単なコードを組み合わせて複雑なコードを完成させるのだ。

検索ワード「(作りたいもの) サンプルコード」

 

  • 英語が出来ないと無理?

英語が出来ると最新の情報を集めることは早いが、初心者に必用な情報、ぶつかるであろう問題はほぼ先人が日本語で説明してくれているので心配無用。

検索ワード「(問題) (使用言語)」

 

  • 高スペックな機材が必用?

よほど複雑なコードを書かない限り、ノートパソコン1台でOK。

デュアルスクリーンとかハイクラスなGPUとか、初心者がそこまで扱える訳もないので心配無用。必用になってから揃えた方が最新の良いものが手に入る。

検索ワード「(開発ソフト) PCスペック」

 

  • 電子回路って計算とか難しそう? 

確かに、温度センサなどアナログ値をデジタルデータに変換して処理させるのはアナログ回路を組むなど複雑な回路が必用だが「温度センサモジュール」を使うと簡単に接続出来る。

このような便利な「○○モジュール」というものが数多く出回っているので入出力の電圧さえ間違わなければ失敗して火を噴くということもない。

検索ワード「(使いたいセンサなど) モジュール」

特にAuduino用のモジュールは種類が豊富で安い!

dreamerdream.hateblo.jp

 

 

このように現在では1つ1つのハードルが非常に低くなっているのでパソコンとやる気さえあれば誰でも気軽に始めることが出来る。

 

そして一番大事なものは

何を作りたいのか明確な目標があること

これが無いと右往左往して結局何も出来なかったりする。

 

少なくともあなたが現在このページを読んでくれているということは少しプログラムに興味があるけどどうしようか迷っている段階ですよね?

プログラミングを始めるには 「難しく考えすぎない事」「調べすぎないこと」ですよ。

パソコンさえあれば誰でも無料で気軽に始められるのがプログラミングです。

 

今回は言語については言及しないけど僕はJavaが好きです。 

dreamerdream.hateblo.jp

 

dreamerdream.hateblo.jp

 

 最近では小学生でもGUIを使ったプログラミングで遊びながらロジックを楽しめるようですね。スバラシイ!

 

プログラミングについての書籍も多くなり、

さらに、 kindle版なら無料のものまで!

kindleタブレットも今ならクーポンコード(商品ページに書かれているコード『PRIMEFIRE』)を使うと4000円引きになるそうです。

8,980 - 4000 = 4,980円でタブレット端末Get!?

さらにPrime会員だと1ヶ月に1冊、書籍が無料でGet出来ちゃうそうです(@@

amazonさん太っ腹すぎる!

ということで低スペックな書籍用タブレットとして僕も1つポチっとしちゃいました(笑)

 

メルカリで稼ぐための5つの考察

フリマアプリ「メルカリ」を利用して稼ぐにはどんな商品を売ったらいいのか?を考察してみた。

f:id:DreamerDream:20180608123831j:plain

 

収益を得るためには

・高く売れるもの(希望販売価格が高いもの)

・人気のあるもの(数が多く出るもの)

・安く仕入れたもの(元が無料のもの)

を売ることは当たり前だが、商品と以下のバランスを考慮しないと大赤字になる可能性がある。

 

 

 

①メルカリ手数料

これは出品商品の10%

つまり300円の場合は30円

10000円の場合は1000円

が手数料として差し引かれる。

大きな額の商品は要注意だ。

 

例えば転売目的で業者から最安値2000円で出ているような商品を大口購入等で1つ1500円で手に入れて1900円で転売しようとする場合、価格差の400円が利益になるわけではなく、

販売価格1900円 ー 手数料190円 = 売上1710円

売上1710円 ー 購入費1500円 = 利益210円

となり、210円の利益になる。

送料込み価格で出品した場合はそこから発送料金がかかるので、利益は

利益210円 ー 下記②の送料

になる。

よく考えないと中途半端な価格差での転売は赤字になる。

 

 

②発送料金

これは送料込み価格が当たり前のメルカリでは必ず考慮しないといけない。

送料込み300円で売った品の送料が400円かかっていたら結果−100円。何をしているのかわからない。

300円で売るなら最低でも82円や120円で近くでポストインできる商品でないと割りが合わないだろう。

封筒やメッセージカード等を入れると

封筒百均で長3サイズで25枚入りだと1枚4円

メモ帳100枚だと一枚1円

切手82円+封筒4円+メモ帳1円=87円

発送時の自転車とか車とかペンとかノリとかの消耗品もろもろ込めて最低でも合計約100円ぐらいはかかると見ておいてよいだろう。

 

③手間(制作時間)

これはハンドメイド品を売るときに時給いくらなら割りが合うのか?ということになる。

元が無料のものを仕入れ含めて1時間かけて作った作品を300円で売ると単純に時給300円だが実際は

利益 = 時給300円 ー ①のメルカリ手数料 ー ②の送料

だ。

結構手間のかかるであろうハンドメイド品を格安で売っている人もいるが、名前を売るという目的以外ならもう少しマシな価格をつけるべきだと思う。

 

④在庫を置くスペース

これは意外と盲点かもしれない。不要品をメルカリで処分しようと出品する場合もあるだろうが、

出品した = 処分できる  とは限らない。

出品した = 売れるまで置いておくスペースが必用  なのである。

いつ売れるか分からない商品を置いておかないといけないというほど無駄なことはない。

 

⑤不良品等の対応

クレームとしてよくあるのは

・商品が違う

・出品時の説明が不十分

・商品を発送したが届かない 

 だと思う。

意図せず間違えた商品を送ってしまったのであれば商品交換で対応出来るが、その際の往復送料は出品者側が負担することになるだろう。商品が安いものであれば交換より破棄してもらって新しく発送した方が安上がりになることもある。

説明不足で送り返される場合もあるだろう。その際も相手を怒らせてしまったのであれば着払いは不可避だと思う。

なので往復の送料を含めても痛手にならない程度の利益(最悪でも±0円)を考えて値段をつけるべきだと思う。

一番困るのが郵送時のトラブルだ。

メルカリは出来るだけ送料の安い発送を選択する人が多いので普通郵便での発送が多くなる。

送ったが届かないのはこちらが悪いわけではないが、受取手からすれば「お金払ったのにもしかしたら詐欺されたかも」と疑っているハズだ。

受取手が実際には受け取っているにも関わらず受け取っていないと言い張っている場合もある。と販売者まで疑い出したら喧嘩になる。

これは正直どちらか分からないしどちらでもなく運送会社の問題の場合もある。

その場合の対処法を予め決めておかないと高額な商品を2度も送ることになると大赤字だ。安価な商品は普通郵便でも、高額な商品は配達記録や追跡可能な発送方法を選ぶ必用がありそうだ。

 

(実際に郵送事故に逢いました↓)

dreamerdream.hateblo.jp

 

 

上記の内容を纏めると

元が安く仕入れられ、小さく場所をとらない商品を高額で売ると利益になる!

ということ。

例えば人気のあるシール、カードなど薄くて売れなくても置き場に困らない定型郵便サイズで送れるもの。

 

郵送時のコストや手間を省くなら「データのみ」の販売も視野に入る。

例えば3Dプリンタ用のデータ作成。

姓名診断や占い。

読書感想文などの考える系宿題代行。

これらは必用な元手はPCの電気代ぐらいで後は利益になる。

 

安価で仕入れられてウケて儲かるものというのはなかなか無いが「無くはない」のでいろいろアンテナを張っておくと面白いと思う。

 

dreamerdream.hateblo.jp

 

 

今から初めてみようかな?と思う方はこのような丁寧なガイド本も出ていますので参考にどうぞ↓

 

 

本格的にフリマで稼ぐとなると拠点としてバーチャルオフィスを利用するという方法もアリです。

 

kampa.me