měření vzdáleností pomocí RPLidar A1 a komunikace s PLC

Odpovědět
ondrej123
Příspěvky: 2
Registrován: 27 bře 2019, 21:27
Reputation: 0

měření vzdáleností pomocí RPLidar A1 a komunikace s PLC

Příspěvek od ondrej123 » 31 bře 2019, 23:36

Zdravím, jsem nováček a byl bych rád za nějaká doporučení a rady od zkušenějších. Do Arduina UNO jsem nahrál example sketch z knihovny RPLidar, chtěl jsem nechat tisknout informace o vzdálenosti do seriového monitoru, tak jsem přidal akorát "Serial.println(distance);", všechno jsem zapojil, všechno vypadalo, že bude fungovat, akorát v seriovém monitoru mi to házelo akorát otazníky a různé znaky místo číselných hodnot. Zkoušel jsem měnit baudy, jestli to nebude tím, ale nepomohlo to. Napadlo mě, jestli nebude problém v tom, že sensor využívá TX/RX piny Arduina, ale nevím moc co s tím. Pokud tohle vyřeším, tak mám v plánu posílat data skrz ethernetový sheild W5100 do PLC. Budu rád za každou radu, ať už ohledně tištění hodnot do seriového monitoru, nebo ohledně toho propojení s PLC (jestli je to vůbec realizovatelné přes ten shield, nebo tak).
Děkuji

Kód: Vybrat vše

// This sketch code is based on the RPLIDAR driver library provided by RoboPeak
#include <RPLidar.h>

// You need to create an driver instance 
RPLidar lidar;

#define RPLIDAR_MOTOR 3 // The PWM pin for control the speed of RPLIDAR's motor.
                        // This pin should connected with the RPLIDAR's MOTOCTRL signal 
                       
                        
void setup() {
  // bind the RPLIDAR driver to the arduino hardware serial
  lidar.begin(Serial);
  
  // set pin modes
  pinMode(RPLIDAR_MOTOR, OUTPUT);
}

void loop() {
  if (IS_OK(lidar.waitPoint())) {
    float distance = lidar.getCurrentPoint().distance; //distance value in mm unit
    float angle    = lidar.getCurrentPoint().angle; //anglue value in degree
    bool  startBit = lidar.getCurrentPoint().startBit; //whether this point is belong to a new scan
    byte  quality  = lidar.getCurrentPoint().quality; //quality of the current measurement
    
    Serial.printl(distance);
    
    
  } else {
    analogWrite(RPLIDAR_MOTOR, 0); //stop the rplidar motor
    
    // try to detect RPLIDAR... 
    rplidar_response_device_info_t info;
    if (IS_OK(lidar.getDeviceInfo(info, 100))) {
       // detected...
       lidar.startScan();
       
       // start motor rotating at max allowed speed
       analogWrite(RPLIDAR_MOTOR, 255);
       delay(1000);
    }
  }
}

Axamith
Příspěvky: 530
Registrován: 09 srp 2017, 08:17
Reputation: 0
Kontaktovat uživatele:

Re: měření vzdáleností pomocí RPLidar A1 a komunikace s PLC

Příspěvek od Axamith » 01 dub 2019, 07:50

Aniž bych nějak pitval tvůj kód, s setupu ti chybí

Kód: Vybrat vše

Serial.begin(9600);
s nastavením rychlosti přenosové linky.

P.S. pro vkládání kódu používej Fci code (5 ikona zleva nad textovým oknem).
(By Admin: Kód jsem vložil do správných značek)

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: měření vzdáleností pomocí RPLidar A1 a komunikace s PLC

Příspěvek od jankop » 01 dub 2019, 09:00

Ke kolizi sériového portu nepochybně dochází také.
Přesunul bych LIDAR na SoftwareSerial(). Předpokládám, že by to neměl být problém.

https://www.arduino.cc/en/Tutorial/Soft ... ialExample

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: měření vzdáleností pomocí RPLidar A1 a komunikace s PLC

Příspěvek od ohruska » 01 dub 2019, 09:05

Asi je třeba v monitoru nastavit rychlost přenosu stejnou, jaká je definována v knihovně " RPLIDAR_SERIAL_BAUDRATE = 115200"
Ota

ondrej123
Příspěvky: 2
Registrován: 27 bře 2019, 21:27
Reputation: 0

Re: měření vzdáleností pomocí RPLidar A1 a komunikace s PLC

Příspěvek od ondrej123 » 01 dub 2019, 11:42

Děkuji za rychlé reakce, zítra to vyzkouším.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 16 hostů