Lidar Sensor im zusammenspiel mit einem Schrittmotor

Hallo Zusammen,

im Rahmen eines Uni-Projektes baue ich zur Zeit eine Sensoreinheit, die einen Raum scannt und dann eine 2D-Karte davon zeichnet.

Ich benutze

  • Arduino Mega
  • Arduino Motor-Shield v2
  • Nema 17 Stepper
  • TFMini Lidar

Aufbau:
Der Schrittmotor treibt mit einer Übersetzung von 1:2 den sich rotierenden Sensor an.

Aufgabe:
Nach jedem Schritt misst der Sensor die Distanz zum nächsten Hindernis
und weist diesen Wert der Gradzahl des Motors zu.

Bswp. 0.9° 70cm

Das Spiel Wiederholt sich bis zu einer vollen Umdrehung (360°), also mit insgesamt 400 Messungen.
Im Anschluss sollen die gemessenen Werte Grafisch dargestellt werden.

Nun zu meinem Problem:

Ich habe einen Bereits geschriebenen Code für den Sensor als Grundlage verwendet, in einer While-schleife habe ich die Schritte und die Gradzahlen bestimmt.

Programm hochgeladen: Läuft!

In einem weiteren Code habe ich gefunden wie man den o.g. Motor schrittweise ansteuert (digitalwrite).
Ich habe das Setup eingefügt und aus dem Void Loop die befehle für die entsprechenden Pins auf dem Motorshield in die While-schleife eingebaut.

Programm hochgeladen: Motor dreht, Gradzahlen werden richtig berechnet, nur die Distanz stimmt nicht mehr und bleibt auf einem fixen Wert von 1200cm stehen.

Da meine Programmierkenntnisse durch mein Maschinenbaustudium nicht über Grundlagen hinaus gehen, habe ich leider nicht das Nötige Know-How um Bspw. den Motor oder den Lidar in einem eigens geschriebenen Code anzusteuern. Das würde auch meine Zeit sprengen.

Ich weiß dass ich SoftwareSerial benutze obwohl ich einen Arduino Mega verwende. Glaube jedoch nicht, dass es was mit meinem Problem zu tun hat.

Findet von euch jemand eventuell auf anhieb etwas in dem Code, oder eventuelle Baustellen die ich prüfen könnte?

  #include <SoftwareSerial.h>
#include "TFMini.h"

int delaylegnth= 25;

// Setup software serial port 
SoftwareSerial mySerial(50, 51);      // Mega RX (TFMINI TX), Mega TX (TFMINI RX)
TFMini tfmini;

void setup() {
///MOTOR SETUP    
  //establish motor direction toggle pins
  pinMode(12, OUTPUT); //CH A -- HIGH = forwards and LOW = backwards???
  pinMode(13, OUTPUT); //CH B -- HIGH = forwards and LOW = backwards???
  
  //establish motor brake pins
  pinMode(9, OUTPUT); //brake (disable) CH A
  pinMode(8, OUTPUT); //brake (disable) CH B

//// LIDAR SETUP
  // Step 1: Initialize hardware serial port (serial debug port)
  Serial.begin(115200);

  // Step 2: Initialize the data rate for the SoftwareSerial port
  mySerial.begin(TFMINI_BAUDRATE);

  // Step 3: Initialize the TF Mini sensor
  tfmini.begin(&mySerial);   


}

void loop() {

  double i=0;
  double degree= 0;
  // Take one TF Mini distance measurement
  uint16_t dist = tfmini.getDistance();

  Serial.print(degree);
  Serial.print("° ");
  Serial.print(dist);
  Serial.println(" cm");

  // Starte while Loop bis i=400
  while (i < 400)
  {
 
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, HIGH);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A

  ++i;
  uint16_t dist1 = tfmini.getDistance();
  degree = i * 0.9;
  Serial.print(degree);
  Serial.print("° ");
  Serial.print(dist1);
  Serial.println(" cm");
  
  delay(delaylegnth);

  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, LOW);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
 ++i;
 uint16_t dist2 = tfmini.getDistance();
degree = i * 0.9;
  Serial.print(degree);
  Serial.print("° ");
  Serial.print(dist2);
  Serial.println(" cm");
  delay(delaylegnth);
  
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, LOW);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
 ++i;
  uint16_t dist3 = tfmini.getDistance();
 degree = i * 0.9;
  Serial.print(degree);
  Serial.print("° ");
  Serial.print(dist3);
  Serial.println(" cm");
  delay(delaylegnth);
    
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, HIGH);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
 ++i;
  uint16_t dist4 = tfmini.getDistance();
  degree = i * 0.9;
  Serial.print(degree);
  Serial.print("° ");
  Serial.print(dist4);
  Serial.println(" cm");
  delay(delaylegnth);
  }
  ////ENDE LOOP BEI i = 400





  
  
}

ADD; Ich habe einmal den originalen Code für den TFMini unverändert getestet. Sobald ich den Motor anschließe (Der in dem Code zwar keine Verwendung hat) Werden die ausgegebenen Daten fehlerhaft. Auf dem Motor liegt eine Spannung an und der entsprechende Pin leuchtet Obwohl der Sketch diesen Pin nicht einmal anspricht