Apogee (or Sun Systems) PAR Meter with integrated or separate sensor, DATA reading with Propeller.
Clock Loop
Posts: 2,069
The data on the Apogee MQ-200,
the Sun Systems Part# 748200
and the Sun Systems Part# 748205,
can be read using a propeller, directly connected.
These meters are basically identical, the sun systems units, are just apogee units with a different manufacturer sticker.
Apogee MQ-200
http://www.apogeeinstruments.com/mq-200-quantum-separate-sensor-with-handheld-meter/
Sun Systems #748205
http://www.sunlightsupply.com/shop/bycategory/timers-and-instruments/par-meter-with-remote-sensor-sun-system
PAR (Photosynthetically Active Radiation) is the energy source required for photosynthesis, created by photons in the wavelengths of 400 to 700nm.
The energy source, PAR, is expressed in Photosynthetic Photon Flux Density (PPFD) units µmol m-2 s-1.
The USB port on all 3 of these PAR meters is 3.3v TTL serial data. 2400 Baud 8N1
They used a usb port to connect 3.3v TTL serial logic. Tisk Tisk.
So I cut a usb cable in half and connected it to a propeller.
Connect USB Pin#2 (D- White wire) to a propellers spare pin, P26, and named it ParTx. This is the pin the PAR meter transmits its data on.
Connect USB Pin#3 (D+ Green wire) to a propellers spare pin, P27, and named it ParRx. This is the pin the PAR meter receives command data on.
Yea, you need the black ground too.
These Meters have a usb mini-b receptacle on the right side of the meter.
You CAN power the meter using the same 3.3v DC supply that the propeller uses(not eaisly tho), you must pull out the coin cell battery in the meter, open the meter up and solder usb pin #1 (red wire) to the coin cell's + connection. And make sure to NEVER connect this meter to a regular usb plug. The usb plug doesn't have eaisly exposed pads inside the meter, I had to remove protective silicon and solder to the usb plugs small pcb pad. Wired this way it will not remember readings after you power off the propeller's power. But you won't need batteries.
This par meter only accepts 4 commands.
Identify Command: Hex: 08
Par meter replies with the same command you send, then "q u a n t u m 0 SUB"
Reply from meter in hex is: $08 $71 $75 $61 $6E $74 $75 $6D $00 $1A
30 Minute average data: Hex $31 and $0A.
Par meter replies with the same command you send Hex $31 and $0A, then every measured value with $0D $0A at the end of each measured value.
Reply from meter in hex is: $xx $xx $xx $xx $xx $0D $0A, the x's are normally real hex measurements.
At the end of all measurements, the meter sends a $1A.
Daily Par average data: Hex $32 and $0A.
Par meter replies with the same command you send Hex $32 and $0A, then every measured value with $0D $0A at the end of each measured value.
Reply from meter in hex is: $xx $xx $xx $xx $xx $0D $0A, the x's are normally real hex measurements.
At the end of all measurements, the meter sends a $1A.
Manual Par readings data: Hex $33 and $0A.
Par meter replies with the same command you send Hex $33 and $0A, then every measured value with $0D $0A at the end of each measured value.
Reply from meter in hex is: $xx $xx $xx $xx $xx $0D $0A, the x's are normally real hex measurements.
At the end of all measurements, the meter sends a $1A.
Each measurement it sends is 7 bytes of data, counting the $0D $0A.
Each of the 3 types of data have up to 99 readings, no more. But the meter only sends the readings it has, and will not send zeros if it has not measured 99 readings.
The code here is only for the par meter communication, the attached file has the entire propeller program. The forum won't allow full code in the code box.
the Sun Systems Part# 748200
and the Sun Systems Part# 748205,
can be read using a propeller, directly connected.
These meters are basically identical, the sun systems units, are just apogee units with a different manufacturer sticker.
Apogee MQ-200
http://www.apogeeinstruments.com/mq-200-quantum-separate-sensor-with-handheld-meter/
Sun Systems #748205
http://www.sunlightsupply.com/shop/bycategory/timers-and-instruments/par-meter-with-remote-sensor-sun-system
PAR (Photosynthetically Active Radiation) is the energy source required for photosynthesis, created by photons in the wavelengths of 400 to 700nm.
The energy source, PAR, is expressed in Photosynthetic Photon Flux Density (PPFD) units µmol m-2 s-1.
The USB port on all 3 of these PAR meters is 3.3v TTL serial data. 2400 Baud 8N1
They used a usb port to connect 3.3v TTL serial logic. Tisk Tisk.
So I cut a usb cable in half and connected it to a propeller.
Connect USB Pin#2 (D- White wire) to a propellers spare pin, P26, and named it ParTx. This is the pin the PAR meter transmits its data on.
Connect USB Pin#3 (D+ Green wire) to a propellers spare pin, P27, and named it ParRx. This is the pin the PAR meter receives command data on.
Yea, you need the black ground too.
These Meters have a usb mini-b receptacle on the right side of the meter.
You CAN power the meter using the same 3.3v DC supply that the propeller uses(not eaisly tho), you must pull out the coin cell battery in the meter, open the meter up and solder usb pin #1 (red wire) to the coin cell's + connection. And make sure to NEVER connect this meter to a regular usb plug. The usb plug doesn't have eaisly exposed pads inside the meter, I had to remove protective silicon and solder to the usb plugs small pcb pad. Wired this way it will not remember readings after you power off the propeller's power. But you won't need batteries.
This par meter only accepts 4 commands.
Identify Command: Hex: 08
Par meter replies with the same command you send, then "q u a n t u m 0 SUB"
Reply from meter in hex is: $08 $71 $75 $61 $6E $74 $75 $6D $00 $1A
30 Minute average data: Hex $31 and $0A.
Par meter replies with the same command you send Hex $31 and $0A, then every measured value with $0D $0A at the end of each measured value.
Reply from meter in hex is: $xx $xx $xx $xx $xx $0D $0A, the x's are normally real hex measurements.
At the end of all measurements, the meter sends a $1A.
Daily Par average data: Hex $32 and $0A.
Par meter replies with the same command you send Hex $32 and $0A, then every measured value with $0D $0A at the end of each measured value.
Reply from meter in hex is: $xx $xx $xx $xx $xx $0D $0A, the x's are normally real hex measurements.
At the end of all measurements, the meter sends a $1A.
Manual Par readings data: Hex $33 and $0A.
Par meter replies with the same command you send Hex $33 and $0A, then every measured value with $0D $0A at the end of each measured value.
Reply from meter in hex is: $xx $xx $xx $xx $xx $0D $0A, the x's are normally real hex measurements.
At the end of all measurements, the meter sends a $1A.
Each measurement it sends is 7 bytes of data, counting the $0D $0A.
Each of the 3 types of data have up to 99 readings, no more. But the meter only sends the readings it has, and will not send zeros if it has not measured 99 readings.
The code here is only for the par meter communication, the attached file has the entire propeller program. The forum won't allow full code in the code box.
'' ================================================================================================= ' File...... ParMeter.spin ' Purpose... Reads Apogee MQ-200, the Sun Systems Part# 748200 and the Sun Systems Part# 748205 ' Author.... Clock Loop @ parallax forums ' Started... 9-10-2016 ' Updated... 9-18-2016 '' ================================================================================================= Pub ParMeterRead | rollcount0, rollcount1, rollcount2 rollcount0 := 0 ParName[0] := 0 ParName[1] := 0 ParMeter.tx($08) If ParMeter.rx == $08 Repeat rollcount0 from 0 to 8 ParName.byte[rollcount0] := ParMeter.rx If ParName.byte[rollcount0] == $1A ParName.byte[rollcount0] := $00 rollcount1 := 0 rollcount2 := 0 Repeat rollcount1 from 0 to 99 Par30Min[rollcount1] := 0 Repeat rollcount2 from 0 to 6 StrPar.byte[rollcount2] := 0 rollcount1 := 0 rollcount2 := 0 waitcnt(1_000_000 + cnt) ParMeter.tx($31) ParMeter.tx($0A) If ParMeter.rx == $31 If ParMeter.rx == $0A Repeat rollcount1 from 0 to 99 Repeat rollcount2 from 0 to 6 StrPar.byte[rollcount2] := ParMeter.rxtime(5) If StrPar.byte[rollcount2] == $0D StrPar.byte[rollcount2] := $00 ElseIf StrPar.byte[rollcount2] == $0A StrPar.byte[rollcount2] := $00 ElseIf StrPar.byte[rollcount2] == -1 StrPar.byte[rollcount2] := $00 ElseIf StrPar.byte[rollcount2] == $1A StrPar.byte[rollcount2] := $00 Par30Min[rollcount1] := ParMeter.StrToDec(@StrPar) waitcnt(1_000_000 + cnt) rollcount1 := 0 rollcount2 := 0 Repeat rollcount1 from 0 to 99 ParDaily[rollcount1] := 0 Repeat rollcount2 from 0 to 6 StrPar.byte[rollcount2] := 0 rollcount1 := 0 rollcount2 := 0 ParMeter.tx($32) ParMeter.tx($0A) If ParMeter.rx == $32 If ParMeter.rx == $0A Repeat rollcount1 from 0 to 99 Repeat rollcount2 from 0 to 6 StrPar.byte[rollcount2] := ParMeter.rxtime(5) If StrPar.byte[rollcount2] == $0D StrPar.byte[rollcount2] := $00 ElseIf StrPar.byte[rollcount2] == $0A StrPar.byte[rollcount2] := $00 ElseIf StrPar.byte[rollcount2] == -1 StrPar.byte[rollcount2] := $00 ElseIf StrPar.byte[rollcount2] == $1A StrPar.byte[rollcount2] := $00 ParDaily[rollcount1] := ParMeter.StrToDec(@StrPar) waitcnt(1_000_000 + cnt) rollcount1 := 0 rollcount2 := 0 Repeat rollcount1 from 0 to 99 ParSample[rollcount1] := 0 Repeat rollcount2 from 0 to 6 StrPar.byte[rollcount2] := 0 rollcount1 := 0 rollcount2 := 0 ParMeter.tx($33) ParMeter.tx($0A) If ParMeter.rx == $33 If ParMeter.rx == $0A Repeat rollcount1 from 0 to 99 Repeat rollcount2 from 0 to 6 StrPar.byte[rollcount2] := ParMeter.rxtime(5) If StrPar.byte[rollcount2] == $0D StrPar.byte[rollcount2] := $00 ElseIf StrPar.byte[rollcount2] == $0A StrPar.byte[rollcount2] := $00 ElseIf StrPar.byte[rollcount2] == -1 StrPar.byte[rollcount2] := $00 ElseIf StrPar.byte[rollcount2] == $1A StrPar.byte[rollcount2] := $00 ParSample[rollcount1] := ParMeter.StrToDec(@StrPar) Dat Secs long 0 Mnit long 0 Hour long 0 Dayz long 0 ParName long 0,0,0,0,0,0,0,0,0,0 StrPar long 0,0,0,0,0,0,0,0,0,0 Par30min long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ParDaily long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ParSample long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Dat {{ Terms of Use: MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. }}
Comments
Congratulations on a well documented and complete post.
I have no knowledge of the technology or benefits of reading these devices, but I am sure it a useful advancement.
Mods, move it to projects, if u would like.
Thanks for all the interesting great projects.
Keep 'em coming !