В этом небольшом уроке разбираемся как установить последовательную связь между измерителем мощности Thorlabs PM101 и Arduino.
Комплектующие
Собственно, из комплектующих нам нужны всего лишь:
- Thorlabs PM101
- Arduino Uno
Измеритель мощности Thorlabs PM101 имеет USB и последовательный интерфейс для считывания значений измерителя мощности с прибора. Т.е. работает через UART.
Вы можете создать свой собственный автономный измеритель мощности с Arduino. Расширьте пример, например, со светодиодом, который показывает, было ли достигнуто определенное значение измерителя мощности.
Установите поддерживаемую скорость передачи Arduino Uno для PM101, используя одну из следующих возможностей:
- Применение измерителя оптической мощности Thorlabs
- Функция «Установить скорость передачи» драйвера TLPM
- Команда SCPI в инструментальном коммуникаторе Thorlabs "SYST: SEN: TRAN: BAUD"
Схема соединения
Схема соединения платы и измерителя мощности Thorlabs PM101 ниже:
Подключаем всё следующим образом:
- PM101 Pin -> Arduino Uno
- TxD -> Pin 10
- RxD -> Pin 11
- VxD -> 5V
- GND -> GND
Также для понимания нам пригодится схема:
Код проекта
Ниже вы можете скопировать код/скетч проекта для вашего Аруино:
// SoftwareSerial - Version: Latest #include <SoftwareSerial.h> // Sets the speed (baud rate) for the serial communication to the Thorlabs PM10x. Supported baud rates are // 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600, 115200 const int tlBaudrate = 19200; const byte rxPin = 10; // the pin 10 of the Arduino board is used to receive the data const byte txPin = 11; // the pin 11 of the Arduino board is used to transmit the data // read all transmitted data from the Thorlabs PM10x until the end char '\n' and convert the response to a double value bool readDoubleValue(double* powerValue); // initialize the serial communication with the defined pins on the Arduiono board SoftwareSerial tlSerial(rxPin, txPin); // RX, TX // setup the serial communication to the Thorlabs PM10x and the USB/serial Monitor void setup() { Serial.begin(19200); // baudrate of the USB/serial communication to the PC while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // initialize the serial communication with the Thorlabs Powermeter tlSerial.begin(tlBaudrate); Serial.write("**** Communication Initialized ****\n"); } void loop() { double powerValue; // request a new power value from the Thorlabs PM10x (all commands are listed in the manual) tlSerial.write("meas?\n"); // read the response and convert it into a double value if(readDoubleValue(&powerValue)) { Serial.print("\nPower: "); Serial.print(powerValue, 8); // print the power value with an accuracy of 8 digits behind the separator } } bool readDoubleValue(double* powerValue) { char responseBuffer[256]; char* responsePrt; delay(100); responsePrt = responseBuffer; // if there's any serial available, read it: char c = 1; while(tlSerial.available() > 0 && c != '\n' && c != 0) { c = tlSerial.read(); *responsePrt = c; responsePrt++; } if (responsePrt == responseBuffer) { // no response return false; } // convert the response to the power value *powerValue = atof(responseBuffer); return true; }
На этом всё. Хороших вам проектов.