Page
To install the pyserial
package using Blender's bundled Python, follow these steps:
Ensure
pip
is installed:/Applications/Blender.app/Contents/Resources/3.6/python/bin/python3.10 -m ensurepip
Install
pyserial
using pip:/Applications/Blender.app/Contents/Resources/3.6/python/bin/python3.10 -m pip install pyserial
import serial
import bpy
import time
ser = serial.Serial('/dev/cu.usbmodem11201', 115200)
time.sleep(3)
ser.write(b'Get Distance\n')
start = float(ser.readline().decode().strip())
cube = bpy.context.selected_objects[0]
for x in range(100):
ser.write(b'Get Distance\n')
time.sleep(0.05)
current = float(ser.readline().decode().strip())
print(current)
cube.location.z = start - current
bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
ser.close()
const int trigPin = 9;
const int echoPin = 10;
long duration;
float distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(115200);
}
void loop() {
if (Serial.available()) {
String command = Serial.readStringUntil('\n');
command.trim(); // remove any \r or whitespace
if (command == "Get Distance") {
// Trigger ultrasonic pulse
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read echo time
duration = pulseIn(echoPin, HIGH);
// Convert to distance in centimeters
distance = duration * 0.034 / 2;
// Send distance to Python
Serial.println(distance);
}
}
}
Last updated