在本文中,我将向您展示如何制作Arduino颜色分拣机。您可以观看以下视频或阅读下面的书面文章。
设计
我们所需要的一切Arduino项目是一个颜色传感器(TCS3200)和两个爱好者伺服电机,这使这个项目相当简单,但非常有趣的建设它。首先,我使用Solidworks 3D建模软件进行了颜色分类器的设计,工作原理如下:
- 最初,在充电器里的彩色彩虹下降到附在伺服电机上的平台上。
- 然后伺服电机旋转并将彩虹带至颜色传感器检测彩虹的颜色。
- 之后,底部伺服电机旋转到特定位置,然后顶部伺服电机再次旋转,直到铲斗落入导轨中。
在这里,您可以下载3D模型,以及包含构建此Arduino项目所需的所有尺寸的图纸。
以下的附图中,可以使用用于激光切割的所有的情况下的部分:
建立Arduino颜色分拣机
我用于这个项目的材料是3毫米刻度光纤板。我根据图纸重绘纤维板上的零件,并使用小手锯切所有部件到尺寸。
一旦我把所有的零件准备好,我就开始组装它们。首先,我用胶枪组装外部部件。
然后使用通用胶水,我将两个伺服电机粘在其平台上并将其连接到组件上。
之后再次使用胶水,我将导轨粘贴在底部伺服电机以及顶部伺服电机所需的支撑和平台上。
接下来,我插入了一个开关和一个电源插孔,通过5V适配器为Arduino供电。在第三个平台上,我插入了颜色传感器。
我根据以下电路示意图将组件连接在一起。
您可以从下面的链接获取此Arduino项目所需的组件:
- TCS230 TCS3200颜色传感器.......亚马逊/伯格多德/aliexpress.
- Arduino纳米……………………………。亚马逊/伯格多德/aliexpress.
- 面包板和的跳线.........亚马逊/伯格多德/aliexpress.
- 伺服电机 .....................................亚马逊/伯格多德/aliexpress.
- 转变…………………………………。……..亚马逊/伯格多德/aliexpress.
- 权力杰克 ........................................亚马逊/伯格多德/aliexpress.
必威外围提钱披露:这些是附属链接。作为一个亚马逊助理,我从合格的购买中赚取。
Arduino颜色分类器源代码
此时,首先,我们需要编程Arduino,然后完成装配。这是Arduino代码:
/*Arduino项目-颜色分拣机**由Dejan Nedelkovski编写,www.HowToMechatronics.com**/#包括#定义S0 2#定义S1 3#定义S2 4#定义S3 5#定义传感器输出6伺服topServo;伺服系统;整数频率=0;int color=0;void setup(){pinMode(S0,输出);pinMode(S1,输出);pinMode(S2,输出);pinMode(S3,输出);pinMode(sensorOut,输入);//将频率缩放设置为20%数字写入(S0,高);数字写入(S1,低);topServo.attach(7);bottomServo.attach(8);Serial.begin(9600);}void loop(){topServo.write(115);延迟(500);for(int i=115;i>65;i--){topServo.write(i);delay(2);}delay(500);color=readColor();delay(10);switch(color){案例1:bottomServo.write(50);break;案例2:bottomServo.write(75);break;案例3:bottomServo.write(100);break;案例4:bottomServo.write(125);break;案例5:bottomServo.write(150);break;案例6:bottomServo.write(175);break;案例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;}//自定义函数-readColor()int readColor(){//设置红色滤波光电二极管为读-digitalWrite(S2,低);digitalWrite(S3,低);//读取输出频率频率=脉冲信号(sensorOut,低);int R=频率;//在串行监视器串行上打印值。打印(“R=”;//打印名称串行。打印(频率);//打印红色频率串行。打印(“”);延迟(50);//设置绿色滤波光电二极管以读取数字写入(S2,高);数字写入(S3,高);//读取输出频率频率=脉冲信号(sensorOut,低);int G=频率;//在串行监视器串行上打印值。打印(“G=”;//打印名称串行。打印(频率);//打印红色频率串行。打印(“”);延迟(50);//设置蓝色滤波光电二极管为读取数字写入(S2,低);数字写入(S3,高);//读取输出频率频率=脉冲信号(sensorOut,LOW);int B=频率;//在串行监视器串行上打印值。打印(“B=”;//打印名称串行。打印(频率);//打印红色频率串行。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串行监视器上读取的颜色。
在循环部分,我们的程序从移动顶部开始伺服电机到Skittle充电器的位置。请注意,此值115适用于我的部件和我的伺服电机,因此您应该根据构建调整此值以及伺服电机的以下值。
接下来使用“for”循环,我们将旋转并将skittle旋转并将skittle带到颜色传感器的位置。我们正在使用“for”循环,以便通过在循环中更改延迟时间来控制旋转的速度。
接下来,半秒钟的延迟后,使用定制功能,readColor(),我们将读取撞柱的颜色。这里的自定义函数的代码。使用四个控制引脚和滤色器的频率输出销传感器我们阅读撞柱的颜色。该传感器对每个撞柱,红,绿,蓝3个读取不同的值,并根据这些值告诉我们实际的颜色是什么。更多细节TCS3200颜色传感器是如何工作的你可以检查一下我以前的详细教程。
这里是RGB值,我从传感器每个撞柱了。请注意,这些值可以改变,因为传感器并不总是准确。因此,使用这些“if”语句,我们允许在传感器周围+ -5用于特定颜色的测试值的误差。So for example if we have a Red skittle, the first “if” statement will be true and the variable “color” will get the value 1. So that’s what the readColor() custom function does and after that using a “switch-case” statement we rotate the bottom servo to the particular position. At the end we further rotate the top servo motor until the skittle drops into the guide rail and again send it back to the initial position so that the process can repeated.
完成的设计
上传代码后,我使用胶枪固定Arduino板。
然后使用透明的塑料瓶,我制造充电器,以及顶部将其粘在装配并完成项目。
欢迎在下面的评论部分提出任何问题。
嗨,伟大的项目!
我只是想知道Arduino是如何动力的。因此,代码从计算机上传到Arduino,但随后将使用适配器拔下电源,然后使用适配器供电?那是,只需插入墙壁插座?
大家好,谢谢!是的,上传时Arduino是通过电脑的USB连接和供电的。上传代码后,Arduino由一个5V适配器供电,这可以从本文提供的电路原理图中看到。
您好,我想知道您是如何将所有三个组件的GND和5V直接连接到Arduino Nano,而无需使用面包板或屏蔽。因为只有一个引脚的5V和两个引脚的GND和你有3个组件。
也非常酷的项目!
谢谢!
我一起焊接了4个跳线。
你能偶然给我一个PDF文件,形成我的电脑不能打开SLDDRW文件,出去买一个5美元的应用程序。
绘图文件位于.rar文件中,这是一个非常常见的文件格式,即使在线也可以轻松打开或/和提取。我希望你能找到打开它的方法。
你好大师,我想问一下开关和电源千斤顶使用的东西
请重新检查文章,我有添加链接,所以你可以看到什么开关和电源插座可以使用。
先生,你的想法是辉煌的。我想开发这个项目我最后一年的项目(FYP)。你可以指导我更多关于这个项目呢?我想我要排序的发展之后添加声音。希望能尽快从u听到
马来西亚- - -
谢谢。我认为视频和文章本身涵盖了制作这个项目所需的一切,你有3D模型,图纸,电路原理图和源代码。
你好,先生,我真的被你的行为所鼓舞。不管怎样,我只是想知道,既然你用的是Arduino Nano,我用Arduino Uno也会一样吗?我需要很多指导。谢谢
是的,肯定有用。
你好先生,我有同样的问题,因为我的arduino nano是不工作的pc。我不能编程arduino nano我该怎么办??我应该用uno代替nano ????吗请帮助. .
当然你也可以用不同的Arduino。
这个设计工具叫什么名字?
扎实的作品。
嗨,德扬,
你做一项伟大的工程。我试图使用带有4主导的直接对板(没有腿的TCS3200颜色传感器...该传感器具有圆形......请访问以下链接:(链接删除)我注意到,颜色的读数变化很大,而测试在Arduino的。不草图这意味着这些导致周围应关闭的传感器船才能得到准确的值作为你的项目,或者我会买一个作为你的项目?
好心提醒 ,
当做
nabil.
是的,读取是那么多稳定,同样的情况是带有矿井传感器。虽然,传感器越靠得更好。
什么是您使用的适配器?5V / 1A或5V / 2A?
我使用了5V / 2A,但5V / 1A也可以做这项工作。
你好,先生
如何调整顶部伺服电机中的值旋转,并将Skittle带到检测其颜色的颜色传感器。
调整topServo.write()函数,或for循环的范围内的值。
我买了TCS230以上的TCS3200色感器。所以今天就到了。但是颜色传感器不适合在纤维板上。纤维板上的方框很小,便于放置传感器。你怎么把它放进纤维板里?
纤维板的平方尺寸为2.5cm x 1.3cm。
但颜色传感器的尺寸为3cm x 1.3cm。
完全增加纤维板整体,传感器将适合。
你用过哪些跨接导线?
普通的…
我已经完成了模型,项目正好工作。只是颜色传感器遇到混淆:/
我已经根据颜色传感器设置了频率。但同一颜色,底部伺服仍然以不同角度旋转
我该怎么办?
嗯,传感器并不稳定,在读取时会产生错误。另外,其读数取决于几个因素,如显然您正在阅读的颜色,但也是环境照明。因此,如果您在使用相同的颜色对象并在日光测试中,您可能会获得不同的读数。
为了使其工作,您必须测试每个对象的颜色读数,并根据您的读数调整在代码底部找到值的R,G和B。
颜色传感器读数随机变化。橙色,红色,蓝色吃喝玩乐越来越随机排序。是传感器故障?
是的,传感器是问题。您必须将程序调整为您的读数。
嗨. .İt is great project! I did this but bottom servo not working.
我认为颜色传感器的输出没有连接arduino, @Mustafa检查一下
您好,我试图复制您的项目,但我的伺服电源不会移动,即使是5V-2A电源,我也一直在使用不同的电源,但它不起作用,
你能告诉我你用什么电源来驱动你的电子产品吗?必威lol
你能给我一些建议吗?”
我们使用什么样的电机?你试着换两款电机吗?这是这样做的吗?
你好。我按照你的指示和代码,但两个伺服单位未运行。可能是什么原因?
它可以是任何东西。你可以尝试更具体。还要仔细检查您的连接。
嗨,德扬先生
好的项目
我尝试将代码复制到Mega2560中。我遵循示意图。但是,我的底部伺服不起作用。怎么了?
谢谢
谢谢。什么样的伺服电机您使用的是?仔细检查您的网络连接。
先生怎么给Arduino供电??我可以直接连接5v电池吗?或者我需要使用Arduino电源模块。请帮忙或者提供一个电源的链接在网上购买。
好吧,如果您有一个5V电池适配器,您可以将其直接连接到Arduino的5V引脚。
嗨,谢谢你对我下一个项目的灵感。只需等待我的TCS3200传感器即可。
在阅读和理解您的代码时,我发现了两个输入错误(当然,这并不影响功能,只是我对它如何工作的初步理解)。betway在第116行和第128行中,您重复注释“//打印红色颜色频率”,但这些行应该分别表示绿色和蓝色。
再次感谢这样一个简单明了的方法。
Hai Sir。对于这个项目,我们必须通过USB和电源适配器连接Arduino板。
你可以使用它们中的任何一个。
你好,请帮我,当我试图把蓝色项目上的颜色传感器,它散发出的绿色
您必须手动调整传感器的值,以匹配真实的颜色。
如何????我可以这样做吗???
我可以用sg909g伺服电机做两个位置吗??通过使用薄(非常轻)胶合板……!!!!!!
是的,当然,他们会很好的。
非常感谢......我正在这样做的项目作为我的主要项目
你好,
对于代码底部的if语句,为什么只使用两种颜色(即。
如果(R32 & G55) {
颜色=1;//红色
}) - >仅使用红色和绿色。您为什么不使用红色,绿色和蓝色在每个陈述中?
谢谢,
嗨,这是因为传感器输出不精密,准确,我变得非常相似的价值观,相互接近,对于每个R, G, b .为了更好的独立,或承认的颜色我犯了“如果”语句以这样一种方式只使用两种颜色来定义我需要的颜色。
你好!如何手动调整传感器值以匹配颜色?谢谢你的回答
PS伟大的项目!
将要输入的值打印到Serial监视器中,然后在readColor()自定义函数中调整它们。
嘿。
我内置了整个模型,并得到了相同的精确的零件,你却......我的TCS3200对板,而不是白色的红色LED。
此外,对于每种颜色(R,G或B),它读取的值均约为15000。
为什么出现这种情况的任何想法?
嗨,嗯,你可能有一个不同的模块版本,但它应该是一个问题,你可以做到它的工作。您只需在ReadColor()自定义函数中的“if”语句中调整每个颜色的值。
您好,我有一个问题-在尝试按此处所述设置所有内容时,我无法根据颜色变化使传感器电机旋转。它只是保持不动。电机很好,用工作电机替换它会产生相同的结果。您是否有任何关于可能出现问题的提示?谢谢。
你好,这个问题可能是您从颜色传感器获取的值不符合我的价值观。首先,你必须看到什么值您从颜色传感器获得特定的颜色,然后在readColor()自定义函数,其中最后一个“如果”的语句是调整这些值。
你好,德扬,
这是一个非常好的项目,但我有一个问题。其中一个伺服电机在同一方向反复运动,但底部伺服电机根本不动。我该怎么办?
你没有得到与我相同的颜色值,所以你应该调整它们。
嘿伙计,我有一点(巨大的)问题,当我试图上传程序时,它说“”读取影科学“没有在这个范围内宣布”我不知道它会发生这种情况,我检查了整个程序,但它是与此页相同。
我对Arduino很不好,所以我希望你能帮我解决这个问题。
你在代码中有一个错误,你可能没有正确地复制它。
不错的项目,尺寸是mm,我猜,我被图中1:5的比例搞糊涂了。
你好,先生
如果我不能写好,我很抱歉
我想问一下,这个arduino可以用彩色传感器读取2秒的平均颜色,以便“告诉”这是基于颜色的
喜欢红色的苹果,因为苹果没有真正红的颜色。我想,如果我们采取几秒钟的平均值,这Arduino的可以告诉这一个苹果,ECT
如果你能帮助我请联系我,因为我对你的想法感兴趣
确保它可以用于此类目的。但这取决于你将红色苹果比较什么。例如,如果将它们与绿色苹果进行比较,则可能很容易区分颜色。
这是我的意思是刚才读红苹果或绿色
但是,下一个是
输出正在抵消“Apple”和LCD上显示的信息输出
例如,我将绿色和红色的苹果放入与传感器集成的管道中,自动它会对一轮排序中的绿色苹果和红苹果中有多少种
我真的需要您的帮助,先生
好日子先生,
令人惊叹的项目就在那里。我有一个问题 - 如何改变顶级伺服电机的方向?我得到了纠正的动作,就是方向。我需要从反顺时旋转到顺时针更改它。
谢谢你
伺服电机可以旋转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,Sensor和Servo供电?
我计划使用PowerBankk作为电源。如果有可能,如何做到这一点,电气原理图保持不变吗?
谢谢你。
谢谢。电气原理图保持不变,您应该能够用PowerBank为项目供电。
嗨,我认为这是一个非常有趣的项目,我正在学习电子产品,我要在第一年进入,我想做一个类似于你的教育目的的工作。必威lol
我想能够报价你的项目,它不会打扰你。
谢谢!是的,这是伟大的项目研究电子和肯定,先走了,我敢肯定,你将有乐趣构建它。必威lol
德扬,
我已经做了颜色分类器,我是Arduino的新手,遇到了问题。我的底部伺服不动。我已经向传感器展示了几种不同的颜色。我已经试用了备用伺服电机,我已经检查了我的跳线和线路示意图。此外,我的顶级伺服似乎规模不正确,因为它没有摆动足够远的任何方向,以捡起一个小七,并下降它的斜槽。
通过评论阅读,这似乎是一个常见问题而不是底部伺服工作。你能提供一些指导吗?或故障排除提示?
如何查看颜色传感器看到的值?
顺便说一下,你的网站太棒了!
谢谢你!是的,这是真的,许多有问题的底部伺服。我能猜到的是,颜色传感器没有读取正确的值。您需要测试从颜色传感器获得的值,并调整代码底部的if语句中的值。
另一种测试伺服是否工作的方法是手动设置“int color=0;”变量,该变量位于代码的顶部,从1到6,所以伺服应该移动到这些位置中的任何一个。如果这行得通,那问题就是你从传感器得到的值肯定与代码底部的If语句不匹配。
你好,我打不开solidworks文件。你画那张图的版本是什么?
嘿,这是2017年版。
这个设计的高度是多少?
大约30厘米。当然,你可以修改。
下午好,
恭喜您的想法!太奇妙了!
我想知道它是否成为使用S3S2OUTVCC颜色传感器而不是您之前提到的问题的问题。
Thnks!
当然,你可以使用不同的颜色传感器,但它需要适当的编程。
非常感谢,真的帮了我!
你好先生
伟大工程
我让它成为一切正常工作好,但是参议员并没有给出一致的RGB读数,他们不是我可以决定任何范围的方式
如果我给出一个大范围的红色橙色紫色都在混合
PLZ先生对于该即时通讯担心它做任何HV高压伎俩提交七月真的需要帮助乌尔谢谢
嘿,谢谢!问题是传感器本身,它不是那么稳定和可靠。尝试使用不同的环境光,尝试用一个简单的灯泡或其他东西为传感器读取区域添加更多的光。
Dejan,使用3D打印机制作分拣机,有一些小问题。修改的代码顶部伺服位置,容易。颜色传感器不是真正的辉煌,但改变了if声明,以允许相当广泛的读数。我的问题是,它所有的工作都很好,直到我连接底部伺服,然后它做奇怪的事情。两个伺服器都来回抖动。尝试了不同的伺服,不同的UNO,不同的电源。把Uno引脚从8改到9,没有区别。有什么想法?是的,仔细检查线路!!
PS。就像你的教程,很容易效仿。
嘿,我不太确定连接底部伺服器的时候会有什么问题。很多人报告说底部伺服器出了问题。我没有任何问题。我建议从独立的外部电源供电,而不是Arduino 5V引脚。还要确保正确设置if语句,以便一切正常工作。
另外,尝试一步一步一步,用一个简单的代码,将首先移动顶部伺服,然后是底部伺服检查它是代码还是servos问题。尝试对其外部电源,尝试两个伺服器的其他其他可用的Arduino引脚。