Arduino Rhythm Game

by watenk in Circuits > Arduino

204 Views, 0 Favorites, 0 Comments

Arduino Rhythm Game

Ittt Arduino Rhythm Game

Voor dit project heb ik een arduino rhythm game gemaakt. Er vallen op het beeldschermpje rondjes (noten) naar beneden en wanneer ze met de lijn onderaan het beeldscherm kruisen met je op de corresponderende knop drukken. Wanneer je dit op tijd doet speelt een noot van het ingeladen nummer.

Supplies

Electronische Comonenten:

  • 6x - Push Buttons
  • 6x - 10k Ohm Resistors
  • 1x - OLED screen (128x64)
  • 2x - Passive buzzer
  • 1x - Arduino Uno
  • ~25x - Wires
  • 3x - 6 Wide Header Pins
  • 1x - Printplaat

Gereedschap:

  • Soldeerbout
  • Soldeer Tin
  • Striptang
  • Tang

Ontwerp Process

In de volgende stappen kan je mijn iteraties en prototypes zien. Ook kan je zien hoe ik tot het eindproduct ben gekomen.

Experimenten (Geluid)

20230901_141850.jpg

Mijn doel was om een rhythm game te maken met een arduino. Daarom ging ik als eerst experimenteren met buzzers om te kijken hoe en wat voor geluiden ik kon maken. Ik heb geexperimenteerd met wat simpele code (Commits) om geluid uit een speakertje, active en passive buzzers te krijgen. Uiteindelijk heb ik ervoor gekozen om passive buzzers te gebruiken. Ik zat op dit punt ook te kijken hoe ik meerdere buzzers tegelijk een verschillende toon zou kunnen laten afspelen en hoe ik nummers zou kunnen afspelen.

Experimenteren (Scherm)

20230903_182507.jpg

Nu ik geluid met buzzers kon produceren had ik ook beeld nodig. Na wat rondkijken voor verschillende beeldschermpjes kwam ik uit op een 128 bij 64 OLED schermpje. Eerst probeerde ik om een simpel vierkantje op het scherm te krijgen. Hiervoor moest ik eerst wat research doen ever hoe het beeldschermpje werkte. Uiteindelijk heb ik de Adafruit SSD1306 Library gebruikt om het beeldschermpje te controleren (Commits).

Prototype 1

20230908_000349.jpg

Nu ik geluid en beeld had ben ik de twee gaan combineren en ben ik begonnen met het schrijven van de mini game engine voor de rhythm game (Github).

Prototype 2

20230924_181424.jpg

Omdat ik in prototype 1 niet meerdere speakers tegelijk kon gebruiken probeerde ik een PWM-Moldule toe te voegen. Na wat experimenten (Commits) kwam ik erachter dat een PWM-Module niet de oplossing voor mijn probleem was en besloot hem niet meer te gebruiken.

Prototype 3

20231013_172221.jpg
circuit.png

In prototype 1 & 2 miste ik nog een manier van input. Ik besloot om 6 push buttons te gebruiken om met de game te kunnen interacten. Ook heb ik besloten om maar 2 buzzers te gebruiken zodat ik de 2 interne arduino uno clocks kon gebruiken voor de buzzers. Om de timers te controleren heb ik de TimerOne & TimerTwo library's gebruikt. Dit is het laatste prototype en ik heb geluid, beeld en input. Alles wat je nodig hebt voor een simpele rhythm game.

Programmeren

Github

Voor dit project moest ik een soort mini game engine maken voor arduino. De 2 dingen die ik moest controleren met code waren: Het beeldschermpje en de buzzers.

Eerst had ik hiervoor wat basis elementen nodig zoals: Vector2, Time en een LinkedList.

Vervolgens ben ik managers gaan maken voor de Display, Speakers en Objects die ik op het scherm zou kunnen tekenen.

Daarna heb ik nog wat Settings toegevoegd en een lijst van alle Muziek Noten in HZ.

Het enige wat ik nu nog nodig had waren de Notes zelf.

Als je mijn programmeer iteraties wil zien kan je in de commit history kijken van de repository.


Verder heb ik nog 2 python scripts geschreven zodat je MIDI files kan gebruiken in het Song script.

mergeTracks merged alle verschillende tracks van een MIDI file in 1 omdat dat het enige is wat generateNotes ondersteund.

generateNotes converteerd een MIDI file naar

{NoteE5, 92, 92},
{NoteDS5, 94, 94},
{NoteE5, 92, 92},
{NoteDS5, 94, 94},
{NoteE5, 94, 94},
{NoteB4, 92, 80},
{NoteD5, 94, 94},
{NoteC5, 94, 94},
etc...

Dit kan je vervolgens in het Songs script plakken.

Reflectie

Ik vond het een erg leuk project om te maken. Ik kon mijn nieuwe kennis van de DEV kernmodule goed toepassen en heb voor het eerst in mijn leven gesoldeerd. Eigenlijk wou ik ook nog een case 3D printen maar daar kon ik helaas de tijd niet voor vinden. Verder denk ik dat het sowieso een goede ervaring is om een keer met electronica en microcontrollers te hebben gewerkt omdat we zoveel producten gebruiken met deze componenten erin.

Maak De Instructable Zelf

Als je de stappen hieronder volgt laat ik zien hoe je dit project zelf kan maken!

Solderen

20231023_150319.jpg
20231023_150309.jpg
20231020_182848.jpg
circuit.png

Verzamel alle benodigdheden en begin met het solderen van de componenten aan de printplaat (Volg de schematic hierboven).

Code Inladen

Pull / Download het project van Github.

  • Stop de library's uit de library's folder in je documenten/Arduino/Libraries folder.
  • Kopieer een nummer (array) uit de songs folder en plak het in het Songs script.


Laad zelf een nummer (MIDI):

  • Download of maak zelf een MIDI bestand (MIDI mag niet meer dan 1 instrument gebruiken)
  • Gebruik python om het mergeTracks en generateNotes script uit te voeren.
  • Kopieer de uitgeprinte array in het Songs script.


  • Upload de code naar de arduino uno