new Stepper Controll and fix scan anomali
This commit is contained in:
@@ -1,18 +1,18 @@
|
|||||||
#include <AFMotor.h>
|
#include <CheapStepper.h>
|
||||||
|
|
||||||
double degreeY = 0;
|
double degreeY = 0;
|
||||||
String rxData = ""; //Empfangen
|
String rxData = ""; //Empfangen
|
||||||
|
|
||||||
// Connect a stepper motor with 200 steps per revolution (1.8 degree)
|
CheapStepper stepper (8,9,10,11);
|
||||||
// to motor port #1 (M1 and M2)
|
|
||||||
AF_Stepper motor(200, 1);
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
|
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
|
||||||
motor.setSpeed(60); // 60 rpm
|
stepper.setRpm(24);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
|
||||||
|
stepper.run();
|
||||||
// send data only when you receive data:
|
// send data only when you receive data:
|
||||||
if (Serial.available() > 0) {
|
if (Serial.available() > 0) {
|
||||||
// read the incoming byte:
|
// read the incoming byte:
|
||||||
@@ -37,23 +37,27 @@ void loop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String moveMotor(double y){
|
String moveMotor(double y){
|
||||||
|
|
||||||
|
|
||||||
if(y < degreeY){
|
if(y < degreeY){
|
||||||
motor.step((int)calculateStepps(degreeY - y), BACKWARD, INTERLEAVE); //"interleave" means that it alternates between single and double to get twice the resolution (but of course its half the speed)
|
stepper.newMoveDegrees (true, calculateMove(y)); //true = im Uhrzeigersinn drehen
|
||||||
motor.release(); // Strom sparen und Überhitzung des Controllers vorbeugen!
|
//motor.step((int)calculateStepps(degreeY - y), BACKWARD, INTERLEAVE); //"interleave" means that it alternates between single and double to get twice the resolution (but of course its half the speed)
|
||||||
|
//motor.release(); // Strom sparen und Überhitzung des Controllers vorbeugen!
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
motor.step((int)calculateStepps(y - degreeY), FORWARD, INTERLEAVE);
|
stepper.newMoveDegrees (false, calculateMove(y)); //false = gegen Uhrzeigersinn drehen
|
||||||
motor.release();
|
//motor.step((int)calculateStepps(y - degreeY), FORWARD, INTERLEAVE);
|
||||||
|
//motor.release();
|
||||||
}
|
}
|
||||||
degreeY = y;
|
degreeY = y;
|
||||||
return "<move><" + (String)y + ">";
|
return "<move><" + (String)y + ">";
|
||||||
}
|
}
|
||||||
|
|
||||||
double calculateStepps(double y){
|
double calculateMove(double y){
|
||||||
double temp = 0;
|
double temp = 0;
|
||||||
if(y < degreeY)
|
if(y < degreeY)
|
||||||
temp = degreeY - y;
|
temp = degreeY - y;
|
||||||
else
|
else
|
||||||
temp = y - degreeY;
|
temp = y - degreeY;
|
||||||
return (y / 1.8) * 2; // *2 wegen interleave stepps / Falls Untersetzung, multiplikator anpassen!
|
return temp * 7.37 ;// Übersetzung 96/11 4,4/30,5
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@ import time # Time module
|
|||||||
#port = input("Enter port name which lidar is connected:") #windows
|
#port = input("Enter port name which lidar is connected:") #windows
|
||||||
#port = "/dev/ttyUSB0" #linux
|
#port = "/dev/ttyUSB0" #linux
|
||||||
f = open("PoinCloudWeb.Scanner\datafile.txt","wt")
|
f = open("PoinCloudWeb.Scanner\datafile.txt","wt")
|
||||||
Obj = PyLidar3.YdLidarX4(port='COM6',chunk_size=10000) #PyLidar3.your_version_of_lidar(port,chunk_size)
|
Obj = PyLidar3.YdLidarX4(port='COM6',chunk_size=20000) #PyLidar3.your_version_of_lidar(port,chunk_size)
|
||||||
if(Obj.Connect()):
|
if(Obj.Connect()):
|
||||||
print(Obj.GetDeviceInfo())
|
print(Obj.GetDeviceInfo())
|
||||||
gen = Obj.StartScanning()
|
gen = Obj.StartScanning()
|
||||||
@@ -13,7 +13,7 @@ if(Obj.Connect()):
|
|||||||
data = next(gen)
|
data = next(gen)
|
||||||
#print(data)
|
#print(data)
|
||||||
for x,y in data.items():
|
for x,y in data.items():
|
||||||
f.write("a:" + str(x) + " d:" + str(y) + "\n")
|
f.write(str(x) + " / " + str(y) + "\n")
|
||||||
f.close()
|
f.close()
|
||||||
Obj.StopScanning()
|
Obj.StopScanning()
|
||||||
Obj.Disconnect()
|
Obj.Disconnect()
|
||||||
|
|||||||
@@ -1,43 +1,88 @@
|
|||||||
# Importing Libraries
|
# Importing Libraries
|
||||||
import serial
|
import serial
|
||||||
import time
|
import time
|
||||||
|
import PyLidar3
|
||||||
|
|
||||||
arduino = serial.Serial(port='COM5', baudrate=9600)
|
arduino = serial.Serial(port='COM8', baudrate=9600)
|
||||||
|
lidar = PyLidar3.YdLidarX4(port='COM6',chunk_size=20000) #PyLidar3.your_version_of_lidar(port,chunk_size)
|
||||||
|
|
||||||
|
f = open("PoinCloudWeb.Scanner\datafile.txt","wt")
|
||||||
|
|
||||||
print("Start ...")
|
print("Start ...")
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
print("Ready:")
|
print("Ready:")
|
||||||
|
|
||||||
def write_read(x):
|
def arduino_write_read(x):
|
||||||
arduino.write(bytes(x, 'utf-8'))
|
arduino.write(bytes(x, 'utf-8'))
|
||||||
data = arduino.readline()
|
data = arduino.readline()
|
||||||
return filterY(str(data))
|
return filterY(str(data))
|
||||||
|
|
||||||
def setY(y):
|
def setY(y):
|
||||||
print(write_read("<set><"+str(y)+">"))
|
print(arduino_write_read("<set><"+str(y)+">"))
|
||||||
|
|
||||||
def getY():
|
def getY():
|
||||||
print(write_read("<get>"))
|
print(arduino_write_read("<get>"))
|
||||||
|
|
||||||
def resetY():
|
def resetY():
|
||||||
print(write_read("<reset>"))
|
print(arduino_write_read("<reset>"))
|
||||||
|
|
||||||
def zerotY():
|
def zerotY():
|
||||||
print(write_read("<zero>"))
|
print(arduino_write_read("<zero>"))
|
||||||
|
|
||||||
def filterY(data):
|
def filterY(data):
|
||||||
temp = data[data.find("<"):data.find(">")]
|
temp = data[data.find("<"):data.find(">")]
|
||||||
return temp + data[data.find("><"):data.find(">", data.find("><")+2)+1]
|
return temp + data[data.find("><"):data.find(">", data.find("><")+2)+1]
|
||||||
|
|
||||||
def startScan(mode):
|
def senddata(data,posy):
|
||||||
print("Scan gestartet")
|
for x,y in data.items():
|
||||||
|
f.write("y:" + str(posy) + "x:" + str(x) + "d:" + str(y) + "\n")
|
||||||
|
|
||||||
def stopScan():
|
def startScaner(mode):
|
||||||
print("Scan gestoppt")
|
if(lidar.Connect()):
|
||||||
|
print(lidar.GetDeviceInfo())
|
||||||
|
gen = lidar.StartScanning()
|
||||||
|
t = time.time() # start time
|
||||||
|
if(mode == "0"):
|
||||||
|
print("Mode 0")
|
||||||
|
for y in range(18):
|
||||||
|
senddata(next(gen),y*10)
|
||||||
|
time.sleep(2)
|
||||||
|
setY(y*10)
|
||||||
|
time.sleep(2)
|
||||||
|
setY(0)
|
||||||
|
elif(mode == "1"):
|
||||||
|
print("Mode 1")
|
||||||
|
for y in range(90):
|
||||||
|
senddata(next(gen),y*2)
|
||||||
|
time.sleep(1)
|
||||||
|
setY(y*2)
|
||||||
|
time.sleep(1)
|
||||||
|
setY(0)
|
||||||
|
elif(mode == "2"):
|
||||||
|
print("Mode 2")
|
||||||
|
for y in range(360):
|
||||||
|
senddata(next(gen),y*0.5)
|
||||||
|
time.sleep(1)
|
||||||
|
setY(y*0.5)
|
||||||
|
time.sleep(1)
|
||||||
|
setY(0)
|
||||||
|
|
||||||
def getScanStatus():
|
else:
|
||||||
return "%"
|
print("Mode Error")
|
||||||
|
|
||||||
|
# data = next(gen)
|
||||||
|
# #print(data)
|
||||||
|
# for x,y in data.items():
|
||||||
|
# f.write("a:" + str(x) + " d:" + str(y) + "\n")
|
||||||
|
f.close()
|
||||||
|
lidar.StopScanning()
|
||||||
|
lidar.Disconnect()
|
||||||
|
print("Scaner gestoppt")
|
||||||
|
else:
|
||||||
|
print("Error connecting to device")
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
for x in range(11):
|
startScaner(input("Scan Modus(0,1,2):"))
|
||||||
setY(x*36)
|
# for x in range(18):
|
||||||
|
# setY(x*10)
|
||||||
|
# time.sleep(1)
|
||||||
Reference in New Issue
Block a user