Virtual 3D Device Port – SU08-21-Virtuele Potmeter
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:
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// configureer hier de potmeter pin, deze sluiten we hier // aan op de analoge poort 2 van de arduino: A2 int potmeter = A2; float uitgangwaarde; void setup() { // zet seriele poort aan op 9600 baud. Serial.begin(9600); } void loop() { // Lees de analoge ingang uit. int sensorValue = analogRead(potmeter); // De analoge poort gaat van 0 naar 1023 door MAP te gebruiken. // maakt de arduino een verhoudig tussen 0 en 1000. uitgangwaarde = map(sensorValue, 0, 1023, 0, 1000); // Deel de uitgangwaarde door 1000 voor een getal tussen de 0.00 en 1.00 // print potmeter waarde via seriele monitor. Serial.println(uitgangwaarde / 1000); // even wachten voor een nieuwe loop. delay(50); } |
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:
3D potmeter
Op de Sketchup 3D Warehouse website zijn veel modellen te downloaden, mijn oog is gevallen op dit potmeter model:
Physics toevoegen aan de 3D potmeter
1) Draai de potmeter 90 graden met de klok mee.
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.
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.
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:
LET OP: Vergeet niet de COM poort aan te passen aan je eigen situatie!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# DomoticX Virtual 3D Device Port SU08 interface. # Wat moet er gebeuren bij het starten van de simulatie? onstart{ # Python commando om de seriele bibliotheek te importeren. Py.exec("import serial") # Python commando om de seriele poort te openen. Py.exec("ser = serial.Serial('COM8', 9600)") } # Wat moet er gebeuren tijdens de simulatie? ontick{ # Python commando om de seriele poort uit te lezen voor gegevens. Py.exec("serialdata = ser.readline()") # Ruby commando om de gegevens van python om te zetten in een variabele. $serialdata = Py.eval("serialdata") # Ruby commando om de data te printen in de Ruby console. puts $serialdata } # Wat moet er gebeuren als de de simulatie stopt? onend{ # Python commando om de seriele poort te sluiten. Py.exec("ser.close()") } |
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 bovenstaand script in.
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”.
Overige instellingen
1) als je nu de simulatie start, dan zie je dat het onderste deel naar beneden valt, ….zet deze op ‘ignore’:
2) Zet X-ray uit via Topmenu > view> Face Style > X-ray:
3) Om het figuur van de servo niet meer te zien, ga naar Topmenu > Window > Layers, en vink ‘visible’ uit bij ‘Physics joints’.
4) Om de knop te bewerken klik op de knop en dan rechter muisknop > ‘Edit Component’.
Teken een driehoek zoals onder aangegeven, met de ‘paint bucket’ kun je deze een kleur geven:
5) Voor een meer realistische potmeter is de draaihoek 270 graden, dus die kunnen we aanpassen:
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.
- SketchyPhysics - SU08-32-RGB LED aansturen (sketchup).7z 46,90 kb
- SketchyPhysics - SU08-32-RGB LED aansturen (ruby-python scripts).ino.7z 1,16 kb
- SketchyPhysics - SU08-32-RGB LED aansturen (arduino script).ino.7z 0,80 kb
- SketchyPhysics - SU08-31-Servo aansturen (SG90) (arduino script).ino.7z 0,82 kb
- SketchyPhysics - SU08-30-Hendel status voorbeeld compleet naar Arduino (sketchup 8).skp.7z 19,00 kb
- SketchyPhysics - SU08-30-Hendel status voorbeeld compleet naar Arduino (ruby-python script).rb.7z 0,93 kb
- SketchyPhysics - SU08-30-Hendel status voorbeeld compleet (sketchup 8).skp.7z 18,47 kb
- SketchyPhysics - SU08-30-Hendel status voorbeeld compleet (ruby-python script).rb.7z 0,75 kb
- SketchyPhysics - SU08-30-Hendel status voorbeeld (sketchup 2014).skp.7z 18,46 kb
- SketchyPhysics - SU08-30-Hendel orgineel voorbeeld omgezet (sketchup 8).skp.7z 17,68 kb
- SketchyPhysics - SU08-30-Hendel orgineel voorbeeld (sketchup 2013).skp.7z 24,89 kb
- SketchyPhysics - SU08-22-Accelerometer (ADXL345) (sketchup).skp.7z 53,98 kb
- SketchyPhysics - SU08-22-Accelerometer (ADXL345) (ruby-python script).rb.7z 0,67 kb
- SketchyPhysics - SU08-22-Accelerometer (ADXL345) (arduino script).ino.7z 1,52 kb
- SketchyPhysics - SU08-21-Virtuele Potmeter (sketchup).skp.7z 34,45 kb
- SketchyPhysics - SU08-21-Virtuele Potmeter (ruby-python script).rb.7z 0,56 kb
- SketchyPhysics - SU08-21-Virtuele Potmeter (arduino script).ino.7z 0,60 kb
- SketchyPhysics - SU08-21-Potmeter orgineel model (sketchup).skp.7z 91,66 kb
- SketchyPhysics - SU08-20-Communicatie naar SU (sketchup).skp.7z 14,91 kb
- SketchyPhysics - SU08-20-Communicatie naar SU (ruby-python script).rb.7z 0,59 kb
- SketchyPhysics - SU08-20-Communicatie naar SU (arduino script).ino.7z 0,33 kb
- SketchyPhysics - SU08-12-Waarde uitlezen van object voorbeeld van forum (sketchup).7z 61,51 kb
- SketchyPhysics - SU08-10-Basis oefening (sketchup).skp.7z 14,31 kb