こんにちは!
明日から台湾旅行へ出かけるので、うっきうきのゆってぃです!
おかげで、今週は仕事が全然手につきませんでした!
はじめての台湾!どんなところなのかな・・・

さて、今日は勢いで会社をお休みしたので、Dockerにfuelphp(ver1.8)を入れてみました。

構成は
[クライアント] ----(https) --- [nginx(リバースプロキシ@docker)] --- [nginx + fuelphp(web + appサーバ@docker)]
です。
リバースプロキシ側でSSLターミネーションさせており、リバースプロキシとアプリケーションサーバ間はhttp通信です。
(同一のネットワークセグメントなので、大丈夫かなと)

SSL証明書はletsencryptで取得しました。
リバースプロキシで証明書を取得する場合はwebrootが無いのでどうしようかと思いましたがnoraworldさんの記事が大変参考になり、あっさり実現することが出来ました。

fuelphp側は、動かすだけなら特にやることはありません。
コンフィグファイルのbase_url を https://(自分のドメイン)にしたくらいかな。

どんなサービスを作ろうかな。
出来たら、また報告します^ ^
スポンサーサイト
こんばんは。
ロッキンジャパンのチケットが取れるかどうかひやひやしているゆってぃです。
ついでに秋に幕張でやるヨシヒコのイベントも抽選待ちです。
彼女と一緒に行こうと思って、チケットは二枚予約しました。
(なお、現時点での彼女は未定です…。でも、秋までには出来るよね!きっと出来るよね!?)

どうか当たりますように!!!

個人で契約しているさくらVPSのOSを、今更ながらCentOS7にしてみました。
このサーバは、バンドのHP等で使用しています。
今回は、OSのインストール後にとりあえずやったことのメモ書きを残します。

(1)ユーザーの追加
 ・useraddコマンドで、ログインユーザーを追加する
 ・管理者用IDをwheelグループに追加(こうすることで、sudoコマンドが使用可能になる)

(2)sshの設定変更
 ・/etc/ssh/sshd_configを修正し、rootログインの禁止とポート番号の修正を実施。
 ・/usr/lib/firewalld/services/ssh.xmlを編集し、開放するポート番号を修正
・firewall-cmd --permanent --add-service=http
 ・sshdサービスの再起動(systemctrl restart sshd)
 ・firewalldのリロード(firewall-cmd --reload)
ここで念のため再起動し、ここからはuseraddで追加したユーザでログイン

(3)Webサーバのインストール
 ・sudo yum -y install httpd
 ・sudo yum -y install php php-mbstring
 ・httpdのスタート(sudo systemctrl start httpd)
 ・firewalldに、http/httpsのポート開放を設定し、反映させる
  sudo firewall-cmd --permanent --add-service=http
  sudo firewall-cmd --permanent --add-service=https
  sudo firewall-cmd --reload
  (sudo firewall-cmd --list-allでservicesにhttp httpsがいることを確認)

これで、一応Webサーバが見られるようになりました。
systemdとかfirewalldとか、まだ慣れないなぁ・・・。
関連記事
こんばんは!
加齢のせいか、最近全然疲れがとれないゆってぃです…。
温泉にでも浸かって、ゆっくりしたいなぁ。

さて!前回の記事まで3回に渡ってDMXでステッピングモータを動かす記事を書いてきましたが、ややソフトに寄った内容だったので、今回はハード(回路)に関する記事を書こうと思います。

現在作成中のプロトタイプはArduinoを使用したものですので、DMXのトランシーバ回路もArduino用シールドを使用したものでした。
このシールドはとても便利なのですが、こういうものは、やはり自分で回路を理解した上で使用するべきです。

DMX512のトランシーバとは、回路的にはほぼRS485のトランシーバです。
RS485の信号をマイコンで受信可能なUART信号に変換し、ソフトでDMXのプロトコルを解釈して、はじめてDMX512のトランシーバになる訳です。
そこで今回は、ブレッドボードを使用して、ごく簡単なRS485のトランシーバを作ってみたいと思います。
※今回は受信のみ考えており、RS485信号の送信は検討外です。

<材料>
・ブレッドボード・・・1枚
・ACアダプタ(9V品)・・・1個(※5V以上なら何Vのものでも結構です)
・5V生成用レギュレータ(L7805CVなど)・・・1個
ブレッドボード用DCジャック・・・1個
・LTC485・・・1個
・ジャンパワイヤ・・・数本
・DMXコントローラ・・・1台

ここで、このトランシーバのキモとなるLTC485の使い方をご説明します。

まず電源(Vcc)です。
データシートによると、LTC485の電源は5Vです。
絶対定格は12Vですが、ノイズなどで一瞬でも12Vを越えてしまうと内部回路が破壊されてしまう恐れがあるので、データシートに従って5Vを入れましょう。
今回は9VのACアダプタから、レギュレータを介して5Vを供給します。

次に、/RE端子とDE端子です。
今回は受信機として扱うので、/RE端子とDE端子は共にGNDレベルとします。
また、使用しないDI端子も、念のためGNDレベルに落としておきましょう。

GND端子は、基板のGNDとDMXのCommon端子(GND端子)の両方に接続してください。
ただし、接続されるDMX機器が全て同一の電源に接続されていて、GNDも共通ならばこの限りではありません。

まとめると、各端子は下図の用に接続することになります。(拡大するにはクリックしてください)
各端子の接続について

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

RS485_参考回路.jpg

これをブレッドボード上で作ると、こんな感じになります。

LTC485試作回路1

回路図のCPU_RXの箇所を、オシロで測定してみます。

UART波形

無事にUART信号に変換することが出来ました。
次回はこの信号をArduinoに入力し、実際にDMXで受信したデータを出力して見ましょう!
最後までお読みいただいて、ありがとうございました!
こんばんは!
ゆってぃです。

さっそくですが、前回ご紹介したクラスを使って、DMXでステッピングモータを動かすコードを書きました。
コードはGitHubに置いてあります。

動きは極めてシンプルで、DMXの1ch目でモータが動かすターゲットの目標座標を、2ch目でモータ回転速度をもらい、目標座標に向かってモータを回転させるというものです。
ここで言う目標座標とは、ある基準位置からの距離になります。

Arduinoが起動すると、まずモータ回転させ、ターゲットを基準位置まで移動させます。
(基準位置にはセンサがあることが前提)
ターゲットが基準位置まで来ると、センサが反応しモータが停止します。
その後、DMXで受信した値を元に、基準位置からモータを回転させます。
(DMXでの受信値と基準位置からのステップ数は、DmxStepTable.hで定義しています)

なお、移動中に新しいデータを受信しても無視されます。
簡単なクラスの説明を以下に。
-------------
MainTask:メイン処理です。ステートマシンで動いています。(SystemMain.hにステートの定義があります)

MotorCtrl:モータ制御クラスです。下位モジュールとしてStoppableStepperクラスを持ちます。

ReceiverInterface:ポリモーフィズムの為の抽象クラスです。今回、モータ制御の信号はDMXで受け取りますが、将来的に別の通信(例えば、Artnetなど)になったとしても、具象クラスを入れ替えるだけで移植できるようになっています。

DmxReceiver:ReceiverInterfaceの具象クラスです。下位モジュールとして、Conceptineticsクラスを持ちます。

※Sensorクラスは、現状未使用です。
--------------------
実は人から頼まれてこのコードを書いたのですが、レビューをした結果、どうやら要求と合っていないことが判明しました。
これは要求分析がしっかり出来ていなかったせいです。
そのため、システムが大々的に作り直しになってしまいました。。。
(コードとセットで回路も作ったのですが、幸い、回路のほうはそこまで手直しをしなくてよさそうですが…)
要求分析は大事ですね。依頼側にとっても、出来たものを見て初めてわかることもあるので、要求分析は一緒になってしっかりやっておくべきでした。

で、なんやかんやあって、要求を満たすためには、Stepperクラスの様にモータ制御のために処理をブロッキングする仕組みではダメなことがわかりました。
そこで、次回はL6470を使ってこのシステムを改良します。
幸い、ライブラリがGitHub上にあったので、これを使ってシステムを作りたいと思います。

納期は1ヶ月。間に合うかなぁ。。。
関連記事
おはようございます!
昨日の昼間に寝すぎて、昨夜は4時間しか眠れなかったゆってぃです。

早速、前回の続きを行ってみましょう!
今回の記事では、ArduinoのIDEに付属しているStepperライブラリを拡張し、外部から停止可能な
StoppableStepperクラス
をご紹介します。
(名前がダサいのは僕のセンスが無いからです…)

従来のStepperに対し、拡張して出来ることはひとつだけ。
モータを回転させている時、外部から止めることが出来る!
ただそれだけです…。

githubにコードを上げました。
※このコードのライセンスはLGPLv2.1です。ご注意下さい。

基本的な部分は、スーパークラスであるStepperクラスを流用するのですが、ひとつ問題があります。
README.mdにも書きましたが、Stepperクラスは内部メソッドをprivate宣言しているため、サブクラスからは使用することが出来ないのです。
そのため、Stepperクラス自体に手を入れます。
大した変更ではありませんが、念のため元ファイルのバックアップは取っておいてください。

--- Steppere.h ------------------

void step(int number_of_steps);

int version(void);

// private: <- private宣言をコメントアウトして
protected: // <- protected宣言にします
void stepMotor(int this_step);

int direction; // Direction of rotation
unsigned long step_delay; // delay between steps, in ms, based on speed

------------------

次に、StoppableStepperクラスの説明に入ります。
ヘッダは以下の様になっております。

--- StoppableSteppere.h ------------------

File Edit Options Buffers Tools C Help
#ifndef STOPPABLE_STEPPER_H_
#define STOPPABLE_STEPPER_H_

#include "Sensor.h"
#include <stepper.h>

class StoppableStepper : public Stepper{
public:
StoppableStepper(int steps, int pin1, int pin2, int pin3, int pin4);
virtual ~StoppableStepper(){}
int stepWithStopper(int number_of_steps);
void stop();

private:
StoppableStepper();
void step(int number_of_steps);

private:
volatile bool stop_flag_;
};

#endif // STOPPABLE_STEPPER_H_

------------------

新しいメソッドが2つ追加されています。
stepWithStopper()メソッドstop()メソッドです。
(名前がダ・・・以下略)

stepWithStopper()は、Stepper::step()とほとんど使い方は同じですが、2つだけ違いがあります。
1つ目は、モーター駆動中にstop()メソッドが呼ばれると、モータの駆動を停止してメソッドを抜けるということ
2つ目は、入力に対して何ステップ移動したのかを、戻り値で返すこと

です。
2つ目が必要な理由は単純で、戻り値がvoidだと、stop()によりモータが停止されてしまった場合、どの程度の距離移動したのかが制御側で把握できなくなるためです。
なお、入力に負の数を入れると、負の数として値が戻ります。
StoppableStepper.cppをご覧いただければ、何をしているかはすぐに分かると思います。

また、従来のstep()メソッドと同様に、このメソッドはブロッキングです。
つまり、処理が終了するまでは抜けてきません。
ですので、stop()メソッドは、割り込みハンドラ等でコールしてください。

次回は、このクラスを使って何か出来るのかを見ていきましょう^^
関連記事
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク