Virtual 3D Device Port – SU15-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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# DomoticX Virtual 3D Device Port SU15 interface. # Wat moet er gebeuren bij het starten van de simulatie? onstart{ compoortopties = ["Serial Port:", "Baudrate:"] # Standaard waarden!, deze kun je zelf aanpassen! standaard = ["COM8", "9600"] # Lijst met baudrates voor de dropdownlijst in het menu. baudratelijst = ["", "4800|9600|14400|19200|28800|38400|57600|115200"] # Geef het dialoogvenster weer voor vraag naar gegevens. serialsettings = UI.inputbox(compoortopties, standaard, baudratelijst, "Serial port settings:") if serialsettings != FALSE # Haal de instellingen uit het diagloogvenster en koppel deze aan een variabele. $comport = serialsettings[0] $baudrate = serialsettings[1].to_i begin # Open de seriele poort. @serial = Serial.new($comport, $baudrate) rescue RubySerial::Exception => e # Sluit de seriele poort als deze open staat. @serial.close if @serial # Reset/stop de simulatie. MSketchyPhysics3::SketchyPhysicsClient.physicsReset # Geef een bericht dat de seriele poort niet is gevonden. UI.messagebox("Seriele poort niet gevonden!") end else # Reset/stop de simulatie. MSketchyPhysics3::SketchyPhysicsClient.physicsReset end } # Wat moet er gebeuren tijdens de simulatie? ontick{ # Sluit het 'control panel' venster bij het starten van de simulatie. MSketchyPhysics3.closeControlPanel if frame == 1 # Lees de data van de seriele poort in. $serialdata = @serial.read(1024) # Geef de gegevens weer aan de linker zijde (log). logLine("COM poort: " + $comport.to_s) logLine("BAUD rate: " + $baudrate.to_s) logLine("Seriele data: " + $serialdata.to_s) logLine("") logLine("") logLine("") logLine("") logLine("") } # Wat moet er gebeuren als de de simulatie stopt? onend{ # Sluit de seriele poort als deze open staat. @serial.close if @serial } |
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.
3) Je krijgt een venster waar je je seriële instellingen kan opgeven, vul deze in aan de hand van jou situatie:
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, aan de linker zij kant worden de gegevens weergegeven:
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 - SU15-33-LED aan-uit schakelen (sketchup).skp.7z 225,84 kb
- SketchyPhysics - SU15-33-LED aan-uit schakelen (ruby script).rb.7z 1,09 kb
- SketchyPhysics - SU15-33-LED aan-uit schakelen (arduino script).ino.7z 0,69 kb
- SketchyPhysics - SU15-32-RGB LED aansturen (sketchup).skp.7z 61,30 kb
- SketchyPhysics - SU15-32-RGB LED aansturen (ruby-python scripts).ino.7z 1,76 kb
- SketchyPhysics - SU15-32-RGB LED aansturen (arduino script).ino.7z 0,80 kb
- SketchyPhysics - SU15-31-Servo aansturen (SG90) (arduino script).ino.7z 0,82 kb
- SketchyPhysics - SU15-30-Hendel status voorbeeld compleet naar Arduino (ruby script).rb.7z 1,70 kb
- Sketchyphysics - SU15-30-Hendel status naar Arduino (sketchup).skp.7z 31,52 kb
- SketchyPhysics - SU15-23-Gyroscoopmeter (GY-521) (arduino script).ino.7z 1,02 kb
- SketchyPhysics - SU15-22-Accelerometer (ADXL345) (sketchup).skp.7z 74,49 kb
- SketchyPhysics - SU15-22-Accelerometer (ADXL345) (ruby script).rb.7z 1,14 kb
- SketchyPhysics - SU15-22-Accelerometer (ADXL345) (arduino script).ino.7z 1,50 kb
- SketchyPhysics - SU15-21-Virtuele Potmeter (sketchup).skp.7z 51,62 kb
- SketchyPhysics - SU15-21-Virtuele Potmeter (ruby-python script).rb.7z 1,03 kb
- SketchyPhysics - SU15-21-Virtuele Potmeter (arduino script).ino.7z 0,60 kb
- SketchyPhysics - SU15-21-Potmeter orgineel model (sketchup).skp.7z 91,66 kb
- Sketchyphysics - SU15-20-Communicatie naar SU (sketchup).skp.7z 22,37 kb
- SketchyPhysics - SU15-20-Communicatie naar SU (ruby script).rb.7z 1,03 kb
- SketchyPhysics - SU15-20-Communicatie naar SU (arduino script).ino.7z 0,33 kb
- SketchyPhysics - SU15-12-Waarde uitlezen van object voorbeeld van forum (sketchup).7z 71,97 kb
- SketchyPhysics - SU15-10-Basis oefening (sketchup).skp.7z 19,25 kb
- SketchyPhysics - SU14&15 - Library FFI+RubySerial.7z 167,31 kb