工場はおもちゃ、一種のレイアウトになります。 また、このレイアウトでは、さまざまな技術プロセスの制御アルゴリズムの開発に挑戦できます。 誰かが鉄道のモデルを作成しています。私は小さな工場のモデルを作成します。
Habréには、Arduinoマイクロプロセッサベースの設計プラットフォームに基づいたロボットの設計とプログラミングについて著者が語る素晴らしい投稿がすでに多くありました。 これらは主に、車輪付きまたは追跡されたシャーシ上の自律型またはリモートコントロール付きのモバイルロボットに関する記事です。 産業用アプリケーションについてはほとんど何もありません。 この点で、Arduinoによって制御される小さな自動システムの設計とプログラミングのプロセスの説明の形で「5セント」を提供します。
*-存在しません。
輸送する
私たちの工場は何から始めるべきですか? 賢明な人々は、生産における適切なロジスティクスが企業全体の成功を決定すると言います。
「近代的な企業の高性能な作業は、適切に組織化され、物品を移動する作業手段-機械を持ち上げて輸送することなしには不可能です。 動作原理に従って、これらのマシンは2つのグループに分けられます:周期的および連続的動作のマシン。 1つ目はクレーンなどを含み、2つ目はさまざまなタイプのコンベアを含みます。」
したがって、当社の工場で最初の自動機は、部品を輸送するために使用される単純なコンベアベルトです。
01.コンベアに沿って移動する商品のサンプル。

建設業
コンベヤーは、fischertechnikデザイナーのパーツで組み立てられています。 テープはM1モーターによって駆動されます。 制御システムはArduino UNOコントローラーに基づいています。 9V PSUからのすべての電子機器の電源。
02.コンベヤーが組み立てられました。

エンジンに電力を供給するために、電源キー付きのDFRobot Motor Shield拡張ボードが使用されます。 これらのキーの制御信号は、Arduinoコントローラーのピンから送られます。 私の場合、このボードにある2つのチャネルのうち1つだけが使用されます。
03.回路はフリッツを使用して描画されます。

アルゴリズム
手始めに、コンベアの簡単な手動制御を実装しました。 コントロールパネルにはS1、S2、S3の3つのボタンがあります。 ボタンS1はベルトを一方向に移動させ、ボタンS2は他の方向に移動させ、ボタンS3はコンベアを停止させます。
04.ボタン付きのリモートコントロール。

私が得たものは次のとおりです(Arduino UNOのスケッチ、IDEバージョン1.0):
/* Conveyor control system */ // int S1Pin = 8; int S2Pin = 9; int S3Pin = 10; // int M1PWMPin = 5; int M1DIRPin = 4; // int motorSlowSpeed = 50; int motorNormSpeed = 130; int motroFastSpeed = 255; // int motorFwd = LOW; int motorRev = HIGH; int S1,S2,S3 = 0; // int M1PWM = 0; // 1 int M1DIR = 0; // 1 int State = 0; void M1Fwd() { M1PWM = motorNormSpeed; M1DIR = motorFwd; } void M1Rev() { M1PWM = motorNormSpeed; M1DIR = motorRev; } void M1Stop() { M1PWM = 0; } void readInputs() { S1 = digitalRead(S1Pin); S2 = digitalRead(S2Pin); S3 = digitalRead(S3Pin); } void writeOutputs() { analogWrite(M1PWMPin, M1PWM); digitalWrite(M1DIRPin, M1DIR); } void setup() { // 4 5 pinMode(M1PWMPin, OUTPUT); pinMode(M1DIRPin, OUTPUT); // 8,9 10 pullup pinMode(S1Pin, INPUT); // set pin to input digitalWrite(S1Pin, HIGH); // turn on pullup resistors pinMode(S2Pin, INPUT); digitalWrite(S2Pin, HIGH); pinMode(S3Pin, INPUT); digitalWrite(S3Pin, HIGH); Serial.begin(57600); } void loop() { readInputs(); if (S1 == LOW) { M1Rev(); } if (S2 == LOW) { M1Fwd(); } if (S3 == HIGH) { M1Stop(); } writeOutputs(); Serial.println(State, DEC); }
05.組み立てプロセス。
進む
次の段階では、コンベアにセンサーを装備する必要があります。センサーは、移動する負荷がある場合にのみベルトの移動を可能にします。