Notes from building the OpenRAMAN Performance Edition

Everything that concerns the open-source Raman spectrometer
Post Reply
uberi
Posts: 4
Joined: Fri Nov 28, 2025 11:15 am

Notes from building the OpenRAMAN Performance Edition

Post by uberi »

Hey everyone, I recently built the OpenRAMAN performance edition, and it was quite a fun learning experience! I took a lot of notes throughout the process and have somewhat organized it here.
  • Mechanical parts:
    • JLCCNC offered the base plate, camera bracket, and MOSFET heat sink CNC machined out of 6061 aluminum for under USD$60, with the rest of the parts 3D printed with JLC3DP for under USD$40.
    • JLCPCB made the PCB for around USD$8 for a set of 5.
  • The custom LC/TEC driver board:
    • Several components on the BOM are no longer available on Digikey and required alternatives:
      • L7808CV is obselete, use UA7808CKCS instead (parametric match)
      • L7908CV-DG is obselete, use UA7908CKCSE3 instead (https://www.mouser.ca/ProductDetail/595-UA7908CKCSE3) (parametric match)
      • ILD1 is obselete, but is still in stock on Mouser. I probably could've found a parametric match for this, but since it was available on Mouser and I had to make a Mouser order anyways for the UA7908CKCSE3, I just got it from Mouser.
      • RNMF14FTC33K doesn't exist, I think it's meant to be the RNMF14FTC33K0.
      • FEX40-40-21/T710/M2 (fan) was not necessary in my case due to using an aluminum baseplate (the entire baseplate acts as a heatsink and was tested for over an hour without overheating), but definitely still needed if using the SLS Nylon 3D printed base plate. A helpful note if you use this fan: the pinout uses the common convention of red for VDD, black for GND, and yellow for the tachometer output. I found this blog post helpful in figuring out what the instructions meant about active cooling: https://www.thepulsar.be/article/thorla ... er-review/ (stick the fan/heatsink on top of the LDM21, then connect it to FAN1 on the driver board). The cable is likely not long enough, so you will likely need to extend it by splicing a longer wire in.
    • FAN2-FAN4 on the BOM specify the WM2700-MD 2-pin connector, but the WM2700-MD doesn't actually fit the footprints FAN2 and FAN3, though FAN4 is correct. from the photos, FAN2 and FAN3 seem to use the ED2609-ND 2-pin screw terminal instead. I recommend buying 2 extra ED2609-ND to account for this, replacing 2 of the WM2700-MD connectors.
    • C1-C3 are all supposed to be P15348CT-ND, but the BOM entry for the P15348CT-ND doesn't mention C1-C3 as the reference designators
    • helpful assembly note: FAN4's latch should face toward the "FAN4" label on the PCB (perhaps I'll take a crack at adding PCB markings for this!)
    • I managed to snag the LD3000 for less than half price from eBay, this listing was the one I used: https://www.ebay.ca/itm/315865615398
    • For north americans (I'm located in Canada), replace the AC power cable "Q960-ND" on the BOM with a north american equivalent: https://www.mouser.ca/ProductDetail/Qua ... Guvg%3D%3D
    • It's generally not recommended to use stranded wires in screw terminals (the strands compress and fail to maintain contact pressure, and eventually tend to slip out), so I recommend crimping on ferrules (https://www.arrow.com/en/research-and-e ... u-use-them) for any stranded-core wires that connect to the laser driver board and the power supply. This might be important for the power cable, which is stranded core and carries full line voltage.
    • Since the TN0702 MOSFET only dissipates around 300mW in operation, it's probably fine to replace the #2020-20/1 custom heat sink block with an off-the-shelf one like the Aavid 294-1155-ND, though I didn't try that for this build.
  • The laser module:
  • The camera:
    • The BFLY-PGE-31S4M/C-C is somewhat difficult to source now, as it seems to be replaced by the upgraded BFS-PGE-31S4M-C, which has slightly better specs but otherwise identical.
    • The BFS-PGE-31S4M-C is available for half of retail price used on eBay, this listing was the one I used: https://www.ebay.ca/itm/266660216547
    • If you're using the BFS-PGE-31S4M-C, you'll need a different version of SpectrumAnalyzer. There is a forum thread about this here: viewtopic.php?t=15&start=20 and viewtopic.php?p=167#p167, which I built using VS 2022 Build Tools. I needed to make a minor bugfix in the posted version to get it to work since it wasn't loading the calibration.dat file that was saved: in "app.h", in the "onLoadCalibration" function, there's a line

      Code: Select all

      if (fread(&data, sizeof(data), 1, p) != sizeof(data))
      . the bug is that fread's return value is the number of objects read - the return value should be 1 if it succeeds, not "sizeof(data)". I replaced that entire if-statement (including the memset) with just

      Code: Select all

      fread(&data, sizeof(data), 1, p);
      and it succeeded in loading the calibration curves! Also, need to make sure to build SpectrumAnalyzer in release mode, since the pointgrey.dll published in that thread is compiled in release mode, and they have to match.
    • The build command for SpectrumAnalyzer with VS 2022 Build Tools is:

      Code: Select all

      msbuild SpectrumAnalyzer.sln /p:Platform=x64 /p:Configuration=Release
      . After building, copy "pointgrey.dll" from the forum thread into the "x64/Release" folder alongside SpectrumAnalyzer.exe, and everything will work. I used VS 2022 Build Tools because it's much smaller than the full VS2022, which is important for my airgapped environment, but you can easily use VS2022 Community Edition for the build too.
  • The lens:
    • For the #2020-01 camera bracket, the designed inner diameter of the hole is 33.2mm, intended to fit the 33mm barrel of the Thorlabs MVL50M23. however, the Thorlabs MVL50M23 actually now has a 34mm barrel, unlike the official technical drawing published by Thorlabs. I have checked with Thorlabs and it's indeed the correct lens, it just seems like the manufacturer changed the enclosure some time ago. the diameter of the #2020-01 camera bracket's hole must therefore be expanded to 34.2mm. From what I can tell, it also seems like several people are encountering the same issue in this thread: viewtopic.php?t=5
    • The markings on the MVL50M23 also seem to be different in newer variants of this lens - instead of "FAR" and "NEAR" and "O" and "C" markings, the lens now has numerical aperture and focus markings. for these updated MVL50M23 lenses, the equivalent is to have focus set to "(infinity symbol)" and aperture to "2.8"
  • Thorlabs components:
    • CP02B is obsolete, but the CP33B is an identical replacement
    • CRM1/M is deprecated, but the CRM1T/M is an identical replacement
    • S30RD is obselete, but the S30K is an identical replacement
    • CP02/M is deprecated, but the CP33/M is an identical replacement
    • ER0.5 doesn't exist, I think it means the ER05
    • the #2 bolts are not needed, since they're for the LDM21 laser diode mount, but the LDM21 comes with #2 bolts already
    • the SM05RR retaining ring is not strictly needed, because the CFH1R already includes one. It's useful to have extras though, since the assembly it's used in is somewhat considered a consumable
    • I recommend getting one additional CP33/M, while it is possible to make do without it, this allows you to do the calibration/alignment procedures without having to reassemble the fiber optic collimator or the frosted glass laser aligment tool each time (they both need the CP33/M)
    • Of the two CP35/M mentioned on the BOM, only one seems to be used, to hold the large lens in front of the slit. the other CP35/M seems to be unused, perhaps it meant an extra CP33/M instead?
  • Solid cuvette:
    • For north americans, the "PP58.1" 35uL (6mm diameter, 2.5mm height) aluminum dishes are somewhat difficult to source. Instead, AliExpress has a seemingly-identical replacement: https://www.aliexpress.com/item/1005008334992558.html (the 6mm diameter 2.5mm height variant is labelled "60uL" for some reason, but it's the exact same dimensions as the "PP58.1")
    • I think line 12 of "2021-09_0 - SOLID ASSY.csv" should be "#2021-10/0, COUPELLE", not "COUPELLE ASSY" - there's no COUPELLE ASSY because that's the combination of the printed and purchased parts (someone on GitHub mirrored it here for easy reference: https://github.com/samyk/openraman/blob ... 20ASSY.csv)
    • The exploded view in https://www.open-raman.org/build/cuvett ... d-cuvette/ correctly labels the ER05 as the desired mounting rods, but the length of the rod in the picture is more like an ER1.5 (also, checking against the STEP file, it does seem like it's meant to be an ER1.5)
  • Liquid cuvette:
    • I went for the upgraded version presented in https://www.thepulsar.be/article/openra ... grade-fix/, with the epoxied-in lenses. I took the STEP file for the non-upgraded cuvette, and simply made a 27.2mm diameter hole in the CAD model just like the blog post does in real life, and the print came out well-toleranced (I would recommend 27.3mm or 27.4mm though, since I ended up having to rework that hole on the mill to get it to fit anyways).
    • Not sure which interlock switch this uses, or how it's mounted to the cuvette, but I ended up using an enclosure to ensure laser safety and will probably design an enclosure-level interlock for this at some point.
    • The 2.5mm set screw holes for the upgraded version of the liquid cuvette, I think, are meant to take M3 helicoils, so I ended up drilling those out to the M3 helicoil size
    • For north americans, the "HC01.1" is somewhat difficult to source. Instead, AliExpress has a seemingly-identical replacement: https://www.aliexpress.com/item/1005007832948798.html (you can find other options by searching for "10mm diameter 75mm length borosilicate test tube")
    • I highly recommend purchasing some stoppers for the glass sample tubes: https://www.amazon.ca/dp/B0D5M7QGYG, this has prevented several potential spills so far.
  • Calibration:
    • When using a fluorescent lamp in step 9, the instructions are slightly outdated - you can't rotate the diffraction grating via the KGM40, you instead have to loosen the #2020-15 grating holder and then rotate it and re-tighten the set screw.
    • Helpful tip: In SpinView, the camera with factory settings will show the spectrum with shorter wavelengths on the left and longer wavelengths on the right. Once you run SpectrumAnalyzer, this seems to be flipped horizontally, so longer wavelengths are on the left and shorter wavelengths are on the right (in SpinView). This took a while to figure out, but you can tell because when you tilt the 550nm longpass filter away from the straight-on position, it reveals slightly longer wavelengths. You can try viewing the spectrum while tilting the filter back and forth to figure out the spectrum's orientation within the SpinView captured image.
    • Instead of using Excel/Matlab to calibrate the wavenumber scale in step 11, the SpectrumAnalyzer software has a convenient calibration function (which is also mentioned in the assembly Youtube video). The neon spectrum has a great reference image here: https://www.eureca.de/files/spektrum-gl ... ll-neu.png (the neon spectrum image in the instructions is unfortunately not displaying on the open-raman.org website). The key is that the huge leftmost peak should be at 585nm in the result, and the RMS output of the calibration should be around 0.001nm or so (from my experience so far).
  • Enclosure:
    • For laser safety reasons, I wanted to have the entire unit in a light-tight enclosure. With the liquid or solid cuvette installed, the overall dimensions needs to be around 400x180x180mm, if we want to comfortably reach the laser power switch and the alignment knobs. I ended up finding this one on Amazon that was basically a perfect fit: https://www.amazon.ca/dp/B0F4JY2RGF?ref=fed_asin_title
    • I drilled out some holes for the TR75/M optical posts at the bottom of the enclosure, then mounted the entire spectrometer using those holes. The Ethernet and power cord exits through a single hole that is sealed with a generous amount of opaque tape.
  • Other notes:
    • Minor note: the light cover doesn't have its own STEP file, but you can easily extract this from the assembly's STEP file.
    • The Youtube assembly video for the starter edition was super helpful! https://www.youtube.com/watch?v=47Uw0OJH3Aw I highly recommend watching this for anyone who has only seen the text instructions on the website, but you'll likely need both the text and the video to fully understand all the steps.
    • You can likely find all of the bolts used much cheaper at the hardware store, rather than from Thorlabs, but be careful to get the same head style, or else the head may not fit correctly.
And now for the photos! First, the LD/TEC driver board in the final stages of testing:
IMG_6157.jpg
IMG_6157.jpg (414.31 KiB) Viewed 13826 times
The completed spectrometer, right after making a measurement of a sample:
IMG_6238.jpg
IMG_6238.jpg (378.32 KiB) Viewed 13826 times
A spectrum for 70% isopropanol (excuse the bad quality - I'm running this inside an airgapped environment!)
IMG_6234.jpg
IMG_6234.jpg (436.08 KiB) Viewed 13826 times
In this thread, I'll be posting some more useful things as I get a chance to organize and upload them. Up next is:

* Pre-built versions of SpectrumAnalyzer that work with the FLIR Blackfly S, and the modified source code.
* Modified STEP files based on the upgraded liquid cuvette design.
* More photos of the assembly process, including the LDM21 wiring that I struggled with a fair bit.

Many thanks to Luc for making this so accessible, even to home hobbyists that are new to optics!
User avatar
Luc
Site Admin
Posts: 156
Joined: Fri Mar 17, 2023 9:18 am
Contact:

Re: Notes from building the OpenRAMAN Performance Edition

Post by Luc »

Thanks for this awesome post!

I was really surprised to read the prices of JLC CNC and I'm really wondering how they can achieve that. They're one tenth of the price of XOMETRY and the complete baseplate is cheaper than a raw stock of T6061 :o
uberi
Posts: 4
Joined: Fri Nov 28, 2025 11:15 am

Re: Notes from building the OpenRAMAN Performance Edition

Post by uberi »

Luc wrote: Thu Dec 11, 2025 7:18 am Thanks for this awesome post!

I was really surprised to read the prices of JLC CNC and I'm really wondering how they can achieve that. They're one tenth of the price of XOMETRY and the complete baseplate is cheaper than a raw stock of T6061 :o
I was also extremely surprised by the JLC pricing, the same size of 6061 in Canada is already the same price as the finished product, even including shipping! Tolerances were well under 0.1mm in all the important dimensions, probably since it's a single-sided 3-axis milling operation.

Is there a good way to contribute notes/potential updates to the OpenRAMAN website? Would love to help out if possible on updating the LD/TEC board BOM and incorporating useful info like how the saturation/positioning lines work in SpectrumAnalyzer. There are also great posts on calibration procedures and alignment in this forum that could be really useful in the official documentation too!

Also, I've attached working binaries/source code for SpectrumAnalyzer, based on r123, with all of the changes from viewtopic.php?t=15 that allow it to also work with the FLIR Blackfly S, along with the bugfix I described in my first post! I couldn't upload a ZIP archive for some reason, perhaps file size, so it's in a 7zip archive.
Attachments
SpectrumAnalyzer-FLIR-Blackfly-S.7z
(2.08 MiB) Downloaded 392 times
uberi
Posts: 4
Joined: Fri Nov 28, 2025 11:15 am

Re: Notes from building the OpenRAMAN Performance Edition

Post by uberi »

Next up, 3D models for the upgraded liquid cuvette described here: https://www.thepulsar.be/article/openra ... grade-fix/

Since I was planning to use the upgraded version right from the start, I modified the STEP files for the liquid cuvette to incorporate those changes directly, and got them printed via JLC3DP in PA SLS (total cost USD$45). It was a very straightforward modification, but I'm attaching it here anyways because it might be useful to future builders!
upgraded-liquid-cuvette.zip
(91 KiB) Downloaded 404 times
As-printed, the barrel was a tight fit within the cuvette main body, and requires some light manual sanding to loosen the fit enough that it's relatively easy to remove. While requiring more steps to assemble, this upgraded design made alignment really straightforward, and I didn't need to tune anything at all to get a clean spectrum on the first attempt (although the quality went up even more after tuning, more on that in a future post)!

Lastly, there were a few steps where I was unsure how to connect things together, so I'm attaching photos here to help disambiguate. Here's the MTDEVAL1 board, wired up with a barrel jack (for 12V power), a USB-C-to-mini-USB adapter (for interfacing with the computer), and the cables that lead to the "TEC" side of the LDM21. Like the instructions mention, the TEC+ and TEC- leads are the opposite of what you'd expect from the LDM21 pinouts and the MTDEVAL1 board markings.
IMG_6151.jpg
IMG_6151.jpg (339.59 KiB) Viewed 13765 times
The other part that took a bit of double-checking was the orientation of all the LDM21 pinouts. Here's a picture of the back of the LDM21, showing exactly which wires go where:
IMG_6158.jpg
IMG_6158.jpg (228.69 KiB) Viewed 13765 times
User avatar
Luc
Site Admin
Posts: 156
Joined: Fri Mar 17, 2023 9:18 am
Contact:

Re: Notes from building the OpenRAMAN Performance Edition

Post by Luc »

Is there a good way to contribute notes/potential updates to the OpenRAMAN website? Would love to help out if possible on updating the LD/TEC board BOM and incorporating useful info like how the saturation/positioning lines work in SpectrumAnalyzer. There are also great posts on calibration procedures and alignment in this forum that could be really useful in the official documentation too!
Yes, actually some major change have been foreseen for a while and should have happened in 2025 but my health issues decided otherwise :-/ It has therefore been pushed to 2026.

I will include your changes/suggestion and am also currently conducting some though process on how to make it easier for people to propose change themselves.

Some major upgrade is also foreseen for the software, including an official github repo. The current version has been drafted in about 2 weeks when I started experimenting with Raman spectroscopy which explain the quick & dirty approach. A newer version, compatible with linux, will be available in 2026.
uberi
Posts: 4
Joined: Fri Nov 28, 2025 11:15 am

Re: Notes from building the OpenRAMAN Performance Edition

Post by uberi »

Yes, actually some major change have been foreseen for a while and should have happened in 2025 but my health issues decided otherwise :-/ It has therefore been pushed to 2026.
Sorry to hear about the health issues :( I hope you get plenty of time to recover in 2026! Please let me know if there's anything that you could use help with, whether on OpenRAMAN or otherwise, and I would be happy to ask around or contribute where I can.
I will include your changes/suggestion and am also currently conducting some though process on how to make it easier for people to propose change themselves.

Some major upgrade is also foreseen for the software, including an official github repo. The current version has been drafted in about 2 weeks when I started experimenting with Raman spectroscopy which explain the quick & dirty approach. A newer version, compatible with linux, will be available in 2026.
That's excellent news! One potential way I could help here is by porting the existing documentation on open-raman.org over to GitHub, either in GitHub Wiki or in the GitHub repository as Markdown files (which could then be rendered into a website automatically with GitHub Pages, or simply viewed directly in GitHub's UI). This would make it simple for people to propose changes via pull requests, and make it possible to version-control the documentation simultaneously with the source code (e.g., if someone built an older version of OpenRAMAN, perhaps they'd want to see an older version of the docs alongside the older version of the STEP/PDFs to repair/maintain their setup, but would still want to be able to rebase their improvements onto the latest version so they can contribute to the project).

If you're interested in something like that, I could start putting those ported docs together and post it here for review. The goal for now would be a 1:1 match with what's on the website already, without any new content yet. Otherwise, there are lots of other options out there like Gitbook, or Wiki.js/HostWiki that have less vendor lock-in, but I think you've probably looked into this more than I have so far.
Post Reply