Martin’s Status Report 3/8

This week, I faced an unforeseen hardware constraint involving the Raspberry Pi. Initially, the plan was to deploy our trained card detection model directly onto a Raspberry Pi 4. However, I discovered that the Raspberry Pi 4 does not natively support multiple camera modules. Attempting to integrate two camera modules with the Raspberry Pi 4 would require using a camera multiplexer, consuming approximately 21 GPIO pins. This presented a significant obstacle since our existing design heavily depends on these GPIO pins for other critical functions, and sacrificing them was not feasible without compromising our entire design. Consequently, we could not adhere to our original plan of deploying the card detection model onto the Raspberry Pi 4.

To resolve this issue, we decided to upgrade our hardware by purchasing a Raspberry Pi 5, which inherently supports dual-camera inputs without the need for a multiplexer, thus preserving our GPIO pins. However, this upgrade led to delays, as the model deployment activities were contingent upon using our finalized hardware setup. As a result, my focus shifted from generating deployment-ready models to preparing for rapid integration once the Raspberry Pi 5 arrives.

Meanwhile, my immediate tasks include generating a custom dataset tailored specifically to our hardware environment and training the refined model promptly. Once the Raspberry Pi 5 is available, I will deploy the model to ensure our project remains aligned with our timeline.

Andrew’s Status Report for 3/8

Now, we have a complete picture of how the machine will look like. We closely examined the required parts and their specifications more closely to make sure they all meet the design requirements we have set for this project. Admittedly, we did run into some problems due to parts we have bought/borrowed that actually did not entirely meet our requirement. However, we have accommodated those and are ready to build the machine starting this week. That is, unless the extra parts we bought arrive late. However, since there was one week gap for the parts to arrive, it would be unlikely.

As specified in the design report, the final size of the machine body will be a 20 x 20 x 6 cm  wooden box, made by combining mdf plates. The size was chosen after creating virtual images of the assembly as shown above, getting a general sense of the amount of space that would be required for all the parts to fit inside. Although we do not have the dxf file for the wooden plates yet, I am planning on quickly creating those this Monday and hopefully cut them by Tuesday.

Then I will assemble those in to a box and add the caster wheels so that I can adjust the placement of the servo for central rotation. Then, I will add weight in side the box to simulate other parts other than the uno to see if we need to buy a different motor shield to support external power supply or the servo. The one we have currently does not, so it will be drawing power from the Arduino, which is generally not a good idea. However, considering that the load is not too heavy, we thought that the servo may end up not drawing too much current.

In short, it was mostly final polishing of the design plan before moving onto the actual assembly.

We are on track in terms of schedule, and if the servo and the 3D printed dispenser case does not cause any trouble, we will very ahead of schedule by the end of this week (though that would be highly unlikely).

Team’s Status Report for 2/22

One thing that we failed to foresee is the cost of 3D printing. Whenever there were some parts that seemed ambiguous to purchase or required complex and custom design, we decided we would use 3D printing to make that. However, we only realized later that 3D printing will cost a lot, given the size of the parts we’re trying to print. As such, we would have to aim for reducing the number of trials and errors of printing. Our plan is to make the design as precise as possible to work as we intend it to be. To that end, we’re carefully considering the dimensions of the parts and trying to have a concrete overall design for our parts to assemble later.

No significant changes were made to the existing design of the system. After realizing that adding too much load to the servo may draw too much current, possibly causing problems with the arduino that will be powering it through the 5V line. So, we may decide to use a weaker servo for the dispenser to draw as less power as we can from the arduino, and we are planning to add 4 caster wheels to support the weight of the machine body for spinning.

This will mean additional budget use for buying the wheels, but it is minimal, and we have not used much of the budget so far, so it will be fine.

Motor control code ended early, so Andrew will be helping with building the dispenser and case. Hopefully, the dispenser will be done earlier than we expected.

We have confirmed that the servo works fine. Additional tests will need to be done to see if the 5V power supply from the Arduino will be enough when we add load to it. Such concern was the exact reason why we decided to add wheels to the design for additional support while reducing friction.

Martin’s Status Report 2/22

This week, I mostly worked on training a pretrained model on an existing trump card dataset. I thought it would be pretty straightforward to make an existing object-detection model (yolov11) to be trained on a card dataset and be capable of detecting cards. However, this was a oversight– the model, after being trained on 8000+ training data of cards, it struggled to perform on the test dataset. I had the plots for mAP50 and a couple other metrics, but forgot to save it on google drive, as I was running on google colab and were gone after I reaccessed it. However, the result was bad and made me think if we would need a model that is capable of classifying cards on general purpose. I instead realized that it would be a lot better for having a custom dataset that captures our own environment where the model has to see the card. Furthermore, instead of using a general-purpose pretrained object detection model, I realized it would be even better if I use a pretrained card-detecting model, then finetune it to be capable of detecting cards in our environment.

My progress is a little behind, since by this week, I wanted to have the trained model deployed on raspberry pi, along with the camera module attached. However, since the time was consumed as why was experimenting with how to train the model, I didn’t have enough time to do that. As such, I’ll have to dive right in and generate the dataset myself and train the model as soon as possible. Also, since I finally managed to borrow a deck of cards from the CMU Poker club, it will be viable to do so.

By next week, I’ll need to have Raspberry Pi that has the card detecting model deployed.

Justin’s Status Report 2/22

During this week, I focused on two main areas: Dispenser design CAD and Design Report. My time allocation demonstrates a substantial commitment to the project, meeting the expected minimum of 12 hours:

  • 4 hours of in-class team collaboration
  • 4 hours participating in team design presentation preparation (Tuesday and Thursday)
  • 4+ hours of individual work dedicated to SolidWorks modeling
  • 2+ hours of writing the design report

Key Accomplishments

  1. Made progress on SolidWorks models for the dispenser design
  2. Collaborated with the team to plan writing the design proposal.
  3. Started writing the design proposal.

Schedule Status The project is progressing according to schedule, with all planned deliverables for this week completed on time.

Next Week’s Deliverables

  1. Complete Solidworks dispenser design.
  2. Complete Design Proposal

Andrew’s Status Report for 2/22

We got most of the parts required for the main portion of the project we will be focusing on (everything excluding three user input sensors), so I got to test the motors this week. I was personally surprised by how easy it was to move the servo when using the Servo.h library provided by arduino. I thought I would have to program the PWM signaling myself, but turns out I don’t, so that left me more time to add touch to other parts of the project.

Since I already have an idea of how the communication should work between the arduino and the RPI, I quickly coded the partthat will do all the parts requiring a servo (dispenser card push mechanism, machine spin mechanism).

Considering that I cannot do much with the motors without the case to hold them together, I lended some help to my team member who is working on the CAD modeling.

I also contacted the CMU fablab in techspark to get some help in 3D printing and cutting wood for the case. I have not gotten a response yet, but I expect to get one by next week Monday. Then, I would be able to quickly design the 2d layout of each pieces of the case (this won’t take too long, since it’s just a large rectangle with some holes and joints here and there) and cut it out.

I am still figuring out the battery and DC motor, because I am personally not very familiar with the current requirements. It is written in the schematic, so figuring out the voltage was easy, but I am still taking time to understand how exactly I am supposed to interpret the sheet in figuring out the proper amp.

I also received the card shuffler, but the way it functions was slightly different from how we imagined it, so we will need to adjust our plans on how the cards that are shuffled will be moved over to the dispenser. I do have an idea of how this can be done using a servo, but we already ran out of space for an additional servo, so we will need to figure that out somehow, possibly using extra arduinos we personally have.

Because coding the motor control was much, much, easier than I thought it would be (didn’t know arduino library was a thing), I am very ahead of schedule now. I just need to get some advice in battery selection before shipping it. However, we actually have some more minor parts that we need to order yet because we are still figuring some things out.

These include: 12v battery, rubber band for the dispensing cylinder, more FRS (only 1 got shipped when we need 4 due to an error), weight sensor (figuring this one out as well to make sure to not waste money), carpet for the poker table, and possibly some set of attachable wheels (found out that this will be very useful for assisting machine rotation while distributing weight load on the servo).

So, I plan to figure out all of them next week and buy everything by then, so that we won’t have the issue of not having parts by time.

Martin’s Status Report 2/15

This week, I started working on fine-tuning the latest YOLOv11 model for our card detection task. I’m still familiarizing myself with all the APIs and researching how I could start off smart to later integrate and deploy easily on Raspberry Pi 8GB. Since we have 8GB of memory, I think I’ll have to wisely choose the model that would be the most efficient in terms of its size. My plan was to validate the model working and achieving validation accuracy ~100% by digging and incorporating more dataset. However, I didn’t get to train the model yet, since I didn’t have any Colab compute units. I’ll have to make sure if we are able to include the compute units for the given $600 stipend. By next week, I should have trained and tested the model, and just start thinking and learning about how I would deploy it on raspberry pi. Also, I’ll have to allow the model to receive input video/image from the camera module later.

Andrew’s Status Report 2/15

This week, I focused on figuring out how exactly we would implement the machine. I discussed a lot with the team to make a final decision on how we would deal with the input. The rest of the machine stayed about the same as how it was in the proposal. However, the input has changed a lot more ‘realistic’ after taking in feedbacks from our instructor and TA.

The general idea was that using a button takes away a lot of the fun that players feel when playing poker. For example, the act of throwing cards when folding and pushing chips when betting. So, we decided that we would need to use both motion detection and weight sensors to allow the user experience to be as real as possible. It would definitely be a burden on our workload, but we thought it would be manageable as long as the dispenser does not give us a headache.

That is why I searched a lot to see what would be the best motor to use for the purpose of our project and how it should be integrated. Because I have never used a dc motor before (unlike servos, which I am used to), it took me a while to decide which motor would be sufficient. Not too weak, but not unnecessarily strong. Having an unnecessarily strong motor would be a huge down factor for power consumption and weight, so we took some time to decide.

Now, we have all the components ordered, and will be ready to start building.

Since motor control will mostly be PWM, I skimmed through past projects I did that involved PWM and l reviewed the relevant lecture slides (from embedded systems).

Because I haven’t actually coded yet, I can say that I am slightly behind schedule, but I am confident it wouldn’t be too much of a problem, as getting the motors to run is not too difficult (at least, based on past experience).

We recently got our hand in an Arduino, so I hope to start coding in there and connect it to the motors to get it running. Then hopefully, we will get the dispenser case printed and attach the motors.

Team Status Report 2/15

We decided to use resistive sensors + camera + RFID chips (or weight scale) to detect player’s move: raise, bet, and fold instead of our previous option of pressing buttons or keyboards after making moves to feed input to the machine. This decision is expected to improve the user experience that resembles traditional poker plays.

We chose to do this because we got feedback saying that button inputs will significantly reduce the fun that players can get from playing poker. So, we thought it would be better to challenge ourselves if it meant better user experience.  It was also mostly because we absolutely agreed with the feedbacks and were already thinking about changing the input.

However, it is indeed true that this would add more complexity to our design, so plan to make this our final design, but focus more on the fundamental parts of the machine (dispenser, game state tracking, card detection) first before diving on creating realistic input mechanisms.

__________________________________________________________

Week 2 specific report:

Part A was written by Justin Kim, B was written by Andrew Kim and C was written by Martin Lee.

Part A:

In our project ACE, we have carefully considered the impact on public health, safety, and welfare through multiple design aspects. From a health perspective, while direct physiological benefits may not be immediately apparent, the system is expected to promote psychological well-being by creating a consistent and fair gaming environment that reduces player anxiety and eliminates the physical strain traditionally experienced by human dealers. The project significantly enhances safety by securing fair gameplay and policing any illegal plays that are difficult to catch in a traditional poker environment. Through these considerations, our automatic poker dealer machine improves the gaming experience while maintaining high standards for public health and safety.

Part B:

Poker is one of the most popular card game in the world. Though there may be a person who has never played poker before or has played once or twice (which is me), there is rarely a person who does not know what poker is. After all, the term pokerface has become so widely used that it is now used as  an adjective.

The main goal of our project was to allow players to enjoy the full experience of playing poker without the need of delegating one person to be the dealer. Of course, this will only apply to casual game plays which does not involve professional dealers, but we think that casual game played between friends and family should get more focus. Anyways, by removing the innate limitation of casual poker games, we thought that this game would allow people to naturally socialize with more ease. For example, if there were two people in a room, it would be impossible to play poker. However, with this machine, they can. Moreover, poker is a game that becomes more enjoyable as more people join in. Thus, allowing one more person to joing the game would be meaningful.

Long story aside, game is one of the best means of socializing. There is a reason why such a thing called pub games exist. It is a great way for strangers to meet in a pub and get close to each other with more ease. Poker is also a game that is great for socializing, and it would be great to see our project become a good starting point for a small, but lasting societal impact.

Part C:

Our solution is aimed specifically at people who enjoy playing casual poker with their friends, family, or any group of people. As such, as we’re working towards the MVP, we’re actively making economic decisions to not only meet the given stipend but also to make it cost-efficient. Essentially, with just our solution, people should be able to enjoy the end-to-end Texas Hold’em in virtually any environment (only if there’s a table and electricity).

Justin’s Status Report 2/15

During this week, I focused on two main areas of development: research into I/O devices and mechanical design work. My time allocation demonstrates a substantial commitment to the project, meeting the expected minimum of 12 hours:

  • 4 hours of in-class team collaboration
  • 2 hours participating in team design presentation preparation (Thursday)
  • 6+ hours of individual work dedicated to 1) SolidWorks modeling, 2) research on I/O device integration, 3) prepare for design presentation

Key Accomplishments

  1. Conducted comprehensive research on I/O devices to refine our solution approach
  2. Developed initial SolidWorks models for the dispenser design
  3. Collaborated with the team to prepare design presentation materials

Schedule Status The project is progressing according to schedule, with all planned deliverables for this week completed on time.

Next Week’s Deliverables

  1. Incorporate feedback received from the design presentation
  2. Begin implementation phase upon receipt of ordered equipment
  3. Continue refining the dispenser design based on presentation feedback