Motion Controller Doos Met Een Slot

by Egon_Feld in Circuits > Arduino

147 Views, 0 Favorites, 0 Comments

Motion Controller Doos Met Een Slot

IMG_20230513_152421.jpg

Ik heb voor een schoolproject een doos gebouwd die bediend kan worden met een puzzel die wordt aangestuurd door een motion controller.

Met deze opstelling kan een servo gebruikt worden om de doos te vergrendelen en ontgrendelen, waardoor de inhoud van de doos bekeken kan worden wanneer deze ontgrendeld is.

Deze puzzel wordt bestuurd in Unity met behulp van een rigidbody ball die door middel van motion control en zwaartekracht naar het doel kan worden geleid.

Supplies

Onderdelen:

  • Arduino UNO R3.
  • ADXL345 digitale 3-axis accelerometer..
  • TowerPro SG90 9G micro servo.

Materiaal:

  • 15x90x1cm, Plank hout.
  • Twee Scharnieren 18x30mm
  • Schroeven

Gereedschap:

  • Soldeerbout.
  • Soldeer.
  • Zaag.
  • Houtlijm.
  • Dubbelzijdig tape.
  • Soldeer vloeistof
  • Boor

Het Circuit Bouwen

Circruit.png

Bouw deze circuit op een broodplank en gebruik daarbij de onderstaande kabelindeling en de foto. Let op: de ADXL345 moet worden gesoldeerd, anders kunnen er problemen optreden waardoor het niet werkt.

Bedrading: Micro Servo

  • Stroom(rood) - 5v.
  • Data(geel) - 9.
  • Grond(bruin/zwart) - GND.

Bedrading: ADXL345

  • Grond - GND
  • VCC - 3.3V.
  • SDA - A4
  • SCL - A5



Testen

Servo Test

Voordat ik het project in elkaar zet, heb ik de onderdelen getest.

Voor de ADXL345 heb ik eerst een script geschreven dat scant op een I2C-device en vervolgens een script dat data leest van de ADXL345.

Daarna heb ik een script geschreven met een eenvoudige sweep-functie voor de micro servo om deze te testen.

Arduino Code

Ik ben begonnen met het schrijven van de uiteindelijke code en heb deze getest op Arduino en Unity. Uiteindelijk heb ik deze code geschreven.

De code leest de data van de ADXL345 en kan in Unity worden gebruikt. Bovendien kan de rotatie van de servo worden veranderd via een ander script.

Downloads

Begin in Unity

Adxl Test

Na het testen van de verschillende onderdelen begon ik met het schrijven van de uiteindelijke code voor het project. Deze code heb ik zowel op de Arduino als in Unity getest om ervoor te zorgen dat alles goed samenwerkte.

De code bestaat uit verschillende scripts in Unity, waaronder:

  • SerialManager:
  • Dit script opent de seriële poort naar de Arduino om data te lezen en te schrijven.
  • ADXL:
  • Deze code leest de data van de ADXL345 en maakt deze beschikbaar in Unity als integer.
  • Motion Controller:
  • Dit script gebruikt de integer-waarden van de ADXL om de rotatie van het object te veranderen waaraan het script is gekoppeld, op basis van de rotatie van de accelerometer.
  • Menu Script:
  • Dit script verandert de positie van de servo op basis van het menu waarin de speler zich bevindt, beginnend bij 0 aan het begin van het spel en op 90 in het overwinningsscherm.

Deze code is te vinden op Git via de volgende link: https://git.hku.nl/egon.feld/gamekube_ittt_2023/-/tree/Codes/Scripts

Bouwen

IMG_20230505_125007.jpg
IMG_20230507_153259.jpg
IMG_20230507_153305.jpg
IMG_20230507_153329.jpg
IMG_20230508_173950.jpg
IMG_20230508_173954.jpg
IMG_20230513_152431.jpg
IMG_20230513_152449.jpg
IMG_20230513_152452.jpg
IMG_20230513_152458.jpg

Hier begon met het bouwen van de doos

  1. Ik begon met het zagen van het hout op de juiste afmetingen: de boven- en onderkant van 15x15x1cm en vier platen voor de muren, waarvan twee van 14x15 en twee van 14x13.
  2. Vervolgens heb ik de muren op één plaat gemaakt door ze aan elkaar te lijmen met houtlijm, behalve op de plekken waar de scharnieren moeten komen. Deze heb ik later toegevoegd.
  3. Daarna heb ik gaten geboord in het hout voor de Arduino en scharnieren en heb ik getest of ze groot genoeg waren.
  4. Ik heb de Arduino aan de onderplaat bevestigd en daarna de muren aan de onderkant vastgelijmd.
  5. Om stoppers voor de sloten te maken, heb ik een paar kleine blokken van 1cm en 3cm dik gezaagd en heb ik de ADXL aan een blok van 3cm dik bevestigd. Ik heb nog een blok gebruikt om de ADXL tegen een van de muren te schroeven en deze vervolgens vastgelijmd.
  6. Ten slotte heb ik de ADXL aangesloten op de Arduino.
  7. Ik heb een gat gemaakt in de platen die ervoor zorgen dat de muur dicht kan en deze met scharnieren aan de bovenkant van de doos vastgemaakt.
  8. Ik heb alles aan elkaar gelijmd met houtlijm.
  9. Toen heb ik de servo met dubbelzijdig tape aan de bovenkant van de doos geplaatst die naar binnen wijst en deze aangesloten op de Arduino.


Debug

Naar dat alles in elkaar heb gezet heb getest en zevool mogelijk bug gefix

Reflictie

Dit project heeft me veel geleerd over het werken met de Arduino, en ook hoe uitdagend het kan zijn om deze te combineren met Unity.

Het grootste deel van de problemen had te maken met het draaien van verschillende scripts over een serial port en hoe vaak ik de code heb moeten veranderen totdat ik een resultaat kreeg waar ik blij mee was.

Als ik een vergelijkbaar project in de toekomst zou doen, zou ik eerder beginnen zodat ik meer tijd heb om te experimenteren met de verschillende onderdelen. Ook zou ik vooraf een plan op papier maken om meer structuur te hebben en beter voorbereid te zijn.