Skip to content

EPFL-LAPD/TVAM-code

Repository files navigation

README for Control software of TVAM printer

Installation

Install drivers for ALP DMD first. Get a Python version and run:

pip install numpy opencv-python pillow tqdm ALP4lib

Full help

  -h, --help            show this help message and exit
  -v VELOCITY, --velocity VELOCITY
                        rotation speed in deg/sec, default is 60.0
  -n NUM_TURNS, --num_turns NUM_TURNS
                        number of turns, default is 3
  -d DUTY_CYCLE, --duty_cycle DUTY_CYCLE
                        duty cycle. This is a factor which reduces the global intensity of all images. This can be used to fine tune the intensity. The duty cycle has a lower limit how little the intensity
                        can be. This depends on the image rate of the DMD.
  -p PATH, --path PATH  path to images, no default. This can be either a folder containing images (such as .png or .erf). But also a path to a compressed numpy file (.npz) is possible. Compressed numpy
                        expects a 3D array of shape (ANGLES X WIDTH X HEIGHT).
  -ps PORT_STAGE, --port_stage PORT_STAGE
                        port of the stage, default is "COM4"
  -a AMPLITUDE, --amplitude AMPLITUDE
                        Amplitude of the sinusoidal wobble in DMD pixel, default 0.
  -ph PHASE, --phase PHASE
                        Phase shift of the sinusoidal wobble in degrees, default 0.
  --reverse_angles      Reverse the angle, equivalent to rotating reverse direction
  --flip_vertical       Flip vertical direction of DMD images.
  --flip_horizontal     Flip horizontal direction of DMD images.
  --shift_vertical SHIFT_VERTICAL
                        Move patterns by a certain amount of DMD pixels vertically.
  --mode_horizontal     This indicates the long edge of the DMD is in the rotation plane. Wobbling correction is applied in the different axis than without this flag.
  -f FLAT_FIELD, --flat_field FLAT_FIELD
                        Flat field correction image for DMD. DMD is divided by this
  --notes NOTES         Write additional notes to printing log  

Hardware

The stage gives two output triggers (see initialize_stage). One trigger is activated after one round, the second toggles in the speed of how many images we need per rotation. The Arduino takes both inputs and does a digital read (microseconds delay, so quite fast). And the Arduino does the logical AND of both inputs and provides another output. This is fed to the input of the DMD. So the Arduino code is here. The python code to run the stage and prepare the DMD is tvam_code.py. The lasers are not triggered, they are just always on. But since the DMD is off by default, no light goes through the printing arm.

DMD

We are using this library. Check regularly for updates.

Simply checks

To check that everything is functional, you can call:

  • python .\tvam_code.py -p .\images_10\ -n 15 -ph 78 -a 11 -v 50 --flip_vertical
  • Check with the camera from behind (USB one) to see if the 10 numbers appear regularly. When the illumination stops, it should stop at 9!
  • If it doesn't look regular or does not stop at the 9, something is broken

Zaber

Stage

We use the Zaber X-RSW60C stage.

One of them has the modified I/O output which allows the stage to act as a master. In this script, Zaber X-RSW60C stage is programmed to send 2 electrical triggers (one that will turn on after the stage has done a full rotation and another that fire once every given interval to signal to the DMD to change its image projection)

Usage (old lab PC)

  • Start Anaconda Powershell Prompt
  • Use the base Python environment
  • cd .\Documents\TVAM-code\
  • Call python .\tvam_code.py --help to see the help
  • A typical call is: python .\tvam_code.py -p D:\PrintingPython\Printing_GelMA\ComplexAcinus\Patterns60deg_tilted_up\ -n 8 -ph 70 -a 12 -v 40 --flip_vertical -d 0.8
  • The script logs all calls into printing_log such that all prints with all parameters and additional notes are saved with timestamps

Usage (new lab PC, since 2.10.2024)

  • Start Anaconda Powershell Prompt
  • Use the base Python environment
  • cd .\TVAM-code\
  • Call python .\tvam_code.py --help to see the help
  • A typical call is: python .\tvam_code.py -p D:\PrintingPython\Printing_GelMA\ComplexAcinus\Patterns60deg_tilted_up\ -n 8 -ph 70 -a 12 -v 40 --flip_vertical -d 0.8
  • The script logs all calls into printing_log such that all prints with all parameters and additional notes are saved with timestamps

Usage with Mitsuba

  • Mitsuba has the patterns flipped upside down. So use --flip_vertical and you should be good to go. The turning convention should already match (after the transpose we do in the code already. Mitsuba exports height and width of the images flipped compared to our code).
  • To check the rotation direction convention, use the square vials. In those patterns the rotation direction is intuitive to understand.

Steps to prepare good printing condition

  • Turn Laser Sign on
  • Turn power sockets on for stage, camera, ...
  • Turn lasers diodes on (top two). Put them in manual mode and increase current to 2x500mA each.
  • Turn ALP software on. Initialize DMD. Put white test pattern. Check with the camera from behind that DMD is illuminated homogenously. Otherwise adjust fibre outcoupling lens.
  • Check wobble. For that insert the metal tip and observe with the camera from behind. Run python tvam_code.py -D images_line\ -n 10 -a 11 -ph 77. Adapt values of amplitude and phase of the script such that the tip follows the center line. Also adapt the center position with the micrometer screw in the setup.
  • Now you are ready to go. Just give it a test run with your patterns and check if everything looks good.
  • If your printing results are weird. Try --flip_horizontal OR --reverse_angles. The rotation direction in TVAM makes a difference so maybe your turning convention of the patterns is just the wrong one. There is two choices. Best way to find out, is just to look at the printed results. If the sample is asymmetric, it will make a difference!

Wobbling parameters

  • 10.9.2024: python .\tvam_code.py -n 50 -p .\images_line\ -v 70 -a 12 -ph 65 -d 1 --flip_vertical
  • 17.10.2024: python .\tvam_code.py -n 50 -p .\images_line\ -v 70 -a 15 -ph 70 -d 1 --flip_vertical

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published