<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Forum - Recent Threads</title><link>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><lastBuildDate>Tue, 23 Jun 2026 19:53:22 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum" /><item><title>Green Brain - Part III - Water Cannon Chaos</title><link>https://community.element14.com/thread/57045?ContentTypeID=0</link><pubDate>Sat, 20 Jun 2026 14:39:25 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:dc56b522-7378-4dcb-946f-c067cc5d45ec</guid><dc:creator>saramic</dc:creator><slash:comments>4</slash:comments><comments>https://community.element14.com/thread/57045?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57045/green-brain---part-iii---water-cannon-chaos/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I promised a water cannon&amp;nbsp;[emoticon:430192c8113e40579ec1750203f80fde][emoticon:021df5b9678b462da4ec897ab36c19a0]&amp;nbsp;for my plants, so I had to deliver, if only for a forum post.&lt;/p&gt;
&lt;h1 id="recap"&gt;Recap&lt;/h1&gt;
&lt;p&gt;Green Brain&amp;nbsp;[emoticon:e8b48dd11aa142a1bf769add09114643]&amp;nbsp;is the idea of tracking plant nodes via an industrial&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;CAN bus&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to ultimately see which plant needs more water cannon&amp;nbsp;[emoticon:021df5b9678b462da4ec897ab36c19a0].&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/56921/green-brain---part-i---can-bus-introduction" data-e14adj="t"&gt;Green Brain - Part I - CAN bus introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57001/green-brain---part-ii---dev-setup" data-e14adj="t"&gt;Green Brain - Part II - Dev setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-idea-and-the-gear"&gt;the idea and the gear&lt;/h2&gt;
&lt;p&gt;I had the gear for a water cannon. My wife wanted an indoor plant watering system for Christmas so I got her one. But what present is complete without some extra DIY in case I could build one myself. As such I had a few small pumps around. I also had a servo driven X-Y pan and tilt module. How hard can it be to hook that up and make a water cannon.&lt;/p&gt;
&lt;p&gt;As an aside, I am also super grateful for a bunch of gear that Element 14 sent to me as a selected challenger.&lt;/p&gt;
&lt;p&gt;&lt;img style="cursor:zoom-in;display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260620_5F00_on_5F00_the_5F00_line_5F00_challengers_5F00_kit.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The pressure is on to use as much of this gear as I can.&lt;/p&gt;
&lt;h2 id="water-and-electronics"&gt;Water and electronics&lt;/h2&gt;
&lt;p&gt;Well there was a lot of learning to be had:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;no matter how well you think you seal things - water will still leak. Although I didn&amp;rsquo;t go all out with silicon, I thought that tight fitting vinyl tubing, electrical tape and relatively low water pressure would be OK &amp;mdash; it was not&lt;/li&gt;
&lt;li&gt;Water brings in fluid dynamics and things like head, flow, nozzle shapes and the like. Clearly my pump could not initially pump up 300mm of head so I moved the motor closer to the nozzle. There would also be time required to refill the tubing up to the nozzle, as once the pump stops the tube empties. Gardening nozzles from a local hardware are only so good at firing a stream of water&lt;/li&gt;
&lt;li&gt;Even small hoses can be stiff enough to move the servos&lt;/li&gt;
&lt;li&gt;Pan and Tilt movement requires some planning in how everything interacts. My platform got tangled in the hose, and the wiring also got stuck every so often for the servos as everything moved around&lt;/li&gt;
&lt;li&gt;Water is heavy and the motion of water in a hose can change the weight balance of everything and move things around&lt;/li&gt;
&lt;li&gt;With all this chaos, I was not bringing the UNO Q anywhere near this water cannon&lt;/li&gt;
&lt;li&gt;Noise, pump motors can produce noise, and that noise can be picked up by the servos and move them haywire around the place&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It was this last point that really killed this feature. I had removed the servo library entirely, moved the pump power onto a completely separate circuit isolated by a relay &amp;mdash; and still the servos would pan to the right and tilt to the top. Stripping down to a pure diagnostic sketch (no servo code at all) revealed the culprit: the servo signal pins were floating high-impedance inputs, acting as antennas and picking up the pump motor&amp;rsquo;s EMI directly? maybe? &lt;strong&gt;&lt;span style="color:#333399;font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;macr;_(ツ)_/&amp;macr;&lt;/span&gt;&lt;/strong&gt;. Even with no code driving them, the servo controllers saw enough noise to chase a position. I ran out of steam getting this to behave reliably with the full mechanical assembly.&lt;/p&gt;
&lt;p style="display:flex;width:100%;"&gt;&lt;img style="cursor:zoom-in;max-height:360px;max-width:49%;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260620_5F00_pan_5F00_and_5F00_tilt_5F00_cannon.gif" /&gt; &lt;img style="cursor:zoom-in;max-height:360px;max-width:49%;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260620_5F00_water_5F00_cannon_5F00_shoot_5F00_right_5F00_and_5F00_up.gif" /&gt;&lt;/p&gt;
&lt;p&gt;[View:/cfs-file/__key/communityserver-discussions-components-files/453/20260620_5F00_palying_5F00_around_5F00_with_5F00_firing_5F00_the_5F00_cannon.mp4:640:360]&lt;/p&gt;
&lt;p&gt;I was hoping to re-use the water cannon as a dog deterrent from scratching a door. I think neither the dogs nor the plants will be seeing any water cannon any time soon.&lt;/p&gt;
&lt;p&gt;&lt;img style="cursor:zoom-in;display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260620_5F00_water_5F00_cannon.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The only clever things I did was write to EEProm to see if a reboot was happening when the pump kicked in and use the Omega temperature probe to hold the tube that fed water to the pump.&lt;/p&gt;
&lt;h2 id="next"&gt;Next&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I have some MAX6675 which would be cool to connect to the K-Type Thermocouples&lt;/li&gt;
&lt;li&gt;there is the Omega Temperature probe&lt;/li&gt;
&lt;li&gt;and I am hoping to at least visualise a little bit of this on NI LabView&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;oh and there is like 24 hours left&amp;nbsp;[emoticon:112d628d71ee42569896013ddf370112]&lt;/p&gt;
&lt;h2 id="source"&gt;Source&lt;/h2&gt;
&lt;p&gt;&lt;a id="" href="https://github.com/saramic/green-brain" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;https://github.com/saramic/green-brain&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RE: Green Brain - Part III - Water Cannon Chaos</title><link>https://community.element14.com/thread/236214?ContentTypeID=1</link><pubDate>Tue, 23 Jun 2026 19:53:22 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:09a6b462-3705-4ea0-a223-3dc7be69d85a</guid><dc:creator>DAB</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236214?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57045/green-brain---part-iii---water-cannon-chaos/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Nice update on a fun project.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SolarSense - Part 8 - Interfacing Humidity and Temperature</title><link>https://community.element14.com/thread/236207?ContentTypeID=1</link><pubDate>Tue, 23 Jun 2026 14:53:18 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2ba0cc08-7cc5-48cc-b4a6-8842299dac95</guid><dc:creator>arvindsa</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236207?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57046/solarsense---part-8---interfacing-humidity-and-temperature/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Oh yes, and also its more immune to noise and induction. I&amp;#39;ve have to Appreciate whomsoever chose the sponsored kit. Everything except the ArduinoQ was strictly industrial class. Robust.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>SolarSense - Part 8 - Interfacing Humidity and Temperature</title><link>https://community.element14.com/thread/57046?ContentTypeID=0</link><pubDate>Sun, 21 Jun 2026 05:43:13 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:4db1258e-89ee-4430-b12d-99fa48525283</guid><dc:creator>arvindsa</dc:creator><slash:comments>2</slash:comments><comments>https://community.element14.com/thread/57046?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57046/solarsense---part-8---interfacing-humidity-and-temperature/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h2 id="mcetoc_1jqbvjvms0"&gt;Recap:&lt;/h2&gt;
&lt;p&gt;I&amp;#39;m building a smart solar monitoring system that uses three panels with a clean reference to eliminate weather effects and directly measure dust-induced losses in real time. One panel stays pristine as a baseline, and comparing the two under identical sky conditions gives a performance ratio that reveals soiling immediately. The goal is to use environmental sensors and edge AI to predict exactly when cleaning is needed, before efficiency drops enough to impact revenue. This beats fixed-schedule cleaning or waiting for output to degrade.Also this is complementary to my Master&amp;#39;s thesis of a minute Shape memory Alloy based solar panel cleaning robot&lt;/p&gt;
&lt;p&gt;Previous posts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57013/solarsense---part-1---introduction-the-poc-built-and-the-plan" data-e14adj="t"&gt;SolarSense - Part 1 - Introduction, The POC Built and The Plan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57018/solarsense---part-2---can-arduino-can" data-e14adj="t"&gt;SolarSense - Part 2 - Can Arduino CAN?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57020/solarsense---part-3---pcb-schematics-walkthrough" data-e14adj="t"&gt;SolarSense - Part 3 - PCB Schematics Walkthrough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57025/solarsense---part-4---can-protocol-deep-dive-and-implementation" data-e14adj="t"&gt;SolarSense - Part 4 - CAN Protocol Deep Dive and Implementation&lt;/a&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57025/solarsense---part-4---can-protocol-deep-dive-and-implementation" data-e14adj="t"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57030/solarsense---part-5---making-an-live-dashboard-using-lab-view" data-e14adj="t"&gt;SolarSense - Part 5 - Making an Live Dashboard using Lab View&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57039/solarsense---part-6---reading-the-heat-at-k-type-thermocouple-using-max31855" data-e14adj="t"&gt;SolarSense - Part 6 - Reading the Heat at K Type Thermocouple using MAX31855.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;S&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57041/solarsense---part-7---reading-the-sky---uv-sensor-interface-on-stm32" data-e14adj="t"&gt;olarSense - Part 7 - Reading the Sky - UV Sensor Interface on STM32&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Time is short, So i will jump straight into the points and avoid good formatting of this post. I have SEN66, BMP280 in my board and yet why am i using another sensor for Relative Humidity and Temperature?&amp;nbsp;&amp;nbsp;I needed something that could live away from the PCB, immune to internal heats etc,&amp;nbsp; a probe on a cable, pointed at the actual outdoor air, unaffected by what is happening inside the enclosure. The Omega HX94C is exactly that. It is an industrial-grade transmitter, NEMA 4 rated, with two completely independent 4-20 mA current loops: one for relative humidity (0&amp;ndash;100 %RH at 4&amp;ndash;20 mA) and one for temperature (0&amp;ndash;100 &amp;deg;C at 4-20 mA). You run a pair of wires out to it, excite the loop from your rail voltage, and measure the current. The Current based measurement means, length of wire will not matter, as opposed to voltage based measurement where the voltage will drop along the wire.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260621_5F00_094222_2800_1_2900_.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260621_5F00_103531_2800_1_2900_.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;I am using a&amp;nbsp;TPS61040DBVT boost converter to get a 12V, HX94C requires excitation voltage of 6-36V for its working. Next is choosing the shunt resistor to measure the full range of 4-20mA. At 150Ohm ressitor&lt;/p&gt;
&lt;p&gt;At&amp;nbsp; 4 mA: V = 0.004 &amp;times; 150 = 0.60 V&lt;br /&gt;At 20 mA: V = 0.020 &amp;times; 150 = 3.00 V&lt;/p&gt;
&lt;p&gt;This is within the range of STM32&amp;#39;s ADC&lt;/p&gt;
&lt;h2 id="mcetoc_1jrkanufe0"&gt;The Firmware&lt;/h2&gt;
&lt;p&gt;Just like my previous post of the UV sensor, I am simply reading the ADC values for both using&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:b5062445-537b-4569-88d7-3fdd4acf230e:type=c_cpp&amp;text=static%20HAL_StatusTypeDef%20adc_read_mv%28HX94C_t%20%2Adev%2C%20uint32_t%20channel%2C%20uint32_t%20%2Amv%29%0A%7B%0A%20%20%20%20ADC_ChannelConfTypeDef%20c%20%3D%20%7B0%7D%3B%0A%20%20%20%20c.Channel%20%20%20%20%20%20%3D%20channel%3B%0A%20%20%20%20c.Rank%20%20%20%20%20%20%20%20%20%3D%20ADC_REGULAR_RANK_1%3B%0A%20%20%20%20c.SamplingTime%20%3D%20ADC_SAMPLETIME_640CYCLES_5%3B%20%20%2F%2A%20high%20source%20impedance%20%2A%2F%0A%20%20%20%20c.SingleDiff%20%20%20%3D%20ADC_SINGLE_ENDED%3B%0A%20%20%20%20c.OffsetNumber%20%3D%20ADC_OFFSET_NONE%3B%0A%0A%20%20%20%20HAL_StatusTypeDef%20st%20%3D%20HAL_ERROR%3B%0A%20%20%20%20if%20%28HAL_ADC_ConfigChannel%28dev-%3Ehadc%2C%20%26c%29%20%3D%3D%20HAL_OK%20%26%26%0A%20%20%20%20%20%20%20%20HAL_ADC_Start%28dev-%3Ehadc%29%20%3D%3D%20HAL_OK%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20%28HAL_ADC_PollForConversion%28dev-%3Ehadc%2C%20ADC_TIMEOUT_MS%29%20%3D%3D%20HAL_OK%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint32_t%20raw%20%3D%20HAL_ADC_GetValue%28dev-%3Ehadc%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2Amv%20%3D%20%28raw%20%2A%20HX94C_VDDA_MV%29%20%2F%20ADC_FULL_SCALE%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20st%20%3D%20HAL_OK%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20HAL_ADC_Stop%28dev-%3Ehadc%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20st%3B%0A%7D]\&lt;/p&gt;
&lt;p&gt;Once I have the millivolt reading from the shunt, the math is straightforward:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:1037263f-8d25-4200-be6e-f8a4c296006e:type=c_cpp&amp;text=%2F%2A%20I%28%C2%B5A%29%20%3D%20V%28mV%29%20%2F%20Rsense%28%CE%A9%29%20%C3%97%201000%20%2A%2F%0Aint32_t%20i_rh%20%3D%20%28int32_t%29%28rh_mv%20%2A%201000U%20%2F%20HX94C_RSENSE_OHMS%29%3B%0Aint32_t%20i_t%20%20%3D%20%28int32_t%29%28t_mv%20%20%2A%201000U%20%2F%20HX94C_RSENSE_OHMS%29%3B]&lt;/p&gt;
&lt;h2 id="mcetoc_1jrkb1iau1"&gt;The results&lt;/h2&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:900px;" alt=" " src="https://community.element14.com/resized-image/__size/1800x720/__key/communityserver-discussions-components-files/453/Screenshot_5F00_2026_2D00_06_2D00_21_5F00_10_2D00_16_2D00_56.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The HX94C contributes six tokens: hx_ok (both loops healthy), hx_rh (tenths of a %RH), hx_t (centi-&amp;deg;C), hx_rhi / hx_ti (the two loop currents in tenths of a mA, kept for diagnostics) and hx_flt (the fault bitmask). Decoding the HX94C fields across those samples:&amp;nbsp;&lt;/p&gt;
&lt;figure class="table-figure"&gt;
&lt;table border="1"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;hb&lt;/th&gt;
&lt;th&gt;RH loop&lt;/th&gt;
&lt;th&gt;RH&lt;/th&gt;
&lt;th&gt;Temp loop&lt;/th&gt;
&lt;th&gt;Temp&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;15.5 mA&lt;/td&gt;
&lt;td&gt;71.7 %&lt;/td&gt;
&lt;td&gt;8.3 mA&lt;/td&gt;
&lt;td&gt;26.8 &amp;deg;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;15.7 mA&lt;/td&gt;
&lt;td&gt;72.8 %&lt;/td&gt;
&lt;td&gt;8.4 mA&lt;/td&gt;
&lt;td&gt;27.8 &amp;deg;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;15.0 mA&lt;/td&gt;
&lt;td&gt;68.7 %&lt;/td&gt;
&lt;td&gt;8.7 mA&lt;/td&gt;
&lt;td&gt;29.2 &amp;deg;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;15.5 mA&lt;/td&gt;
&lt;td&gt;72.1 %&lt;/td&gt;
&lt;td&gt;8.3 mA&lt;/td&gt;
&lt;td&gt;27.0 &amp;deg;C&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/figure&gt;
&lt;p&gt;BTW, hb is heartbeat that comes every 5second&lt;/p&gt;
&lt;h2 id="mcetoc_1jrkb6bqd2"&gt;Final Notes&lt;/h2&gt;
&lt;p&gt;It&amp;#39;s time to submit project, and Will invest time in writing the final post. Feel free to ask questions if i missed anything.&lt;/p&gt;</description></item><item><title>RE: SolarSense - Part 8 - Interfacing Humidity and Temperature</title><link>https://community.element14.com/thread/236206?ContentTypeID=1</link><pubDate>Tue, 23 Jun 2026 12:36:30 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0cc49baf-8d30-4a8f-8376-5b4845b53e7a</guid><dc:creator>saramic</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/236206?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57046/solarsense---part-8---interfacing-humidity-and-temperature/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;nice - I didn&amp;#39;t know about the current measurement and the fact that it is there to allow for longer wires - good learning&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Green Brain - Part IV - Nodes Well That Ends Well</title><link>https://community.element14.com/thread/236191?ContentTypeID=1</link><pubDate>Mon, 22 Jun 2026 05:18:58 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:79ab602f-61b5-4845-bcbb-d7d3f3707b84</guid><dc:creator>arvindsa</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236191?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57049/green-brain---part-iv---nodes-well-that-ends-well/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Love the title&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Green Brain - Part IV - Nodes Well That Ends Well</title><link>https://community.element14.com/thread/57049?ContentTypeID=0</link><pubDate>Sun, 21 Jun 2026 14:40:22 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:64f9f1cb-e7c4-41e0-b008-e1c8cebb8110</guid><dc:creator>saramic</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/57049?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57049/green-brain---part-iv---nodes-well-that-ends-well/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I had built up some proto board nodes for the distributed greenhouse control platform &amp;mdash; it was time to wire them all up together and get them talking. It did not go smoothly&amp;nbsp;[emoticon:98f842990f454422aa6a04953955f9d9].&lt;/p&gt;
&lt;h1 id="recap"&gt;Recap&lt;/h1&gt;
&lt;p&gt;Green Brain&amp;nbsp;[emoticon:e8b48dd11aa142a1bf769add09114643] is the idea of tracking plant  nodes via an industrial&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;CAN bus&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to ultimately see which plant needs&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;del&gt;more water cannon&amp;nbsp;[emoticon:021df5b9678b462da4ec897ab36c19a0].&lt;/del&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;well watering.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/56921/green-brain---part-i---can-bus-introduction" data-e14adj="t"&gt;Green Brain - Part I - CAN bus introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57001/green-brain---part-ii---dev-setup" data-e14adj="t"&gt;Green Brain - Part II - Dev setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Green Brain - Part III - Water Cannon Chaos&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="three-nodes-one-bus"&gt;Three nodes, one bus&lt;/h2&gt;
&lt;p&gt;So far I had tested two nodes talking to each other on a work bench. Adding a bunch of twisted pair wiring and a third node to form a proper little network seemed straightforward &amp;mdash; it was far from it.&lt;/p&gt;
&lt;p&gt;The symptoms were baffling. The first two nodes would work, then one of them would drop off and I would have only one node, and sometimes no nodes would appear at all after some time. This went on in circles for a while, not to mention some circuit board issues early on that prevented two boards working altogether.&lt;/p&gt;
&lt;p&gt;&lt;img style="cursor:zoom-in;display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260621_5F00_all_5F00_nodes_5F00_in_5F00_greenhouse_5F00_and_5F00_a_5F00_plang.jpg" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;All the nodes set up in a greenhouse. You can see they are all connected with twisted pair. Clearly plywood is not the best for a humid greenhouse but I have a future use for the stands&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="problem-1--bad-wiring-and-cold-solder-joints"&gt;Problem 1 &amp;mdash; bad wiring and cold solder joints&lt;/h2&gt;
&lt;p&gt;The first and most humbling issue: bad physical connections.&lt;/p&gt;
&lt;p&gt;Node 1 would print this at startup and hang:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:8df65e7d-b02b-465e-a450-f9bf4d8e919b:type=text&amp;text=ERR%3A%20setBitrate%20failed%20%E2%80%94%20check%20SPI%20wiring]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I had checked the wiring visually &amp;mdash; it looked fine. But to get a more precise diagnosis I added a register read&amp;nbsp;&lt;/span&gt;&lt;em&gt;before&lt;/em&gt;&lt;span&gt;&amp;nbsp;calling&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;setBitrate&lt;/code&gt;&lt;span&gt;, directly checking the&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;CANSTAT&lt;/code&gt;&lt;span&gt;&amp;nbsp;register on the MCP2515 chip over SPI:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:b044f4fe-7e9d-412d-8f8c-d829a1d69479:type=c_cpp&amp;text=Serial.print%28F%28%22CANSTAT%20after%20reset%3D0x%22%29%29%3B%20Serial.println%28readCanstat%28%29%2C%20HEX%29%3B%0A%2F%2F%20expect%200x80%20%28config%20mode%29%20%E2%80%94%200x00%2F0xFF%20means%20SPI%20not%20working%0Aif%20%28mcp2515.setBitrate%28CAN_500KBPS%2C%20CAN_CLOCK%29%20%21%3D%20MCP2515%3A%3AERROR_OK%29%20%7B%0A%20%20%20%20Serial.println%28F%28%22ERR%3A%20setBitrate%20failed%20%E2%80%94%20check%20SPI%20wiring%22%29%29%3B%0A%20%20%20%20while%20%28true%29%3B%0A%7D%0A]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Where&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;readCanstat()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;does a raw SPI read of register&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;0x0E&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:3bd20c51-cc0d-4108-b291-07c759d16dad:type=c_cpp&amp;text=uint8_t%20readCanstat%28%29%20%7B%0A%20%20%20%20SPI.beginTransaction%28SPISettings%2810000000%2C%20MSBFIRST%2C%20SPI_MODE0%29%29%3B%0A%20%20%20%20digitalWrite%28MCP_CS_PIN%2C%20LOW%29%3B%0A%20%20%20%20SPI.transfer%280x03%29%3B%20%2F%2F%20READ%20instruction%0A%20%20%20%20SPI.transfer%280x0E%29%3B%20%2F%2F%20CANSTAT%20register%20address%0A%20%20%20%20uint8_t%20val%20%3D%20SPI.transfer%280x00%29%3B%0A%20%20%20%20digitalWrite%28MCP_CS_PIN%2C%20HIGH%29%3B%0A%20%20%20%20SPI.endTransaction%28%29%3B%0A%20%20%20%20return%20val%3B%0A%7D%0A]&lt;/p&gt;
&lt;p&gt;What came back:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:160e84d8-f961-4232-afe9-2629ea755ada:type=text&amp;text=CANSTAT%20after%20reset%3D0x0]&lt;/p&gt;
&lt;p&gt;The three possible values tell you exactly what is broken:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CANSTAT&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;0x80&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chip alive, in config mode &amp;mdash; SPI working&amp;nbsp;[emoticon:599cc6d89e2145289084ee73d7cb364b]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;0xFF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MISO floating high &amp;mdash; chip not connected or MISO wire missing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MISO pulled low &amp;mdash; CS not going low, or SCK missing, or a short to GND&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Getting&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;0x00&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;meant the chip was never being selected. After going back with a multimeter and checking continuity on every pin, I found a bad joint on the CS (D10) header pin &amp;mdash; it looked soldered but wasn&amp;rsquo;t making contact. A quick reflow fixed that joint, but&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;0x00&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;persisted. I tried loopback mode (which needs no CAN bus wiring at all &amp;mdash; the chip loops internally) and still got the same result. That ruled out everything external. The MCP2515 chip itself, or its crystal, was dead. As I didn&amp;rsquo;t have a spare module to swap out, I swapped with another node, to confirm the module was working, which it was - so there is an issue in some of my wiring on that node - will fix that before I start watering any plants with this system, for sure .&lt;/p&gt;
&lt;p&gt;The lesson:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;when SPI doesn&amp;rsquo;t work, measure before you guess, and work inward&lt;/strong&gt;. The&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;CANSTAT&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;read costs two lines of code and points at which layer is broken &amp;mdash; wiring, connection, or chip &amp;mdash; without having to guess.&lt;/p&gt;
&lt;p&gt;&lt;img style="cursor:zoom-in;display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260621_5F00_node_5F00_in_5F00_greenhouse.jpg" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The node is a simple build centered around an Arduino Nano and connected to a number of sensors and the CAN transceiver. I have a &amp;ldquo;USB C&amp;rdquo; charger/power driver &amp;mdash; unfortunately I went cheap from China and they are not true USB C but just a cheap power cable with a USB C connector - you get what you pay for&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="problem-2--duplicate-node-ids"&gt;Problem 2 &amp;mdash; duplicate node IDs&lt;/h2&gt;
&lt;p&gt;Setting node 1 aside with its wiring still unresolved, I focused on getting nodes 2 and 3 reliably onto the bus. But the dashboard still only showed one node.&lt;/p&gt;
&lt;p&gt;The cause was embarrassingly simple. The&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;NODE_ID&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;in the firmware is a compile-time&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;#define&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:53e955c6-2b95-4202-9be1-a7659ef659c5:type=c_cpp&amp;text=%23define%20NODE_ID%20%20%20%202%20%2F%2F%201%20%2F%2F%203%20%2F%2F%20change%20for%20appropriate%20node%20ID]&lt;/p&gt;
&lt;p&gt;I had been flashing both nodes from the same file without updating the constant each time. Both nodes were broadcasting as node 2 on CAN ID&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;0x102&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;CAN bus arbitration is based on the message ID. When two nodes try to transmit the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;same CAN ID at the same time&lt;/strong&gt;, both think they are winning arbitration (the ID bits are identical so neither detects a collision in the arbitration phase) &amp;mdash; but their payload bytes differ. The result is a corrupted frame, which every node on the bus detects as an error. Error counters start climbing on all nodes, and the bus degrades.&lt;/p&gt;
&lt;p&gt;The fix is obvious in hindsight: flash each node with the correct ID.&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:6beab4ab-ecc4-42e5-9be2-f03780f52870:type=text&amp;text=Node%201%20%E2%86%92%20NODE_ID%201%20%E2%86%92%20CAN%20ID%200x101%0ANode%202%20%E2%86%92%20NODE_ID%202%20%E2%86%92%20CAN%20ID%200x102%0ANode%203%20%E2%86%92%20NODE_ID%203%20%E2%86%92%20CAN%20ID%200x103]&lt;/p&gt;
&lt;h2 id="problem-3--all-nodes-transmitting-simultaneously"&gt;Problem 3 &amp;mdash; all nodes transmitting simultaneously&lt;/h2&gt;
&lt;p&gt;With unique IDs, both nodes came up and were visible on the dashboard. But after a minute or two, node 3 would drop off. Then reappear. Then drop off again.&lt;/p&gt;
&lt;p&gt;CAN bus handles collisions via&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;arbitration&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; when two nodes try to transmit at the same moment, the node with the lower ID wins and the other backs off and retries. This is elegant and normally fine. The problem is that my original code used a flat&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;delay(2000)&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;in every node&amp;rsquo;s loop:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:104c152d-9cbd-419f-9acd-046bac48dd8e:type=c_cpp&amp;text=void%20loop%28%29%20%7B%0A%20%20%20%20delay%282000%29%3B%0A%20%20%20%20%2F%2F%20...%20read%20sensor%2C%20transmit%0A%7D]&lt;/p&gt;
&lt;p&gt;If both nodes power up at roughly the same time (same power rail), they stay locked in sync and collide on every single cycle. CAN arbitration resolves each collision, but node 3 (higher CAN ID =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;0x103&lt;/code&gt;)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;em&gt;always loses&lt;/em&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; it backs off every single time. Under repeated arbitration losses the MCP2515 starts accumulating transmit errors in its internal&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;TEC (Transmit Error Counter)&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TEC &amp;gt; 96: warning threshold&lt;/li&gt;
&lt;li&gt;TEC &amp;gt; 127: error-passive (node still transmits but with passive error flags)&lt;/li&gt;
&lt;li&gt;TEC = 255:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;bus-off&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; node stops transmitting entirely&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The fix: stagger the transmission timing per node so they are naturally out of phase with each other:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:9b1bdbea-70e6-43e3-90ce-47ee760ed5c0:type=c_cpp&amp;text=void%20loop%28%29%20%7B%0A%20%20%20%20%2F%2F%20Stagger%20per%20node%20so%20they%20don%27t%20all%20transmit%20simultaneously.%0A%20%20%20%20%2F%2F%20Base%202s%20interval%20%2B%20NODE_ID%20%2A%20300ms%20offset%20keeps%20nodes%20out%20of%20phase.%0A%20%20%20%20delay%282000%20%2B%20NODE_ID%20%2A%20300%29%3B%0A%20%20%20%20%2F%2F%20...%0A%7D]&lt;/p&gt;
&lt;p&gt;Node 2 now transmits every 2.6 s, node 3 every 2.9 s &amp;mdash; and when node 1 is eventually fixed, it will slot in at 2.3 s. They drift in and out of alignment over time but never stay locked together.&lt;/p&gt;
&lt;h2 id="problem-4--no-recovery-when-a-node-goes-bus-off"&gt;Problem 4 &amp;mdash; no recovery when a node goes bus-off&lt;/h2&gt;
&lt;p&gt;Even with staggered timing, occasional collisions can still accumulate errors, especially at 500 kbps with the MCP2515&amp;rsquo;s tight 8-time-quanta bit timing at 8 MHz. Once a node hits bus-off it stops transmitting and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;the original code had no recovery logic&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; the node would stay silent forever until manually reset.&lt;/p&gt;
&lt;p&gt;The fix: read the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;EFLG&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Error Flag) register after any failed send and reset the chip if the bus-off bit is set:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:da5cb5d5-b46a-4faf-a3de-a2c02379dc7b:type=c_cpp&amp;text=MCP2515%3A%3AERROR%20sendErr%20%3D%20mcp2515.sendMessage%28%26tx%29%3B%0Aif%20%28sendErr%20%21%3D%20MCP2515%3A%3AERROR_OK%29%20%7B%0A%20%20%20%20Serial.print%28F%28%22ERR%3A%20send%20failed%20code%3D%22%29%29%3B%20Serial.println%28sendErr%29%3B%0A%20%20%20%20%2F%2F%20EFLG%20bit%205%20%3D%20TXBO%20%28bus-off%29.%20Reset%20and%20re-enter%20normal%20mode.%0A%20%20%20%20SPI.beginTransaction%28SPISettings%2810000000%2C%20MSBFIRST%2C%20SPI_MODE0%29%29%3B%0A%20%20%20%20digitalWrite%28MCP_CS_PIN%2C%20LOW%29%3B%0A%20%20%20%20SPI.transfer%280x03%29%3B%20SPI.transfer%280x2D%29%3B%20%2F%2F%20READ%20EFLG%0A%20%20%20%20uint8_t%20eflg%20%3D%20SPI.transfer%280x00%29%3B%0A%20%20%20%20digitalWrite%28MCP_CS_PIN%2C%20HIGH%29%3B%0A%20%20%20%20SPI.endTransaction%28%29%3B%0A%20%20%20%20if%20%28eflg%20%26%200x20%29%20%7B%0A%20%20%20%20%20%20%20%20Serial.println%28F%28%22EFLG%3A%20bus-off%20%E2%80%94%20resetting%20MCP2515%22%29%29%3B%0A%20%20%20%20%20%20%20%20mcp2515.reset%28%29%3B%0A%20%20%20%20%20%20%20%20delay%28100%29%3B%20%20%2F%2F%20give%20oscillator%20time%20to%20stabilise%0A%20%20%20%20%20%20%20%20mcp2515.setBitrate%28CAN_500KBPS%2C%20CAN_CLOCK%29%3B%0A%20%20%20%20%20%20%20%20delay%2810%29%3B%0A%20%20%20%20%20%20%20%20mcp2515.setNormalMode%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%3B%0A%7D]&lt;/p&gt;
&lt;p&gt;Note the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;delay(100)&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;after reset &amp;mdash; the original code had only 10 ms here, which is sometimes not enough for the MCP2515&amp;rsquo;s oscillator to stabilise before you start writing configuration registers.&lt;/p&gt;
&lt;h2 id="seeing-errors-before-they-become-a-problem"&gt;Seeing errors before they become a problem&lt;/h2&gt;
&lt;p&gt;To understand what is happening on the bus in real time, I added a helper that reads and prints&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;EFLG&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;TEC&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;after every successful transmission, but only if something is non-zero (so normal output stays clean):&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:88f644e1-db30-4ca4-9e99-da988f86a0eb:type=c_cpp&amp;text=%2F%2F%20EFLG%200x2D%3A%20bit5%3DTXBO%28bus-off%29%20bit4%3DTXEP%28err-passive%29%20bit2%3DTXWAR%28warning%29%0A%2F%2F%20TEC%20%200x1C%3A%20transmit%20error%20counter%20%20REC%200x1D%3A%20receive%20error%20counter%0Avoid%20printErrors%28%29%20%7B%0A%20%20%20%20uint8_t%20eflg%20%3D%20readReg%280x2D%29%3B%0A%20%20%20%20uint8_t%20tec%20%20%3D%20readReg%280x1C%29%3B%0A%20%20%20%20if%20%28eflg%20%3D%3D%200%20%26%26%20tec%20%3D%3D%200%29%20return%3B%0A%20%20%20%20Serial.print%28F%28%22%20EFLG%3D0x%22%29%29%3B%20Serial.print%28eflg%2C%20HEX%29%3B%0A%20%20%20%20Serial.print%28F%28%22%20TEC%3D%22%29%29%3B%20Serial.print%28tec%29%3B%0A%20%20%20%20if%20%28eflg%20%26%200x20%29%20Serial.print%28F%28%22%20%5BBUS-OFF%5D%22%29%29%3B%0A%20%20%20%20else%20if%20%28eflg%20%26%200x10%29%20Serial.print%28F%28%22%20%5BERR-PASSIVE%5D%22%29%29%3B%0A%20%20%20%20else%20if%20%28eflg%20%26%200x01%29%20Serial.print%28F%28%22%20%5BWARNING%5D%22%29%29%3B%0A%20%20%20%20Serial.println%28%29%3B%0A%7D]&lt;/p&gt;
&lt;p&gt;With this in place you can watch TEC climbing before the node goes quiet &amp;mdash; it gives you a warning rather than a silent disappearance.&lt;/p&gt;
&lt;h2 id="what-i-learned"&gt;What I learned&lt;/h2&gt;
&lt;p&gt;Getting even two CAN nodes reliably talking to a master required solving four separate problems: a cold solder joint that looked fine visually, duplicate node IDs from a careless flash, synchronised timing that caused constant arbitration collisions, and no recovery from the bus-off state those collisions eventually caused. None of them were obvious until I had the right instrumentation in place. Node 1 remains a work in progress.&lt;/p&gt;
&lt;p&gt;The core lesson is that&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;CAN bus is robust but unforgiving about setup&lt;/strong&gt;: it handles arbitration and error detection in hardware, but the hardware needs clean wiring, unique IDs, and a firmware that knows how to recover from error states.&lt;/p&gt;
&lt;p&gt;&lt;img style="cursor:zoom-in;display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260621_5F00_node_5F00_not_5F00_helping_5F00_plant_5F00_much.jpg" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;Another thing I learned from my last Design Challenge is not to leave the build till too late. I had a fair bit of time to get these stands and circuit boards done. I was hoping to get more sensors on there, including the K-type thermocouples but some late shipment and a busy few weeks means all I got is a DHT11 temperature and humidity sensor.&lt;/p&gt;
&lt;h2 id="next"&gt;Next&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fix node 1&amp;rsquo;s wiring&lt;/li&gt;
&lt;li&gt;maybe take some time out to actually grow some plants&amp;nbsp;[emoticon:752f32bcc91d4a448db162742a877a4a]&lt;/li&gt;
&lt;li&gt;Hook it up to LabView&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="source"&gt;Source&lt;/h2&gt;
&lt;p&gt;&lt;a id="" href="https://github.com/saramic/green-brain" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;https://github.com/saramic/green-brain&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Misaz’s Forum #2: Breadboarding Industrial Temp + Humidity Sensor</title><link>https://community.element14.com/thread/57052?ContentTypeID=0</link><pubDate>Sun, 21 Jun 2026 22:14:41 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:d9e05f0b-b0b0-4c05-9f97-635d9be52a3f</guid><dc:creator>misaz</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/57052?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57052/misaz-s-forum-2-breadboarding-industrial-temp-humidity-sensor/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;Hi. I welcome you to my second forum post as part of my participation in &lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/" data-e14adj="t"&gt;On The Line Design Challenge&lt;/a&gt;. In this post, I will describe how I prepared Omega HX94 humidity + temperature sensor to enable experimenting with it on breadboard.&lt;/span&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1jrm3tska0"&gt;&lt;span&gt;Preparing Cable&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;First step is preparing cable for connecting sensor. It could be definitely done in hacky way, but I tried less hacky way and actually used connector which was bundled in package and mounted it to ethernet cable. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Process is explained in printed manual which come with the sensor:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/06_2D00_manual_2D00_mnt.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;First step is separating connector by unscrewing tiny screw on side:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/07_2D00_conn_2D00_disasm.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Then you can solder, wires to four contacts inside connector.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/08_2D00_conn_2D00_sold.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As you can see, I did not forget about heatshrink, however since contact are large, I need to heat them a lot and heartstring sooner then I needed.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Next step is pulling other part of connector from other side of cable:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/09_2D00_conn_2D00_asm.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Then you can push parts together and fit back small screw.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Another end I made breadboard friendly:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/10_2D00_con_2D00_breadboard.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Across whole process, it is good idea to check for open connections and short circuits, but I was lucky this time. This is a result. Now my sensor is breadboarded:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/11_2D00_conn_2D00_final.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It is sensor with analog output, so next time, I will try it with power supply and multimeter. These two are enough to obtain reading from it.&lt;/p&gt;</description></item><item><title>RE: Misaz’s Forum #2: Breadboarding Industrial Temp + Humidity Sensor</title><link>https://community.element14.com/thread/236190?ContentTypeID=1</link><pubDate>Sun, 21 Jun 2026 22:51:51 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:1576b7cf-8afd-45e4-b1a8-aa8789bcd231</guid><dc:creator>shabaz</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236190?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57052/misaz-s-forum-2-breadboarding-industrial-temp-humidity-sensor/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Always a problem insulating the conductors in small connectors!&lt;/p&gt;
&lt;p&gt;One way is to replace the heatshrink with rubber tubing (there is a 3-prong tool that expands the rubber sleeve) and put it on each conductor&amp;#39;s insulator, then solder as normal, then slide it over (can lubricate to do that if needed).&lt;/p&gt;
&lt;p&gt;The more unorthodox method I like is to instead use little pieces of polyamide tape, and tweezers to wrap it around each conductor individually, after soldering. Takes up very little space, so the connector shells go on easily afterwards.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Misaz’s Forum #5: Experimenting with Thermocouple</title><link>https://community.element14.com/thread/57055?ContentTypeID=0</link><pubDate>Sun, 21 Jun 2026 22:33:34 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:36dcf1eb-2dea-4d7d-84c0-e19f1ca6cd39</guid><dc:creator>misaz</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/57055?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57055/misaz-s-forum-5-experimenting-with-thermocouple/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;Hi. I welcome you to next part of my series about my experiments with industrial sensors. In this part I will look at thermocouple. As part of kit, I&amp;rsquo;ve got kit of five K-Type thermocouple. Compared to previously described sensor, thermocouple is complete opposite. It do not produce current output, instead it produces voltage output, and instead of getting decent industrial reliable output, it actually generates only few millivolts. While previous sensor was providing absolute value, thermocouples provide relative output to some reference called cold junction. It is temperature on connector where different metal touch each other. Sensor provides temperature difference between probe and this connector. To get absolute measurement, we need to measure one of these temperatures by different sensor. But Let&amp;rsquo;s begin simply. Let&amp;rsquo;s start with multimeter again.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As a first experiment I connected multimeter in mili-voltmeter mode directly to sensor:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/19_2D00_ktype_2D00_cold.jpeg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;And when I heated a probe a little I&amp;rsquo;ve got slightly higher voltage:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20_2D00_ktype_2D00_hot.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Note that measurements are not in V. They are in mV. So, it is 0,00023V actually. Very low voltage!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I tried Fluke online calculator at: &lt;a href="https://www.fluke.com/en-us/learn/tools-calculators/thermocouple-voltage-to-temperature-calculator" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;www.fluke.com/.../thermocouple-voltage-to-temperature-calculator&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/21_2D00_ktype_2D00_calc.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As you can see, such small voltage difference correspond to 5,810 &amp;deg;C temperature difference between cold junction and thermocouple. It corresponds to difference between room temperature about 29&amp;deg;C these days and my finger temperature around 36&amp;deg;C.&lt;/span&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1jrm4utgh0"&gt;&lt;span&gt;Let&amp;rsquo;s try digitally&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;For using thermocouples in real, we need to deal with two problems. Very low voltage and need for second sensor. Back in 2022, there were &lt;a href="https://community.element14.com/challenges-projects/design-challenges/experimenting-with-thermistors/" data-e14adj="t"&gt;Experimenting with Thermistors&lt;/a&gt; competition which I joined. Thermistors are one of the possible solutions for second sensor need. Additionally, as part of Experimenting with Thermistor I created board with 24-bit ADC with PGA which can nicely measure both thermistor and thermocouple. It is built around MAX11410 ADC chip. I reused it for this project. The idea was to reuse current part for thermistor and reference:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/22_2D00_ktype_2D00_dig_2D00_sch1.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Chip has build int constant current generator, which can generate current like 50uA and pass it from port like AIN4 here. This current flow down through thermistor and 22k precise (0,1% tolerance resistor) which generates reference (REF1). This can nicely measure thermistor relatively to known reference without any precise voltage reference (50uA current is also imprecise).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;For thermocouple I had plan to use another two channels of my board like Maxim showcase in ADC chip datasheet (however I used AIN7 and 8 since 4, 5, 6 are already occupied):&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/23_2D00_ktype_2D00_dig_2D00_sch2.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;For this measurement, I actually need precise voltage reference. My idea was to use builtin reference, measure precise resistor using it, estimate it&amp;rsquo;s error and compensate thermocouple voltage measurement with this knowledge.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I connected everything:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/24_2D00_ktype_2D00_dig_2D00_real.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Note that thermistor end (two thin black wires ending on yellow connector) touches cold junction of thermocouple.&lt;/span&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1jrm4utgh1"&gt;&lt;span&gt;Failed&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;However, my experiment failed. I migrated my MAX11410 library to Arduino Uno Q, adjusted code to do measurements as needed, but if for some reason returned full scale voltage in nearly all cases. As part of troubleshooting, I tried run the same experiment which I run back in Experimenting with Thermistors era, on same board, with same code, with disconnected other new parts and it still produce bad numbers.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I am not sure what happened to my ADC board, but I am, no longer do even basic voltage measurements with it. After few hours of troubleshooting, I gave up.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;And since time is running out. This is end of my experimenting here. In next part, I will summarize all my efforts.&lt;br /&gt; &lt;/span&gt;&lt;/p&gt;</description></item><item><title>Misaz’s Forum #4: Digital measurement of Analog output</title><link>https://community.element14.com/thread/57054?ContentTypeID=0</link><pubDate>Sun, 21 Jun 2026 22:30:50 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2e4495e9-2578-4b78-ad2b-38a8d034acfc</guid><dc:creator>misaz</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/57054?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57054/misaz-s-forum-4-digital-measurement-of-analog-output/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;Hello Element14 community.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In this forum I will show another play with Omega&amp;rsquo;s HX94C industrial humidity and temperature sensor with analog output. Today, I will convert analog current output to digital form using Arduino Uno Q.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;How to do that is briefly explained in printed manual which come with sensor:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/7571.15_2D00_manual_2D00_adc.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The missing part is &amp;ldquo;TEMP METER OR RECORDER&amp;rdquo;. Diagram highlights that it needs some resistor to measure. This is exactly what we need for converting current output to voltage measurable by ADC. Question is what value? The answer is ohm law. We need to map 20mA to 3.3V measured by Arduino UNO Q. Formula is: R = U / I. U is voltage we want to get (3.3V) at maximum current (0.020 A). 3.3 / 0.020 = 165 which means that we need about 165 ohm resistor. I do not have 165 ohm resistor, however I have lot of 330 ohm, so I will use two of them in parallel which result in exactly 165 ohm resistance. Connection is as follows:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/1033.16_2D00_exp2_2D00_sch.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In real life:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/7462.17_2D00_exp2_2D00_real.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Now let&amp;rsquo;s write sketch. Arduino Uno Q support more or less same sketches as older Arduino Unos. Difference is only in using Monitor instead of Serial because it needs utilize interconnection between chips. You can create new app in App Lab by clicking or in terminal:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:3a82ab50-294c-43d3-8b84-b4860dea5e08:type=text&amp;text=arduino-app-cli%20app%20new%20analog_humi_temp%0Acd%20%2Fhome%2Farduino%2FArduinoApps%2Fanalog_humi_temp]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Then you can edit sources using your favourite editor. Sketch is in sketch/sketch.ino:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:17fa2e56-b2e4-4d84-8870-4e02377b6b28:type=text&amp;text=vim%20sketch%2Fsketch.ino]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Sketch source code:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:75f881fe-da61-431b-9451-a65a01fd3680:type=c_cpp&amp;text=void%20setup%28%29%20%7B%0A%20%20Monitor.begin%289600%29%3B%0A%7D%0A%0Avoid%20loop%28%29%20%7B%0A%20%20int%20adcTemp%20%3D%20analogRead%28A0%29%3B%0A%20%20float%20voltageTemp%20%3D%203.3%20%2A%20adcTemp%20%2F%201024.0%3B%0A%20%20float%20currentTemp%20%3D%201000%20%2A%20voltageTemp%20%2F%20165.0%3B%0A%20%20float%20temperature%20%3D%20%28currentTemp%20-%204%29%20%2A%20100%20%2F%2016%3B%0A%0A%20%20int%20adcHumi%20%3D%20analogRead%28A1%29%3B%0A%20%20float%20voltageHumi%20%3D%203.3%20%2A%20adcHumi%20%2F%201024.0%3B%0A%20%20float%20currentHumi%20%3D%201000%20%2A%20voltageHumi%20%2F%20165.0%3B%0A%20%20float%20humidity%20%3D%20%28currentHumi%20-%204%29%20%2F%200.16%3B%0A%0A%20%20Monitor.print%28%22Temperature%3A%20%22%29%3B%0A%20%20Monitor.print%28temperature%29%3B%0A%20%20Monitor.print%28%22%5CtHumidity%3A%20%22%29%3B%0A%20%20Monitor.println%28humidity%29%3B%0A%7D%0A]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;And then you can run it by clicking Run in App lab, or in command line:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:c2f4a963-a54d-4fa0-a550-df6e67a3168d:type=text&amp;text=arduino-app-cli%20app%20start%20.]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;And logs you can observe using following command:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:c46dc82e-f4d1-4ffb-9300-836fe452aed9:type=text&amp;text=arduino-app-cli%20monitor]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;It should look as follows:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/5327.18_2D00_exp2_2D00_results.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;And that&amp;rsquo;s it. Outputs from industrial analog sensor are now in hands of modern fully digital Arduino Uno Q. In next part I will look to other sensor kit: Omega&amp;rsquo;s K-Type Thermocouple.&lt;/p&gt;</description></item><item><title>Misaz’s Forum #3: Analog measurements without any digital part</title><link>https://community.element14.com/thread/57053?ContentTypeID=0</link><pubDate>Sun, 21 Jun 2026 22:16:19 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:237238d3-dba0-42dc-94d2-0adabcae29b8</guid><dc:creator>misaz</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/57053?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57053/misaz-s-forum-3-analog-measurements-without-any-digital-part/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;Hi. I welcome you to my third forum post as part of my participation in &lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/" data-e14adj="t"&gt;On The Line Design Challenge&lt;/a&gt;. In this post, I will show how to measure temperature and humidity using it with using just sensor, power supply, and two multimeters (one for temperature, second for humidity).&lt;/span&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1jrm41k6n0"&gt;&lt;span&gt;Current Outputs&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;The variant of sensor which we received as part of competition has current output. It works as current limiter. Sensor has no ground connection. It connects just to high voltage of power supply which need to be higher then 6V and maximum is listed as 30V. The sensor consume energy from this source and limit&amp;rsquo;s own power consumption based on measured properties. Output is in the range 4 &amp;ndash; 20mA, so sensor always consume at least 4mA which it uses for its own operation. Remaining current is &amp;ldquo;wasted&amp;rdquo; for indicating measured value.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Let&amp;rsquo;s measure some currents which corresponds to humidity and temperature measured by the sensor. Schematics of connection is following. As I mentioned, power pins of sensor (1 and 2) goes to positive voltage of power supply, output of sensors (3 and 4) are connected via amperemeters to negative pin of power supply.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/12_2D00_exp_2D00_sch.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In reality when powered:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/13_2D00_exp_2D00_real.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1jrm41k6n1"&gt;&lt;span&gt;Converting Milliamperes to Temperature and Humidity&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Formulas for converting measured current (mA) to real values are mentioned in printed manual which come with sensor:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/14_2D00_manual_2D00_formulas.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I measured 7.77 mA on temperature output channel, and 13.020 mA on humidity channel. Let&amp;rsquo;s pass it to formulas:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;deg;C = (7,77 &amp;ndash; 4) * (100 / 16) = 23.5625 &amp;deg;C&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;%RH = (13,020 &amp;ndash; 4) / 0,16 = 56.375 %&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Misaz’s Forum #1: Kit Unboxing</title><link>https://community.element14.com/thread/57051?ContentTypeID=0</link><pubDate>Sun, 21 Jun 2026 22:12:40 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:626afe3d-b740-4b86-af26-adc439ad218f</guid><dc:creator>misaz</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/57051?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57051/misaz-s-forum-1-kit-unboxing/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;Hello Element14 community. Welcome you to my first forum post about kit which I received as part &lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/" data-e14adj="t"&gt;On The Line Design Challenge&lt;/a&gt;. I started experimenting pretty late this time and writing I started even later, so this time, I post everything on last day :)&lt;/span&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1jrm3qkj60"&gt;&lt;span&gt;Motivation&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;My motivation was mainly to play with industrial sensors. Most probably everybody can measure temperature with DHT22 nowadays, but over the time I learnt that in electronics, things are not black and white, but rather different technologies have some pros and cons. So as part of challenge, I want to discover offered high quality industrial humidity sensor with analog output, thermocouples and CAN bus.&lt;/span&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1jrm3qkj61"&gt;&lt;span&gt;Unboxing&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Kit come at time. Contained everything I expected + Element14 swag (stickers, letter). The most expensive and interesting part is this analog temperature + humidity sensor from Omega. It comes in large box which contained mounting accessors, cable connector, wall mount accessories and PRINTED MANUAL. Really cool.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/01_2D00_humi_2D00_temp_2D00_sens.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Second most interesting part of kit for me is pack of 5 K-type thermocouples:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/02_2D00_thermocouples.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Another part is CAN PHY Shield. It is powered by chip from Maxim Integrated, so it is shield and evaluation kit in one:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/03_2D00_can_2D00_shield.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Finally there is some compute. It is not that interesting to me, because I already have and play with the same one. You can read my initial impressions from my first Uno Q &lt;a href="https://community.element14.com/challenges-projects/design-challenges/light-up-your-life/f/forum/56589/finisher-prize-for-light-up-your-life-design-challenge" data-e14adj="t"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/04_2D00_uno_2D00_q.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Finally, Molex pre-crimped cables as a goodie in the kit:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/05_2D00_molex_2D00_cabs.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In next forum post, I will prepare temperature and humidity sensor for operation.&lt;/p&gt;</description></item><item><title>Green Brain - Part V - LabView visualisation</title><link>https://community.element14.com/thread/57050?ContentTypeID=0</link><pubDate>Sun, 21 Jun 2026 16:50:40 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0f9b736b-4e38-4a8b-874b-a304c0f4ab46</guid><dc:creator>saramic</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/57050?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57050/green-brain---part-v---labview-visualisation/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;had never heard of NI LabVIEW before this challenge but after watching some overviews and tutorials it is clearly an industry standard, so I thought I would give it a go.&lt;/p&gt;
&lt;h1 id="recap"&gt;Recap&lt;/h1&gt;
&lt;p&gt;Green Brain&amp;nbsp;[emoticon:e8b48dd11aa142a1bf769add09114643] is the idea of tracking plant  nodes via an industrial&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;CAN bus&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/56921/green-brain---part-i---can-bus-introduction" data-e14adj="t"&gt;Green Brain - Part I - CAN bus introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57001/green-brain---part-ii---dev-setup" data-e14adj="t"&gt;Green Brain - Part II - Dev setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Green Brain - Part III - Water Cannon Chaos&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57049/green-brain---part-iv---nodes-well-that-ends-well" data-e14adj="t"&gt;Green Brain - Part IV - Nodes Well That Ends Well&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="connecting-to-labview"&gt;Connecting to LabVIEW&lt;/h2&gt;
&lt;p&gt;The UNO Q already runs a Python Flask REST API that serves the live sensor readings as JSON at&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;pollyanna.local:8080/.../nodes&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:49933340-0406-4123-9f21-eba3968f720b:type=json&amp;text=%5B%7B%22node%22%3A2%2C%22temp%22%3A24.5%2C%22hum%22%3A61.0%2C%22seq%22%3A42%2C%22ok%22%3Atrue%2C%22age%22%3A3%7D%2C%0A%20%7B%22node%22%3A3%2C%22temp%22%3A23.1%2C%22hum%22%3A58.0%2C%22seq%22%3A38%2C%22ok%22%3Atrue%2C%22age%22%3A1%7D%5D]&lt;/p&gt;
&lt;p&gt;That means LabVIEW just needs to poll an HTTP endpoint &amp;mdash; no new code on the hardware side at all.&lt;/p&gt;
&lt;h2 id="what-i-tried--http-get-with-json-parsing"&gt;What I tried &amp;mdash; HTTP GET with JSON parsing&lt;/h2&gt;
&lt;p&gt;LabVIEW has a built-in&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;HTTP Client GET&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;VI under&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;Data Communication &amp;rarr; Protocols &amp;rarr; HTTP Client&lt;/code&gt;. Getting the raw JSON string back from the API worked fine.&lt;/p&gt;
&lt;p&gt;The stumbling block was parsing it. LabVIEW&amp;rsquo;s&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="language-plaintext highlighter-rouge"&gt;Unflatten From JSON&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;needs a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;type&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;input &amp;mdash; an array-of-clusters constant whose structure exactly matches the JSON. You build it outside-in: place an&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;Array Constant&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shell first, then drop a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;Cluster Constant&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;inside it, then add typed constants for each field with labels matching the JSON keys exactly.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260621_5F00_lab_5F00_view_5F00_temp_5F00_and_5F00_humidity.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;I got as far as the HTTP response but hit a type mismatch error:&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:7e181e74-5819-4cbc-a050-43136d3e3ae3:type=text&amp;text=LabVIEW%3A%20%28Hex%200xFFFA4723%29%20Type%20mismatch%20between%20JSON%20and%20LabVIEW.]&lt;/p&gt;
&lt;p&gt;The debug approach suggested on the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://forums.ni.com/t5/G-Web-Development-Software/json-parsing-array-of-cluster/td-p/4188063" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;NI forums&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is to wire the cluster-array constant to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;Flatten To JSON&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;first and compare its output to the real API response &amp;mdash; whatever differs is the mismatch. I ran out of time to track mine down fully, but it is close.&lt;/p&gt;
&lt;h2 id="other-ways-to-connect-sensors-to-labview"&gt;Other ways to connect sensors to LabVIEW&lt;/h2&gt;
&lt;p&gt;For reference, here is how the options compare &amp;mdash; from simplest to most capable:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;How&lt;/th&gt;
&lt;th&gt;Good for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VISA Serial&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Arduino &amp;rarr; USB &amp;rarr; LabVIEW VISA Read VI&lt;/td&gt;
&lt;td&gt;Quick bench work, no network needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TCP stream&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UNO Q opens a socket, streams CSV&lt;/td&gt;
&lt;td&gt;Low latency, one-to-one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HTTP REST&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LabVIEW polls a URL (what I used)&lt;/td&gt;
&lt;td&gt;Already have a server running&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MQTT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UNO Q publishes, LabVIEW subscribes&lt;/td&gt;
&lt;td&gt;Multiple consumers, buffered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NI DAQmx&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NI hardware plugs straight in&lt;/td&gt;
&lt;td&gt;Precision timing, industrial use&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For temperature monitoring the timing requirements are relaxed, so all of these work in practice. HTTP polling was the natural fit here since the REST API already existed.&lt;/p&gt;
&lt;h2 id="next"&gt;Next&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/b/projects/posts/green-brain---distributed-greenhouse-control-platform" data-e14adj="t"&gt;Green Brain - distributed greenhouse control platform&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="source"&gt;Source&lt;/h2&gt;
&lt;p&gt;&lt;a id="" href="https://github.com/saramic/green-brain" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;https://github.com/saramic/green-brain&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RE: Green Brain - Part III - Water Cannon Chaos</title><link>https://community.element14.com/thread/236183?ContentTypeID=1</link><pubDate>Sun, 21 Jun 2026 08:49:21 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:af42be4f-46d5-447e-94a7-aae5becdf735</guid><dc:creator>saramic</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236183?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57045/green-brain---part-iii---water-cannon-chaos/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;one of my sons actually - he only took part when I was a total failure and water and mess was involved &lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/1f642.svg" title="Slight smile"&gt;&amp;#x1f642;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Green Brain - Part III - Water Cannon Chaos</title><link>https://community.element14.com/thread/236182?ContentTypeID=1</link><pubDate>Sun, 21 Jun 2026 06:17:52 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:71aa7ab2-2960-4f97-85fa-b5d5d4d4c9ca</guid><dc:creator>colporteur</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/236182?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57045/green-brain---part-iii---water-cannon-chaos/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I&amp;#39;m curious. I&amp;#39;ve seen many videos on this site where pets make cameo appearances.&lt;/p&gt;
&lt;p&gt;If the figure hiding behind the pump assembly is a spouse, how did you convince them to participate? What function did they serve in the testing?&lt;/p&gt;
&lt;p&gt;The only input I get from my significant other is, &amp;quot;when are you going to clean up this room?&amp;quot; the few times she visits my workshop.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Green Brain - Part III - Water Cannon Chaos</title><link>https://community.element14.com/thread/236181?ContentTypeID=1</link><pubDate>Sun, 21 Jun 2026 03:25:47 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:e2d736fd-6b69-4c26-afec-7a9c4141aa89</guid><dc:creator>kmikemoo</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236181?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57045/green-brain---part-iii---water-cannon-chaos/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;a href="https://community.element14.com/members/saramic"&gt;saramic&lt;/a&gt;&amp;nbsp; While this didn&amp;#39;t quite turn out like you had wanted, it&amp;#39;s still a fun feature.&amp;nbsp; I think the water cannon as a dog deterent is a wonderful idea.&amp;nbsp; Maybe I could get my granddog to stop peeing right at the end of the steps - where we also have to walk.&amp;nbsp;&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/1f606.svg" title="Laughing"&gt;&amp;#x1f606;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>SolarSense - Part 7 - Reading the Sky - UV Sensor Interface on STM32</title><link>https://community.element14.com/thread/57041?ContentTypeID=0</link><pubDate>Fri, 19 Jun 2026 09:24:06 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:d7862279-2d00-4935-8d36-ebb0de51f5c7</guid><dc:creator>arvindsa</dc:creator><slash:comments>5</slash:comments><comments>https://community.element14.com/thread/57041?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57041/solarsense---part-7---reading-the-sky---uv-sensor-interface-on-stm32/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h2 id="mcetoc_1jqbvjvms0"&gt;Recap:&lt;/h2&gt;
&lt;p&gt;I&amp;#39;m building a smart solar monitoring system that uses three panels with a clean reference to eliminate weather effects and directly measure dust-induced losses in real time. One panel stays pristine as a baseline, and comparing the two under identical sky conditions gives a performance ratio that reveals soiling immediately. The goal is to use environmental sensors and edge AI to predict exactly when cleaning is needed, before efficiency drops enough to impact revenue. This beats fixed-schedule cleaning or waiting for output to degrade.Also this is complementary to my Master&amp;#39;s thesis of a minute Shape memory Alloy based solar panel cleaning robot&lt;/p&gt;
&lt;p&gt;Previous posts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57013/solarsense---part-1---introduction-the-poc-built-and-the-plan" data-e14adj="t"&gt;SolarSense - Part 1 - Introduction, The POC Built and The Plan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57018/solarsense---part-2---can-arduino-can" data-e14adj="t"&gt;SolarSense - Part 2 - Can Arduino CAN?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57020/solarsense---part-3---pcb-schematics-walkthrough" data-e14adj="t"&gt;SolarSense - Part 3 - PCB Schematics Walkthrough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57025/solarsense---part-4---can-protocol-deep-dive-and-implementation" data-e14adj="t"&gt;SolarSense - Part 4 - CAN Protocol Deep Dive and Implementation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57030/solarsense---part-5---making-an-live-dashboard-using-lab-view" data-e14adj="t"&gt;SolarSense - Part 5 - Making an Live Dashboard using Lab View&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57039/solarsense---part-6---reading-the-heat-at-k-type-thermocouple-using-max31855" data-e14adj="t"&gt;SolarSense - Part 6 - Reading the Heat at K Type Thermocouple using MAX31855.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jrfhuult0"&gt;Why UV?&lt;/h2&gt;
&lt;p&gt;The obvious answer you might think is &amp;quot;because UV degrades solar panels like so many other things.&amp;quot; And yes, that is absolutely true. UV radiation is the primary driver of photovoltaic cell degradation over years of operation. The casing yellows, the anti-reflection coating breaks down, Tracking cumulative UV dose over time gives a solid predictor for long-term efficiency loss that has nothing to do with dust.&lt;br /&gt;&lt;br /&gt;But for this project, That would not be the answer, UV degradation is established fact and there is no point in doing any research on it. But what is interesting is that&amp;nbsp; Solar irradiance (energy per unit area) and UV index do not move in together. Clouds scatter and absorb visible light far more aggressively than they block UV &amp;mdash; there are days where the sky looks completely overcast and the UV index is still punishing. The panels see almost no visible light but a significant UV dose. If my model only tracks panel output and misses UV, it cannot distinguish &amp;quot;sky is genuinely dark&amp;quot; from &amp;quot;sky is bright but the panel surface is blocked.&amp;quot; UV gives the model context about what the actual sky condition is, independent of what the panels are producing.&lt;br /&gt;&lt;br /&gt;The key insight: UV index is a proxy for the radiative environment that survives cloud cover in a way that visible irradiance does not. That independence is exactly what makes it useful as a model input. Now, I have to emphasize that the UV is not an authoritative indicator for passing clouds etc but it will be helpful.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfhuult1"&gt;What the GUVA Sensor Actually Does&lt;/h2&gt;
&lt;p&gt;The GUVA-S12SD is a GaN-based Schottky-type photodiode that is sensitive from roughly 240 nm to 370 nm. That range covers UV-B (280&amp;ndash;315 nm) and most of UV-A, but the response peaks around 360 nm and falls to near zero before 400 nm &amp;mdash; so visible light is well and truly rejected. The sensor is genuinely seeing UV, not just acting as a general light sensor with a blue filter.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:450px;max-width:800px;" alt=" " src="https://community.element14.com/resized-image/__size/1600x900/__key/communityserver-discussions-components-files/453/20260619_5F00_123156_2800_1_2900_.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;What the chip itself produces is a current proportional to incident UV intensity. The datasheet specifies a responsivity of 0.14 A/W at 300 nm and a photocurrent of 26 nA per UV index unit under sunlight conditions. On the Adafruit breakout module, this current feeds into an op-amp circuit that amplifies it to a usable voltage level. &lt;a href="https://www.adafruit.com/product/1918" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Adafruit&amp;rsquo;s documentation &lt;/a&gt;states the conversion as:&amp;nbsp;&lt;code&gt;V_out = 4.3 &amp;times; I_photodiode_in_&amp;micro;A&lt;/code&gt;&lt;/p&gt;
&lt;table class="table table-striped table-bordered" border="1"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Condition&lt;/th&gt;
&lt;th&gt;Approximate V_out&lt;/th&gt;
&lt;th&gt;UV Index&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dark / indoors&lt;/td&gt;
&lt;td&gt;0.05 &amp;ndash; 0.15 V&lt;/td&gt;
&lt;td&gt;0 &amp;ndash; 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overcast outdoor&lt;/td&gt;
&lt;td&gt;0.15 &amp;ndash; 0.40 V&lt;/td&gt;
&lt;td&gt;1 &amp;ndash; 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hazy sun&lt;/td&gt;
&lt;td&gt;0.40 &amp;ndash; 0.80 V&lt;/td&gt;
&lt;td&gt;4 &amp;ndash; 8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clear noon Kerala summer&lt;/td&gt;
&lt;td&gt;0.90 &amp;ndash; 1.40 V&lt;/td&gt;
&lt;td&gt;9 &amp;ndash; 14&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="has-line-data" data-line-start="48" data-line-end="49"&gt;My 0.3 V reading at test time is UV Index 3&amp;nbsp; exactly right for indoors near a window. The formula to compute UV index from the output voltage is simply dividing by 0.1 V, or in firmware:&lt;/p&gt;
&lt;p class="has-line-data" data-line-start="48" data-line-end="49"&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:36933d69-e330-4234-84b7-22fd761d9347:type=c_cpp&amp;text=%2F%2A%20UV%20index%20in%20tenths%20from%20GUVA%20output%20voltage.%0A%20%20%20Per%20Adafruit%3A%20UV%20index%20%3D%20V_out%20%2F%200.1%20V%20%20%E2%86%92%20%20tenths%20%3D%20uv_mv%20%2F%2010%20%2A%2F%0Auint32_t%20uv_idx10%20%3D%20uv_mv%20%2F%2010U%3B]&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfi88bn2" class="code-line has-line-data" data-line-start="77" data-line-end="78"&gt;The Code&lt;/h2&gt;
&lt;p class="has-line-data" data-line-start="79" data-line-end="80"&gt;There are two pieces of setup required before any ADC conversion can be usable on the STM32L4. The first is the calibration call unlike older STM32 families, the L4&amp;rsquo;s ADC has an internal calibration routine that must be run once at startup before the first conversion. It writes offset correction values to the ADC&amp;rsquo;s internal registers and takes only a few microseconds. Without it, readings come out inaccurate. This goes right after &lt;code&gt;MX_ADC1_Init()&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="has-line-data language-c" data-line-start="82" data-line-end="84"&gt;HAL_ADCEx_Calibration_Start(&amp;amp;hadc1, ADC_SINGLE_ENDED);&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class="has-line-data" data-line-start="85" data-line-end="86"&gt;After that, reading the UV channel each telemetry tick is straightforward. The ADC is in scan mode with four ranks, which means all four channels are sequenced on every trigger &amp;mdash; you cannot read just rank 1 in isolation. You have to drain all four values or the next conversion starts out of step.&lt;/p&gt;
&lt;p class="has-line-data" data-line-start="85" data-line-end="86"&gt;The Conversion Rank in CubeMX&lt;/p&gt;
&lt;p class="has-line-data" data-line-start="85" data-line-end="86"&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/Screenshot_5F00_2026_2D00_06_2D00_19_5F00_14_2D00_40_2D00_44.png" /&gt;&lt;/p&gt;
&lt;p class="has-line-data" data-line-start="85" data-line-end="86"&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:49af6926-81c8-4294-9c67-ffbd2cd1ad25:type=c_cpp&amp;text=%2F%2A%20UV%20sensor%20%28GUVA%20analog%29%20on%20ADC1%20rank%201%20%28ADC_CHANNEL_5%20%2F%20PA0%29.%0A%20%20%20Scan%20group%20has%204%20ranks%3B%20all%20must%20be%20drained%20on%20every%20conversion.%20%2A%2F%0Aif%20%28o%20%3C%20%28int%29sizeof%28tlm%29%20-%2016%29%0A%7B%0A%20%20%20%20uint32_t%20uv_raw%20%3D%200%3B%0A%20%20%20%20if%20%28HAL_ADC_Start%28%26hadc1%29%20%3D%3D%20HAL_OK%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20%28HAL_ADC_PollForConversion%28%26hadc1%2C%2010%29%20%3D%3D%20HAL_OK%29%0A%20%20%20%20%20%20%20%20%20%20%20%20uv_raw%20%3D%20HAL_ADC_GetValue%28%26hadc1%29%3B%0A%20%20%20%20%20%20%20%20%2F%2A%20Drain%20ranks%202-4%20%28HX94C%20RH%2C%20HX94C%20TEMP%2C%20RAIN%20AO%29%20%2A%2F%0A%20%20%20%20%20%20%20%20for%20%28int%20r%20%3D%201%3B%20r%20%3C%204%3B%20r%2B%2B%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28HAL_ADC_PollForConversion%28%26hadc1%2C%2010%29%20%3D%3D%20HAL_OK%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28void%29HAL_ADC_GetValue%28%26hadc1%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20HAL_ADC_Stop%28%26hadc1%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20uint32_t%20uv_mv%20%3D%20uv_raw%20%2A%203300U%20%2F%204095U%3B%0A%20%20%20%20o%20%2B%3D%20snprintf%28tlm%20%2B%20o%2C%20sizeof%28tlm%29%20-%20o%2C%20%22%20uv_mv%3D%25lu%22%2C%20%28unsigned%20long%29uv_mv%29%3B%0A%7D]&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfijuok5" class="has-line-data" data-line-start="85" data-line-end="86"&gt;The Readings&lt;/h2&gt;
&lt;p&gt;Just Like in the measurement of the temperature at the thermocouple, I do not have a calibrated UV source or measurement system. So I am going to just see if the multi-meter reading of signal output is same as what STM32 picks up.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260619_5F00_122852_2800_1_2900_.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:800px;" alt=" " src="https://community.element14.com/resized-image/__size/1600x720/__key/communityserver-discussions-components-files/453/Screenshot_5F00_2026_2D00_06_2D00_19_5F00_12_2D00_29_2D00_11.jpg" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfigf2i4" class="code-line has-line-data" data-line-start="154" data-line-end="155"&gt;Final Notes&lt;/h2&gt;
&lt;p class="has-line-data" data-line-start="156" data-line-end="157"&gt;One line of calibration code. That is the whole lesson here. &lt;code&gt;HAL_ADCEx_Calibration_Start&lt;/code&gt; on the STM32L4 is not optional.&lt;/p&gt;
&lt;p class="has-line-data" data-line-start="158" data-line-end="159"&gt;The UV sensor is live and reading sensibly. Next I want to run it through a full day outdoors and plot the curve rising from low values before sunrise, peaking around local solar noon, dropping back. If the curve shape looks right and correlates with what I would expect for the season and latitude, I will be satisfied that the sensor is working correctly.&lt;/p&gt;
&lt;p class="has-line-data" data-line-start="160" data-line-end="161"&gt;After that, the environmental sensors&amp;nbsp; BMP280 and the HX94C are next in the queue. The ADC scan group already has the HX94C analog channels wired up, it is just waiting for code similar to what I did here. The sensing stack is getting close to complete. I am yet to solder the BMP280. I am hesitant because deep down in my heart, It feels like pressure is not going to be an useful parameter.&lt;/p&gt;
&lt;pre&gt;&lt;code class="has-line-data language-c" data-line-start="82" data-line-end="84"&gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;</description></item><item><title>RE: SolarSense - Part 7 - Reading the Sky - UV Sensor Interface on STM32</title><link>https://community.element14.com/thread/236176?ContentTypeID=1</link><pubDate>Sat, 20 Jun 2026 19:15:53 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:05a630fa-bcfe-4a1a-af6b-95ba2aa458f2</guid><dc:creator>DAB</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236176?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57041/solarsense---part-7---reading-the-sky---uv-sensor-interface-on-stm32/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Nice project.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Making a CAN Network</title><link>https://community.element14.com/thread/57042?ContentTypeID=0</link><pubDate>Fri, 19 Jun 2026 12:47:28 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:8ffed8e4-2aba-4a7d-b09b-a62af89a2785</guid><dc:creator>taifur</dc:creator><slash:comments>4</slash:comments><comments>https://community.element14.com/thread/57042?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57042/making-a-can-network/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p class="isSelectedEnd"&gt;&lt;span&gt;Controller Area Network (CAN) is a robust, reliable, and real-time communication protocol widely used in industrial automation and embedded systems. CAN enables multiple&amp;nbsp;nodes to communicate over a single two-wire bus without requiring any central host. A CAN node can be any independent sensor or actuator unit. CAN networks are extensively used in process automation, industrial machinery, and robotic systems. It has very high noise immunity and requires only two wires for communication.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;My project involves a CAN network where there will be an ESP32-based CAN node and a CAN gateway based on Arduino UNO Q and&amp;nbsp;MAX33041E CAN transceiver shield from Analog Devices.&amp;nbsp;The ESP32-based node collects sensor data and transmits it over the CAN bus to&amp;nbsp;the central CAN gateway.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;The ESP32 has a built-in CAN bus-compatible controller as TWAI which stands for Two-Wire Automotive Interface, it doesn&amp;rsquo;t have a built-in CAN transceiver, so we must use an external one to connect to a CAN network. So, in my project, I am using the MCP2551&amp;nbsp;CAN transceiver&amp;nbsp;module to make a CAN node using an ESP32 microcontroller.&amp;nbsp;The MCP2551&amp;nbsp; transceiver converts the CAN controller&amp;#39;s digital TX/RX signals into the differential CANH/CANL bus signals.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;I connected the&amp;nbsp;VCC pin of the MCP2551 module to the VIN&amp;nbsp;of&amp;nbsp;the ESP32. Then, connect the GND pin to the ground. Next, connect the TX to GPIO5 and the RX to GPIO4 on the ESP32.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;&lt;img style="max-height:522px;max-width:696px;" alt=" " height="522" src="https://community.element14.com/resized-image/__size/1392x1044/__key/communityserver-discussions-components-files/453/IMG_5F00_3931.JPG" width="696" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;The next step is to connect the CAN Bus High and CAN Bus Low signals to the bus. I connected the CANH and CANL signals directly to the screw terminal on the&amp;nbsp;&lt;a id="e14-product-link-635ca" class="e14-embedded e14_shopping-cart-far e14-link" href="https://referral.element14.com/OrderCodeView?fsku=3807530&amp;amp;nsku=73AJ8377&amp;amp;COM=e14c-e14-on-the-line&amp;amp;CMP=e14c-e14-on-the-line&amp;amp;osetc=e14c-e14-on-the-line" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" data-at-label="PRODUCT_POPUP_OPEN" data-farnell="3807530" data-newark="73AJ8377" data-comoverride="e14-on-the-line" data-cmpoverride="e14-on-the-line" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" target="_blank" data-e14adj="t"&gt;MAX33041 Shield Evaluation Kit&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;&lt;img style="max-height:522px;max-width:696px;" alt=" " height="522" src="https://community.element14.com/resized-image/__size/1392x1044/__key/communityserver-discussions-components-files/453/IMG_5F00_3936.JPG" width="696" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;For programming the ESP32 module for CAN communication, I installed the following library:&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;&lt;img style="max-height:360px;max-width:640px;" alt=" " src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/mcp2515.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;For sending the test message on the CAN bus, I used the following test code.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:d50e57cc-bf25-450f-af81-d19139d8bb8d:type=text&amp;text=%23include%20%3CCAN.h%3E%0D%0A%0D%0A%23define%20TX_GPIO_NUM%20%20%205%0D%0A%23define%20RX_GPIO_NUM%20%20%204%0D%0A%0D%0Avoid%20setup%28%29%20%7B%0D%0A%20%20Serial.begin%20%28115200%29%3B%0D%0A%20%20while%20%28%21Serial%29%3B%0D%0A%20%20delay%20%281000%29%3B%0D%0A%0D%0A%20%20Serial.println%20%28%22CAN%20Sender%22%29%3B%0D%0A%0D%0A%20%20%2F%2F%20Set%20the%20pins%0D%0A%20%20CAN.setPins%20%28RX_GPIO_NUM%2C%20TX_GPIO_NUM%29%3B%0D%0A%0D%0A%20%20%2F%2F%20start%20the%20CAN%20bus%20at%20500%20kbps%0D%0A%20%20if%20%28%21CAN.begin%28500E3%29%29%20%7B%0D%0A%20%20%20%20Serial.println%28%22Starting%20CAN%20failed%21%22%29%3B%0D%0A%20%20%20%20while%20%281%29%3B%0D%0A%20%20%7D%0D%0A%7D%0D%0A%0D%0Avoid%20loop%28%29%20%7B%0D%0A%20%20%2F%2F%20send%20packet%3A%20id%20is%2011%20bits%2C%20packet%20can%20contain%20up%20to%208%20bytes%20of%20data%0D%0A%20%20Serial.print%28%22Sending%20packet%20...%20%22%29%3B%0D%0A%0D%0A%20%20CAN.beginPacket%280x12%29%3B%0D%0A%20%20CAN.write%28%27h%27%29%3B%0D%0A%20%20CAN.write%28%27e%27%29%3B%0D%0A%20%20CAN.write%28%27l%27%29%3B%0D%0A%20%20CAN.write%28%27l%27%29%3B%0D%0A%20%20CAN.write%28%27o%27%29%3B%0D%0A%20%20CAN.endPacket%28%29%3B%0D%0A%0D%0A%20%20Serial.println%28%22done%22%29%3B%0D%0A%0D%0A%20%20delay%281000%29%3B%0D%0A%0D%0A%20%20%2F%2F%20send%20extended%20packet%3A%20id%20is%2029%20bits%2C%20packet%20can%20contain%20up%20to%208%20bytes%20of%20data%0D%0A%20%20Serial.print%28%22Sending%20extended%20packet%20...%20%22%29%3B%0D%0A%0D%0A%20%20CAN.beginExtendedPacket%280xabcdef%29%3B%0D%0A%20%20CAN.write%28%27w%27%29%3B%0D%0A%20%20CAN.write%28%27o%27%29%3B%0D%0A%20%20CAN.write%28%27r%27%29%3B%0D%0A%20%20CAN.write%28%27l%27%29%3B%0D%0A%20%20CAN.write%28%27d%27%29%3B%0D%0A%20%20CAN.endPacket%28%29%3B%0D%0A%0D%0A%20%20Serial.println%28%22done%22%29%3B%0D%0A%0D%0A%20%20delay%281000%29%3B%0D%0A%7D]&lt;/span&gt;&lt;/p&gt;</description></item><item><title>RE: Making a CAN Network</title><link>https://community.element14.com/thread/236175?ContentTypeID=1</link><pubDate>Sat, 20 Jun 2026 19:15:05 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:3464b6b9-0924-4bc9-9741-52f274ee862d</guid><dc:creator>DAB</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236175?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57042/making-a-can-network/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Very nice.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Friendly Reminder - On The Line Build Period Ends This Sunday</title><link>https://community.element14.com/thread/236172?ContentTypeID=1</link><pubDate>Sat, 20 Jun 2026 08:22:43 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0ca338b5-2538-4347-b2a6-397b69788ef7</guid><dc:creator>arvindsa</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236172?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57043/friendly-reminder---on-the-line-build-period-ends-this-sunday/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Aye Aye, All engines, Ahead Full.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Friendly Reminder - On The Line Build Period Ends This Sunday</title><link>https://community.element14.com/thread/57043?ContentTypeID=0</link><pubDate>Fri, 19 Jun 2026 15:29:02 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:91548fea-a207-473b-b4ee-30157bc16805</guid><dc:creator>JoRatcliffe</dc:creator><slash:comments>2</slash:comments><comments>https://community.element14.com/thread/57043?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57043/friendly-reminder---on-the-line-build-period-ends-this-sunday/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi all, just a quick reminder that the deadline for &lt;a href="https://community.element14.com/challenges-projects/design-challenges/on-the-line/b/projects" data-e14adj="t"&gt;final project write-ups&lt;/a&gt; is midnight UK time this Sunday (21st June) so you have just a couple more days to go.&lt;/p&gt;
&lt;p&gt;Have a good weekend and looking forward to seeing everyone&amp;#39;s final updates before the build period of this design challenge ends!&lt;/p&gt;</description></item><item><title>RE: Friendly Reminder - On The Line Build Period Ends This Sunday</title><link>https://community.element14.com/thread/236171?ContentTypeID=1</link><pubDate>Sat, 20 Jun 2026 08:18:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:7393661b-c209-460b-8028-9a71678f9b5f</guid><dc:creator>taifur</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/236171?ContentTypeID=1</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57043/friendly-reminder---on-the-line-build-period-ends-this-sunday/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Is it possible to extend the deadline for one week?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>5 RPC power conditioning</title><link>https://community.element14.com/thread/57044?ContentTypeID=0</link><pubDate>Sat, 20 Jun 2026 01:40:24 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c6ef44f6-879b-44a8-b084-2d98c61fd08d</guid><dc:creator>pandoramc</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/57044?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/on-the-line/f/forum/57044/5-rpc-power-conditioning/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h1 id="mcetoc_1jrha9h1m1"&gt;Introduction&lt;/h1&gt;
&lt;p style="text-align:left;"&gt;The cooling system is not only temperature dependable, but the system also requires a device that allows temperature reduction in fluids mainly. This device is known as compressor, it takes a refrigerant gas in a closed loop and circulates it throughout a pneumatic circuit. Additional components are necessary in the circuit because compression and decompression can increase or decrease the temperature of the interchange chamber. The challenge here now is how to use a low-level digital signal to activate a high-power AC load. The solution is a solid-state relay (SSR).&lt;/p&gt;
&lt;table style="margin-left:auto;margin-right:auto;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;{gallery}Design Platform&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img style="max-height:360px;max-width:640px;" alt="Digital System" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260514_5F00_225033.jpg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img style="max-height:360px;max-width:640px;" alt="Compressor" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/cooling.jpeg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;Figure 1. Design platform&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jrha9ckj0"&gt;Methodology&lt;/h2&gt;
&lt;p&gt;Why use an SSR compared with an electromechanical relay (EMR)?&lt;/p&gt;
&lt;p style="text-align:left;"&gt;The EMR requires a specific power supply such as 5VCD or 12VCD. In the Arduino UNO Q system, the digital terminals are controlled by the microcontroller system. According to the datasheet, some I/O pins are 5VCD tolerant, but they only generate up to 4VCD, which voltage is not sufficient to activate the relay. As you may wonder, is there any option to activate the EMC with lower voltage? There are EMC in the market that activates the coil with 3VCD with a 25Ω internal resistance, consequently, it is possible to use this kind of relays. On the other hand, the I/O has a limit of 20 mA maximum of current to be sourced; the 3VCD@25 Ω consumes 120 mA, this means that the I/O pin of the microcontroller will be damaged operating in these conditions. Additionally, the AC loads could create an electric arc when the load is disconnected from the mechanical switch. This arc could discharge in the control signal and damage all the system, requiring isolation or anti arc PCB for high-current loads.&lt;/p&gt;
&lt;table style="margin-left:auto;margin-right:auto;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;{gallery}I/O features&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img style="max-height:360px;max-width:640px;" alt="Voltage Features" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/Voltage.png" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img style="max-height:360px;max-width:640px;" alt="Current Features" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/Current.png" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;Figure 2. Microcontroller I/O characteristics&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The assembled compressor has &amp;frac14; HP, which it represents a load of 186.5 W for a pure resistive load. But the compressor has additional features like inductive and capacitive behavior. This means that a compressor requires a better switch capacity according to the power factor (PF). I considered a PF=0.5, this means that the current will be about 3A@120VAC. An EMC of 12VCD can handle a load of 10A@125VAC but it requires an additional power supply in the system. In order to minimize the possible arc generation derived of switching and avoiding additional components in the system for power conditioning, an SSR is a better option. The SSR for AC loads has semiconductor elements to reach high commutation frequency and these elements reduce the arc generation risk for the power required in this system. An additional feature is the isolation between control and power stages; it allows easy maintenance for the systems and ensures security.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" alt="SSR schematic" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/SSR.png" /&gt;&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;Figure 3. SSR internals (FOTEK SSR Series datasheet)&lt;/em&gt;&lt;/p&gt;
&lt;p style="text-align:left;"&gt;I implemented the example of blink LED using the RPC interface changing the digital pin 12. This perspective was used with the SSR since the example creates a web user interface by WebUI Arduino brick to turn on/turn off the SSR with a 3V3 digital control signal.&lt;/p&gt;
&lt;table style="margin-left:auto;margin-right:auto;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;{gallery}SSR test&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img style="max-height:360px;max-width:640px;" alt="SSR turned off" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260618_5F00_175623.jpg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;img style="max-height:360px;max-width:640px;" alt="SSR turned on" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260618_5F00_175645.jpg" /&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;img style="max-height:360px;max-width:640px;" alt="SSR final assembly" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260618_5F00_190034.jpg" /&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;Figure 4. SSR test and heat sink assembly&lt;/em&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1jrhbmn2n0"&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:a081416a-8c4f-435b-9320-07e281572e69:type=c_cpp&amp;text=%23include%20%3CArduino_RouterBridge.h%3E%0A%0Avoid%20setup%28%29%20%7B%0A%20%20%20%20pinMode%28D12%2C%20OUTPUT%29%3B%0A%20%20%20%20%2F%2F%20Start%20with%20the%20LED%20OFF%20%28HIGH%20state%20of%20the%20PIN%29%0A%20%20%20%20digitalWrite%28D12%2C%20HIGH%29%3B%0A%0A%20%20%20%20Bridge.begin%28%29%3B%0A%20%20%20%20Bridge.provide%28%22set_led_state%22%2C%20set_led_state%29%3B%0A%7D%0A%0Avoid%20loop%28%29%20%7B%7D%0A%0Avoid%20set_led_state%28bool%20state%29%20%7B%0A%20%20%20%20%2F%2F%20LOW%20state%20means%20LED%20is%20ON%0A%20%20%20%20digitalWrite%28D12%2C%20state%20%3F%20LOW%20%3A%20HIGH%29%3B%0A%7D]&lt;/h1&gt;
&lt;h1 id="mcetoc_1jrhamueg2"&gt;The future&lt;/h1&gt;
&lt;p&gt;Once the construction blocks are ready, it is time to implement the monitoring system and test the data sharing and control-aided cooling system. At this stage, it is possible to view the data on the UT325F thermometer and capture the data in the Arduino UNO Q for storage. The monitoring system must be implemented in order to view the data using the same web interface system. On the other hand, I had problems with serial port access in the Arduino App Lab, but there are other options such as Inter Process Communication (IPC) to create a data sharing service in the network.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:360px;max-width:640px;" alt="Assembled system" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/453/20260618_5F00_081618.jpg" /&gt;&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;Figure 5. Isolated monitoring cooling system&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>