Virtual 3D Device Port – SU15-21-Virtuele Potmeter

Virtual-3D-Device-port-SU15-logo

Nu we de basis onder de knie hebben, kunnen we eens kijken of we een praktijk voorbeeld kunnen gebruiken, bijvoorbeeld een potmeter.

Eerst gaan de een potmeter aansluiten op de arduino volgens onderstaand schema:

arduino potmeter schema

De Arduino programmeren

Om een object in SketchUp SketchyPhysics te laten bewegen kunnen we een script schrijven voor de potmeter op de Arduino dat van 0.00 naar 1.00 gaat in (potmeter helemaal naar links t/m potmeter helemaal naar rechts.

1) Open de Arduino IDE en upload het bovenstaande script naar de Arduino, als je de seriële monitor opent krijg je deze output te zien:

Sketchyphysics - SU08 - 30 - Potmeter 01

3D potmeter

Op de Sketchup 3D Warehouse website zijn veel modellen te downloaden, mijn oog is gevallen op dit potmeter model:

Sketchyphysics - SU08 - 30 - Potmeter 02

Website & Download

Physics toevoegen aan de 3D potmeter

1) Draai de potmeter 90 graden met de klok mee.

Sketchyphysics - SU08 - 30 - Potmeter 03

2) Vergroot de potmeter 10x en plaats deze van de assen af.
3) In het schermpje met ‘Joints’ selecteer ‘servo’, en trek deze vanuit het midden van de knop naar het midden onder de knop.

Sketchyphysics - SU08 - 30 - Potmeter 04

4) Van het hoofdschermpje van SketchyPhysics selecteer de ‘joint connector’
5) Klik op de servo.
6) Houd de (linker) CTRL knop ingedruk (er verschijnt een plusje +) en selecteer de knop, hier komt een groene rand omheen.

Sketchyphysics - SU08 - 30 - Potmeter 05

Seriële data laden in SketchUp SketchyPhysics

Nu de Arduino de getallen stuurt via de seriële poort moeten we deze opvangen in SketchUp SketchyPhysics, dit doen we met een Python script en de plugin PySerial, in onderstaand script heb ik commentaar regels toegevoegd:

Waar moet dit script geplaatst worden?

1) Klik op de UI (User Interface) knop.
2) Klik op de knop.
3) Vink onderaan op ‘scripted’ om een script toe te voegen, daar plaats je het bovenstaande script in.

Sketchyphysics - SU08 - 30 - Potmeter 06

De Servo instellen

Nu we de data inlezen in de (Ruby) variabele $serialdata, moet deze ook naar de servo gestuurd worden.

1) Klik op de servo.
2) Voer bij ‘Controller’ in [variabele].to_f ,in dit geval:  $serialdata.to_f

Ps. .to_f  betekend in Ruby “TO FLOAT”.

Sketchyphysics - SU08 - 30 - Potmeter 10

Overige instellingen

1) als je nu de simulatie start, dan zie je dat het onderste deel naar beneden valt, ….zet deze op ‘ignore’:

Sketchyphysics - SU08 - 30 - Potmeter 07

2) Zet X-ray uit via Topmenu > view> Face Style > X-ray:

Sketchyphysics - SU08 - 30 - Potmeter 08

3) Om het figuur van de servo niet meer te zien, ga naar Topmenu > Window > Layers, en vink ‘visible’ uit bij ‘Physics joints’.

Sketchyphysics - SU08 - 30 - Potmeter 09

4) Om de knop te bewerken klik op de knop en dan rechter muisknop > ‘Edit Component’.

Sketchyphysics - SU08 - 30 - Potmeter 11

Teken een driehoek zoals onder aangegeven, met de ‘paint bucket’ kun je deze een kleur geven:

Sketchyphysics - SU08 - 30 - Potmeter 12

5) Voor een meer realistische potmeter is de draaihoek 270 graden, dus die kunnen we aanpassen:

Sketchyphysics - SU08 - 30 - Potmeter 13

Alles in actie

1) Sluit de Arduino aan met bovenstaand Arduino script geladen (pas eventueel de COM poort aan in het Python script).
2) Druk op de “play” knop om de simulatie te starten.

Nu zal de potmeterknop zich gaan bewegen, zoals je ook aan de echte knop draait!

Je kan het controleren door in het TOP menu van SketchUp naar Window > Ruby console te gaan, daar zie je de binnengekomen seriële gegevens.

Hoe werkt het?

Dit werkt nu via een seriele verbinding tussen de Arduino en de computer, de arduino stuurt getallen (FLOAT) tussen 0.00 en 1.00.
In Sketchup SketchyPhysics is:

0.00 de status van het object opgegeven bij de MIN waarde (bijvoorbeeld -135 graden)
1.00 de status van het object opgegeven bij de MAX waarde (bijvoorbeeld 135 graden)

Daaruit volgt dat tussen 0.00 en 1.00, 270 graden zit, omdat sketchup met stapjes van 0.01 werkt zijn er 100 stapjes dus 2,7 graden per stapje.