Inspiration

The Millikan Oil Drop Experiment was one of the famous physics experiments we studied back in high school. Revisiting this topic and applying our current knowledge to build a simulator seemed like the most natural step to further develop our understanding of both physics and software development.

What it does

The application simulates a simplified setup for the oil drop experiment, much like the basic setup described above. The user can vary the potential difference between the plate to adjust the strength of the electric field and electric force.

After each trial, the user can choose to take measurements and the application will make the necessary calculations to determine the charge on the oil drop.

How we built it

Tech stack:

  • pygame (main game loop) + pygame_gui (user controls)
  • scipy (physics)

The application was built with the pure Python tech stack mentioned above. Coordination was done through GitHub and a Google Sheets Backlog to keep track of who is doing what.

Challenges we ran into

One of the main challenges is in building a physics simulator from scratch. We had to compute the changes in the oil drop's velocity, position, and acceleration from frame to frame.

Another challenge was separating the different parts of the code to avoid overloading a single class. We settled on dividing the logic into three classes: UI, Simulation, and Experiment. UI handles the UI updates and drawings. Simulation handles the game loop and user input. Experiment handles the physics calculations, namely the interactions between the oil drop and plates.

Accomplishments that we're proud of

  • Creating a physics simulator from scratch
  • Developed an efficient workflow to collaborate and manage knowledge from different fields

What we learned

  • How to develop software in teams (e.g., delegating tasks, and building compatible code)
  • How to bridge knowledge between people of different expertise (e.g., physics and computer science)

What's next for Oil Nongkrong

If the development of this project were to continue, we would add more features like varying the distance between the plates and storing the data from multiple trials. In addition, we would like to develop a more pleasing UI by fine-tuning different parts and experimenting with different UIs.

Built With

Share this project:

Updates