base on null # Micro Racer Car - StuckAtPrototype *thank you for the overwhelmingly positve support!! such an inspiration to keep making fun open source content!* ## New Youtube video about improvements Lots of new improvements and I am now selling a kit for these! Check out the video here: https://www.youtube.com/watch?v=FulhEs5R5WU [![My Kickstarter failed, so I open sourced it](https://img.youtube.com/vi/FulhEs5R5WU/0.jpg)](https://www.youtube.com/watch?v=FulhEs5R5WU) ## Original Youtube Video A bit of a back-story of how this project came to be. [![My Kickstarter failed, so I open sourced it](https://img.youtube.com/vi/6jzG-BMannc/0.jpg)](https://www.youtube.com/watch?v=6jzG-BMannc) Sub if you like what you see. *Some pictures of the project* ![Picture of PCB car](project_pictures/242A0548.png) ![Picture of PCB car](project_pictures/242A1274.png) ## Hardware Remote for this car https://github.com/StuckAtPrototype/Thumbtroller ## Project Structure The project consists of 1. Firmware 2. Hardware 3. Mechanical 4. Scripts These are structured into their own files. I could have used submodules, but decided against it. ### 1. Firmware Code for the little car. This lives on the ESP32 #### Requirements - ESP32 IDF version 5.3.1 - USB to Serial dongle - Target set to ESP32-H2 ### 2. Hardware #### Schematic PDF schematic included for your viewing pleasure. #### PCBs All the gerber files you'd need to send to a fab house. #### Kicad All the files you'd need to expand and work on this further. If you'd like. ### 3. Mechanical #### Enclosure All the step files you need to make one of these. Extrusion printer works well for this part. #### Wheels A bit of caution on this one.. you'll need an SLA printer. ### 4. Scripts Did anyone say neural networks? This folder has all the python code you'd need to train up your own neural network for the car. It also consists scripts that let you drive it using a keyboard -- just in case you dont want to make a physical controller. #### Requirements - Python 3 - You'll need to install a bunch of pip modules #### Training the neural network Training the neural network is as simple as running the training script with the data in the `color_data.txt` file. For data format see the sample data in the file. You need to stick to the formatting. To train run `python trainer.py` #### Keyboard controller To run the script `python controller.py` Use `w` `s` `a` `d` for control. Modify the script for different speeds, etc *Protocol for motor control* 60,1,60,1,5 -- translates to: motor side A: speed 60, direction forward motor side B: speed 60, direction forward 500 miliseconds run time See firmware file `motor.c` if you need more details ## What the project could use 1. Cleanup, but thats true for almost anything out there 2. Some fun code that makes the little car drive using the color sensor -- think very fancy line follower 3. LLM integration -- ChatGPT driving a physical little robot? anyone? :) ## If you take it further Let me know if you ever make one of these, I'd love to see it. Seriously, that'd be exciting and inspiring to keep making my projects open source! --- ## License ### Apache 2.0 -- i.e. use as you'd like http://www.apache.org/licenses/LICENSE-2.0 --- ## Special Thanks Thanks to Michael Angerer for his open sourced `esp32_ble_ota` project. I used it to get BLE running in this project. His blog post and github repo are a great resource. Check it out. https://github.com/michael-angerer/esp32_ble_ota ", Assign "at most 3 tags" to the expected json: {"id":"12722","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"