Virtual 3D Device Port – SU08-20-Communicatie naar SU
Hieronder volgen een aantal stappen om de seriële data van een seriële poort (arduino) uit te lezen en deze om te zetten in een beweging in SketchUp SketchyPhysics.
Zoals we in de vorige hoofdstukken hebben gezien kunnen we een servo instellen op bijvoorbeeld 180 graden (-90 t/m +90), deze gaat bewegen (draaien) met een getal tussen 0.00 (0%) en 1.00 (100%)
De Arduino programmeren
Om de slider te emuleren kunnen we een script schrijven voor de Arduino dat van 0.00 naar 1.00 gaat in stapjes van 0.01:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
float i = 0; void setup() { Serial.begin(9600); } void loop() { for (i = 0; i < 1; i = i + 0.01) { delay(60); Serial.println(i); } for (i = 1; i > 0; i = i - 0.01) { delay(60); Serial.println(i); } } |
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:
Nu is het de kunst om deze gegevens in SketchUp SketchyPhysics te krijgen!
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 26 27 28 29 30 31 32 33 34 |
# 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. logLine("Seriele data: " + $serialdata) logLine("") logLine("") logLine("") logLine("") logLine("") logLine("") logLine("") logLine("") logLine("") } # 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 balk.
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
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 balk uit zichzelf gaan bewegen volgens de variabelen die via de seriële poort binnenkomen!
Het is nu gelukt om gegevens van de “buitenwereld” om te zetten in een Virtuele 3D beweging.
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:
EDIT: In de laatste update staan deze gegevens aan de linkerkant van het scherm!
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 -90 graden)
– 1.00 de status van het object opgegeven bij de MAX waarde (bijvoorbeeld 90 graden)
Daaruit volgt dat tussen 0.00 en 1.00, 180 graden zit, omdat sketchup met stapjes van 0.01 werkt zijn er 100 stapjes dus 1,8 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