在本文中,我将向您展示如何制作Arduino颜色分拣机。您可以观看以下视频或阅读下面的书面文章。
设计
这就是我们所需要的Arduino项目是一个颜色传感器(TCS3200)和两个爱好者伺服电机,这使这个项目相当简单,但非常有趣的建设它。首先,我使用Solidworks 3D建模软件进行了颜色分类器的设计,工作原理如下:
- 最初,在充电器里的彩色彩虹下降到附在伺服电机上的平台上。
- 然后伺服电机旋转并将彩虹带至颜色传感器检测彩虹的颜色。
- 之后,底部伺服电机旋转到特定位置,然后顶部伺服电机再次旋转,直到铲斗落入导轨中。
在这里,您可以下载3D模型,以及构建此Arduino项目所需的所有尺寸的图纸。
以下图纸可用于激光切割机箱所有零件:
构建Arduino颜色分类器
我在这个项目中使用的材料是一个3毫米的纤维板。我按照图纸在纤维板上重新画了零件,用小手锯把所有零件切割成尺寸。
一旦我把所有的零件准备好,我就开始组装它们。首先,我用胶枪组装外部部件。
然后我用万能胶水把两个伺服电机粘在他们的平台上,并把它们连接到组件上。
之后再次使用胶水,我将导轨粘贴在底部伺服电机以及顶部伺服电机所需的支撑和平台上。
接下来,我插入了一个开关和一个电源插孔,通过5V适配器为Arduino供电。在第三个平台上,我插入了颜色传感器。
我根据以下电路示意图将组件连接在一起。
您可以从下面的链接获取此Arduino项目所需的组件:
- TCS230 TCS3200颜色传感器……。亚马逊/Banggood/阿里巴巴全球速卖通
- arduino nano .................................。亚马逊/Banggood/阿里巴巴全球速卖通
- 面包板和跳线.........亚马逊/Banggood/阿里巴巴全球速卖通
- 伺服电机 .....................................亚马逊/Banggood/阿里巴巴全球速卖通
- 开关 ................................................亚马逊/Banggood/阿里巴巴全球速卖通
- 权力杰克 ........................................亚马逊/Banggood/阿里巴巴全球速卖通
yaboAG娱乐城披露:这些是附属链接。作为一个亚马逊助理,我从合格的购买中赚取。
Arduino颜色分类器源代码
此时,我们首先需要对Arduino进行编程,然后完成组装。这里是Arduino代码:
/*Arduino项目-颜色分拣机**Dejan Nedelkovski,www.HowToMechatronics.com**/#包括#定义S0 2#定义S1 3#定义S2 4#定义S3 5#定义传感器输出6伺服topServo;伺服底部伺服;int频率=0;int颜色=0;无效设置(){pinMode(S0,输出);pinMode(S1,输出);pinMode(S2,输出);pinMode(S3,输出);pinMode(sensorOut,INPUT);//将频率缩放设置为20%数字写入(S0,高);数字写入(S1,低);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);开关(颜色){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;case 0:break;}delay(300);for(int i=65;i>29;i--){-topServo.write(i);delay(2)}delay(200);对于(int i=29;i<115;i++){topServo.write(i);delay(2);}color=0;}//自定义函数-readColor()int readColor(){//设置要读取的红色滤波光电二极管数字写入(S2,低);数字写入(S3,低);//读取输出频率=脉冲信号(传感器输出,低);int R=frequency;//在串行监视器串行上打印值。打印(“R=”);//打印名称串行。打印(频率);//打印红色频率串行。打印(“”);延迟(50);//设置要读取的绿色滤波光电二极管数字写入(S2,高);数字写入(S3,高);//读取输出频率=脉冲信号(传感器输出,低);int G=frequency;//在串行监视器串行上打印值。打印(“G=”);//打印名称串行。打印(频率);//打印红色频率串行。打印(“”);延迟(50);//设置要读取的蓝色滤波光电二极管数字写入(S2,低);数字写入(S3,高);//读取输出频率=脉冲信号(sensorOut,低);int B=frequency;//在串行监视器上打印值serial.print(“B=”);//打印名称serial.print(frequency);//打印红色频率serial.println(“”);延迟(50);如果(R<45&R>32&G<65&G>55){color=1;//红色}如果(G<55&G>43&B<47&B>35){color=2;//橙色}如果(R<53&R>40&G<53&G>40){color=3;//绿色}如果(R<38&R>24&G<44&G>30){color=4;//黄色}如果(R<56&R>46&G<65&G>55){color=5;//棕色}如果(G<58&G>45&B<40&B>26){color=6;//蓝色}返回颜色;}
代码说明:
因此,我们需要包括“伺服.h”库中,定义颜色传感器将连接到的管脚,创建伺服对象,并声明程序所需的一些变量。在设置部分,我们需要将管脚定义为输出和输入,设置颜色传感器的频率缩放,定义伺服管脚,并启动串行通信以打印结果f串行监视器上读取的颜色。
在循环部分,我们的程序从移动顶部开始伺服电机到战马的位置。注意,这个值115适合我的零件和我的伺服电机,所以你应该调整这个值以及以下值的伺服电机根据你的构建。
接下来使用“for”循环,我们将旋转并把彩虹柱带到颜色传感器的位置。我们使用“for”循环,这样我们就可以通过改变循环中的延迟时间来控制旋转的速度。
接下来,在半秒的延迟之后,使用定制函数readColor(),我们将读取skittle的颜色。下面是自定义函数的代码。利用颜色传感器的4个控制引脚和频率输出引脚读取柱状图的颜色。传感器为每个彩虹读取3个不同的值,红色,绿色和蓝色,根据这些值,我们告诉什么是实际的颜色。为更多的细节TCS3200颜色传感器是如何工作的你可以查看我之前的详细教程。
这里是我从传感器得到的每个彩虹的RGB值。请注意,这些值可能会变化,因为传感器并不总是准确的。因此,使用这些“if”语句,我们允许传感器对特定颜色的测试值误差为+-5左右。例如,如果我们有一个Red skittle,第一个if语句将为真,变量color将得到值1。这就是readColor()自定义函数所做的,然后使用“switch-case”语句,我们将底部伺服器旋转到特定位置。最后,我们进一步旋转顶部的伺服电机,直到skittle落入导轨,并再次将其送回初始位置,以便重复这个过程。
完成的设计
上传代码后,我使用胶枪固定Arduino板。
然后使用透明的塑料瓶,我制造充电器,以及顶部将其胶合到装配并完成项目。
欢迎在下面的评论部分提出任何问题。
嗨,伟大的项目!
我只是想知道Arduino是如何支持的。因此,代码从计算机上传到arduino,但是它被拔掉并用适配器供电?那是刚插入墙上的插座吗?
大家好,谢谢!是的,上传时Arduino是通过电脑的USB连接和供电的。上传代码后,Arduino由一个5V适配器供电,这可以从本文提供的电路原理图中看到。
[…]为你做这件事?作为最近教程的一部分,Dejan Nedelkovski使用TCS3200颜色传感器、两个业余爱好者伺服电机和一个Arduino[…]构建了我们称之为“Arduino颜色分类器”
您好,我想知道您是如何将所有三个组件的GND和5V直接连接到Arduino Nano,而无需使用面包板或屏蔽。因为只有一个引脚的5V和两个引脚的GND和你有3个组件。
也真的很酷的项目!
谢谢!
我焊接了4根跳线。
我的电脑无法打开slddrw文件,除非买一个5美元的应用程序。
绘图文件是。rar文件,这是一种非常常见的文件格式,可以很容易地打开或/和提取,甚至在线。我希望你能想办法打开它。
你好大师,我想问一下开关和电源千斤顶使用的东西
请重新检查文章,我有添加链接,所以你可以看到什么开关和电源插座可以使用。
先生,你的主意太棒了。我想开发这个项目为我的最后一年项目(FYP)。你能在这个项目上给我更多指导吗?我想我想在整理后添加声音为开发。希望不久能收到你的来信
马来西亚- - -
谢谢。我认为视频和文章本身涵盖了制作这个项目所需的一切,你有3D模型,图纸,电路原理图和源代码。
你好,先生,我真的被你的行为所鼓舞。不管怎样,我只是想知道,既然你用的是Arduino Nano,我用Arduino Uno也会一样吗?我需要很多指导。谢谢
是的,肯定有用。
你好先生,我有同样的问题,因为我的arduino nano是不工作的pc。我不能编程arduino nano我该怎么办??我应该用uno代替nano ????吗请帮助. .
当然你也可以用不同的Arduino。
这个设计工具叫什么名字?
扎实的作品。
嗨,德扬,
你做了一个伟大的项目。我正在尝试使用TCS3200颜色传感器与4 led直接在板上(没有腿…传感器有圆形…请参阅这个链接:(link REMOVED)。在arduino中测试草图时,我发现颜色的读数变化很大。这是否意味着这些引导应该接近传感器船以获得准确的值,如在你的项目,或我应该购买一个像在你的项目?
请建议,
当做
nabil.
是的,读数非常稳定,地雷传感器也是如此。不过,传感器离颜色越近越好。
你用的是什么适配器?5 v / 1或5 v / 2吗?
我用的是5V/2A,但5V/1A也可以。
你好,先生
如何调整Top伺服电机的值旋转,并将skittle带到颜色传感器检测其颜色。
调整topServo.write()函数的值,或for循环的范围。
我买了TCS230以上的TCS3200色感器。所以今天就到了。但是颜色传感器不适合在纤维板上。纤维板上的方框很小,便于放置传感器。你怎么把它放进纤维板里?
纤维板的平方尺寸为2.5cm X 1.3cm。
但颜色传感器的尺寸是3厘米x1.3厘米。
简单地增加整个纤维板和传感器将适合。
你用过哪条跳线?
普通的…
我已经完成了模型,项目正好工作。只是颜色传感器遇到混淆:/
我已经根据颜色传感器设置了频率。但同一颜色,底部伺服仍然以不同角度旋转
我该怎么办?
传感器不稳定,读取时会出错。另外,它的读数取决于几个因素,比如你正在阅读的颜色,以及环境照明。因此,如果颜色较暗,如果使用同一颜色对象并在日光下进行测试,可能会得到不同的读数。
为了使其工作,必须测试每个物体的颜色读数,并根据读数调整代码底部的R、G和B值。
颜色传感器的读数随机变化。橙色,红色,蓝色的彩虹糖被随机分类。传感器故障?
是的,传感器是问题所在。你必须根据你的阅读情况调整节目。
嗨. .İt is great project! I did this but bottom servo not working.
我认为颜色传感器的输出没有连接arduino, @Mustafa检查一下
你好,我试图复制你的项目,但我的servos只是不动,我一直使用不同的电源,甚至一个5v-2A电源,但它不工作,
你能告诉我你用什么电源给你的电子设备供电吗???yabo7. com
你能给我一些建议吗?”
我们用的是什么电机?你试过换两个发动机吗?是这样的吗?
你好。我按照你的指示和代码,但是两个伺服系统未运行。可能是什么原因?
它可以是任何东西。你能说得具体点吗。还要再次检查你的连接。
嗨,德扬先生
好的项目
我尝试同样的项目和复制您的代码到我的Mega2560。我已经按照原理图做了。但是,我的底部伺服不工作。什么错了吗?
谢谢你!
谢谢。你用的是哪种伺服电机?再次检查你的连接。
先生,如何给Arduino供电?我可以直接用5v电池连接吗?或者我必须使用Arduino电源模块。请帮助或提供电源链接,以便在线购买。
好吧,如果您有一个5V电池适配器,您可以直接连接到Arduino的5V引脚。
嗨,谢谢你对我下一个项目的灵感。只需等待我的TCS3200传感器即可。
在阅读和理解您的代码时,我发现了两个输入错误(当然,这并不影响功能,只是我对它如何工作的初步理解)。亚博88下载在第116行和第128行中,您重复注释“//打印红色颜色频率”,但这些行应该分别表示绿色和蓝色。
再次感谢如此清晰和简单的方法。
你好,先生。这个项目我们需要用usb连接arduino板和电源适配器。
你可以使用它们中的任何一个。
你好,请帮我一下,当我把蓝色的东西放在颜色传感器上时,它发出的是绿色
您必须手动调整传感器值以匹配真实颜色。
如何? ?我能做到吗?
我可以用sg909g伺服电机做两个位置吗??通过使用薄(非常轻)胶合板……!!!!!!
是的,当然,他们会很好的。
非常感谢你....我正在这样一个项目作为我的主要项目
你好,
对于代码底部的if语句,为什么只使用其中两种颜色(即。
如果(R32和G55){
颜色= 1;// 红色的
}) - >仅使用红色和绿色。你为什么不使用红色,绿色和蓝色在每个陈述中?
谢谢,
嗨,这是因为传感器输出不精密,准确,我变得非常相似的价值观,相互接近,对于每个R, G, b .为了更好的独立,或承认的颜色我犯了“如果”语句以这样一种方式只使用两种颜色来定义我需要的颜色。
你好!如何手动调整传感器值以匹配颜色?谢谢你的回答
ps伟大的项目!
将要输入的值打印到Serial监视器中,然后在readColor()自定义函数中调整它们。
嘿。
我做了整个模型,得到了和你完全一样的部件,但是我的TCS3200在面板上有红色的led,而不是白色的。
而且,对于每种颜色(R, G或B),它读取的值都在15000左右。
你知道为什么会这样吗?
嗨,嗯,你可能有一个不同的模块版本,但它应该是一个问题,你可以做到它的工作。您只需在ReadColor()自定义函数中的“if”语句中,您必须调整每个颜色的值。
您好,我有一个问题 - 同时尝试设置一切,如此所解释的那样,我无法根据颜色变化让我的传感器电机旋转。它只是保持不变。电机很好,用工作替换它产生相同的结果。你有什么可能是这个问题的暗示吗?谢谢。
你好,问题可能是你从颜色传感器得到的值和我的值不匹配。首先,您必须查看从颜色传感器获得的特定颜色的值,然后在readColor()自定义函数中调整这些值,其中最后一个“if”语句位于该函数中。
你好,德扬,
这是一个非常好的项目,但我有一个问题。其中一个伺服电机在同一方向反复运动,但底部伺服电机根本不动。我该怎么办?
你没有得到与我相同的颜色值,所以你应该调整它们。
嘿伙计,我有一点(巨大的)问题,当我试图上传程序时,它说“读取影科学”没有在这个范围内宣布“我不知道为什么会发生这种情况,我检查了整个程序,但它是与此页面相同。
我和Arduino一样糟糕,所以我希望你能帮助我解决它。
你在代码中有一个错误,你可能没有正确地复制它。
很好的项目…尺寸单位是毫米我想..我被图表中的比例1:5弄糊涂了。。
你好,先生
如果我不能写得很好,我很抱歉
我想问一下,这个arduino可以用彩色传感器读取2秒的平均颜色,以便“告诉”这是基于颜色的内容
比如苹果里的红色,因为苹果并不是真正的红色。我想如果我们在几秒内取平均值,这个arduino可以告诉它一个苹果,等等
如果你能帮助我请联系我,因为我对你的想法感兴趣
确保它可以用于此类目的。但这取决于你将红色苹果比较什么。例如,如果将它们与绿色苹果进行比较,则可能很容易区分颜色。
我的意思是只看红苹果或绿苹果
但是,接下来是
输出正在抵消“Apple”和LCD上显示的信息输出
例如,我把绿苹果和红苹果放在与传感器集成的管道中,它会自动排序1轮中有多少绿苹果和多少红苹果
我真的需要您的帮助,先生
美好的一天,先生,
很棒的项目。我只有一个问题-我如何改变方向的顶级伺服电机?动作是对的,只是方向。我需要把它从逆时针改为顺时针。
谢谢你
伺服电机可以旋转180度,因此由您来放置/定位伺服电机,以便您可以控制所需的运动或方向。
如果分拣员把绿色和橙色的彩虹糖混在一起是正常的吗。
是的,正常是彩色探测器并不那么准确。
你好。我正在使用您的项目作为学校机器人学决赛。您的网站非常乐于助人,但我想知道您曾经喂过臭虫的管有多大。这款材料只是一个便宜的塑料吗?谢谢你。
嘿,我用简单的水或瓶子里的管子。
我的底部伺服电机不工作。我需要做什么?我还需要重新检查我的连接。但这没有错。
如果你用Arduino给两个伺服器供电,可能你没有足够的电力。尝试使用外部电源。
嘿,你不可能有一张只运行伺服系统的草图吗?
你好,
你做的项目很好。
你给你的粉丝们的支持也很棒!
我刚刚开始arduino,这是我的第一个“真正的”项目。
关于供电,我可以把7,4V的Lipo电池放在arduino的Raw pin上吗?
也许你可以向我推荐一些编程教程,我只使用过Codesys 2.3中与PLC一起使用的功能框图。
提前致谢。
Gijs
谢谢。您可以使用7.4V为Arduino供电,但您需要将其连接到Power Jack或Vin pin。使用这种方法,7.4V将通过Arduino板的5V稳压器,因此Arduino将没有问题。
嗨。谢谢你的指导。它真的很有帮助。如果这个问题太愚蠢,我很抱歉。
是否有可能仅使用usb端口为arduino、传感器和伺服器供电?
我计划使用powerbank作为它的电源。如果可能,如何做到这一点,电子原理图会保持不变吗?
谢谢。
谢谢。电气原理图将保持不变,您应该能够用PowerBank为项目供电。
嗨,我认为这是一个非常有趣的项目,我正在学习电子,我将在第一年,我想做一个类似于你的教育目的的工作。yabo7. com
我想能够报价你的项目,它不会打扰你。
谢谢!是的,这是学习电子学的好项目,当然,继续吧,我肯定你会玩得很开心的。yabo7. com
德扬,
我已经做了颜色分类器,我是Arduino的新手,遇到了问题。我的底部伺服不动。我已经向传感器展示了几种不同的颜色。我已经试用了备用伺服电机,我已经检查了我的跳线和线路示意图。此外,我的顶级伺服似乎规模不正确,因为它没有摆动足够远的任何方向,以捡起一个小七,并下降它的斜槽。
通过阅读评论,这似乎是一个普遍的问题没有底部伺服工作。你能给我一些指导吗?或故障排除技巧?
如何查看颜色传感器看到的值?
顺便说一句,你的网站岩石!
谢谢你!是的,这是真的,许多有问题的底部伺服。我能猜到的是,颜色传感器没有读取正确的值。您需要测试从颜色传感器获得的值,并调整代码底部的if语句中的值。
另一种测试伺服是否工作的方法是手动设置“int color=0;”变量,该变量位于代码的顶部,从1到6,所以伺服应该移动到这些位置中的任何一个。如果这行得通,那问题就是你从传感器得到的值肯定与代码底部的If语句不匹配。
你好,我打不开solidworks文件。你画那张图的版本是什么?
嘿,这是2017年版。
这个设计的高度是多少?
30厘米左右。当然,你可以修改它。
下午好,
恭喜你有了这个想法!这是惊人的!
我想知道如果使用S3S2OUTVCC颜色传感器而不是你之前提到的颜色传感器会不会有问题。
感谢!
当然,你可以使用不同的颜色传感器,但它需要适当的编程。
非常感谢,真的帮了我!
你好先生
伟大的项目
我让它成为一切正常工作,但是参议员没有给出一致的RGB读数,他们不是这样的方式我可以决定任何范围
如果我给出一个大范围的红色橙色紫色一切都在混合
请先生,对此有什么诀窍吗?我担心它要在7月份提交,真的需要你的帮助,谢谢
嘿,谢谢!问题是传感器本身,它不是那么稳定和可靠。尝试使用不同的环境光,尝试用一个简单的灯泡或其他东西为传感器读取区域添加更多的光。
Dejan,使用3D打印机制作分拣机,有一些小问题。修改的代码顶部伺服位置,容易。颜色传感器不是真正的辉煌,但改变了if声明,以允许相当广泛的读数。我的问题是,它所有的工作都很好,直到我连接底部伺服,然后它做奇怪的事情。两个伺服器都来回抖动。尝试了不同的伺服,不同的UNO,不同的电源。把Uno引脚从8改到9,没有区别。有什么想法?是的,仔细检查线路!!
PS:就像你的教程一样,它很容易理解。
嘿,我不太确定连接底部伺服器的时候会有什么问题。很多人报告说底部伺服器出了问题。我没有任何问题。我建议从独立的外部电源供电,而不是Arduino 5V引脚。还要确保正确设置if语句,以便一切正常工作。
同样,尝试一步一步地进行,用一个简单的代码,首先移动顶部的伺服,然后是底部的伺服,以检查是代码还是伺服出了问题。尝试为它们提供外部电源,尝试为两个伺服提供其他可用的Arduino引脚。