工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoカラーソータープロジェクト

この記事では、Arduinoカラーソーターを作成する方法を紹介します。次のビデオを見るか、以下の記事を読むことができます。

デザイン

このArduinoプロジェクトに必要なのは、1つのカラーセンサー(TCS3200)と2つの趣味のサーボモーターだけです。これにより、このプロジェクトは非常にシンプルですが、構築するのは非常に楽しいものになります。まず、Solidworks 3Dモデリングソフトウェアを使用して、カラーソーターの設計を行いました。その動作原理は次のとおりです。

  • 最初に、充電器に保持されている色付きのスキットルズは、上部のサーボモーターに取り付けられたプラットフォームに落下します。
  • 次に、サーボモーターが回転し、スキトルをカラーセンサーに移動します。カラーセンサーはその色を検出します。
  • その後、下部のサーボモーターが特定の位置に回転し、次に上部のサーボモーターが、スキトルがガイドレールに落ちるまで再び回転します。

ここでは、3Dモデルと、このArduinoプロジェクトの構築に必要なすべての寸法の図面をダウンロードできます。

この3Dモデルを見つけてダウンロードしたり、Thangsのブラウザで調べたりすることができます。

Thangsでアセンブリ3Dモデルをダウンロードします。

次の図は、ケースのすべての部品をレーザー切断するために使用できます。

Arduinoカラーソーターの構築

このプロジェクトで使用した素材は、3mmティックのファイバーボードです。図面に従ってファイバーボード上のパーツを再描画し、小さなハンドソーを使用してすべてのパーツをサイズに合わせてカットしました。

すべての部品の準備ができたら、組み立てを開始しました。まず、グルーガンを使って外側の部品を組み立てました。

次に、万能接着剤を使用して、2つのサーボモーターをプラットフォームに接着し、アセンブリに取り付けました。

その後、再び接着剤を使用して、下部サーボモーターのガイドレールと、上部サーボモーターに必要なサポートとプラットフォームを取り付けました。

次に、5VアダプターでArduinoに電力を供給するためのスイッチと電源ジャックを挿入し、3番目のプラットフォームにカラーセンサーを挿入しました。

次の回路図に従ってコンポーネントを接続しました。

このArduinoプロジェクトに必要なコンポーネントは、以下のリンクから入手できます:

  • TCS230TCS3200カラーセンサー……。
  • ArduinoNano……………………………。
  • ブレッドボードとジャンパー線………
  • サーボモーター………………………………。
  • スイッチ…………………………………。……..
  • パワージャック……………………………。……

Arduinoカラーソーターのソースコード

この時点で、最初にArduinoをプログラムしてから、アセンブリを完了する必要があります。 Arduinoコードは次のとおりです:

/*     Arduino Project - Color Sorting Machine
 *
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *
 */
#include <Servo.h>

#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6

Servo topServo;
Servo bottomServo;

int frequency = 0;
int color=0;

void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);

  // Setting frequency-scaling to 20%
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);

  topServo.attach(7);
  bottomServo.attach(8);

  Serial.begin(9600);
}

void loop() {

  topServo.write(115);
  delay(500);
  
  for(int i = 115; i > 65; i--) {
    topServo.write(i);
    delay(2);
  }
  delay(500);
  
  color = readColor();
  delay(10);  

  switch (color) {
    case 1:
    bottomServo.write(50);
    break;

    case 2:
    bottomServo.write(75);
    break;

    case 3:
    bottomServo.write(100);
    break;

    case 4:
    bottomServo.write(125);
    break;

    case 5:
    bottomServo.write(150);
    break;

    case 6:
    bottomServo.write(175);
    break;
    
    case 0:
    break;
  }
  delay(300);
  
  for(int i = 65; i > 29; i--) {
    topServo.write(i);
    delay(2);
  } 
  delay(200);
  
  for(int i = 29; i < 115; i++) {
    topServo.write(i);
    delay(2);
  }
  color=0;
}

// Custom Function - readColor()
int readColor() {
  // Setting red filtered photodiodes to be read
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  int R = frequency;
  // Printing the value on the serial monitor
  Serial.print("R= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(50);

  // Setting Green filtered photodiodes to be read
  digitalWrite(S2, HIGH);
  digitalWrite(S3, HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  int G = frequency;
  // Printing the value on the serial monitor
  Serial.print("G= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(50);

  // Setting Blue filtered photodiodes to be read
  digitalWrite(S2, LOW);
  digitalWrite(S3, HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  int B = frequency;
  // Printing the value on the serial monitor
  Serial.print("B= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.println("  ");
  delay(50);

  if(R<45 & R>32 & G<65 & G>55){
    color = 1; // Red
  }
  if(G<55 & G>43 & B<47 &B>35){
    color = 2; // Orange
  }
  if(R<53 & R>40 & G<53 & G>40){
    color = 3; // Green
  }
  if(R<38 & R>24 & G<44 & G>30){
    color = 4; // Yellow
  }
  if(R<56 & R>46 & G<65 & G>55){
    color = 5; // Brown
  }
  if (G<58 & G>45 & B<40 &B>26){
    color = 6; // Blue
  }
  return color;  
}Code language: Arduino (arduino)

コードの説明:

したがって、「Servo.h」ライブラリを含め、カラーセンサーを接続するピンを定義し、サーボオブジェクトを作成し、プログラムに必要ないくつかの変数を宣言する必要があります。セットアップセクションでは、ピンを出力と入力として定義し、カラーセンサーの周波数スケーリングを設定し、サーボピンを定義して、シリアルモニターで読み取った色の結果を印刷するためのシリアル通信を開始する必要があります。

>

ループセクションでは、プログラムは上部サーボモーターをスキトルチャージャーの位置に移動することから始まります。この115の値は、私の部品とサーボモーターに適していることに注意してください。したがって、この値と、ビルドに応じてサーボモーターの次の値を調整する必要があります。

次に、「for」ループを使用して、スキトルを回転させ、カラーセンサーの位置に移動します。ループの遅延時間を変更することで回転速度を制御できるように、「for」ループを使用しています。

次に、0.5秒の遅延の後、カスタムメイドの関数readColor()を使用して、スキトルの色を読み取ります。カスタム関数のコードは次のとおりです。カラーセンサーの4つの制御ピンと周波数出力ピンを使用して、スキトルの色を読み取ります。センサーは、スキトルごとに赤、緑、青の3つの異なる値を読み取り、これらの値に従って実際の色を示します。 TCS3200カラーセンサーの動作の詳細については、以前の詳細なチュートリアルを確認してください。

これが、各スキトルのセンサーから取得したRGB値です。センサーは常に正確であるとは限らないため、これらの値は変動する可能性があることに注意してください。したがって、これらの「if」ステートメントを使用して、特定の色のテスト値の約+-5のエラーをセンサーに許可します。たとえば、Redスキトルがある場合、最初の「if」ステートメントはtrueになり、変数「color」は値1を取得します。これがreadColor()カスタム関数の機能であり、その後「switch-case」を使用します。 」ステートメントでは、下部サーボを特定の位置に回転させます。最後に、スキトルがガイドレールに落ちるまで上部サーボモーターをさらに回転させ、プロセスを繰り返すことができるように、再び初期位置に戻します。

デザインの仕上げ

コードをアップロードした後、グルーガンを使用してArduinoボードを固定しました。

次に、透明なペットボトルを使用して充電器を作成し、上部と一緒に組み立てに接着してプロジェクトを終了しました。

以下のコメントセクションでお気軽に質問してください。


製造プロセス

  1. Arduinoを使用してモニターをAmbilightにする
  2. ArduinoPongゲーム-OLEDディスプレイ
  3. 可聴周波数検出器
  4. Arduinoたまごっちクローン-デジタルペット
  5. ワイヤレスライトスイッチマニピュレーター
  6. Tech-TicTacToe
  7. モーションセンサー水鉄砲
  8. Arduinoカウントダウンタイマー
  9. ArduinoRGBカラーミキサー
  10. Arduinoひまわり:電子サンダンサー
  11. RCポルシェカー(Arduinoプロジェクト)