23920| 28
|
【chocho精品】“吃”钱币的机器人 |
每个“精分”机器人背后,都有一个同样“精分”的工程师 ——用Beetle与激光测距打造的吃钱小机器人 有那么一群人,常年累月地混迹在正常人群里,小心行事的他们很难被常人发现,他们就是——“精分”工程师,唯一能让他们现形的方法就是让他们做个小玩意儿出来。对不起,我憋不住了,我承认我是一名“精分”工程师。 想到硬币不方便携带,平时每次收到硬币都放在家里,搞得家里硬币成堆了。 于是我就想,可以做一个吃硬币的机器人嘛,刚好用来存放硬币。说干就干! 材料准备 TowerProSG90舵机 1个; 购买地址 品胜9V/250mAh镍氢充电电池 1个; 购买地址 Gravity:VL53L0X ToF 激光测距传感器 1个; 购买地址 Gravity I2C OLED-2864 显示屏 1个; 购买地址 高品质 micro USB数据线 1根; 购买地址 Beetle控制器 1个; 购买地址 降压模块 1个;某宝有卖哟,哈哈,我是自拆了一个下来 雪糕木棒若干;自备 多层木板数块;自备 微型合页带螺丝 1块;自备 乳白木工胶、快干胶、热熔胶等;自备 原理图 使用Beetle作为主控板,连接激光测距传感器收集距离的数据,通过2864oled显示屏显示出相应的机器人表情,并在得到的数据基础上操作舵机的转动角度;以实现监测到前面有硬币的时候,oled显示相应表情,控制舵机将硬币抛入机身内。 制作 首先是切木板,粘接成盒体,将木板钻孔待上合页,将前面板切出一个oled大小的方孔. 用合页连接机器人的上下部分身体,用1.5mm粗的铁丝弯出一个波形,在两侧装上适当长度的雪糕 棒,用雪糕棒为小机器人做上手臂,最后在舵机底部用木板增高: 用雪糕棒,用铅笔画一个弧度,然后用小刀切下来,钻个小孔,然后将木块粘在舵机上 在木盒正面板下部分中心位置打孔,放置激光测距传感器,机身背后打孔安装开关使用 按照原理图焊接电路的各个部分 最后使用热熔胶、快干胶,将所有的器件转入机器人机身内 最后在手臂与身体上钻孔,安装一根铁丝支撑,达到手臂抬起连带上盖也可以上升的目的,调试达到最好的效果: 至此,机器人的硬件部分就算制作完成了。 接下来,下载运行程序到主控,点击连接下载程序,程序主要功能代码如下: #include "Wire.h" #include "DFRobot_VL53L0X.h" #include "U8glib.h" #include "font.h" #include <Servo.h> DFRobotVL53L0X sensor; Servo myservo; U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); bool checkDistance(void){ uint8_t i = 5; if(sensor.getDistance() <= 60 && sensor.getDistance() >= 20.00 && sensor.getDistance() != 5.00){ while(i--){ Serial.println(i); if(sensor.getDistance() <= 60 && sensor.getDistance() >= 20.00 && sensor.getDistance() != 5.00){ }else{ break; } delay(100); } } return((i==0)?true:false); } void caozuo() { Serial.println(sensor.getDistance()); if (checkDistance()) { delay(2000); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits9); } while (u8g.nextPage()); delay(500); myservo.write(30); delay(200); myservo.write(130); } } void setup() { Serial.begin(115200); Wire.begin(); sensor.begin(0x50); sensor.setMode(Continuous, High); sensor.start(); myservo.attach(11); } void loop() { unsigned char i; myservo.write(130); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits0); } while (u8g.nextPage()); for (i = 8; i > 0; i--) { delay(100); caozuo(); } u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits1); } while (u8g.nextPage()); delay(100); caozuo(); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits0); } while (u8g.nextPage()); delay(100); caozuo(); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits2); } while (u8g.nextPage()); delay(100); caozuo(); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits0); } while (u8g.nextPage()); for (i = 5; i > 0; i--) { delay(100); caozuo(); } u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits3); } while (u8g.nextPage()); delay(50);//bishuangyan 0.05s u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits0); } while (u8g.nextPage()); delay(50);//xiaolian 0.05s caozuo(); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits3); } while (u8g.nextPage()); delay(50);//bishuangyan 0.05s u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits0); } while (u8g.nextPage()); delay(50);//xioalian 0.05s caozuo(); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits7); } while (u8g.nextPage()); delay(50);//zuoxiaoyiyan 0.05s u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits4); } while (u8g.nextPage()); for (i = 3; i > 0; i--) { delay(100); caozuo(); } u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits7); } while (u8g.nextPage()); delay(50);//zuoxiaoyiyan 0.05s u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits0); } while (u8g.nextPage()); delay(50);//xiaolian 0.05s caozuo(); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits8); } while (u8g.nextPage()); delay(50);//youxiaoyiyan 0.05s u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits5); } while (u8g.nextPage()); delay(100);//youdayiyan 0.1s caozuo(); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits8); } while (u8g.nextPage()); delay(100);//youxiaoyiyan 1s caozuo(); u8g.firstPage(); do { u8g.drawXBMP( 0, 0, 128, 64, u8g_logo_bits0); } while (u8g.nextPage()); delay(500); caozuo(); u8g.firstPage(); do { } while (u8g.nextPage()); delay(200); caozuo(); u8g.firstPage(); do { u8g.setFont(u8g_font_unifont); u8g.drawStr( 23, 25, "Put a coin!"); u8g.drawStr( 7, 55, "Get a surprise!"); } while ( u8g.nextPage() ); delay(500); caozuo(); } [/mw_shl_code] 欢迎各位加杂家的微信,进行创意探讨:zcl2009031081 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed