I have this project at university where I have to make an atmospheric visibility measuring device using Arduino. I talked with my teacher and he said that I should do something like this, using an emitter to transmit a laser beam and a receptor. This is all the information he gave me. I have never used Arduino before and I found almost nothing on the internet to help me.

Can someone provide me with a starting point and explain what kind of components I should use (I have to buy everything myself) and how to build this device?

Thank you!


1 Answer 1


The transmissometer setup should be quite easy to build in principle, but it could be hard to get accurate values. I did a very similar instrument but to measure water transsmisivity (a.k.a. turbidity).

If you are new to Arduino you can start with the Arduino UNO board, and this is a good guide on how to get started. I got started myself with the video tutorial Arduino Course for Absolute Beginners.

Practice with a couple simple programs. In particular "Blink" to get used to switch pins on and off and "Analog Read Serial" to learn how to output data to the computer.

You need a laser diode like this one. It should be powered (or at least turned on/off) by the Arduino. Because you will need to do measurements with the laser on and off to know how much light is ambient light and how much light is coming from your laser.

To sense the light intensity of the laser after it travelled trough the air, you can use a photoresistor to make it simple and cheap, or a luminosity sensor like this one. You can find here a tutorial and example code to wire and read data from that sensor into your Arduino.

Then you need to calibrate the sensor, and it will be challenging for this project. You will need to put the system in the outdoors, measure the visibility by finding out the distance to the further object you can see, and record the reading of your Arduino. The reading would be the difference between the luminosity with the laser on and off.

After you have many calibration points over a wide range of visibilities, you can plot visibility vs reading and hopefully the points will follow a nice pattern that you can then fit with a suitable function (a line, a polynomial or logarithmic function), and then code that function into the Arduino so it can output the actual visibility.

If the pattern isn't nice, you will need to find ways to make the reading more accurate and sensible to changes in visibility. Some options for that (that you should consider also in your initial design) are:

  • Increase the travel length of the laser through the air.
  • Use a blue laser, as blue light is absorbed quickly in low visibility conditions.
  • Use a hood with black interior (like the photographic lens hoods) around the sensor to minimize the contribution to ambient light.
  • Use a luminosity sensor with larger resolutions (12 or 16 bits)
  • Make sure the laser voltage is stable.
  • Make sure the laser (and mirror if you use one) have a good and stable alignment.
  • Make sure readings are not affected by temperature or compensate otherwise.
  • Get multiple readings and take the median.

There is an Arduino Stack Exchange where you can find help if you need help to make the sensors to work or problems with the coding. However, there are tons of online resources and tutorials, so I'm sure you will find answers to all your questions.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.