Virtual 3D Device Port – SU08-30-Communicatie naar Arduino

Virtual 3D Device port SU08 logo

Hieronder volgen een aantal stappen om seriële data via een seriële poort naar de arduino te zenden en deze om te zetten in een beweging in van bijvoorbeeld een servo.

Voor dit voorbeeld had ik hulp in moeten roepen op het forum van sketchucation, het blijkt namelijk helemaal NIET eenvoudig te zijn om de status 0.00 t/m 1.00 van een schanier of servo uit te lezen in SketchUp 8, er moeten diverse wiskundige berekeningen gemaakt worden om het aantal graden te onttrekken.

Het voorbeeld uit het forum is gemaakt in SU2013, de hoek in graden word getoond:

Virtual 3D Device Port - SU08-30-Communicatie naar Arduino screen 01

Dit is de Ruby code in het script gedeelte van de hendel:

Omdat de hoek zowel positief als negatief kan zijn, is het handiger om met de MIN en MAX waarden te werken (naar de arduino toe), daarvoor heb ik dit stukje code gemaakt, je plaatst het in het “onUpdate” blok aan het eind:

Als je nu de RUBY Console opent, kun je de waarde 0.00 t/m 1.00 zien als je de hendel verplaatst:

Sketchup 8

Om te gebruiken in SU8 (en om python te gebruiken), moeten we het model eerst opslaan voor versie 8 van SU:

Virtual 3D Device Port - SU08-30-Communicatie naar Arduino screen opslaan

Nu kunnen we de hendel ook gebruiken voor SU8, maar er is echter een probleem, zodra je in SU8 aan de hendel zit, verschijnt deze foutmelding:

Sketchup8_round_error

SketchUp 8 gebruikt een andere Ruby versie (1.x.x) en heeft bij de functie “round” geen argumenten nodig, ik heb het na wat research opgelost met het volgende stukje code dat gebruik maakt van SPRINTF:

Nu krijg je geen foutmelding en zie je in de RUBY console wederom de getallen tussen 0.00 en 1.00.

Getallen weergeven

Om het allemaal wat mooier te maken kun je “logLine” gebruiken, dit zijn “log” regels die verschijnen aan de linkerkant van het beeld, dat kan met dit stukje code:

Daarnaast moet je wel de TEXT attributen weghalen, anders wordt het een wirwar op je scherm, de totale code in de “script” sectie ziet er dan zo uit:

Virtual 3D Device Port - SU08-30-Communicatie naar Arduino screen 02

Gegevens naar seriële poort schrijven

Om nu de gegevens 0.00 t/m 1.00 naar de arduino te schrijven via de seriele poort, heb je de volgende Python code nodig in de volgende blokken onder “scripted”:

De complete code

Hoe werkt het?

Dit werkt nu via een seriële verbinding tussen de computer en de Arduino , de computer 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.