亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机

项目概述

本教程将指导你制作一个 Arduino 颜色分拣机。该项目仅需一个 TCS3200 颜色传感器和两个微型舵机,结构简单却趣味十足。你可以观看视频教程,或阅读下文的图文详解。

设计原理

使用 SolidWorks 3D 建模软件设计了分拣机的机械结构,其工作流程如下:

Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机

3D 模型与图纸下载

完整的装配体 3D 模型可在 Thangs 在线查看并下载。激光切割所需的零件图纸(含所有尺寸)亦可从此处获取。

Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机

机械组装

本项目采用 3mm 厚纤维板。按图纸绘制轮廓,用手锯裁切所有零件。

Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机

先用热熔胶组装外框,再用万能胶固定两个舵机于各自平台,并安装导轨、支撑件及上层平台。

Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机
Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机

随后安装电源开关、DC 电源插座(供 Arduino 5V 供电)及颜色传感器模块。

Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机

电路原理图

Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机

所需元件清单

Arduino 源代码

上传代码前请确认舵机角度参数需根据实物微调。完整代码如下:

/* Arduino 颜色分拣机
 * 作者: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);
  // 设置频率分频为 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;
}

// 读取颜色自定义函数
int readColor() {
  // 读取红色通道
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);
  frequency = pulseIn(sensorOut, LOW);
  int R = frequency;
  Serial.print("R= "); Serial.print(frequency); Serial.print(" ");
  delay(50);
  // 读取绿色通道
  digitalWrite(S2, HIGH);
  digitalWrite(S3, HIGH);
  frequency = pulseIn(sensorOut, LOW);
  int G = frequency;
  Serial.print("G= "); Serial.print(frequency); Serial.print(" ");
  delay(50);
  // 读取蓝色通道
  digitalWrite(S2, LOW);
  digitalWrite(S3, HIGH);
  frequency = pulseIn(sensorOut, LOW);
  int B = frequency;
  Serial.print("B= "); Serial.print(frequency); Serial.println(" ");
  delay(50);

  // 阈值判断(需根据实测校准)
  if (R < 45 && R > 32 && G < 65 && G > 55) color = 1;      // 红
  if (G < 55 && G > 43 && B < 47 && B > 35) color = 2;      // 橙
  if (R < 53 && R > 40 && G < 53 && G > 40) color = 3;      // 绿
  if (R < 38 && R > 24 && G < 44 && G > 30) color = 4;      // 黄
  if (R < 56 && R > 46 && G < 65 && G > 55) color = 5;      // 棕
  if (G < 58 && G > 45 && B < 40 && B > 26) color = 6;      // 蓝
  return color;
}

代码关键点解析

Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机

完善细节

代码上传无误后,用热熔胶固定 Arduino Nano。利用透明塑料瓶制作料仓,盖上顶盖即完成整机组装。

Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机
Arduino 颜色分拣机制作指南:基于 TCS3200 传感器与舵机

项目完成!如有疑问欢迎在评论区留言交流。

制造工艺

  1. 用 Arduino 打造绚丽显示器 Ambilight 系统
  2. 用 Arduino UNO 和 OLED 显示屏制作经典 Pong 游戏:分步教程
  3. Arduino 音频频率检测:基于 FFT 测量最响亮声音峰值
  4. 自制 Arduino 电子宠物「Tamaguino」:复刻经典 Tamagotchi 全攻略
  5. 智能无线开关控制器:Arduino + 433MHz 远程操控墙壁开关
  6. Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
  7. 基于 Arduino Nano 的智能运动感应水枪
  8. 使用 SparkFun 7 段数码管构建可靠的 Arduino 倒计时器
  9. Arduino RGB LED调色器:三电位器混色入门项目
  10. Arduino 向日葵:制作电子向日葵追踪阳光
  11. 自制 Arduino 遥控保时捷赛车:从改装底盘到手机 App 控制全攻略
  12. Arduino 合成乐音:从零实现 88 键钢琴全音域