Our full technical support staff does not monitor this forum. If you need assistance from a member of our staff, please submit your question from the Ask a Question page.

Log in or register to post/reply in the forum.

ultrasonic anemometer young 3d

julio Mar 30, 2009 05:59 AM

We have a ultrasonic anemometer young 3d model 81000. We want connect the ultrasonic anemometer at Campbell Scientific datalogger CR1000, but I don’t have idea to programming the Campbell and the wiring of anemometer for this datalogger. Can you help me?

* Last updated by: julio on 3/30/2009 @ 6:00 AM *

ClaudeCSC Apr 9, 2009 03:22 PM

This is a program which was written to measure the voltage ouputs of the 81000. You need to configure the RMY for voltage outputs. Hope this helps, Claude .

'Created by Elaine Seibel, CSCC
'Measures wind speed in 3D using RMY sensor 81000 set to Voltage outputs

'1H - V1 (Speed of 81000)
'1L - Vref & Jumper wire to 2L
'2H - V2 (Direction of 81000)
'2L - Jumper wire to 2L and 3L
'3H - V3 (Elevation of 81000)
'3L - Jumper wire to 2L and 4L
'4H - V4 (Sonic Temp of 81000)
'4L - Jumper wire to 3L
'SW12V - +PWR on 81000
'G - PWR Ref on 81000

'A) Averaging = 0
'B) Baud = doesn't have to be set
'E) Error Handling = 2 (Omit Invalid Data)
'N) Scaling Multiplier = 10000 (Not changed from default)
'O) Output Rate = A (4Hz)
'P) Poll Character = doesn't have to be set
'S) Ser Out Format = 1 (Custom) (This must be set to custom for voltage outputs to work)
'T) Threshold = 0
'U) Units = 2 (m/s)
'V) V Out Format = 2 (Speed AZ Elev Temp)
'Voltage Output scale = 0- 50 m/s
'Note in this format Azimuth scale is fixed at 0 to 540 degrees
'Note in this format Elevation is fixed at -60 to +60 degrees
'Note in this format Sonic Temp is fixed at 220 to 320 degrees Kelvin
'W) Wake Correction

'Declare Variables and Units
Dim WindCo_14
Public Batt_Volt
Public SonicT
Public WindSpeed
Public Winddirection
Public WindElevation
Public RefTemp

'Declare Units
Units Batt_Volt=Volts
Units SonicT=Deg C
Units WindSpeed=m/s
Units Winddirection=degrees
Units WindElevation=degrees

'Define Data Tables
'Hourly output
Average (1,SonicT,FP2,False)
Average (1,WindElevation,FP2,False)
WindVector (1,WindSpeed,Winddirection,FP2,False,0,0,0)
CardOut (1,-1)

'Daily output
Maximum (1,SonicT,FP2,False,False)
Minimum (1,SonicT,FP2,False,False)
Maximum (1,WindSpeed,FP2,False,False)
Minimum (1,WindSpeed,FP2,False,False)
Maximum (1,Winddirection,FP2,False,False)
Minimum (1,Winddirection,FP2,False,False)
Maximum (1,WindElevation,FP2,False,False)
Minimum (1,WindElevation,FP2,False,False)
CardOut (1,-1)

'Main Program
'Scan sensors every minute

'Default Datalogger Battery Voltage measurement Batt_Volt:

'Wiring Panel Temperature measurement RefTemp:

'RM Young Sonic Anemometer (81000)
'Turn on sensor via control port
PortSet (9 ,1 )
'Add delay to program to allow warm up period for 81000. Manual indicates
' that 81000 needs at least 4 second delay for initialization of sensor
' thus I have inserted a 5 second delay.
Delay (0,5,Sec)
'Measure Sonic temperature in mV
VoltDiff (SonicT,1,mV5000,4,True ,0,250,1.0,0)
'Convert temp mV to celsius
'Measure windspeed in mV (0-5000mV range)
VoltDiff (WindSpeed,1,mV5000,1,True ,0,250,1.0,0)
'Convert windspeed mV to m/s
'Measure winddirection in mV (0-5000mV range)
VoltDiff (Winddirection,1,mV5000,2,True ,0,250,1.0,0)
'Convert winddirection mV to degrees
'Convert reading to 0-360 instead of 0-540.
If Winddirection > 360 Then
Winddirection = Winddirection - 360
'Measure windelevation in mV
VoltDiff (WindElevation,1,mV5000,3,True ,0,250,1.0,0)
'Convert windelevation mV to degrees
'Turn off sensor via control port
PortSet (9,0)

'Call Data Tables and Store Data

julio Apr 13, 2009 12:42 AM

Thank you Claude, i will try to connect it.

ClaudeCSC Apr 13, 2009 11:36 AM

Your welcome. Two more programs have come to me since if you wanted to do serial communications and save some analogue channels for other sensors?

julio Apr 17, 2009 04:42 AM

Well,I am starting working with the CR1000. If I need more programs i will try to communicate it in the forum.

I need to connect the ultrasonic anemometer young 3d by means of communication RS232.

On the other hand, the sensors that I use at present in the CR1000 are:
-Pyranometer kIPP*ZONEN model CMP 6
-Pyranometer Liquor Li-200SZ( for this sensor I have not done his program)
-Weather Transmiter WXT520 Vaisala ( the program it is a copy of wxt510 rev 4/07 ).

Well, thats all!


ClaudeCSC Apr 19, 2009 03:24 AM

Hello Julio,

If you send me an email (claude@campbellsci.ca), I can send you the program for serial output from anemometer. It will be easier than trying to post it here.

Thanks, Claude

dsclimate Nov 17, 2015 06:15 AM


I am new with CR1000 and RM 81000. I have checked the above program given by Claude. However, I need more help on the followings..

1. I want to measure voltage output (V1:V4, VRef) in SDM mode (as faster than serial) in CR1000 from RM 81000. Also, I want to measure u, v and w wind components separately along with wind speed and other variables with 10 HZ sampling. Could you please send me on CR1000 program for SDM mode?

2. How to make settings for 81000 (as suggested in the program given above)?

I use RS232 cable to connect the logger with PC.

Please help.

* Last updated by: dsclimate on 11/18/2015 @ 6:33 AM *

dsclimate Nov 20, 2015 04:44 AM


* Last updated by: dsclimate on 11/21/2015 @ 11:06 PM *

tjwilli_58 Mar 7, 2016 01:38 PM


I say this post searching for the same thing. I also need to program a young 3d model 81000. I'd also like the serial output version, and like julio, I also have a Vaisala WXT520. 

Thanks for any help.

tjwilli_58 Mar 7, 2016 01:38 PM


I saw this post searching for the same thing. I also need to program a young 3d model 81000. I'd also like the serial output version, and like julio, I also have a Vaisala WXT520. 

Thanks for any help.

ClaudeCSC Mar 7, 2016 07:24 PM

Hello. I am away from high speed so am pasting programs here: Remember you must configure sonic anemometer to output the serial as well as related settings to that. It is all in the RM Young manual, available on RM Young web site or campbellsci.ca .

There are two examples and these programs are many years old. Have sent it to other requests and no one has ever come back with further questions. I know nothing about WXT520 ( I am retired now), but it is similar. This sensor will have serial output or other protocol. You need to talk to sensor with computer and some communication software. Once you know that you can configure Serial Input instruction for CR1000.  

Program 1:

'Sensors Included
'RM Young 81000 UltraSonic Anemometer

'Output Description
'The datalogger stores the following:
'Second Table: Outputs to CF Card
'Rate - One data value per second *** IF Rapid_Scan flag is high ***
'Air Temperature - Instantaneous
'RH - Instantaneous
'U - Instantaneous
'V - Instantaneous
'W - Instantaneous
'North/South Wind Vector

'One Minute Table: Outputs to CF Card
'Rate - One data value per minute
'Air Temperature - Average
'RH - Instantaneous
'2D Wind Speed
'North/South Wind Vector

'TenMinuteAv Table: Outputs to CF Card
'Rate - Stores every minute
'U - Ten Minute running average
'V - Ten Minute running average
'V - Ten Minute running average
'North/South Wind Vector

'Hourly Table: Outputs to CF Card
'Rate - Hourly
'Air Temperature - Instantaneous
'RH - Instantaneous
'Datalogger Panel Temperature - Instantaneous
'Battery Voltage - Instantaneous

'Daily Table: Outputs to CF Card
'Rate - Daily
'Air Temperature - Maximum and Minimum
'RH - Maximum and Minimum
'Panel Temperature - Maximum and Minimum
'Battery Voltage - Maximum and Minimum

'Flag Description
'Modem_On - Control power for the Modem and 81000 Ultrasonic Anemometer
'which are powered through the datalogger SW12 port. This flag can be
'manually turned off remotely to conserve power. The flag is
'automatically set high every day at 3:00 am and low every day at
'11:00 pm.

'Rapid_Scan - This flag controls the 1hz data table for storing
'Ultrasonic wind speed measurements, Temperature and RH. This flag is
'automatically set low at 11:00 pm when the anemometer and modem are
'turned off.

'One_Minute - This flag controls the one minute data table for storing
'2D wind speed measurements, Temperature and RH. This flag is
'automatically set low at 11:00 pm when the anemometer and modem are
'turned off.

'Sensor Wiring

'HC-S3 (QDP)
'Brown - Air Temp - SE1
'Blue - Signal Ref - SE2
'Grey Jumper - Signal Ref to SE4
'Clear - Shield - Analog Ground
'White - RH - SE3
'Grey - Power Ground - Ground
'Green - Power - 5V

'RM Young 81000
'Clear - Earth Ground - Ground
'Red - Power - SW12
'Black - Power Ground - Ground
'White - RS-232 Signal Ref - Analog ground
'Blue - Transmit - Rx (C1)
'Yellow - Receive - Tx (C2)

'RM Young 81000 at anemometer
'Red - Power
'Black - Power Ref
'Clear - Earth Ground
'Yellow - Tx
'Blue - Rx
'White - SREF

'Declare Public Variables

'Main Scan
Public PTemp
Public batt_volt
Public RMYoung_Raw_Data as STRING * 300
Public RMYoung_Split_Data (5) as STRING * 100
Public Air_Temp
Public RH
Public TenMinAvg_U
Public TenMinAvg_V
Public TenMinAvg_W

'Wind Data Alias'
Alias RMYoung_Split_Data(1)= U
Alias RMYoung_Split_Data(2)= V
Alias RMYoung_Split_Data(3)= W
Alias RMYoung_Split_Data(4)= Wind_Speed
Alias RMYoung_Split_Data(5)= Azimuth

'Declare Flags and Program Control Instructions

'Flag for turning on rapid scan rate
Public Rapid_Scan as BOOLEAN

'Flag for turning Modem and 81000 on
Public Modem_On as BOOLEAN

'Flag for turning on one minute scan rate
Public One_Minute as BOOLEAN

'Declare Units
Units U = m/s
Units V = m/s
Units W = m/s
Units Wind_Speed = m/s
Units Azimuth = %
Units Air_Temp = Degrees C
Units RH = %
Units batt_volt = Volts
Units PTemp = Degrees C

'Define Data Tables

'1Hz Data Table. Only called if Rapid_Scan flag is true
DataTable (Second,1,100000)
DataInterval (0,1,Sec,10)
'Output to CFCard Module
CardOut (0,3000000)
Sample (1,U,FP2)
Sample (1,V,FP2)
Sample (1,W,FP2)
WindVector (1,U,V,FP2,False,0,1,0)
Sample (1,Air_Temp,FP2)
Sample (1,RH,FP2)

'One Minute Data Table. Only called if One_Minute flag it true
DataTable (Minute,True,-1)
DataInterval (0,1,Min,10)
Cardout (0,3000000)
Sample (1,Wind_Speed,FP2)
Sample (1,Azimuth,FP2)
WindVector (1,U,V,FP2,False,0,1,0)
Average (1,Air_Temp,FP2,False)
Sample (1,RH,FP2)

'Ten Minute Data Storage Table. Stores only one set of 10
'minute averages.
DataTable (TenMinAv,True,-1)
DataInterval (0,1,Min,10)
'Output to CFCard Module
CardOut (0 ,-1)
Sample (1,TenMinAvg_U,FP2)
Sample (1,TenMinAvg_V,FP2)
Sample (1,TenMinAvg_W,FP2)
WindVector (1,U,V,FP2,False,0,1,0)

'Final Hourly Data Storage Table
DataTable (Hourly,True,-1)
DataInterval (0,60,Min,10)
'Output to CFCard Module
CardOut (0,-1)
'Store Instantaneous temperature
Sample (1,Air_Temp,FP2)
'Store Instantaneous RH
Sample (1,RH,FP2)
'Store instantaneous panel temperature
Sample (1,PTemp,FP2)
'Store instantaneous battery voltage
Sample (1,batt_volt,FP2)

'Daily Data Storage and Troubleshooting
DataTable (Daily,True,-1)
DataInterval (0,1440,Min,10)
'Output to CFCard Module
CardOut (0 ,-1)
'Store Max/Min daily Air Temp
Maximum (1,Air_Temp,FP2,False,False)
Minimum (1,Air_Temp,FP2,False,False)
'Store Max/Min daily RH
Maximum (1,RH,FP2,False,False)
Minimum (1,RH,FP2,False,False)
'Store Max/Min daily panel temperature
Maximum (1,PTemp,FP2,False,False)
Minimum (1,PTemp,FP2,False,False)
'Store Max/Min daily battery voltage
Maximum (1,batt_volt,FP2,False,False)
Minimum (1,batt_volt,FP2,False,False)

'Main Program


SerialOpen (Com1,38400,0,0,10000)
'Scan at 1Hz
Scan (1,Sec,0,0)
'Turn Modem_On flag to True at 3:00 AM and off at 11:00pm
If IfTime (3,24,Hr) then
Modem_On = True
If IfTime (23,24,Hr) then
Modem_On = False
Rapid_Scan = False
One_Minute = False

'Turn SW12 on if Modem_On flag is true and off if Flag
'is false
if Modem_On = True then

'Measure panel temperature
PanelTemp (PTemp,_60Hz)
'Measure Battery Voltage
Battery (Batt_volt)
'Measure Air Temperature
VoltDiff (Air_Temp,1,mV2500,1,True ,0,_60Hz,0.1,-40.0)
'Measure Relative Humidity
VoltDiff (RH,1,mV2500,2,True ,0,_60Hz,0.1,0)
'Read 81000 3D anemometer only if Modem_On flag is true
If Modem_On = True then
'Send polling instruction to 81000 anemometer
SerialOut (Com1,"MA!","A",1,0)
'Open Serial Port to accept ASCII String from 3D Anemometer
SerialIn (RMYoung_Raw_Data,Com1,1,13,200)
'Split ASCII String into three separate values
SplitStr (RMYoung_Split_Data(),RMYoung_Raw_Data,"",5,0)
elseif Modem_On = False then
U = 0
V = 0
W = 0

'Calculate Running Average wind speeds for last 10 minutes
if IfTime (0,1,Min) then
AvgRun (TenMinAvg_U,1,U,600)
AvgRun (TenMinAvg_V,1,V,600)
AvgRun (TenMinAvg_W,1,W,600)

'Call Ten Minute Data Table
CallTable TenMinAv
'Call Hourly Data Table
CallTable Hourly
'Call Daily Data Table
CallTable Daily
'1Hz data table conditional statement
If Rapid_Scan = True then
CallTable Second
'One minute data table conditional statement
if One_Minute = True then
CallTable Minute


AND NOW SECOND and simpler program:

'CR1000 Series Datalogger

'RMY 81000 Test Program

'Configure RMY using the C2096 Serial Cable
'and with RMY drawing 12V power from CR1000

'C2096 connections:
'DB9 Serial to PC Serial Port
'White to RX
'Green to TX
'Black to SREF
'FIN6 Cable Red to RMY 12V to CR1000 12V
'FIN6 Cable Black to RMY G to CR1000 G
'FIN6 Cable Green to RMY TX to CR1000 RX (C2)
'FIN6 Cable White to RMY RX to CR1000 TX (C1)
'FIN6 Cable Yellow to RMY SREF to CR1000 G

'Declare Public Variables

'Input string from the 81000
Public Sonic As String * 50

'Split the string received from the 81000
'into the U,V,W values
Public Splt(3)

'Alias the split array into the three named variables
Alias Splt(1) = U
Alias Splt(2) = V
Alias Splt(3) = W

'Main Program

'Open C1/C2 (COM1) for comms
SerialOpen (Com1,38400,0,0,10000)

'Scan once a second
Scan (1,Sec,0,0)

'Flush the COM1 serial buffer
SerialFlush (Com1)

'Send the poll character
SerialOut (Com1,"MA!","",0,100)

'Receive the measurement string from the 81000
'Example is "A 2.55 1.44 3.67"
SerialIn (Sonic,Com1,100,13,30)

'Split the received string into the three components
'Use the "A" character (response from poll command) to
'denote the start of the string (subsequently ignored)
SplitStr (Splt(),Sonic,"A",3,0)


'Close the C1/C2 (COM1) port to communications and allow the logger
'to go to quiescent mode
SerialClose (Com1)


That is all I have . Good luck.

Jose G May 27, 2021 11:26 AM


    Hope somebody can help, I don't have much experience in coding, I'm using the simpler program to read an RMY 81000, but I need that also store the values hourly. Hope someone can help me to do that.

I really appreciate your help.


Log in or register to post/reply in the forum.