měření vzdáleností pomocí RPLidar A1 a komunikace s PLC
Napsal: 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
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);
}
}
}