For our First-Year Design class, a group of the other students and I decided to create a vacuum that would pick up, count and store any loose change that might be laying on the floor. This project was split up into two semesters, with different a different focus for each semester. We decided to use a Raspberry Pi for the locomotion and obstacle avoidance side of the project while we chose to use and chose to use an Arduino to count the coins collected during operation. Over the first semester, we focused on creating a device that worked as we intended it to. This initial design was more along the lines of a prototype to prove that our design would work. For the second semester, we attempted to create a chassis to house all of the components, along with improving the user interface and the locomotion of the device.
During the first semester of this project, we modified a handheld vacuum to move around on its own and count coins. We included an ultrasonic sensor mounted to the front of the vacuum as a rudimentary means to detect obstacles -- we later improved upon this design during the spring semester. Two stepper motors were attached to 3D printed wheels that I designed in Fusion360 for this project. The motors were mounted to the vacuum through another 3D printed part that can be seen in the pictures above. The coin counting method for this revision was very simple as the coins would be picked up by the vacuum and then slide down a ramp with holes of increasing diameter allowing the coins to fall through separate holes based upon the value of the coin. For example, the first hole that a coin would encounter while sliding down the ramp would be the hole for dimes. Any coin other than a dime would slide over the hole and all dimes would fall through the hole. Once we figured out how to separate the coins based upon their value, we just needed a way to count the number of coins that fell through each hole. In order to accomplish this, we looked to using an infrared LED and a photo-transistor connected to an Arduino. The LED and photo-transistor would be set up to act as a tripwire inside each hole on the coin sorting ramp. When a coin would fall through the hole, it would trip the invisible tripwire and the Arduino would recognize this and stored the value of that coin. To get the number of coins collected to display on the screen connected to the Raspberry Pi, we needed a communication interface between the Arduino and Raspberry Pi. We opted to go with a serial UART interface as this would allow communication in both directions and was the easiest to set up between the Arduino and Raspberry Pi. Once the Raspberry Pi received the number of coins picked up by the vacuum, the Raspberry Pi would output this value to an OLED screen located on the back of the vacuum. The purpose of this screen was to allow a user to interact with the device so that the user could start and stop the motion of the vacuum, as well as give the user a way to see how much money has been collected by the vacuum.
During the second semester of working on this project, we attempted to improve just about every aspect of the project. I designed a chassis in Fusion360 that can house all of the components necessary for operation along with a removable section that would house the components from the vacuum. This process took up the majority of my time for this semester. One issue from the previous that we hoped to address with creating a chassis was to improve the locomotion of the whole device. In the previous design, we needed the tip of the vacuum to be at a certain angle to pick up the coins, therefore we needed to make the supports for the wheels long enough to meet that angle. This solution was a problem as the supports were too long to keep the vacuum from falling over. We decided to take inspiration from the design of the Roomba and have the main components be housed in a cylindrical chassis that was low to the ground. Since we updated the chassis for the vacuum, we would need to make some changes to how the coins were counted as well. With our final design, we decided that we wanted the coin storage to be easily removable, but this would mean that we could no longer easily use the "tripwire" method from last semester to detect the coins. For this new revision of our project, we tried to use two exposed conductive surface that would be in contact with the coin as it slid down the coin sorting ramp. One of the surfaces was a common ground and ran along the side of the coin sorting ramp, while the other was a metal rod embedded along the floor of the ramp and was connected to the Arduino. Instead of detecting when a coin would fall through a hole, we now would detect if a coin had passed over a hole. For example, there would be two exposed conductors on either side of the dime hole so that if a dime was traveling down the ramp, the coin would pass over the first conductor, sending a signal to the Arduino, and then fall through the hole. The Arduino would know that the coin was a dime since the dime would have never made contact with the second conductor, which would indicate that the coin passed over the dime hole. Unfortunately, this design was not as reliable as the previous iteration and could be easily fooled by multiple coins moving down the ramp at the same time. In addition to changing the coin detection method, the Arduino was also given two more jobs. The first was to toggle the power to the vacuum through a relay when a certain value was received from the Raspberry Pi. The second was to measure the battery voltage as a rough guess as to how much battery remained for the vacuum at any given time. The final aspect of the project that we improved upon was the user interface. Instead of using a screen attached to the Raspberry Pi, we decided to use a web-based app that would be able to start and stop the vacuum or locomotion and also display the battery percentage of the vacuum. The Raspberry Pi would act as an access point and web server for this web app, allowing the user to connect to the Raspberry Pi over Wi-Fi and load the web app on any device.
© 2025 • All content within this project is strictly the property of Justin Bennett and is not for public use without permission.
Comments