{"id":23872996,"url":"https://github.com/maxwelljay256/mega_12800","last_synced_at":"2025-09-08T23:32:11.658Z","repository":{"id":143547745,"uuid":"611515062","full_name":"MaxwellJay256/mega_12800","owner":"MaxwellJay256","description":"Arduino 巡线避障小车，HITSZ 2022 自动化认识与实践课程项目","archived":false,"fork":false,"pushed_at":"2023-11-28T08:14:32.000Z","size":9149,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-09-14T22:37:47.256Z","etag":null,"topics":["arduino","cpp","hitsz"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MaxwellJay256.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-03-09T01:22:02.000Z","updated_at":"2024-04-20T03:58:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"dec0758d-9d84-4984-b3e6-5d1d6fcff6ee","html_url":"https://github.com/MaxwellJay256/mega_12800","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaxwellJay256%2Fmega_12800","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaxwellJay256%2Fmega_12800/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaxwellJay256%2Fmega_12800/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaxwellJay256%2Fmega_12800/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MaxwellJay256","download_url":"https://codeload.github.com/MaxwellJay256/mega_12800/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232363336,"owners_count":18511715,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","cpp","hitsz"],"created_at":"2025-01-03T16:37:55.416Z","updated_at":"2025-01-03T16:37:56.128Z","avatar_url":"https://github.com/MaxwellJay256.png","language":"C++","readme":"# mega_12800\n![License](https://img.shields.io/badge/License-MIT-blue)\n\n- Designed for HITSZ 2022 自动化认识与实践课程项目。\n- Collaborators: [Maxwell Jay](https://github.com/MaxwellJay256 \"github.com/MaxwellJay256\")，[CY](https://github.com/CYCLECHENHUOHUA \"github.com/CYCLECHENHUOHUA\")\n- Q: 为什么给项目起名叫“mega_12800”？\n\n  A: 开发小车的途中，有 5 块 Arduino mega 2560 阵亡在了我们手中。因此小车做出来后，我们决定用这个名字纪念**我们花掉的**那一两百块钱。R.I.P.\n\n  $$\n  5 \\times 2560 = 12800\n  $$\n\n## Files\n1. [mega_12800.ino](mega_12800.ino)：小车的主程序\n2. [Motor.h](Motor.h) 和 [Motor.cpp](Motor.cpp)：电机对象的声明和实现，内置 PID 控制器。\n3. [Sensor.h](Sensor.h) 和 [Sensor.cpp](Sensor.cpp)：光电传感器、超声波传感器对象的声明和实现。\n4. [RobotArm.h](RobotArm.h) 和 [RobotArm.cpp](RobotArm.cpp)：对机械臂的一些操纵函数。\n5. [Device.h](Device.h) 和 [Device.cpp](Device.cpp)：此处集中定义了电机、光电传感器、超声波传感器和机械臂对象，以及对它们的初始化函数。\n6. [Drive.h](Drive.h) 和 [Drive.cpp](Drive.cpp)：调用电机和传感器对象，实现对底盘的操纵，包括巡线、避障以及到达终点时执行的动作。\n\n## 如何使用这个仓库\n- 点击本页面右上角的\"Star\"按钮，可以将本仓库加入你的 GitHub 收藏夹，下次就能很方便找到我啦！\n\n这个仓库有两大内容：[Code](https://github.com/MaxwellJay256/mega_12800)（就是本页面）和 [Wiki](https://github.com/MaxwellJay256/mega_12800/wiki)。\n\n1. Code：本项目保存的小车代码。你可以在线阅览它们，也可以将仓库克隆到本地进行学习。我们建议您使用 Visual Studio Code 打开这个文件夹，因为我们使用了 *Doxygen 注释*为变量和函数进行备注和说明。\n2. Wiki：是我自制的教程，包含硬件、软件、调试三大部分内容。在这里，我会详细讲解如何用限制内的软硬件制作出好用又美观的小车。\n\n---\n\n## 一些闲话\n我们作为 HITSZ 自动化专业的大一学生，免不了上一门名字叫做“自动化认识与实践”的考试课。2022 年秋季学期，自动化专业进行课程改革，将多门冗杂的专业课合并，压缩学时，创造出了一门让大一新生认识和体验“自动化”的课程。这当然是一件好事情，减轻了学生的课业负担。\n\n课程按时间顺序，包含了工程制图、~~机械设计~~、电路、Arduino 入门、自动控制理论（PID 算法介绍）、轮式机器人运动建模。当然，还有从 Arduino 开始教学后穿插的实验课。读到这里的你无论是不是 HITSZ 自动化专业学生，都可能会好奇搞教学的怎么有信心一学期教完这么多东西。然而事实是他们把该教的都教了，至于学生学到了多少，只有我们自己清楚。\n\u003eMaxwell Jay：如果是我，我会回答其实还是挺多的，有相当多内容与实验课直接挂钩，但这是我的结论。\n\n实验课两人一组，前期让学生使用电子元件和 Arduino UNO 开发板制作一些简单的小项目，后期让学生利用实验室提供的硬件制作\u003cu\u003e一个能够巡线、使用机械臂抓取物体的小车\u003c/u\u003e。但由于 2022 年底的新冠疫情，我们不得不返乡学习，实验课也搁置了。没有实验室提供材料，我们二人的小车在寒假没有什么进展。\n\n开学后，老师要求 4 个星期内完成小车并考核。大家也没闲着，赶紧完善硬件结构，一点点开发程序。然而，考核的要求实在是难以让人接受——\n\n就在考核还剩大约两周的时间内，教师一会儿要求用自制 3D 打印机械臂，一会儿在考核中增加超声波避障，一会儿说除了基础考核外，还有竞速赛，并且以上都计入了加分或减分项。要知道，这门课在我们这届由考察课变成了考试课，意味着小车的好坏与学分绩直接挂钩。事实上上述要求在之前的课程内容中都有涉及，但是学生们不一定都掌握了。并且到了后期，许多同学的硬件出现不可逆的故障，并且学校不提供更换。对于分数就是命的我们，这种并非由于老师教学造成的成绩差距是无法接受的。\n\u003e我的意思是，一般学生只听老师讲的课很难在考核前开发出满足这些要求的东西，除非给予足够的自学或者准备时间。幸运的是，我当时掌握一些使用C++开发机器人的技术，因此并没有感到非常惊慌。但是我毕竟和同学们站在一起，无丝毫幸灾乐祸。\n\n后来在学生们的努力下，老师降低了考核要求，超声波避障成为了选考项，机械臂只需提交工程图，竞速赛被取消。我们二人在经历了烧坏若干开发板后（事实上有无数同学损坏了自己的元器件，~~并且老师无法提供更换~~，于是**我们自费**），总算在 2023.3.17 制作出了满足全部要求的小车。然而前两次考核时出了一些意外，小车无法一次完成避障和巡线两个任务，于是我们暂停考核，改改代码，在附近场地调了调车，最后在第三次考核有惊无险地拿到了全部的分数:wink:。\n\n就在考核前几天，我们得知我们的劳动成果是要回收的，零件要留给下一届继续使用，毕竟大多数材料还是取自实验室。此外，我们在准备小车的过程中也目睹了众多同学由于缺少一些必要的开发知识，导致花在调车上的时间数倍于我们，并且遭遇了许多难以排查的问题。\n\n最让我失望的是，在经历了这门课程后，不少同学非但没有对自动化建立起兴趣，反而开始痛恨、厌恶这个事多分少的专业，因为大家不会喜欢被强迫做自己无望完成的事情。这对于学生的个人发展和你校自动化专业的声誉都不是好事情。当同学们向非自动化的学生说自动化“要调小车，欢迎大家来”，相互调侃的时候说“调小车调的”，这能证明自动化是有趣的专业吗？\n\n于是我决定在对这辆小车还有印象时，利用这个仓库保存尽量多的知识和经验，未来的学弟学妹们即使无基础，看了我们的分享后，或许能在这门课里面少走点弯路。\n\n\u003e《礼记》里面有一句话：“学(xiào)学(xué)半”，意思是教别人东西，自己也能学到一半的知识。我用这句话勉励自己在课外投入时间去做这些事情，**也希望能帮到大家。**\n\n\u003cp align=\"right\"\u003e2023 年 3 月\u003c/p\u003e\n\n## 本工程的特点\n1. 采用多文件，将功能分散。\n2. 利用了 C++ 的类和面向对象，将硬件抽象化，有利于代码维护。\n例如在 [Motor.h](Motor.h) 和 [Motor.cpp](Motor.cpp) 中，一个减速电机内包装了多种变量以及函数，在主程序中，只需实例化 MotorL，MotorR 两个对象，即可非常方便地对它们进行控制。\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxwelljay256%2Fmega_12800","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxwelljay256%2Fmega_12800","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxwelljay256%2Fmega_12800/lists"}