<?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/in-reach-ultrasonic-sensor-sensing-challenge/f/forum</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><lastBuildDate>Wed, 19 Nov 2025 11:12:30 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum" /><item><title>Couldn't continue my project due to health issues</title><link>https://community.element14.com/thread/56454?ContentTypeID=0</link><pubDate>Wed, 19 Nov 2025 11:12:30 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:d6d09dde-4187-4542-938d-36ef54f898cb</guid><dc:creator>sunnyiut</dc:creator><slash:comments>4</slash:comments><comments>https://community.element14.com/thread/56454?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56454/couldn-t-continue-my-project-due-to-health-issues/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello everyone,&lt;/p&gt;
&lt;p&gt;I am sorry to inform you all that I have been suffering from sciatica pain for the last one month. It was due to a disc bulge at lower back. I was in complete bed rest for three weeks, after that I started physiotherapy in limited manner. Unfortunately I developed dropped foot condition which is a neurological deficit and surgery is the only option. I was supposed to have the surgery after 21st November. However, observing my improvement (a very little though) doctor suggested to wait for a couple of weeks to decide whether I need to go for surgery or not. Therefore, I was totally out of the design challenge.&lt;/p&gt;
&lt;p&gt;I am sorry. However, I wish you would consider that and I would love to carry on my project again once I get better. Though I couldn&amp;#39;t follow others&amp;#39; projects, I would like to congratulate everyone for participating here. Please pray for me.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Setting up the KR260: Ubuntu 22.04, Pynq and Vitis AI Runtime v3.5</title><link>https://community.element14.com/thread/56445?ContentTypeID=0</link><pubDate>Tue, 18 Nov 2025 15:46:24 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:dad62c33-f639-4813-9e3c-cc82d0864470</guid><dc:creator>veluv01</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/56445?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56445/setting-up-the-kr260-ubuntu-22-04-pynq-and-vitis-ai-runtime-v3-5/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251115_5F00_185132.jpg"  /&gt;&lt;/p&gt;
&lt;p&gt;KR260 was chosen for this project due to its FPGA-accelerated AI processing and built-in ROS2 support. This allows it to handle ML inference, camera feeds, and ultrasonic sensor data in real time. Its hardware acceleration and flexible I/O make it perfect for applications that use multiple sensors and need quick responses.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id="mcetoc_1ja94puaq7"&gt;Ubuntu 22.04 on KR260&lt;/h3&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Screenshot-from-2025_2D00_11_2D00_14-15_2D00_58_2D00_01.png"  /&gt;&lt;/p&gt;
&lt;p&gt;For this project I am using the Ubuntu 22.04 instead of the 24.04 version which is available as the latest version as I faced some issues due to the Python version mismatch during the startup when I set the default interpreter to python3.10 as the VART 3.5 requires it.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763409816876v11.png"  /&gt;&lt;/p&gt;
&lt;p&gt;For the setup I referred the guide &amp;quot;&lt;a href="https://xilinx.github.io/kria-apps-docs/kr260/linux_boot/ubuntu_24_04/build/html/docs/intro.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Booting Kria Starter Kit Linux on KR260&lt;/a&gt;&amp;quot;, which has all the information regarding the basic setup of the Ubuntu 22.04 for KR260.It&amp;#39;s also better to choose an SD with a storage capacity of 64 GB max for flashing the Ubuntu 22.04.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Screenshot-from-2025_2D00_11_2D00_14-15_2D00_57_2D00_54.png"  /&gt;&lt;/p&gt;
&lt;p&gt;I used the Raspberry Pi Imager to flash the Ubuntu 22.04 Image onto the SD card.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763409438561v6.png"  /&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1ja94t88b8"&gt;Initialization&lt;/h3&gt;
&lt;p&gt;Before deploying AI workloads or running PYNQ overlays on the KR260, the board must be configured using AMD&amp;rsquo;s official initialization tools.This process prepares the operating system, sets up FPGA-related services, and installs board support packages to ensure that the runtime and PYNQ framework operate correctly.&lt;/p&gt;
&lt;p&gt;The first step is to install the xlnx-config tool, which AMD provides through the Snap store. This utility automates KRIA-specific system configuration tasks, such as enabling FPGA management services, installing boot-time utilities, and preparing system directories used by XRT and runtime components. Installing the tool with the --classic option allows it to access the system-level paths needed for hardware configuration. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="powershell"&gt;sudo snap install xlnx-config --classic --channel=2.x&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763410069314v13.png"  /&gt;&lt;/p&gt;
&lt;p&gt;After installation, the board is&amp;nbsp;initialized using the sysinit routine.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="powershell"&gt;xlnx-config.sysinit&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763410083342v14.png"  /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id="mcetoc_1ja95g5rc9"&gt;Setting Up PYNQ for Kria&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;    	    	        &lt;div style="padding: 1em; margin: 1em 0; color: #444; background-color: #fff; border: solid 1px #ddd;"&gt;
	    	        PYNQ(Python Productivity for Zynq) is an open-source framework from AMD/Xilinx that makes it easier to work with Xilinx&amp;#39;s reconfigurable hardware, like the FPGA fabric on the Kria KR260. 
	    &lt;/div&gt;
	&lt;/p&gt;
&lt;p&gt;To enable a Python-based workflow on the KR260, AMD provides the Kria-PYNQ framework. This repository includes board overlays, configuration scripts, Python drivers, and prevalidated examples.Cloning the repository ensures that the latest PYNQ board files and acceleration libraries are available locally for the setup.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;pre class="ui-code" data-mode="powershell"&gt;git clone https://github.com/Xilinx/Kria-PYNQ.git&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763409749658v10.png"  /&gt;&lt;/p&gt;
&lt;p&gt;The final step is to run the installation script, specifying the target board. The install.sh script configures Jupyter, installs required Python packages, deploys PYNQ overlays, and sets up runtime services. Using the &amp;quot;-b KR260&amp;quot; flag ensures that the installation process applies the correct board-specific settings, including kernel modules and device-tree overlays.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="powershell"&gt;sudo bash install.sh -b KR260&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763409997247v12.png"  /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id="mcetoc_1ja95m0qva"&gt;Setting up the&amp;nbsp;Vitis AI 3.5 Runtime&lt;/h3&gt;
&lt;p&gt;Deploying AI workloads on the AMD/Xilinx KR260 requires the Vitis AI Runtime (VART). This runtime serves as the main execution engine for running quantized deep-learning models on the KR260&amp;rsquo;s DPU accelerator. The VART stack includes libraries for tensor processing, model graph handling, logging, and device abstraction. All of these need to be installed before running any inference workloads.&lt;/p&gt;
&lt;p&gt;The Vitis AI runtime for KR260 is offered as a compressed ZIP file from AMD&amp;rsquo;s public download server. This package contains all the necessary libraries, device-specific binaries, and support tools.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="powershell"&gt;wget -O vai3.5_kr260.zip &amp;quot;https://www.xilinx.com/bin/public/openDownload?filename=vai3.5_kr260.zip&amp;quot;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Once downloaded, the compressed archive must be extracted.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="powershell"&gt;unzip vai3.5_kr260.zip&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763409530752v7.png"  /&gt;&lt;/p&gt;
&lt;p&gt;The runtime_deb directory holds Vitis AI&amp;#39;s core runtime .deb files. These include important components like libunilog, libxir, libtarget-factory, libvart, and libvitis-ai-library. Together, they make up the VART execution layer. AMD provides a script called setup.sh in this directory to install these packages in the right order and ensure that earlier versions are upgraded properly.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="powershell"&gt;pushd vai3.5_kr260/target/runtime_deb/  
bash setup.sh  &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;This script automatically installs all the needed dependencies and configures the system for Vitis AI inference.&lt;/p&gt;
&lt;p&gt;The KR260 Ubuntu image might lack certain low-level shared libraries needed by the Vitis AI runtime. AMD provides these in a compressed file named lack_lib.tar.gz. Extracting and copying them into /usr/lib fixes any missing dependency problems that could cause VART applications to fail at runtime due to unresolved symbols&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="powershell"&gt;cd ..  
tar -xzf lack_lib.tar.gz  
sudo cp -r lack_lib/* /usr/lib&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763409592107v8.png"  /&gt;&lt;/p&gt;
&lt;p&gt;After installing the runtime and any missing libraries, it&amp;rsquo;s helpful to return to the original working directory using the popd command. This step navigates back to the main vai3.5_kr260 folder, preparing for the installation of utilities like xbutil2.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;popd&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The KR260 needs a functioning xbutil2 utility for system inspection, FPGA health checks, and DPU diagnostics. This tool checks if the accelerator is properly initialized and if the Vitis AI runtime environment is ready for use. The utility is located in the xbutil_tool directory and must be copied to the correct system binary location (/usr/bin/unwrapped/) for the Ubuntu to recognize it.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="powershell"&gt;sudo cp ./xbutil_tool/xbutil2 /usr/bin/unwrapped/&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763410157359v15.png"  /&gt;&lt;/p&gt;
&lt;p&gt;After installation, users can verify system health using&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="powershell"&gt;sudo xbutil2 examine&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Final Hardware Setup</title><link>https://community.element14.com/thread/56444?ContentTypeID=0</link><pubDate>Tue, 18 Nov 2025 15:42:02 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:1d1b1fb0-a8e0-437f-ac93-ffde3f386be1</guid><dc:creator>veluv01</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/56444?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56444/final-hardware-setup/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;In this post let&amp;#39;s explore the final hardware setup of the project.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id="mcetoc_1ja9t8fvv10"&gt;Required Hardware&lt;/h3&gt;
&lt;table style="margin-left:auto;margin-right:auto;" height="117"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TDK USSM Demo Kit&lt;/td&gt;
&lt;td&gt;Ultrasonic sensing module for precise distance measurement and object proximity detection.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KR260 Robotics Starter Kit&lt;/td&gt;
&lt;td&gt;Primary computing platform featuring AMD Xilinx Kria K26 SoM for real time ML inference, sensor data processing, and ROS2 middleware integration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wireless USB Adapter&lt;/td&gt;
&lt;td&gt;Enables WiFi connectivity for remote monitoring, data transmission, and network based control.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USB Camera Module&lt;/td&gt;
&lt;td&gt;Captures real-time video for vision processing, object detection, and environmental perception.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mounting Spacers&lt;/td&gt;
&lt;td&gt;Hardware fasteners for secure component installation and proper PCB elevation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adjustable Tripod Stand&lt;/td&gt;
&lt;td&gt;Provides stable support with adjustable height and positioning for optimal sensor placement.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acrylic Mounting Sheets&lt;/td&gt;
&lt;td&gt;Rigid, transparent platform for organized hardware assembly and improved cable management.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 id="mcetoc_1ja9t1u5tv"&gt;Block Diagram&lt;/h3&gt;
&lt;p&gt;Here&amp;#39;s the block diagram showing how the hardware is connected to the KR260&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="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/444/pastedimage1763416526639v21.png"  /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id="mcetoc_1ja9tpae311"&gt;Setting up...&lt;/h3&gt;
&lt;p&gt;The setup starts with preparing the acrylic sheets, cutting them to the required size for the tripod mounting and drilling the mounting holes to mount the hardware.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:196px;max-width:349px;" height="196" src="https://community.element14.com/resized-image/__size/698x392/__key/communityserver-discussions-components-files/444/20251116_5F00_100742.jpg" width="349"  /&gt;&lt;/p&gt;
&lt;p&gt;The main support structure has a two-layer design with upper and lower platforms. An additional medium-sized sheet is used for mounting the camera and TDK USSM modules. A smaller sheet is specifically reserved for the TDK Demo Kit.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251116_5F00_120543_2800_1_2900_.jpg"  /&gt;&lt;/p&gt;
&lt;p&gt;Assembly begins with securely attaching the bottom acrylic layer to the tripod stand. This creates a stable foundation for the entire system.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763418034784v26.png"  /&gt;&lt;/p&gt;
&lt;p&gt;Once the base is properly positioned and leveled, the KR260 Robotics Starter Kit is installed on this bottom layer with the help of plastic spacers. These spacers serve two purposes: they provide electrical isolation for the board and ensure there is enough space for ventilation, which helps with thermal management.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251117_5F00_104412_2800_1_2900_.jpg"  /&gt;&lt;/p&gt;
&lt;p&gt;With the controller in place, the next step is to create the upper structure. Metal spacers establish standoffs between the bottom and top layers, ensuring both strong structural support and effective heat dissipation. The TDK Demo Kit is securely positioned on this top acrylic platform.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763418283973v28.png"  /&gt;&lt;/p&gt;
&lt;p&gt;The final phase of setup focuses on installing the sensor module. The USB camera is attached to its designated mounting sheet using a magnetic mount that allows for quick adjustments and repositioning. The TDK USSM modules are installed next to the camera on the same sheet.This complete camera + USSM sensor unit is then secured to the main structure using metal angle brackets. These brackets allow for tilting and adjusting the sensor orientation to achieve the best field of view and detection range.&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the final setup after assembly....&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763417973475v25.png"  /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Early Flood Warning and Monitoring System #5 Testing the Flood Warning System by prototype assembly</title><link>https://community.element14.com/thread/56433?ContentTypeID=0</link><pubDate>Sun, 16 Nov 2025 19:11:31 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:be033a4b-bf3b-4ef8-a7f0-f21705db2663</guid><dc:creator>sandeepdwivedi17</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/56433?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56433/early-flood-warning-and-monitoring-system-5-testing-the-flood-warning-system-by-prototype-assembly/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;Testing the Flood Warning System by prototype assembly&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So, this is it. The moment of truth.&lt;br /&gt; After weeks of code, cables, and caffeine, it was time to see if my little flood warning system could actually &lt;em&gt;handle the real world.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Spoiler: it didn&amp;rsquo;t catch fire. So, that&amp;rsquo;s already a win.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/IMG_5F00_20251116_5F00_081254814.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/IMG_5F00_20251116_5F00_082234728_5F00_HDR.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setting the Scene&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It was a Sunny morning &amp;mdash; the perfect &amp;ldquo;let&amp;rsquo;s see what the water does&amp;rdquo; day. as this is winter time so not much changesin water level of river so decide to check it in a bucket filled with water. hwere i can rapidaly increase or decrease water level.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;it is working good.&lt;br /&gt;Google sheet Data LLog&lt;br /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763319985765v2.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;email alert screen shot&lt;br /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/WhatsApp-Image-2025_2D00_11_2D00_17-at-12.35.12-AM.jpeg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/WhatsApp-Image-2025_2D00_11_2D00_17-at-12.35.04-AM.jpeg" /&gt;.&lt;/p&gt;
&lt;p&gt;For Now System is working good.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-discussions-components-files/444/WhatsApp-Video-2025_2D00_11_2D00_17-at-12.40.31-AM.mp4"&gt;community.element14.com/.../WhatsApp-Video-2025_2D00_11_2D00_17-at-12.40.31-AM.mp4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Early Flood Warning and Monitoring System #4 - Wiring the Brains: Hooking Up the TDK Ultrasonic Sensors to the MKR 1010</title><link>https://community.element14.com/thread/56432?ContentTypeID=0</link><pubDate>Sun, 16 Nov 2025 18:47:41 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9044206f-6089-492d-bd7c-a05c164ac035</guid><dc:creator>sandeepdwivedi17</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/56432?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56432/early-flood-warning-and-monitoring-system-4---wiring-the-brains-hooking-up-the-tdk-ultrasonic-sensors-to-the-mkr-1010/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;So the fun part begins &amp;mdash; &lt;strong&gt;wires, boards, and the faint smell of solder&lt;/strong&gt;.&lt;br /&gt; This is where the project goes from &amp;ldquo;cool idea&amp;rdquo; to &amp;ldquo;actual blinking lights.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Here in this blog we will discuss the wiring of all components and the Code inside the Arduino Board.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Circuit Arrangement:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;img style="max-height:360px;max-width:640px;" alt="Final Circuit" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Final-Circuit.png" /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Required Hardware:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TDK USSM Distance measurement sendor&lt;/strong&gt; &amp;mdash; the stars of the show.They send ultrasonic pings and measure how long it takes for echoes to come back.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arduino MKR WiFi 1010&lt;/strong&gt; &amp;mdash; the brain that reads data, processes it, and sends it to the online google sheet for collection anf furture analysis as well as initiate warning email when danger mark is near.&lt;/li&gt;
&lt;li&gt;BS170 MOSFET , 15 k Ohm Resistance , used for logic level converter to safely operate our arduino&lt;/li&gt;
&lt;li&gt;LM2596S DC-DC Buck Converter Power Supply to poweup the sensor with 12 v&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A bunch of colorful jumper wires&lt;/strong&gt; &amp;mdash; because what&amp;rsquo;s a DIY project without a rainbow of cables?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763317552086v1.jpeg"  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763317569883v2.jpeg"  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763317578824v3.jpeg"  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Open Arduino IDE and Upload following code into it&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;// TDK-MKR-Logger - MKR WiFi 1010 sketch (simulation mode) - API key + server-config reflect
// Paste into Arduino IDE and upload to MKR WiFi 1010
// Requires: WiFiNINA, ArduinoJson (v6.x)

// ------------------------ user config (replace placeholders) ------------------------


// set this to the API_SECRET / key you put in ConfigDetails (column Value for key API_SECRET)
const char* API_KEY = &amp;quot;jlkajlkj&amp;quot;; // &amp;lt;--- replace to match your sheet&amp;#39;s API_SECRET

const char* SENSOR_NAME = &amp;quot;MKR_UltraSim_01&amp;quot;; // change if needed
const unsigned long POST_TIMEOUT_MS = 30UL * 1000UL;     // wait up to 30s for server response
// ------------------------------------------------------------------------------------

#include &amp;lt;WiFiNINA.h&amp;gt;
#include &amp;lt;ArduinoJson.h&amp;gt;
#include &amp;quot;arduino_secrets.h&amp;quot; // must contain SECRET_SSID and SECRET_PASS
#include &amp;lt;TDK_USSM.h&amp;gt;

//-- Instanciate Single Sensor
TDK_USSM TdkUssm(2); //Initialize Sensor Pins (IoPin)

unsigned long POST_INTERVAL_MS = 10000; // default if server doesn&amp;#39;t override
float THRESHOLD_VALUE = 15.0;           // default if server doesn&amp;#39;t override

unsigned long lastPost = 0;

void setup() {
  Serial.begin(115200);
  while (!Serial &amp;amp;&amp;amp; millis() &amp;lt; 4000) ; // wait for Serial (short)
  Serial.println();
  Serial.println(&amp;quot;TDK-MKR-Logger (with API key) starting...&amp;quot;);

  randomSeed(analogRead(A0)); // seed random for simulation

  connectWiFi();

  // Optional: if you set GAS_CONFIG_URL and want to fetch config on boot, uncomment:
  // if (strlen(GAS_CONFIG_URL) &amp;gt; 0) tryFetchConfig();

  lastPost = millis() - 1000;
}

void loop() {
  unsigned long now = millis();

  // Only try posting on interval
  if (now - lastPost &amp;gt;= POST_INTERVAL_MS) {
    lastPost = now;

    int value = readDistanceSim();           // you changed to int
    bool alertNeeded = (value &amp;lt; THRESHOLD_VALUE);

    // Build JSON payload
    StaticJsonDocument&amp;lt;256&amp;gt; doc;
    doc[&amp;quot;sensor_name&amp;quot;] = SENSOR_NAME;
    doc[&amp;quot;value&amp;quot;] = value;
    doc[&amp;quot;alert_requested&amp;quot;] = alertNeeded;
    doc[&amp;quot;device&amp;quot;] = &amp;quot;MKR1010&amp;quot;;
    doc[&amp;quot;uptime_ms&amp;quot;] = now;
    doc[&amp;quot;api_key&amp;quot;] = API_KEY;

    String payload;
    serializeJson(doc, payload);

    Serial.print(&amp;quot;Posting payload: &amp;quot;);
    Serial.println(payload);

    String serverResp;
    const int MAX_POST_ATTEMPTS = 3;
    bool postOk = false;
    int attempt = 0;
    unsigned long backoff = 500; // ms - initial backoff

    while (attempt &amp;lt; MAX_POST_ATTEMPTS &amp;amp;&amp;amp; !postOk) {
      attempt++;
      Serial.print(&amp;quot;POST attempt &amp;quot;);
      Serial.println(attempt);
      if (httpPostJson(FLOOD_POST_URL, payload, serverResp)) {
        postOk = true;
        Serial.println(&amp;quot;POST succeeded.&amp;quot;);
        Serial.print(&amp;quot;Server raw response: &amp;quot;);
        Serial.println(serverResp);
        // parse &amp;amp; apply server config (same as before)...
        StaticJsonDocument&amp;lt;512&amp;gt; respDoc;
        DeserializationError err = deserializeJson(respDoc, serverResp);
        if (!err) {
          if (respDoc.containsKey(&amp;quot;config&amp;quot;)) {
            JsonObject cfg = respDoc[&amp;quot;config&amp;quot;].as&amp;lt;JsonObject&amp;gt;();
            if (cfg.containsKey(&amp;quot;THRESHOLD_VALUE&amp;quot;)) {
              float newTh = cfg[&amp;quot;THRESHOLD_VALUE&amp;quot;].as&amp;lt;float&amp;gt;();
              Serial.print(&amp;quot;Server requested THRESHOLD_VALUE = &amp;quot;);
              Serial.println(newTh);
              THRESHOLD_VALUE = newTh;
            }
            if (cfg.containsKey(&amp;quot;POST_INTERVAL_MS&amp;quot;)) {
              unsigned long newInterval = cfg[&amp;quot;POST_INTERVAL_MS&amp;quot;].as&amp;lt;unsigned long&amp;gt;();
              Serial.print(&amp;quot;Server requested POST_INTERVAL_MS = &amp;quot;);
              Serial.println(newInterval);
              POST_INTERVAL_MS = newInterval;
            }
          }
          if (respDoc.containsKey(&amp;quot;alert&amp;quot;)) {
            const char* alertText = respDoc[&amp;quot;alert&amp;quot;];
            Serial.print(&amp;quot;Server alert: &amp;quot;);
            Serial.println(alertText);
          }
        } else {
          Serial.print(&amp;quot;Failed to parse server JSON: &amp;quot;);
          Serial.println(err.c_str());
        }
        break;
      } else {
        Serial.println(&amp;quot;POST failed on attempt.&amp;quot;);
        // small delay with backoff before retrying
        delay(backoff);
        backoff = min(backoff * 2, 5000UL); // cap at 5s
      }
    } // end attempts

    if (!postOk) {
      Serial.println(&amp;quot;All POST attempts failed.&amp;quot;);
      // Only attempt WiFi reconnect if link is actually not connected
      if (WiFi.status() != WL_CONNECTED) {
        Serial.print(&amp;quot;WiFi status != CONNECTED (&amp;quot;);
        Serial.print(WiFi.status());
        Serial.println(&amp;quot;) - attempting reconnect.&amp;quot;);
        connectWiFi();
      } else {
        Serial.println(&amp;quot;WiFi appears connected; not reconnecting. Will try again on next interval.&amp;quot;);
        // Optionally: you could force a reconnect if you see many consecutive POST failures
      }
    }
  }

  // If WiFi truly drops outside POST, try reconnecting (small check once every 10s)
  static unsigned long lastWifiCheck = 0;
  if (millis() - lastWifiCheck &amp;gt; 10000) {
    lastWifiCheck = millis();
    if (WiFi.status() != WL_CONNECTED) {
      Serial.print(&amp;quot;WiFi status check: not connected (&amp;quot;);
      Serial.print(WiFi.status());
      Serial.println(&amp;quot;). Reconnecting.&amp;quot;);
      connectWiFi();
    }
  }

  delay(50);
}


void printConfig() {
  Serial.println(F(&amp;quot;\n--- Current Configuration ---&amp;quot;));
  Serial.print(F(&amp;quot;THRESHOLD_VALUE: &amp;quot;));
  Serial.println(THRESHOLD_VALUE);
  Serial.print(F(&amp;quot;POST_INTERVAL_MS: &amp;quot;));
  Serial.println(POST_INTERVAL_MS);
  Serial.println(F(&amp;quot;------------------------------\n&amp;quot;));
}

/* -------------------- helpers -------------------- */

int readDistanceSim() {
  TdkUssm.GetDistanceCm();  // Prints Distance in cm.
}


void connectWiFi() {
  Serial.print(&amp;quot;Connecting to WiFi SSID: &amp;quot;);
  Serial.println(SECRET_SSID);

  WiFi.end();
  delay(200);

  int status = WiFi.begin(SECRET_SSID, SECRET_PASS);
  unsigned long start = millis();
  while (WiFi.status() != WL_CONNECTED &amp;amp;&amp;amp; (millis() - start) &amp;lt; POST_TIMEOUT_MS) {
    delay(500);
    Serial.print(&amp;quot;.&amp;quot;);
  }
  if (WiFi.status() == WL_CONNECTED) {
    Serial.println();
    Serial.print(&amp;quot;WiFi connected. IP: &amp;quot;);
    Serial.println(WiFi.localIP());
  } else {
    Serial.println();
    Serial.print(&amp;quot;WiFi connect failed, status=&amp;quot;);
    Serial.println(WiFi.status());
  }
}

// Simple HTTPS POST with JSON payload; returns server response body
bool httpPostJson(const String &amp;amp;url, const String &amp;amp;jsonPayload, String &amp;amp;responseBody) {
  responseBody = &amp;quot;&amp;quot;;
  if (url.length() == 0) {
    Serial.println(&amp;quot;GAS_POST_URL not set!&amp;quot;);
    return false;
  }

  String host = hostFromUrl(url);
  String path = pathFromUrl(url);
  if (host.length() == 0 || path.length() == 0) {
    Serial.println(&amp;quot;Invalid GAS_POST_URL.&amp;quot;);
    return false;
  }

  WiFiSSLClient client;
  Serial.print(&amp;quot;HTTPS POST to host: &amp;quot;);
  Serial.print(host);
  Serial.print(&amp;quot; path: &amp;quot;);
  Serial.println(path);

  if (!client.connect(host.c_str(), 443)) {
    Serial.println(&amp;quot;Connection failed (POST).&amp;quot;);
    return false;
  }

  // Build request
  client.print(String(&amp;quot;POST &amp;quot;) + path + &amp;quot; HTTP/1.1\r\n&amp;quot;);
  client.print(String(&amp;quot;Host: &amp;quot;) + host + &amp;quot;\r\n&amp;quot;);
  client.print(&amp;quot;Connection: close\r\n&amp;quot;);
  client.print(&amp;quot;Content-Type: application/json\r\n&amp;quot;);
  client.print(String(&amp;quot;Content-Length: &amp;quot;) + jsonPayload.length() + &amp;quot;\r\n&amp;quot;);
  client.print(&amp;quot;User-Agent: MKR1010\r\n&amp;quot;);
  client.print(&amp;quot;\r\n&amp;quot;);
  client.print(jsonPayload);

  unsigned long timeout = millis();
  while (client.connected() &amp;amp;&amp;amp; !client.available()) {
    if (millis() - timeout &amp;gt; 8000) {
      Serial.println(&amp;quot;Timeout waiting for POST response.&amp;quot;);
      client.stop();
      return false;
    }
  }

  // read status line
  String statusLine = client.readStringUntil(&amp;#39;\n&amp;#39;);
  statusLine.trim();
  Serial.print(&amp;quot;Status: &amp;quot;);
  Serial.println(statusLine);

  // skip headers
  while (client.available()) {
    String line = client.readStringUntil(&amp;#39;\n&amp;#39;);
    line.trim();
    if (line.length() == 0) break;
  }

  // read body
  String body = &amp;quot;&amp;quot;;
  unsigned long start = millis();
  while (client.available()) {
    char c = client.read();
    body += c;
    if (millis() - start &amp;gt; 8000) break;
  }

  client.stop();
  responseBody = body;
  return true;
}

// URL helpers
String hostFromUrl(const String &amp;amp;url) {
  int idx = url.indexOf(&amp;quot;://&amp;quot;);
  int start = (idx &amp;gt;= 0) ? idx + 3 : 0;
  int slash = url.indexOf(&amp;#39;/&amp;#39;, start);
  if (slash &amp;lt; 0) return url.substring(start);
  return url.substring(start, slash);
}

String pathFromUrl(const String &amp;amp;url) {
  int idx = url.indexOf(&amp;quot;://&amp;quot;);
  int start = (idx &amp;gt;= 0) ? idx + 3 : 0;
  int slash = url.indexOf(&amp;#39;/&amp;#39;, start);
  if (slash &amp;lt; 0) return &amp;quot;/&amp;quot;;
  return url.substring(slash);
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;// arduino_secrets.h
// Put this in the same folder as your sketch or in your Arduino sketchbook/libraries folder.
// Replace the values between the quotes exactly (case-sensitive). No trailing spaces.

#ifndef ARDUINO_SECRETS_H
#define ARDUINO_SECRETS_H

#define SECRET_SSID &amp;quot;WIFIname&amp;quot;      // &amp;lt;-- replace with your Wi-Fi SSID (2.4 GHz)
#define SECRET_PASS &amp;quot;wifipass&amp;quot;  // &amp;lt;-- replace with your Wi-Fi password







#define HTTPS_PORT_NUMBER 443

#define FLOOD_POST_URL   &amp;quot;https://script.google.com/macros/s/AKfycbw27cP9jphgyeJNA7Mr2523E2NE8FiNO1ZGUrQqqFY99Hr-roe357eSuJDAVEvfmZKCzw/exec&amp;quot; 
// OPTIONAL: endpoint that returns JSON config { &amp;quot;THRESHOLD_VALUE&amp;quot;: 15, &amp;quot;POST_INTERVAL_MS&amp;quot;: 10000 }
// If you don&amp;#39;t have this, set GAS_CONFIG_URL to &amp;quot;&amp;quot; and sketch will use defaults below.
#define FLOOD_CONFIG_URL &amp;quot;https://script.google.com/macros/s/REPLACE_WITH_YOUR_CONFIG_URL/exec&amp;quot;

#endif




&lt;/pre&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;In Next Blog we will see the testing and results&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Early Flood Warning and Monitoring System #3 - Code and Cloud Making the MKR Talk to Google Sheets</title><link>https://community.element14.com/thread/56429?ContentTypeID=0</link><pubDate>Sun, 16 Nov 2025 17:44:52 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:121f65c9-6af3-4d4d-b09c-e9f19d258cf0</guid><dc:creator>sandeepdwivedi17</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/56429?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56429/early-flood-warning-and-monitoring-system-3---code-and-cloud-making-the-mkr-talk-to-google-sheets/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Alright &amp;mdash; time for the slightly nerdy, very satisfying bit.&lt;br /&gt; This is where the sensors stop being lonely hardware and start sending real data to the cloud.&lt;br /&gt; No smoke. No drama. Just packets, spreadsheets, and the occasional garbage value that makes you laugh and cry.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The simple goal &amp;mdash; in one line&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Read water level. Send it. Get an alert if things go wrong.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What I stitch together here&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Arduino MKR WiFi 1010&lt;/strong&gt; &amp;mdash; the brain and Wi-Fi radio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TDK Eval board + USSM sensors&lt;/strong&gt; &amp;mdash; they do distance sensing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Sheets&lt;/strong&gt; &amp;mdash; the datastore and quick dashboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Apps Script&lt;/strong&gt; &amp;mdash; the tiny web API that accepts posts and emails alerts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Think: sensor &amp;rarr; MKR &amp;rarr; HTTPS POST &amp;rarr; Apps Script &amp;rarr; Sheet &amp;rarr; emails.&lt;br /&gt; That chain is the whole system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why Google Sheets? (Spoiler: Because it&amp;rsquo;s fast)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sheets is free, easy, and everyone knows it.&lt;br /&gt; You don&amp;rsquo;t need a server or a database yet.&lt;br /&gt; For a prototype and a competition demo, it&amp;rsquo;s perfect.&lt;br /&gt; Later we can swap it for a proper backend. But right now &amp;mdash; speed wins.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server-side: Apps Script doPost&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On the Google side, doPost(e) checks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JSON parse ok?&lt;/li&gt;
&lt;li&gt;api_key matches?&lt;/li&gt;
&lt;li&gt;value is numeric?&lt;/li&gt;
&lt;li&gt;alert_requested true AND value compared vs THRESHOLD_VALUE in the sheet?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If conditions match, it sends email(s) and writes Alert Sent @ TIMESTAMP into the DataLog row.&lt;br /&gt;&lt;br /&gt;Create a google sheet &amp;quot;TDK-MKR-Logger&amp;quot; with 3 tabs.&lt;br /&gt;tab1 named &amp;quot;&lt;span style="background-color:#d8e5f8;color:#222222;float:none;font-family:&amp;#39;Google Sans&amp;#39;, Roboto, RobotoDraft, Helvetica, Arial, sans-serif;font-size:14px;font-style:normal;font-weight:bold;letter-spacing:0.4px;text-align:start;text-indent:0px;text-transform:none;white-space:pre;"&gt;ConfigDetails&lt;/span&gt;&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763314457898v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Tab 2 &amp;quot;&lt;span style="background-color:#d8e5f8;color:#222222;float:none;font-family:&amp;#39;Google Sans&amp;#39;, Roboto, RobotoDraft, Helvetica, Arial, sans-serif;font-size:14px;font-style:normal;font-weight:bold;letter-spacing:0.4px;text-align:start;text-indent:0px;text-transform:none;white-space:pre;"&gt;Email_list&lt;/span&gt;&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763314524919v2.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Tab 3 &amp;quot;&lt;span style="background-color:#d8e5f8;color:#222222;float:none;font-family:&amp;#39;Google Sans&amp;#39;, Roboto, RobotoDraft, Helvetica, Arial, sans-serif;font-size:14px;font-style:normal;font-weight:bold;letter-spacing:0.4px;text-align:start;text-indent:0px;text-transform:none;white-space:pre;"&gt;DataLog&lt;/span&gt;&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763314557558v3.png" /&gt;&lt;br /&gt;&lt;br /&gt;Click on Extensions and select Apps Script&lt;br /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763315223363v1.png" /&gt;&lt;br /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763314694300v5.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Copy and Paste my Code into it.&lt;br /&gt;&lt;pre class="ui-code" data-mode="html"&gt;/**
 * Google Apps Script for &amp;quot;TDK-MKR-Logger&amp;quot; Google Sheet
 *
 * Sheets expected:
 * 1) &amp;quot;ConfigDetails&amp;quot; - columns: key | Value | Description
 *      - keys expected: THRESHOLD_VALUE, POST_INTERVAL_MS
 * 2) &amp;quot;Email_list&amp;quot;    - column A header &amp;quot;Email Addresses&amp;quot; followed by emails
 * 3) &amp;quot;DataLog&amp;quot;       - columns: Timestamp | Sensor Name | Value | Alert Sent
 *
 * doPost(e): Accepts JSON payload and appends row to DataLog
 *           Payload example:
 *           { &amp;quot;sensor_name&amp;quot;: &amp;quot;MKR_UltraSim_01&amp;quot;, &amp;quot;value&amp;quot;: 12.3, &amp;quot;alert_requested&amp;quot;: true }
 *
 * doGet(e): Returns JSON config: { &amp;quot;THRESHOLD_VALUE&amp;quot;: 15, &amp;quot;POST_INTERVAL_MS&amp;quot;: 10000 }
 *
 * Notes:
 * - This script uses MailApp to send emails (requires permission).
 * - Deploy as Web App and set &amp;quot;Execute as: Me&amp;quot; so MailApp runs under your account.
 */

const SHEET_NAME = &amp;#39;TDK-MKR-Logger&amp;#39;;
const TAB_CONFIG = &amp;#39;ConfigDetails&amp;#39;;
const TAB_EMAILS = &amp;#39;Email_list&amp;#39;;
const TAB_DATALOG = &amp;#39;DataLog&amp;#39;;

// MAIN - POST handler
function doPost(e) {
  try {
    if (!e || !e.postData || !e.postData.contents) {
      return jsonResponse({ error: &amp;#39;No POST data received&amp;#39; }, 400);
    }

    // parse JSON body
    let payload;
    try {
      payload = JSON.parse(e.postData.contents);
    } catch (err) {
      return jsonResponse({ error: &amp;#39;Invalid JSON&amp;#39;, details: err.toString() }, 400);
    }

    const sensorName = (payload.sensor_name || payload.sensor || &amp;#39;UnknownSensor&amp;#39;).toString();
    // coerce numeric
    const value = parseFloat(payload.value);
    const alertRequested = Boolean(payload.alert_requested || payload.alert || false);

    if (isNaN(value)) {
      return jsonResponse({ error: &amp;#39;Value must be a number&amp;#39; }, 400);
    }

    const ss = SpreadsheetApp.getActiveSpreadsheet();
    if (!ss) {
      return jsonResponse({ error: &amp;#39;Spreadsheet not found or not opened&amp;#39; }, 500);
    }
    const configSheet = ss.getSheetByName(TAB_CONFIG);
    const emailSheet = ss.getSheetByName(TAB_EMAILS);
    const dataSheet  = ss.getSheetByName(TAB_DATALOG);

    if (!configSheet || !emailSheet || !dataSheet) {
      return jsonResponse({ error: &amp;#39;One or more expected tabs not found&amp;#39;, requiredTabs: [TAB_CONFIG, TAB_EMAILS, TAB_DATALOG] }, 500);
    }

    // read config values
    const config = readConfig(configSheet);
    const threshold = Number(config.THRESHOLD_VALUE);
    // fallback if config missing or invalid
    const THRESHOLD_VALUE = isFinite(threshold) ? threshold : 15;
    const nowIso = (new Date()).toISOString();

    // prepare row: Timestamp | Sensor Name | Value | Alert Sent
    let alertSentText = &amp;#39;&amp;#39;;
    const newRow = [ nowIso, sensorName, value, &amp;#39;&amp;#39; ];
    dataSheet.appendRow(newRow);
    const lastRow = dataSheet.getLastRow();

    // If alert requested AND value is below threshold (per your spec &amp;quot;lesser than threshold triggers alert&amp;quot;)
    if (alertRequested &amp;amp;&amp;amp; value &amp;lt; THRESHOLD_VALUE) {
      // read emails
      const emails = readEmails(emailSheet);
      if (emails.length &amp;gt; 0) {
        const subject = `ALERT: ${sensorName} reading ${value} &amp;lt; ${THRESHOLD_VALUE}`;
        const body = [
          `Sensor: ${sensorName}`,
          `Value: ${value}`,
          `Threshold: ${THRESHOLD_VALUE}`,
          `Timestamp: ${nowIso}`,
          &amp;#39;&amp;#39;,
          &amp;#39;This alert was generated by the TDK-MKR-Logger Google Apps Script.&amp;#39;
        ].join(&amp;#39;\n&amp;#39;);

        // send to each email (MailApp.sendEmail handles comma-separated list too)
        try {
          MailApp.sendEmail(emails.join(&amp;#39;,&amp;#39;), subject, body);
          alertSentText = `Alert Sent @ ${nowIso}`;
          // write alert info into the Alert Sent column (4th column)
          dataSheet.getRange(lastRow, 4).setValue(alertSentText);
        } catch (mailErr) {
          // email failed - log error into sheet in Alert Sent column
          const errText = `Alert FAILED @ ${nowIso} -- ${mailErr.toString()}`;
          dataSheet.getRange(lastRow, 4).setValue(errText);
          // return success with warning about email failure
          return jsonResponse({ status: &amp;#39;ok&amp;#39;, message: &amp;#39;row appended, email failed&amp;#39;, error: mailErr.toString() }, 200);
        }
      } else {
        // no emails found - put note in Alert Sent
        const note = `Alert requested but no email addresses found @ ${nowIso}`;
        dataSheet.getRange(lastRow, 4).setValue(note);
      }
    }

    // Successful append (and maybe alert)
    return jsonResponse({ status: &amp;#39;ok&amp;#39;, row: lastRow, alert: alertSentText || null, config: config }, 200);

  } catch (err) {
    return jsonResponse({ error: &amp;#39;Unhandled exception&amp;#39;, details: err.toString() }, 500);
  }
}

// GET handler - returns config as JSON
function doGet(e) {
  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const configSheet = ss.getSheetByName(TAB_CONFIG);
    if (!configSheet) {
      return jsonResponse({ error: &amp;#39;ConfigDetails sheet not found&amp;#39; }, 500);
    }
    const config = readConfig(configSheet);
    // ensure numeric where appropriate
    if (config.POST_INTERVAL_MS) config.POST_INTERVAL_MS = Number(config.POST_INTERVAL_MS);
    if (config.THRESHOLD_VALUE) config.THRESHOLD_VALUE = Number(config.THRESHOLD_VALUE);
    return jsonResponse(config, 200);
  } catch (err) {
    return jsonResponse({ error: &amp;#39;Unhandled exception&amp;#39;, details: err.toString() }, 500);
  }
}

/* ================= Helper functions ================= */

function readConfig(sheet) {
  // Expecting two columns: key (A) | Value (B)
  // Read all data and build a simple key-&amp;gt;value object
  const values = sheet.getDataRange().getValues();
  const config = {};
  for (let i = 1; i &amp;lt; values.length; i++) { // skip header row assumed at row 1
    const row = values[i];
    const key = (row[0] || &amp;#39;&amp;#39;).toString().trim();
    const val = (row[1] !== undefined &amp;amp;&amp;amp; row[1] !== null) ? row[1] : &amp;#39;&amp;#39;;
    if (key) config[key] = val;
  }
  return config;
}

function readEmails(sheet) {
  // Read column A (skip header); filter empty and validate basic email format
  const col = sheet.getRange(2, 1, Math.max(0, sheet.getLastRow() - 1), 1).getValues();
  const emails = [];
  for (let i = 0; i &amp;lt; col.length; i++) {
    const v = (col[i][0] || &amp;#39;&amp;#39;).toString().trim();
    if (v) {
      // Allow comma-separated addresses in single cell too; split and trim
      const parts = v.split(&amp;#39;,&amp;#39;);
      parts.forEach(p =&amp;gt; {
        const e = p.trim();
        if (e &amp;amp;&amp;amp; e.indexOf(&amp;#39;@&amp;#39;) &amp;gt; -1) emails.push(e);
      });
    }
  }
  // dedupe simple
  return Array.from(new Set(emails));
}

function jsonResponse(obj, statusCode) {
  // Apps Script ContentService doesn&amp;#39;t allow setting HTTP status codes directly to callers,
  // but when deployed as Web App it will return 200 unless an exception is thrown.
  // We&amp;#39;ll return a JSON wrapper with a code field so the device can inspect success/failure.
  const wrapper = Object.assign({}, obj, { _code: statusCode || 200 });
  const json = JSON.stringify(wrapper);
  return ContentService.createTextOutput(json).setMimeType(ContentService.MimeType.JSON);
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Click on Deploy&lt;br /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1763314823531v6.png" /&gt;&lt;br /&gt;&lt;br /&gt;Select New Deployment&amp;gt; in description type any thing you want &amp;gt;in Who has access select anyone &amp;gt;Click Deploy&amp;nbsp; &amp;gt; from there a web URL will be created. Copy it and save for next part of arduino mkr 1010 Programming.&lt;br /&gt;In next Blog we will discuss the hardware part.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Early Flood Warning and Monitoring System #2 - The Flow of Data</title><link>https://community.element14.com/thread/56422?ContentTypeID=0</link><pubDate>Sat, 15 Nov 2025 13:58:12 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:067e512f-76c7-4e86-b1a6-20ef735bcea6</guid><dc:creator>sandeepdwivedi17</dc:creator><slash:comments>2</slash:comments><comments>https://community.element14.com/thread/56422?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56422/early-flood-warning-and-monitoring-system-2---the-flow-of-data/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Every good project needs a brain.&lt;br /&gt; But the real magic? That&amp;rsquo;s in the &lt;strong&gt;flow&lt;/strong&gt; &amp;mdash; how information moves from sensors to the cloud and back.&lt;/p&gt;
&lt;p&gt;This blog is all about that invisible choreography. The part you don&amp;rsquo;t really &lt;em&gt;see&lt;/em&gt; but totally depends on.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:360px;max-width:640px;" alt="Flow Chart of Early Flood Warning Sytem" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Flow-Chart.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Working of my Project&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s break it down.&lt;br /&gt; Imagine water rising in a river.&lt;br /&gt; Here&amp;rsquo;s what happens, step by step, inside my setup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;TDK Ultrasonic Sensors&lt;/strong&gt; measure water level distance from Sensor which is placed at Danger line marking.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arduino will Connect to wifi. If not connected it will keep trying until its connected.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Once wifi connected it will fetch the google sheet Named &amp;ldquo;TDK-MKR-Logger&amp;rsquo; tab &amp;ldquo;&lt;/strong&gt;&lt;strong&gt;ConfigDetails&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From there it will fetch the &lt;/strong&gt;THRESHOLD_VALUE and POST_INTERVAL_MS parameter&lt;/li&gt;
&lt;li&gt;THRESHOLD_VALUE will define the alarming water level to send upcoming flood alert&lt;/li&gt;
&lt;li&gt;POST_INTERVAL_MS will tell the frequency of distance measurement i.e. interval after which distance is measured&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Arduino will keep measureing distance of water level from Danger mark at fixed time interval (POST_INTERVAL_MS ) from TKD Sensors. It packages that info into a neat little &lt;strong&gt;JSON payload&lt;/strong&gt; .&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Then send this distance to Google sheet. payload is sent via &lt;strong&gt;HTTPS POST&lt;/strong&gt; to my &lt;strong&gt;Google Apps Script Web App . &lt;/strong&gt;The script logs it in &lt;strong&gt;Google Sheets&lt;/strong&gt; under the &amp;ldquo;DataLog&amp;rdquo; tab.&lt;/li&gt;
&lt;li&gt;When distance from water level is received by google sheet it will check if Distance is less than threshold ?&lt;br /&gt; if yes then it will send alert to Predefined Email addresses stored in &amp;ldquo;&lt;strong&gt;Email_list&amp;rdquo; Tab in sheet.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;I keep configuration in google sheet so that in case if you want to change the threshold level or frequency of measurement taken , yoou don&amp;rsquo;t need to go to riverbed or waterbody and take Arduino out of box and reprogram it. Just simply change configuration details in google sheet and it will work . no need to reprogram Arduino for each time we change Flood parameters Configuration.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The System at a glance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So when the water rises, this happens in about 3&amp;ndash;4 seconds:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sensor sees distance drop&lt;/li&gt;
&lt;li&gt;Arduino detects it&amp;rsquo;s below threshold&lt;/li&gt;
&lt;li&gt;JSON sent to script&lt;/li&gt;
&lt;li&gt;Sheet updates&lt;/li&gt;
&lt;li&gt;Email alert sent&lt;/li&gt;
&lt;li&gt;Arduino confirms&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;From splash to inbox &amp;mdash; all automated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why This Flow Works&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s &lt;strong&gt;modular&lt;/strong&gt;, &lt;strong&gt;lightweight&lt;/strong&gt;, and &lt;strong&gt;transparent&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Change the cloud? Just update the endpoint URL.&lt;/li&gt;
&lt;li&gt;Change sensors? Code barely changes.&lt;/li&gt;
&lt;li&gt;No complex cloud subscription, no hidden dependencies.&lt;/li&gt;
&lt;li&gt;Can be created multiple such small packets of devices at different places of the water body or river with unique names so can be get more clear picture of flood estimation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;s simple enough for DIYers, yet structured enough for scaling. But for now we will be focused only on our useful tiny Project.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Early Flood Warning and Monitoring System #1 - Introduction</title><link>https://community.element14.com/thread/56421?ContentTypeID=0</link><pubDate>Sat, 15 Nov 2025 13:50:44 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:eca2eafc-b4d6-4876-8634-ef0519a9625e</guid><dc:creator>sandeepdwivedi17</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/56421?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56421/early-flood-warning-and-monitoring-system-1---introduction/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;You ever stood by a river after a long night of rain?&lt;br /&gt; The air smells like wet soil, frogs are losing their minds, and the water looks calm&amp;hellip; until it&amp;rsquo;s not.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s where this project started.&lt;/p&gt;
&lt;p&gt;One evening last monsoon, I watched a lot of news regarding river flood in some states , bikes were stalled, people were pushing carts through knee-deep water, and the power cut out.&lt;/p&gt;
&lt;p&gt;So yeah, that&amp;rsquo;s what pushed me to build a &lt;strong&gt;river water monitoring and flood warning system&lt;/strong&gt; using &lt;strong&gt;TDK Ultrasonic Sensors&lt;/strong&gt; .&lt;/p&gt;
&lt;p&gt;I came across the &lt;strong&gt;TDK In-Reach Ultrasonic Sensing Challenge&lt;/strong&gt; on Element14 and thought, &amp;ldquo;Wait&amp;hellip; that&amp;rsquo;s &lt;em&gt;exactly&lt;/em&gt; the kind of tech that could help.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Perfect for tracking how close the water is to trouble.it could give people a few extra hours to move to safety. And in a flood, a few hours can make a huge difference.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Image: &amp;nbsp;TDK kit photo)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;img style="max-height:360px;max-width:640px;" alt="TDK Demo Kit" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/IMG_5F00_20251114_5F00_162607060.jpg" /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what I&amp;rsquo;m building:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &amp;nbsp;&lt;strong&gt;TDK USSM ultrasonic sensors&lt;/strong&gt; mounted above a river or Water body.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;Arduino MKR WiFi 1010&lt;/strong&gt; that reads water levels from sensors and sends data to &lt;strong&gt;Google Sheets&lt;/strong&gt; (yep, good old Sheets&amp;mdash;simple, free, works).&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Google Apps Script&lt;/strong&gt; that emails alerts when levels go past a threshold.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So basically, it&amp;rsquo;s a mini early warning station in a waterproof box that can be deployed in quick pace to any desired location for flood tracking.&lt;br /&gt; Think of it as the river&amp;rsquo;s way of texting you: &amp;ldquo;Hey buddy, I&amp;rsquo;m rising fast.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not a big corporation or a disaster management expert. I&amp;rsquo;m just someone who got tired of watching small floods cause big chaos.&lt;/p&gt;
&lt;p&gt;People lose things they can&amp;rsquo;t replace&amp;mdash;photos, furniture, sometimes entire homes&amp;mdash;because no one tells them in time.&lt;br /&gt; If a simple sensor and a Wi-Fi board can give them that heads-up&amp;hellip; why not build it?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What Makes This Special&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This isn&amp;rsquo;t just about distance sensing. It&amp;rsquo;s about turning that distance into &lt;em&gt;action&lt;/em&gt;.&lt;br /&gt; Every reading is logged, timestamped, and compared against a threshold stored in a Google Sheet.That can be used as Data Analysis also in future to predict floods even before water level crosses the danger mark for flood.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What&amp;rsquo;s Next&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Over the next few blogs, I&amp;rsquo;ll be posting my full build journey here on Element14.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s my rough plan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blog 2 The Flow Chart of Data in My Flood Warning System&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blog 3:&lt;/strong&gt; Wiring the Brains Hooking Up the TDK Ultrasonic Sensors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blog 4:&lt;/strong&gt; Code walkthrough + Google Sheet connection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blog 5:&lt;/strong&gt; Testing the Flood Warning System by prototype assembly, Final build, results, and thoughts on real-world deployment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Final Thought&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If this project works&amp;mdash;even in a small way&amp;mdash;it could be used by anyone living near a water body.&lt;br /&gt; A farmer. A fisherman. A small-town engineer trying to protect their community.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Power Management (EchoFill #5)</title><link>https://community.element14.com/thread/56413?ContentTypeID=0</link><pubDate>Fri, 14 Nov 2025 07:03:03 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:1f41cc73-7167-47d6-b30e-8bd926ac4c62</guid><dc:creator>taifur</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/56413?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56413/power-management-echofill-5/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Power management is one of the challenging parts of a project. My device will be independent, battery-powered, as it will be placed on the rooftop tank; utility supply may not always be available. The device will be powered from a 18650 li-ion battery. The nominal voltage of a Li-ion battery is 3.7, which is not appropriate for an ESP8266 MCU board. I need to boost it to 5V or down it to 3.3V. Besides, I need a charging mechanism for the battery. I decided to use a Monocrystalline Solar Panel (5V, 1A) from DFRobot.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/solar_5F00_panel.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The panel has an internal regulator and provides a constant 5V to the output through the USB port.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/solar.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;A&amp;nbsp;Li-ion battery requires a sensitive charging mechanism, and we can not directly connect a battery to a 5V supply. So, I manage the following UPS circuit for the battery, which takes 5V and charges the li-ion battery and also provides 5V constant output.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/c1.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The circuit came with a separate battery holder. So, I soldered the battery holder with the circuit.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:379px;max-width:515px;"  height="379" src="https://community.element14.com/resized-image/__size/1030x758/__key/communityserver-discussions-components-files/444/c2.jpg" width="515" /&gt;&lt;/p&gt;
&lt;p&gt;The circuit has a jumper that must be shorted to enable the output.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/c3.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;So, I added some solder and shorted the jumper to enable the 5V output.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:366px;max-width:594px;"  height="366" src="https://community.element14.com/resized-image/__size/1188x732/__key/communityserver-discussions-components-files/444/c4.jpg" width="594" /&gt;&lt;/p&gt;
&lt;p&gt;The 5V output is shown in the following image. This output will be provided to the Wemos D1 Mini board.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/c5.jpg" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The sensor required 8 to 18 V to its Vsup pin. I decided to provide 12V to this pin. So, I collected an MT3608 adjustable boost converter module and adjusted the output to 12V for 5V input.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/boost.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;I connected the power supply output to the input of the boost converter module and attached the multimeter to its output. Then I gradually adjusted the trim pot until the module&amp;rsquo;s output reached 12V.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/IMG_5F00_2581.jpeg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/IMG_5F00_2582.jpeg" /&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1ja0gsf7u0" class="product-name"&gt;&lt;/h1&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Interfacing TDK Ultrasonic Sensor with ESP8266 Board (EchoFill #4)</title><link>https://community.element14.com/thread/56404?ContentTypeID=0</link><pubDate>Thu, 13 Nov 2025 07:18:21 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:eb002d46-44bb-4f1f-9862-0b83aa3aa506</guid><dc:creator>taifur</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/56404?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56404/interfacing-tdk-ultrasonic-sensor-with-esp8266-board-echofill-4/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;My project needs an internet connection to send the water level to the cloud. So, I selected ESP8266-based Wemos D1 Mini board for its form factor and low price. As the connector of the TDK Ultrasonic sensor is not breadboard-friendly, I removed the official green connector from the sensor.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:473px;max-width:636px;"  height="473" src="https://community.element14.com/resized-image/__size/1272x946/__key/communityserver-discussions-components-files/444/con1.jpg" width="636" /&gt;&lt;/p&gt;
&lt;p&gt;Then I attached a breadboard-friendly 3-pin connector to the sensor wire.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:475px;max-width:636px;"  height="475" src="https://community.element14.com/resized-image/__size/1272x950/__key/communityserver-discussions-components-files/444/con2.jpg" width="636" /&gt;&lt;/p&gt;
&lt;p&gt;I added the TDK USSM Arduino library to my Arduino IDE. I opened the &lt;em&gt;single sensor cm&lt;/em&gt; measurement example file and tried to compile it for my Wemos D1 Mini board. Unfortunately, I was getting the following error messaage.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:374px;max-width:634px;"  height="374" src="https://community.element14.com/resized-image/__size/1268x748/__key/communityserver-discussions-components-files/444/Screenshot-2025_2D00_11_2D00_11-111805.png" width="634" /&gt;&lt;/p&gt;
&lt;p&gt;After doing some research and with the help of ChatGPT I was able to solve the problem by replacing STATUS with TDK_STATUS as shown in the image below.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:413px;max-width:502px;"  height="413" src="https://community.element14.com/resized-image/__size/1004x826/__key/communityserver-discussions-components-files/444/tdk_5F00_status.png" width="502" /&gt;&lt;/p&gt;
&lt;p&gt;After making the changes, the code was successfully compiled and uploaded to my board.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:505px;max-width:513px;"  height="505" src="https://community.element14.com/resized-image/__size/1026x1010/__key/communityserver-discussions-components-files/444/Screenshot-2025_2D00_11_2D00_11-111439.png" width="513" /&gt;&lt;/p&gt;
&lt;p&gt;After uploading the code to my ESP8266 board, I&amp;nbsp;provided 12V&amp;nbsp;to the sensor from my power supply.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:426px;max-width:643px;"  height="426" src="https://community.element14.com/resized-image/__size/1286x852/__key/communityserver-discussions-components-files/444/con3.jpg" width="643" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:459px;max-width:645px;"  height="459" src="https://community.element14.com/resized-image/__size/1290x918/__key/communityserver-discussions-components-files/444/con4.jpg" width="645" /&gt;&lt;/p&gt;
&lt;p&gt;I was getting the sensor data in the serial monitor, as shown in the screenshot below.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:401px;max-width:708px;"  height="401" src="https://community.element14.com/resized-image/__size/1416x802/__key/communityserver-discussions-components-files/444/Screenshot-2025_2D00_11_2D00_13-120650.png" width="708" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Smart Blind Assistance Device #2:Hardware &amp; Sofware</title><link>https://community.element14.com/thread/56402?ContentTypeID=0</link><pubDate>Wed, 12 Nov 2025 21:42:30 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c14f7b3f-1af1-4345-9e6e-d71c4421e01b</guid><dc:creator>meera_hussien</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/56402?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56402/smart-blind-assistance-device-2-hardware-sofware/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h2 id="mcetoc_1j9sr0e230"&gt;&lt;strong&gt;Block Diagram&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The figure below shows the simple block diagram for this project.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:362px;max-width:724px;"  height="362" src="https://community.element14.com/resized-image/__size/1448x724/__key/communityserver-discussions-components-files/444/Vibration-Motor.png" width="724" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j9sr0e231"&gt;&lt;strong&gt;The Hardware&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="mcetoc_1j9sseeqld"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;Ultrasonic Sensor Demo Kit&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The first hardware that we would like to look at is the &lt;strong&gt;&lt;a href="https://www.tdk-electronics.tdk.com/en/ultrasonic_sensor_module" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;TDK Demo Kit&lt;/a&gt;&lt;/strong&gt;.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;{gallery}My Gallery Title&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;/p&gt;
&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/photo_5F00_7_5F00_2025_2D00_11_2D00_13_5F00_05_2D00_44_2D00_13.jpg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;/p&gt;
&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/photo_5F00_6_5F00_2025_2D00_11_2D00_13_5F00_05_2D00_44_2D00_13.jpg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;/p&gt;
&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/photo_5F00_5_5F00_2025_2D00_11_2D00_13_5F00_05_2D00_44_2D00_13.jpg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;/p&gt;
&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/photo_5F00_4_5F00_2025_2D00_11_2D00_13_5F00_05_2D00_44_2D00_13.jpg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;/p&gt;
&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/photo_5F00_3_5F00_2025_2D00_11_2D00_13_5F00_05_2D00_44_2D00_13.jpg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;/p&gt;
&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/photo_5F00_2_5F00_2025_2D00_11_2D00_13_5F00_05_2D00_44_2D00_13.jpg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/photo_5F00_1_5F00_2025_2D00_11_2D00_13_5F00_05_2D00_44_2D00_13.jpg" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Figure below illustrate the hardware reference design of the TDK USSM Demo Board.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1762979772087v21.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And below is the TDK B59110W2111W032 Ultrasonic sensor and its overview&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1762983659219v34.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1762983578116v33.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The kit comes with the user interface software which can be downloaded &lt;a href="https://www.tdk-electronics.tdk.com/en/3126242/design-support/design-tools/ussm/tdk-demo-kit-software" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;here&lt;/a&gt;. The file is an executable file hence no installation is required. The figure below shows how the User Interface&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="display:block;margin-left:auto;margin-right:auto;max-height:434px;max-width:696px;"  height="434" src="https://community.element14.com/resized-image/__size/1392x868/__key/communityserver-discussions-components-files/444/pastedimage1762979207231v18.png" width="696" /&gt;&lt;/p&gt;
&lt;p&gt;Before we go in details into the demo board, lets go through the other main hardware that is used in this project as well&lt;/p&gt;
&lt;h3 id="mcetoc_1j9sr0e233"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;Arduino Nano 33 IoT&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;The next hardware that we would like into is the Arduino Nano 33 IoT. One of the main reason for me to choose this controller is because it comes with the on-board Wi-Fi module which is pretty much similar to ESP32.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;&lt;img loading="lazy" alt="image" style="display:block;margin-left:auto;margin-right:auto;max-height:384px;max-width:384px;"  height="384" src="https://community.element14.com/resized-image/__size/768x768/__key/communityserver-discussions-components-files/444/pastedimage1762980035635v22.jpeg" width="384" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;&lt;img loading="lazy" alt="image" style="display:block;margin-left:auto;margin-right:auto;max-height:488px;max-width:712px;"  height="488" src="https://community.element14.com/resized-image/__size/1424x976/__key/communityserver-discussions-components-files/444/pastedimage1762980197317v23.png" width="712" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j9sr0e234"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;Vibration Sensor &amp;amp; Buzzer&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;For the vibration sensor i will be using the&amp;nbsp;&lt;/span&gt;Seeed Studio Mini Vibration Motor&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1762980418618v24.jpeg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And as for the buzzer, i will be using the&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="display:block;margin-left:auto;margin-right:auto;max-height:372px;max-width:391px;"  height="372" src="https://community.element14.com/resized-image/__size/782x744/__key/communityserver-discussions-components-files/444/pastedimage1762980603422v26.jpeg" width="391" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j9sr0e235"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;Power Supply Module&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-family:tahoma, arial, helvetica, sans-serif;"&gt;At the time of designing this, i am thinking of using the &lt;/span&gt;Lithium Battery TP4056 1A USB-C Charger with Protection as the charger controller&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;img loading="lazy" alt="image" style="display:block;margin-left:auto;margin-right:auto;"  height="550" src="https://community.element14.com/resized-image/__size/1100x1100/__key/communityserver-discussions-components-files/444/pastedimage1762980767427v27.jpeg" width="550" /&gt;&lt;/p&gt;
&lt;p&gt;and the&amp;nbsp;3.7V 5000mAh LiPo Battery with JST-PH2.0 as the power source&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="display:block;margin-left:auto;margin-right:auto;max-height:393px;max-width:393px;"  height="393" src="https://community.element14.com/resized-image/__size/786x786/__key/communityserver-discussions-components-files/444/pastedimage1762980841229v28.png" width="393" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Please note that, the hardware the charging module may need to be changed in the future based on the testing.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;Now we have looked at the main hardware that is used in this project. The other hardware that is used in developing this project will be discussed later in other upcoming post. Now let&amp;#39;s move on to the software part.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2 id="mcetoc_1j9stp34mk"&gt;&lt;strong&gt;&lt;span style="color:#000000;"&gt;The Software&lt;/span&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;There will two main software that we will be using in this project. First is the TDK Ultrasonic Sensor User Interface and Arduino IDE. Since Arduino IDE is pretty straight forward, i will not be covering it here. We will look more into the&amp;nbsp;&lt;span&gt;TDK Ultrasonic Sensor User Interface.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;span&gt;Inside the the Zip file there will be two files. One is the config folder and second is the executable file.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1762981572121v29.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;The config files consists the ml_models, STM32_Bootloader and other files&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="display:block;margin-left:auto;margin-right:auto;max-height:387px;max-width:731px;"  height="387" src="https://community.element14.com/resized-image/__size/1462x774/__key/communityserver-discussions-components-files/444/pastedimage1762982262717v31.png" width="731" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;The functions of each button in the GUI window is as explained below&lt;br /&gt;&lt;br /&gt;&lt;img loading="lazy" alt="image" style="display:block;margin-left:auto;margin-right:auto;max-height:524px;max-width:833px;"  height="524" src="https://community.element14.com/resized-image/__size/1666x1048/__key/communityserver-discussions-components-files/444/pastedimage1762983148854v32.png" width="833" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;That&amp;#39;s about the hardware and software used in this project. In the next post, we shall see how to get started with the TDK Ultrasonic Demo Kit&lt;/span&gt;&lt;/p&gt;
&lt;div class="footer-box"&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;script&gt;window.top.e14.func.queueScripts.add(function() { window.top.e14.func.e14DynaloadGallery(window.document);}, true );&lt;/script&gt;</description></item><item><title>Smart Blind Assistance Device #1: Introduction and Project Concept</title><link>https://community.element14.com/thread/56388?ContentTypeID=0</link><pubDate>Tue, 11 Nov 2025 11:48:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:aefc2056-0cb0-4ad6-bb04-6131d1cb0257</guid><dc:creator>meera_hussien</dc:creator><slash:comments>5</slash:comments><comments>https://community.element14.com/thread/56388?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56388/smart-blind-assistance-device-1-introduction-and-project-concept/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h1 id="mcetoc_1j9pi0pq80" style="text-align:center;"&gt;&lt;img alt="image" style="max-height:194px;max-width:776px;"  height="194" src="https://community.element14.com/resized-image/__size/1552x388/__key/communityserver-discussions-components-files/444/Untitled-design-_2800_2_2900_.png" width="776" /&gt;&lt;/h1&gt;
&lt;h2 id="mcetoc_1j9pi0pq81"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Mobility and independence are essential aspects of everyday life, yet for visually impaired individuals, navigating crowded or unfamiliar environments can be challenging and unsafe. The &lt;strong&gt;Smart Blind Assistance Device&lt;/strong&gt; aims to bridge this gap using advanced sensing technology and intelligent feedback mechanisms. By combining &lt;strong&gt;TDK&amp;rsquo;s USSM Plus-FS ultrasonic sensors&lt;/strong&gt; with haptic and audio feedback, the device enhances spatial awareness&amp;mdash;allowing users to detect obstacles in real time through vibration or sound cues.&lt;/p&gt;
&lt;p&gt;This project is developed as part of the &lt;strong&gt;TDK Ultrasonic Sensor Sensing Challenge&lt;/strong&gt;, which encourages creators to explore innovative ways to apply TDK&amp;rsquo;s high-performance sensing technology to real-world problems.&lt;/p&gt;
&lt;h2 id="mcetoc_1j9pi0pq82"&gt;&lt;strong&gt;Problem Statement&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Traditional white canes, while effective, offer limited sensing range and cannot detect elevated obstacles such as hanging signs, tables, or moving objects. Existing electronic aids are often expensive or cumbersome. The &lt;strong&gt;Smart Blind Assistance Device&lt;/strong&gt; is designed to be &lt;strong&gt;compact, lightweight, and affordable&lt;/strong&gt;, offering an intuitive feedback system that can easily be adapted into various form factors&amp;mdash;such as a wearable glove, a cane attachment, or a clip-on module.&lt;/p&gt;
&lt;h2 id="mcetoc_1j9pi0pq83"&gt;Project Concept&lt;/h2&gt;
&lt;p&gt;At the heart of this device lies the &lt;strong&gt;TDK USSM Plus-FS ultrasonic sensor&lt;/strong&gt;, a high-precision distance sensor that measures the proximity of nearby objects. The device continuously monitors its surroundings and translates the measured distance into &lt;em&gt;vibration intensity&lt;/em&gt; or &lt;em&gt;audio feedback&lt;/em&gt;, depending on how close the user is to an obstacle.&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;ul&gt;
&lt;li&gt;When the object is &lt;strong&gt;far&lt;/strong&gt;, the vibration is weak or silent.&lt;/li&gt;
&lt;li&gt;As the object &lt;strong&gt;approaches&lt;/strong&gt;, the vibration strength increases.&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;very close obstacles&lt;/strong&gt;, a short audio or buzzer alert may trigger as a final warning.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;This intuitive sensory mapping allows users to build a mental picture of their environment without visual input, helping them move confidently and safely.&lt;/p&gt;
&lt;h2 id="mcetoc_1j9pi0pq84"&gt;System Overview&lt;/h2&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TDK USSM Plus-FS Ultrasonic Sensor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Measures distance to obstacles using ultrasonic waves&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Arduino Nano 33 IoT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Controls sensors and processes data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vibration Motors&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Provide tactile (haptic) feedback proportional to distance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Buzzer or Audio Module (optional)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Provides auditory alerts for close obstacles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Battery &amp;amp; Charging Circuit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Powers the system for portable use&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img loading="lazy" style="max-height:16px;width:auto;" alt="System Block Diagram" src="https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/p/block-diagram.jpg" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j9pi0pq85"&gt;&lt;strong&gt;Development Plan&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The project will be developed in five main phases, each covered in a dedicated post:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Introduction and Concept&lt;/strong&gt; (this post)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hardware and Circuit Design&lt;/strong&gt; &amp;ndash; connecting the TDK sensor, Arduino, and feedback modules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Firmware and Sensor Integration&lt;/strong&gt; &amp;ndash; programming distance detection and response logic&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3D Enclosure Design&lt;/strong&gt; &amp;ndash; designing and printing the wearable shell&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing and Results&lt;/strong&gt; &amp;ndash; performance evaluation and final prototype demonstration&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="mcetoc_1j9pi0pq86"&gt;&lt;strong&gt;Expected Impact&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;By leveraging TDK&amp;rsquo;s ultrasonic sensing capabilities, this device can become a &lt;strong&gt;low-cost assistive tool&lt;/strong&gt; for enhancing independent mobility among the visually impaired. It demonstrates how modern sensor technology can transform accessibility&amp;mdash;blending empathy, innovation, and practicality into a single, meaningful project.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j9pi0pq87"&gt;&lt;strong&gt;Unboxing The&amp;nbsp;&lt;span&gt;TDK Evaluation Board&lt;/span&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Now let&amp;#39;s do the unboxing of the TDK Evaluation Board.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-discussions-components-files/444/20251111_2D00_234632.avi"&gt;community.element14.com/.../20251111_2D00_234632.avi&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j9pi0pq88"&gt;&lt;strong&gt;Next Steps&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;In the next blog post, &lt;em&gt;&lt;strong&gt;Smart Blind Assistance Device #2: Hardware and Circuit Design&lt;/strong&gt;&lt;/em&gt;, I&amp;rsquo;ll dive into the hardware setup, showing how the TDK USSM Plus-FS sensor interfaces with the Arduino Nano IoT, vibration motors, and buzzer.&lt;/p&gt;
&lt;div class="footer-box"&gt;
&lt;h3 id="mcetoc_1j9pi0pq89"&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="footer-box"&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Measuring Water Level (EchoFill #3)</title><link>https://community.element14.com/thread/56386?ContentTypeID=0</link><pubDate>Mon, 10 Nov 2025 18:02:24 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6c6a1837-3264-458c-8a95-d93d27711437</guid><dc:creator>taifur</dc:creator><slash:comments>5</slash:comments><comments>https://community.element14.com/thread/56386?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56386/measuring-water-level-echofill-3/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;One of the main goals of my project is to measure the water level using the ultrasonic sensor. So, I was trying to measure the water level using the&amp;nbsp;&lt;span&gt;TDK Demo Kit. I used a 25-liter water jar and positioned the sensor unit at the top opening of the jar. After launching the demo kit software, I activated the sensor&amp;rsquo;s zero calibration. With this setup, the sensor measured a distance of 235 cm. I was a bit confused about the reading because the actual height of an empty jar should be more.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img alt="image" style="max-height:517px;max-width:388px;"  height="517" src="https://community.element14.com/resized-image/__size/776x1034/__key/communityserver-discussions-components-files/444/IMG_5F00_2542.jpeg" width="388" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I filled one-third of the jar and measured the distance again. Surprisingly, I got the same reading from the sensor, which is shown in the following image.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="max-height:517px;max-width:388px;"  height="517" src="https://community.element14.com/resized-image/__size/776x1034/__key/communityserver-discussions-components-files/444/IMG_5F00_2551.jpeg" width="388" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I filled the jar to about half and still read the same value. I became very disappointed.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="max-height:519px;max-width:389px;"  height="519" src="https://community.element14.com/resized-image/__size/778x1038/__key/communityserver-discussions-components-files/444/IMG_5F00_2546.jpeg" width="389" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I continued the experiment and filled the jar to about two-thirds of its capacity, but the measured value remained unchanged.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:517px;max-width:388px;"  height="517" src="https://community.element14.com/resized-image/__size/776x1034/__key/communityserver-discussions-components-files/444/IMG_5F00_2549.jpeg" width="388" /&gt;&lt;/p&gt;
&lt;p&gt;I was quite disappointed with the reading, yet at the same time, curious to understand the reason behind it. I suspected that the narrow neck of the jar might be causing the inaccurate measurement. To eliminate this issue, I decided to use a water bucket instead of the jar. The bucket has a wide opening, which should prevent any obstruction or disturbance to the sensor readings. I made the following setup to measure the water level of the bucket using the sensor kit.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:517px;max-width:388px;"  height="517" src="https://community.element14.com/resized-image/__size/776x1034/__key/communityserver-discussions-components-files/444/IMG_5F00_2556.jpeg" width="388" /&gt;&lt;/p&gt;
&lt;p&gt;With a portion filled, I was getting the following result (not 235cm at this time!). The reading was around 165cm.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:516px;max-width:387px;"  height="516" src="https://community.element14.com/resized-image/__size/774x1032/__key/communityserver-discussions-components-files/444/IMG_5F00_2553.jpeg" width="387" /&gt;&lt;/p&gt;
&lt;p&gt;I added more water to the bucket until it was nearly full, and the sensor reading changed as expected. This confirmed that the previous error was for the narrow neck of the jar.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:516px;max-width:387px;"  height="516" src="https://community.element14.com/resized-image/__size/774x1032/__key/communityserver-discussions-components-files/444/IMG_5F00_2555.jpeg" width="387" /&gt;&lt;/p&gt;
&lt;p&gt;Since I plan to measure the water level in a large tank that doesn&amp;rsquo;t have a narrow opening, the sensor is unlikely to face any difficulties or produce errors in level detection. I got a very accurate level in the case of the water bucket.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>SwishMaster - #7 - Miscellaneous</title><link>https://community.element14.com/thread/56365?ContentTypeID=0</link><pubDate>Thu, 06 Nov 2025 17:22:28 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6973e68c-5cc3-4e8c-b87b-68e2e82c812c</guid><dc:creator>amgalbu</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/56365?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56365/swishmaster---7---miscellaneous/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;While I wait for&amp;nbsp;the right&amp;nbsp;moment to the test the SwishMaster on a court (which will be, hopefully, this weekend), here is a miscellaneous update on the project&lt;/p&gt;
&lt;h1 id="mcetoc_1j9d1ot6q0"&gt;&lt;/h1&gt;
&lt;h1 id="mcetoc_1j9d1ot6q1"&gt;Firmware&lt;/h1&gt;
&lt;p&gt;Firmware will&amp;nbsp;have three main states:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Calibration&lt;/strong&gt;: in order to reliably detect the ball, I need no other obstacle is in the range of the USSMs. For this reason, firmware has a state where it reports, on the display, whether any obstacle is detected.&amp;nbsp;This function&amp;nbsp;is useful to help the user place the SwishMaster device in a&amp;nbsp;proper position&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Levelling&lt;/strong&gt;: not sure about how useful is this function, but I&amp;nbsp;added a state where the firmware shows the horizontal alignment of the device&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Working&lt;/strong&gt;: in this state, the firmware tracks the ball and compute trajectory parameters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Firmware logic is shown in the following&amp;nbsp;flowchart&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Firmware.drawio.png" /&gt;&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j9d1ps3c2"&gt;Data pre-processing&lt;/h1&gt;
&lt;p&gt;To avoid spurious readings, I applied the following pre-filtering logic. Every time I need a sample from the USSM, the following algorithm is performed&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Take 5 samples&lt;/li&gt;
&lt;li&gt;Remove minimum and maximum values&lt;/li&gt;
&lt;li&gt;Make an average of the remaining 3 values&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In this way, the values sent to the trajectory computation block are more reliable and accurate&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j9d1uqol3"&gt;Tripod mounting&lt;/h1&gt;
&lt;p&gt;Besides the firmware, I also completed the assembly of the prototype. In particular, I built a mounting for&amp;nbsp;a standard camera tripod. I used an aluminum hollow cylindrical bar. On one side, I press-fitted a bolt with a standard 20 UNC thread. This bolt will be screwed into the tripod&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251106_5F00_181130.jpg" /&gt;&amp;nbsp;&amp;nbsp;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251106_5F00_181224.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;On the other side, I externally threaded the bar to screw in a bolt that secures the SwishMaster&amp;#39;s base&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251106_5F00_181327.jpg" /&gt;&amp;nbsp;&amp;nbsp;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251106_5F00_181452.jpg" /&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Testing the Range &amp; Accuracy of TDK USSM Sensor (EchoFill #2)</title><link>https://community.element14.com/thread/56348?ContentTypeID=0</link><pubDate>Sat, 01 Nov 2025 07:03:29 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:06992899-ea03-4bbf-9a85-fec2f3dd9dd2</guid><dc:creator>taifur</dc:creator><slash:comments>0</slash:comments><comments>https://community.element14.com/thread/56348?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56348/testing-the-range-accuracy-of-tdk-ussm-sensor-echofill-2/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;After unboxing the TDK Demo Kit, I was curious about the accuracy and range of the TDK Ultrasonic sensor. Fortunately, the&amp;nbsp;TDK&amp;nbsp;&lt;span style="margin:0px;padding:0px;"&gt;provides an official&amp;nbsp;&lt;a href="https://www.tdk-electronics.tdk.com/en/3126242/design-support/design-tools/ussm/tdk-demo-kit-software" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Demo Kit Software&lt;/a&gt;&amp;nbsp;that helps trigger and visualize USSM sensor measurements&lt;/span&gt;&amp;nbsp;and data without writing any code. For testing the sensor, we need the TDK Demo board that came with the Challenger kit. Though the kit came with two sensor modules, I want to use one for my project to keep it simple and cheap. So, I wanted to test the accuracy using a single sensor.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After downloading the demo kit software, I ran it and got the following warning.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/tdk1.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;So, I connected one sensor to the demo board, then connected the demo board to my PC and ran the software again. That time everything was ok and I did not receive any warning.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:401px;max-width:576px;" height="401" src="https://community.element14.com/resized-image/__size/1152x802/__key/communityserver-discussions-components-files/444/pastedimage1761974079165v1.png" width="576"  /&gt;&lt;/p&gt;
&lt;p&gt;The board was connected to the COM6 port of my PC. To ensure accurate distance measurements, it was essential to keep the sensor stable on a surface. However, I faced some difficulty securing it on the table, so I designed a 3D-printed base to hold the sensor firmly during testing.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:431px;max-width:575px;"  height="431" src="https://community.element14.com/resized-image/__size/1150x862/__key/communityserver-discussions-components-files/444/IMG_5F00_2482.jpeg" width="575" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:431px;max-width:575px;"  height="431" src="https://community.element14.com/resized-image/__size/1150x862/__key/communityserver-discussions-components-files/444/IMG_5F00_2483.jpeg" width="575" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:431px;max-width:575px;"  height="431" src="https://community.element14.com/resized-image/__size/1150x862/__key/communityserver-discussions-components-files/444/IMG_5F00_2484.jpeg" width="575" /&gt;&lt;/p&gt;
&lt;p&gt;The new design allows the sensor to be placed securely on any surface, with its height easily adjustable by altering the orientation of the 3D-printed base.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:400px;max-width:574px;" height="400" src="https://community.element14.com/resized-image/__size/1148x800/__key/communityserver-discussions-components-files/444/pastedimage1761978033800v2.png" width="574"  /&gt;&lt;/p&gt;
&lt;p&gt;From the distance tab, I was able to easily measure the distance of the obstacle as shown in the above image. I have attached a short video of my distance measurement test.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-discussions-components-files/444/TDA-Ultrasonic-Sensor-Testing.mp4"&gt;community.element14.com/.../TDA-Ultrasonic-Sensor-Testing.mp4&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;From my experiment, I observed that the sensor provided stable and consistent readings when the obstacle was placed at a distance greater than 12 cm. For objects positioned closer than this range, the readings became noticeably unstable and fluctuated significantly. On average, I recorded an approximate measurement error of around 2 cm. I was unable to test the sensor at longer distances due to the limited space on my desk; however, this limitation does not significantly affect my project, as the intended measurement range in the water tank is relatively short.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>SwishMaster - #6 - Hardware assembly</title><link>https://community.element14.com/thread/56333?ContentTypeID=0</link><pubDate>Sun, 26 Oct 2025 17:05:30 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6875a041-f418-46ae-8b94-920ebb5e05c6</guid><dc:creator>amgalbu</dc:creator><slash:comments>2</slash:comments><comments>https://community.element14.com/thread/56333?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56333/swishmaster---6---hardware-assembly/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;In this post, I&amp;nbsp;am&amp;nbsp;going to share my progress on building the container and assembling the electronic components of the SwishMaster device&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j8glv2200"&gt;The case&lt;/h1&gt;
&lt;p&gt;The SwishMaster case is made up of three main parts&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j8gm15vf1"&gt;1. The main case&lt;/h2&gt;
&lt;p&gt;The main case has slots for all the electronics components, namely&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;2 USSMs&lt;/li&gt;
&lt;li&gt;The Arduino Nano 33 IoT board&lt;/li&gt;
&lt;li&gt;The stepup converter&lt;/li&gt;
&lt;li&gt;The level shifter&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each component will be housed in the position shown in the following picture&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Case2.png" /&gt;&lt;/p&gt;
&lt;p&gt;Note that the holes for the USSMs are 50 degrees apart, to match my findings on the area covered by the USSMs themselves (see my post &lt;a href="https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56235/swishmaster---3---experimenting-with-the-ussm" data-e14adj="t"&gt;here&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="mcetoc_1j8gm848q3"&gt;2. The cover&lt;/h2&gt;
&lt;p&gt;The cover is quite simple. It stays in place thanks to a bevel and is secured to the case with two screws&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Cover2.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j8gmc1dn4"&gt;3. The base&lt;/h2&gt;
&lt;p&gt;The base has two brackets to hold the power bank and features a bolt to fix the SwishMaster to a camera tripod&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Base2.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j8gmeeec6"&gt;Installation&lt;/h1&gt;
&lt;p&gt;The following pictures show the installation process of the electronic components that make up the SwishMaster&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j8gmidva7"&gt;1. USSMs&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251024_5F00_071620.jpg" /&gt;&amp;nbsp;&amp;nbsp;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251024_5F00_071643.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j8gmioc68"&gt;2. LCD display&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251024_5F00_072706.jpg" /&gt;&amp;nbsp;&amp;nbsp;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251024_5F00_072725.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j8gmmsgc9"&gt;3. Electronic boards&lt;/h2&gt;
&lt;p&gt;All the boards are kept in place by the bevels (the boards fits exactly in the slots). For a better hold, I added some double-sided tape.&lt;/p&gt;
&lt;p&gt;I also created a piggy-back for the Arduino board to simplify the soldering of the connections.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251024_5F00_073022.jpg" /&gt;&amp;nbsp;&amp;nbsp;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251024_5F00_072958.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251026_5F00_123927.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j8gn49o2a"&gt;The final result&lt;/h1&gt;
&lt;p&gt;And, finally, here are&amp;nbsp;some&amp;nbsp;pictures of the first (almost) completed SwishMaster prototype&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/20251026_5F00_124027.jpg" /&gt;&amp;nbsp;&amp;nbsp;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Prototype1.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j8gngf0bb"&gt;Next steps&lt;/h1&gt;
&lt;p&gt;Hardware assembly is 90% completed: some finishing are missing&amp;nbsp;here and there. Firmware has been partially debugged: LCD display&amp;nbsp;works as expected and trajectory calculation&amp;nbsp;algorithm has been tested with simulated data. Now it&amp;#39;s time to mount the device on a camera tripod and make some&amp;nbsp;tests on field&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Echo Park – Sound tube and Hardware Cleanup Post 5</title><link>https://community.element14.com/thread/56331?ContentTypeID=0</link><pubDate>Sun, 26 Oct 2025 00:07:38 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b150eb43-d0f4-457c-8655-59ec3aba108a</guid><dc:creator>ralphjy</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/56331?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56331/echo-park-sound-tube-and-hardware-cleanup-post-5/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h2 id="mcetoc_1j8ekop3r0"&gt;&lt;strong&gt;&lt;u&gt;Sound tube&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;I&amp;#39;ll have to give some credit to&amp;nbsp;&lt;a href="https://community.element14.com/members/beacon_5f00_dave"&gt;beacon_dave&lt;/a&gt;&amp;nbsp;again for cajoling me into trying a sound tube to make the ultrasonic sensor more directional.&amp;nbsp; I had been complaining about latency I was getting from trying to use a moving average filter to reduce the multi-path noise that I was getting.&amp;nbsp; I had previously tried a short 30mm tube that I had printed for another project, but I couldn&amp;#39;t really see any positive effect.&lt;/p&gt;
&lt;p&gt;Here it is being used with my ESP32 setup:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/1781.Sound_5F00_tube.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;I realized that the best way to get a quantitative look at the effect of a tube would be to use the Demo board with its GUI for quick visualization.&amp;nbsp; It seemed intuitive to me that the tube wasn&amp;#39;t going to help much with the transmitted pulse, but would help restrict the angle of the received echoes.&amp;nbsp; I have no idea how I would go about optimizing a sound tube, so I took a seat of the pants empirical approach with the goal of just making the noise &amp;quot;better&amp;quot;.&amp;nbsp; &amp;nbsp;Dave had a picture of a long (&amp;gt;300mm) sound &amp;quot;trumpet&amp;quot; that was used on an 80&amp;#39;s era ultrasonic tape measure.&amp;nbsp; It is basically a long tapered tube with the small end at the sensor.&amp;nbsp;&amp;nbsp;I&amp;#39;ve seen sound tubes for&amp;nbsp;&lt;a href="https://www.pil.de/en/news-1/news-detail?tx_news_pi1%5Baction%5D=detail&amp;amp;tx_news_pi1%5Bcontroller%5D=News&amp;amp;tx_news_pi1%5Bnews%5D=25&amp;amp;cHash=4ee959ac52c19caca06bde396086ee3d#:~:text=Controlling%20the%20sound%20beam%20of,transducer%20of%20an%20ultrasonic%20sensor." rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PIL Sensors&lt;/a&gt;, but they are used only on the short range (400mm), high frequency (360KHz) sensors.&amp;nbsp; I decided to mimic the design of the&amp;nbsp;&lt;a href="https://www.thingiverse.com/thing:5147127/files" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;SR04T - Ultrasonic distance sensor cone&lt;/a&gt;&amp;nbsp;on Thingiverse that is designed for a 40KHz sensor.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" height="349" src="https://community.element14.com/resized-image/__size/930x698/__key/communityserver-discussions-components-files/444/pastedimage1760474369762v2.png" width="465" /&gt;&lt;/p&gt;
&lt;p&gt;I ended up trying a 40mm cylinder with a 30mm cone on top as it was quick to design and print.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image"  height="243" src="https://community.element14.com/resized-image/__size/416x486/__key/communityserver-discussions-components-files/444/pastedimage1761430285607v1.png" width="208" /&gt;&lt;/p&gt;
&lt;p&gt;I then printed a new mounting plate for the sensor and here is the new setup (I call it the sound trumpet in honor of Dave&amp;nbsp;&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/263a.svg" title="Relaxed"&gt;&amp;#x263a;&lt;/span&gt;):&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Sound_5F00_Trumpet_5F00_Side.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Sound_5F00_Trumpet_5F00_Front.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;To test the effect of the trumpet, I ran a series of envelope plots:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No trumpet, no target&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1761431495068v2.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No trumpet, square panel target at 120cm&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1761431577840v3.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trumpet added, square panel target at 120cm&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1761431660720v4.png" /&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll admit that looking at the envelope data, I couldn&amp;#39;t determine that I&amp;#39;d improved anything.&amp;nbsp; It looks like the amplitudes all increased and shifted in time.&amp;nbsp; The primary echo was wider.&lt;/p&gt;
&lt;p&gt;What really surprised me was the Streamout readings.&amp;nbsp; Without the tube it was measuring 90cm and with the tube it was measuring 50cm.&amp;nbsp; I was using default thresholds, so I was probably catching the first secondary echo which had more amplitude with the trumpet added.&lt;/p&gt;
&lt;p&gt;I had read that it might help to line the tube with sound absorbing material to prevent getting reflections caused by the transmit pulse.&amp;nbsp; So, I tried lining the tube with 1/8&amp;quot; felt that is used for furniture pads.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Felt_5F00_Pad.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Re-ran the envelope tests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trumpet with felt lining, no target&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1761433190882v5.png" /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trumpet with Felt Lining,&amp;nbsp;square panel target at 120cm&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1761433325200v6.png" /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now, the part that I don&amp;#39;t fully understand is the Streamout data now shows 128cm and it is extremely stable (quiet).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/-AjFFXtC1xg"&gt;https://youtu.be/-AjFFXtC1xg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I, then modified the thresholds (increased them for near echoes) and Streamout showed 123cm and it was even more stable.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/W4ST3NeTObo"&gt;https://youtu.be/W4ST3NeTObo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, I&amp;#39;m extremely happy with the results.&amp;nbsp; I&amp;#39;ll need to modify the project setup so that I can use the trumpet and do additional testing in the garage.&lt;/p&gt;
&lt;h2 id="mcetoc_1j8erccca2"&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1j8erc7871"&gt;&lt;strong&gt;&lt;u&gt;Hardware cleanup&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;I&amp;#39;m in process of cleaning up the project hardware to get ready for final testing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Created a separate assembly for the LED strip and buzzer so that they can be mounted above the sensor assembly for visibility (I settled on 50cm above).&amp;nbsp; I rewired things so that the buzzer and Neopixel wires are in the same Grove cable.&lt;/li&gt;
&lt;li&gt;Modified the USSM sensor mount to accommodate the sound trumpet.&lt;/li&gt;
&lt;li&gt;Made shelf mounting brackets for the LED and sensor assemblies.&lt;/li&gt;
&lt;li&gt;Cleaned up wiring.&lt;/li&gt;
&lt;li&gt;Added test points for the sensor level shifter.&lt;/li&gt;
&lt;li&gt;Retested the hardware&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is the side view of the final assembly with the trumpet and shelf mount.&amp;nbsp; The LED assembly is&amp;nbsp;on the desk in back.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Sensor_5F00_Final_5F00_Assembly_5F00_Side.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;And the front view - you can see the felt lining in the trumpet cylinder.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Sensor_5F00_Final_5F00_Assembly_5F00_Front.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;And the assembly test video.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/mf0y5z2cQjk"&gt;https://youtu.be/mf0y5z2cQjk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j8esq7rd3"&gt;&lt;strong&gt;What&amp;#39;s next?&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Lots of software integration left.&amp;nbsp; Code became unmanageable, so need to modularize it.&amp;nbsp; And the final garage testing.&amp;nbsp; Many opportunities to break stuff.&lt;/p&gt;
&lt;p&gt;And, of course, the Project Blog is going to take a bunch of time...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>SwishMaster - #5 - Ball trajectory</title><link>https://community.element14.com/thread/56300?ContentTypeID=0</link><pubDate>Mon, 20 Oct 2025 18:59:17 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6403aa0d-58e3-4ef8-aaab-9fd34efd78b4</guid><dc:creator>amgalbu</dc:creator><slash:comments>3</slash:comments><comments>https://community.element14.com/thread/56300?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56300/swishmaster---5---ball-trajectory/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;In this post, I will talk about some of the relevant features of the firmware I am developing.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j81ed16f0"&gt;Reading ball height&lt;/h1&gt;
&lt;p&gt;I explained how to measure the distance between the ball and the SwishMaster in a &lt;a href="https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56263/swishmaster---3---connecting-ussm-to-arduino" data-e14adj="t"&gt;previous post&lt;/a&gt;. Basically, I am leveraging the TDK USSM Arduino Library and, in particular, the &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;GetDistanceCm()&lt;/span&gt; function.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j81ee06v1"&gt;Computing the ball trajectory&lt;/h1&gt;
&lt;p&gt;The main task of the firmware is to reconstruct the ball trajectory from the ball height readings. The process involves the following steps&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get an approximation of the horizontal coordinate. USSM does not provide a reading for the horizontal position of the object -just the time of flight of reflected sound waves&lt;/li&gt;
&lt;li&gt;Correct measurement depending on horizontal position. Given the estimated horizontal position, the real distance between the ball and the sensor (i.e the distance measured along the sensor axis) can be calculated&lt;/li&gt;
&lt;li&gt;Align the axes: sensors measure distances in two different reference systems, which have to be aligned to make all the readings refer to a common reference system&lt;/li&gt;
&lt;li&gt;Compute the parameters of the parabola that best matches the points&lt;/li&gt;
&lt;li&gt;Compute the ball entry angle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j81efrlj2"&gt;1. Estimate ball horizontal position&lt;/h2&gt;
&lt;p&gt;As the basketball travels across the area covered by the USSM, we need to correct the measured distance to take into account the horizontal offset of the actual position of the ball from the sensor vertical axis. The sensor does not provide such an information, but it&amp;rsquo;s possible to estimate the ball horizontal position under the following conditions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The ball speed is constant&lt;/li&gt;
&lt;li&gt;The ball distances are read at a fixed rate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this scenario, the following algorithm works with a good precision&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compute the average height of the ball&lt;/li&gt;
&lt;li&gt;Calculate the width of the covered area at the computed height&lt;/li&gt;
&lt;li&gt;The horizontal distance between samples is given by the area width divided by the number of sample&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;The area where the sensor can detect the basketball is approximated by a six-edges polygon, shown in the following picture&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Chart8.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;For example, the formula to compute the width of the covered area at a given height &amp;ldquo;C&amp;rdquo; is&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Chart6.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="padding-left:90px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760985570140v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;Where &amp;ldquo;Y&amp;rdquo; is the measured distance, and X is the width of the covered area. Solving the equation, we get&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760985653226v2.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j81eqf1i3"&gt;2. Correct measurements for horizontal position&lt;/h2&gt;
&lt;p&gt;Given the estimation of the horizontal position and the distance returned by the USSM, we can calculate the distance along the sensor axis using the Pitagora theorem&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/7103.Pitagora.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j81erv774"&gt;3. Aligning the axis&lt;/h2&gt;
&lt;p&gt;Samples are taken in two different reference systems, whose axis are 50 degrees apart. To align the axis, we need to rotate the axis 25 degrees clockwise and 25 degrees counterclockwise, as shown in the following picture&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Chart9.png" /&gt;&lt;/p&gt;
&lt;p&gt;To rotate a point (x, y) around the origin by an angle &amp;theta; (in degrees), the standard 2D rotation formulas are:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760985905001v3.png" /&gt;&lt;/p&gt;
&lt;p&gt;Finally, a translation is applied to make the origins overlap&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j81f2a2g5"&gt;4. Parabola fitting&lt;/h2&gt;
&lt;p&gt;This is essentially performing a quadratic regression to find coefficients a,b,c for:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760985982182v4.png" /&gt;&lt;/p&gt;
&lt;p&gt;Using the least squares method&amp;nbsp;for n points, the system of equations to solve is:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760986050885v5.png" /&gt;&lt;/p&gt;
&lt;p&gt;This 3&amp;times;3 system can be solved using Cramer&amp;#39;s rule.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cramer&amp;#39;s Rule says that we can find the value of a given variable by dividing that variable&amp;#39;s determinant by the regular coefficient-determinant&amp;#39;s value. That is, Cramer&amp;#39;s Rule specifies this relationship:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760986123751v6.png" /&gt;&lt;/p&gt;
&lt;p&gt;where D is the matrix determinant and Da Db, Dc are the matrix where the 1st, 2nd and 3rd columns have been replaced by the determinant D. Showing the C code is probably simpler than explaining the Cramer&amp;rsquo;s rule&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;Parabola SwishMasterParabola::fit()
{
  // Summations
  double Sx=0, Sx2=0, Sx3=0, Sx4=0;
  double Sy=0, Sxy=0, Sx2y=0;

  for (int i=0; i&amp;lt;n; i++) {
    double xi = x[i];
    double yi = y[i];
    double xi2 = xi*xi;

    Sx += xi;
    Sx2 += xi2;
    Sx3 += xi2*xi;
    Sx4 += xi2*xi2;
    Sy += yi;
    Sxy += xi*yi;
    Sx2y += xi2*yi;
  }

  // Build matrices for solving
  double denom = (Sx4*(Sx2*n - Sx*Sx)
    - Sx3*(Sx3*n - Sx*Sx2)
    + Sx2*(Sx3*Sx - Sx2*Sx2));

  double a = ( (Sx2y*(Sx2*n - Sx*Sx))
    - (Sxy*(Sx3*n - Sx*Sx2))
    + (Sy*(Sx3*Sx - Sx2*Sx2)) ) / denom;

  double b = ( (Sx4*(Sxy*n - Sy*Sx))
    - (Sx3*(Sx2y*n - Sy*Sx2))
    + (Sx2*(Sx2y*Sx - Sxy*Sx2)) ) / denom;

  double c = ( (Sx4*(Sx2*Sy - Sx*Sxy))
    - (Sx3*(Sx3*Sy - Sx2*Sxy))
    + (Sx2*(Sx3*Sx2y - Sx2*Sx2y)) ) / denom;

  Parabola p = { (float)a, (float)b, (float)c };
  Serial.print(&amp;quot;Parabola parameters: &amp;quot;);
  Serial.print(a);
  Serial.print(&amp;quot;, &amp;quot;);
  Serial.print(b);
  Serial.print(&amp;quot;, &amp;quot;);
  Serial.println(c);

  return p;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j81feipq6"&gt;5. Ball entry angle&lt;/h2&gt;
&lt;p&gt;We have the fitted parabola&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760986397994v7.png" /&gt;&lt;/p&gt;
&lt;p&gt;The slope of the tangent at any point x_0is simply the derivative:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760986426767v8.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;The angle with the horizontal is:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760986447164v9.png" /&gt;&lt;/p&gt;
&lt;p&gt;I just need to apply to formula to the last known point to get an estimate of the ball entry angle&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j81fi7as8"&gt;And luckily...that&amp;#39;s all&lt;/h1&gt;
&lt;p&gt;Sorry for the boring post full of formulas, but&amp;nbsp;I think that some knowledge about the algorithm I implemented to&amp;nbsp;computed the ball trajectory can make clearer how&amp;nbsp;SwishMaster works. Next posts will focus on the case, the electronics and hopefully the first field test&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div id="gtx-trans" style="left:197px;position:absolute;top:3688.35px;"&gt;
&lt;div class="gtx-trans-icon"&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Echo Park – License Plate Recognition Post 4</title><link>https://community.element14.com/thread/56298?ContentTypeID=0</link><pubDate>Mon, 20 Oct 2025 04:39:28 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:93c89047-3b73-440f-b708-a63aca85cd72</guid><dc:creator>ralphjy</dc:creator><slash:comments>3</slash:comments><comments>https://community.element14.com/thread/56298?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56298/echo-park-license-plate-recognition-post-4/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h2 id="mcetoc_1j7vnh96o0"&gt;&lt;strong&gt;&lt;u&gt;Software woes&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;A feature that I wanted to add to my project is license plate recognition of the vehicle that just parked.&amp;nbsp; No real need for it, but it looked straightforward and there are a few different project examples for an ESP32 based camera, so I decided to try it just for fun.&lt;/p&gt;
&lt;p&gt;Well, as Murphy&amp;rsquo;s law would have it, the fun turned into a nightmare.&amp;nbsp; I&amp;rsquo;ve had some problems from the very start with the TDK software, but for the most part I&amp;rsquo;ve been able to work around them.&amp;nbsp; I haven&amp;rsquo;t figured out a way to get technical support from TDK (their contact form seems sales related, and they didn&amp;rsquo;t respond when I used it to request technical support).&amp;nbsp; I probably just haven&amp;rsquo;t figured out their infrastructure and to be fair, they are really set up to support OEMs not individuals.&amp;nbsp; I really wanted to get the previous version of their Demo GUI because of the features that are shown in their documentation but haven&amp;rsquo;t been able to find it.&lt;/p&gt;
&lt;p&gt;The problem that I encountered was that the USSM Arduino library had a conflict with the latest ESP32 brdlib.&amp;nbsp; The latest USSM library was released in August of 2023 and there have been 17 ESP32 brdlib releases since then.&amp;nbsp; I backed off the ESP32 brdlib version to a 2023 release and that allowed me to get the sensor working with my board, so I continued with the project.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Unfortunately, as I&amp;rsquo;ve been trying to incorporate new features, I&amp;rsquo;ve run into ESP32 issues with other libraries.&amp;nbsp; I ran into issues with DNS resolution of sites that use ipV6 as the primary address as it appears that the ipV4 fallback is not working in the esp32 core version I&amp;rsquo;m using.&amp;nbsp; I then went down a rabbit hole that consumed days of my time.&amp;nbsp; I first encountered the issue when I was trying to use &amp;ldquo;pool.ntp.org&amp;rdquo; to set the time on the RTC.&amp;nbsp; Switching to a hard-coded ipaddr solved that quickly.&amp;nbsp; I encountered the problem again when I tried to use &amp;ldquo;generativelanguage.googleapis.com&amp;rdquo; to use Gemini for the license plate recognition (LPR).&amp;nbsp; Unfortunately, a hard-coded ipaddr did not resolve it because of the way certificates are handled.&amp;nbsp; I then made the mistake of trying to use AI to help me fix the problem and I spent days making changes that ended up being a complex Band-Aid that ultimately didn&amp;rsquo;t work reliably.&lt;/p&gt;
&lt;p&gt;It seemed that I had two choices &amp;ndash; find a later version of the ESP32 brdlib that would fix the DNS issue and still work with the USSM library or switch to a different MCU.&amp;nbsp; I&amp;rsquo;ve planned my project around the Xiao ESP32S3 Sense, so I chose to try to find a compatible brdlib version.&amp;nbsp; That led me down another rabbit hole.&amp;nbsp; When Arduino IDE upgraded to V2 it lost the ability to easily create a clean isolated &amp;ldquo;portable&amp;rdquo; environment.&amp;nbsp; There are ways that &amp;ldquo;sort of&amp;rdquo; work, but that&amp;rsquo;s a long story&amp;hellip;&amp;nbsp; I didn&amp;rsquo;t want to mess up the environment that I use for a lot of other projects or to create another virtual machine, so I switched to using another computer.&amp;nbsp; Suffice to say I lost lots of time, but I think that I&amp;rsquo;ve found a small intersection of versions that work.&amp;nbsp; I got DNS working which allowed me to complete an LPR program which I&amp;rsquo;ll demonstrate here, but I am concerned that if I run into additional library issues during final integration that I may have to omit some program features.&amp;nbsp; I wouldn&amp;rsquo;t recommend using the current USSM Arduino library with an ESP32 MCU.&lt;/p&gt;
&lt;h2 id="mcetoc_1j7vnh96o1"&gt;&lt;strong&gt;&lt;u&gt;License Plate Recognition (LPR)&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Processing power and memory constraints on Edge AI boards like the Xiao ESP32S3 Sense&amp;nbsp;prevent doing&amp;nbsp;the complex, general-purpose OCR required for License Plate Recognition.&amp;nbsp; A viable technique is to capture the license plate image using an esp32 camera and then send the image to a Cloud-Based OCR for processing.&lt;/p&gt;
&lt;p&gt;Among several options that popped up in a search for LPR projects using an ESP32 and the Arduino IDE, I found this one on Hackster:&amp;nbsp;&lt;a href="https://www.hackster.io/maheshyadav216/ai-powered-anpr-using-dfrobot-s-esp32-s3-ai-cam-gemini-api-74d458" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;AI-Powered ANPR using DFRobot&amp;#39;s ESP32-S3 AI Cam &amp;amp; Gemini API&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The details of the Hackster project are available at the link and I&amp;rsquo;ll provide more detail on my implementation in the final blog post.&lt;/p&gt;
&lt;p&gt;The project setup is like mine, but it uses a DFRobot ESP32S3 AI Camera Module.&amp;nbsp; The key differences are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Camera: OV3660 3MP vs OV2640 2MP&lt;/li&gt;
&lt;li&gt;Flash: 16MB vs 8MB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The fact that I have less image resolution and a smaller flash size shouldn&amp;rsquo;t be an issue.&amp;nbsp; The biggest problem is that I am constrained by the ESP32 brdlib version that is compatible with the USSM Arduino library.&amp;nbsp; This is where I ran into the DNS issue with Google&amp;rsquo;s Gemini API.&amp;nbsp; Now I&amp;rsquo;ve found a version that seems to work and have implemented the LPR program.&lt;/p&gt;
&lt;p&gt;Here is the basic program flow (modified from the Hackster project):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Capture QVGA Image using OV2640 sensor on Xiao ESP32S3&lt;/li&gt;
&lt;li&gt;Send image via MQTT to Node-Red for display&lt;/li&gt;
&lt;li&gt;Encode image into Base64 format&lt;/li&gt;
&lt;li&gt;Send an HTTP request (with encoded image) to Gemini Vision API to detect and extract the license plate characters&lt;/li&gt;
&lt;li&gt;Send JSON doc with timestamp license plate data via MQTT to Node-Red for display&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For my initial test I will use either a local pushbutton or a capture command sent via MQTT from Node-Red to initiate the flow.&amp;nbsp; &amp;nbsp;In the final project I will use detection of a parked vehicle to initiate it.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Serial Monitor output showing the program flow:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WiFi connect&lt;/li&gt;
&lt;li&gt;Camera initialization&lt;/li&gt;
&lt;li&gt;Sync RTC&lt;/li&gt;
&lt;li&gt;Connect MQTT&lt;/li&gt;
&lt;li&gt;MQTT request image capture&lt;/li&gt;
&lt;li&gt;Capture image&lt;/li&gt;
&lt;li&gt;MQTT Publish Image&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:253px;max-width:601px;" height="253" src="https://community.element14.com/resized-image/__size/1202x506/__key/communityserver-discussions-components-files/444/pastedimage1760928478250v1.png" width="601"  /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Send data to Gemini&lt;/li&gt;
&lt;li&gt;Gemini response&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:764px;max-width:601px;" height="764" src="https://community.element14.com/resized-image/__size/1202x1528/__key/communityserver-discussions-components-files/444/pastedimage1760928653182v2.png" width="601"  /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parsed data&lt;/li&gt;
&lt;li&gt;MQTT Publish&amp;nbsp;Time and PlateNumber&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:120px;max-width:602px;" height="120" src="https://community.element14.com/resized-image/__size/1204x240/__key/communityserver-discussions-components-files/444/pastedimage1760928985974v5.png" width="602"  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Node-Red Flow&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Receive Image Data and display&lt;/li&gt;
&lt;li&gt;Receive Time and PlateNumber and display&lt;/li&gt;
&lt;li&gt;Send Capture request when button pushed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760929337562v6.png"  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Node-Red Dashboard&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are 3 groups on the dashboard:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ESP32S3 Camera - displays the last captured image&lt;/li&gt;
&lt;li&gt;Gemini LPR - displays up to the last 10 plate data responses from Gemini, latest is on top&lt;/li&gt;
&lt;li&gt;Command - Capture button to send capture request&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:173px;max-width:608px;" height="173" src="https://community.element14.com/resized-image/__size/1216x346/__key/communityserver-discussions-components-files/444/pastedimage1760932018305v7.png" width="608"  /&gt;&lt;/p&gt;
&lt;p&gt;Video demonstrating dashboard operation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Images are various sizes of license plate images&lt;/li&gt;
&lt;li&gt;Initially you will see stale data in the Gemini table&lt;/li&gt;
&lt;li&gt;The mouse pointer will move over the Capture button to select it&lt;/li&gt;
&lt;li&gt;The image will update immediately&lt;/li&gt;
&lt;li&gt;The Gemini table will update after the the Gemini response which gives a sense of the processing time&lt;/li&gt;
&lt;li&gt;All images in this test are printed on white paper&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://youtu.be/EwIQPqjkvw8"&gt;https://youtu.be/EwIQPqjkvw8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All previous images were taken in my office.&amp;nbsp; I then moved the setup down to the garage and positioned the camera at parking distance and height and captured the&amp;nbsp;next&amp;nbsp;image.&amp;nbsp; The image is pretty dim but the correct information was extracted.&amp;nbsp; I may try adjusting the brightness setting on the camera...&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;" src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760933238613v8.png"  /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j7vstjcm2"&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I have been working on adding a sound tube to reduce the multi-path reflections reaching the sensor.&amp;nbsp; &amp;nbsp;Results look promising.&amp;nbsp; I&amp;#39;ll discuss this in the next post.&lt;/li&gt;
&lt;li&gt;Lots of work to do to integrate the various software programs into a single application.&amp;nbsp; Hope there are no surprises.&amp;nbsp; Resource conflicts are the primary worry.&lt;/li&gt;
&lt;li&gt;I also have lots of hardware cleanup.&amp;nbsp; I am working on a separate LED strip/buzzer module that I can mount 90cm above the main sensor unit.&amp;nbsp; And I need the shelf mounting hardware, sound tube adapter, and a main enclosure.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Then writing the final project blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clock&amp;#39;s ticking.&amp;nbsp; If I end up with a fully functional unit, I&amp;#39;ll consider that a success.&amp;nbsp; Having nice enclosures will be icing on the cake&amp;nbsp;&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>Hardware Setup and GUI based Configuration of the TDK USSM</title><link>https://community.element14.com/thread/56293?ContentTypeID=0</link><pubDate>Sat, 18 Oct 2025 15:42:59 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:60778e01-a0c4-4745-9a32-80ba6c0c8a6c</guid><dc:creator>veluv01</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/56293?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56293/hardware-setup-and-gui-based-configuration-of-the-tdk-ussm/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h1 id="mcetoc_1j6qhhvdi0"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;In the previous forum post, I have unboxed the TDK USSM kit and then completed a deep-dive into the respective hardware components and their specifications. In this forum post I&amp;#39;ll connect the USSM sensors to the demo kit and then explore the TDK&amp;#39;s GUI.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id="mcetoc_1j7r0co2j0"&gt;Mounting the USSM&amp;#39;s in the&amp;nbsp;Enclosure&lt;/h1&gt;
&lt;p&gt;Before even plugging anything in, I wanted to give my hardware a proper enclosure.&amp;nbsp;&lt;span&gt;&amp;nbsp;A stable and secure mounting for the USSMs is critical for getting clean, repeatable data. So,&amp;nbsp;I designed a simple but effective case using two acrylic sheets as shown in the below, the transparent sheet(on the left) to mount the demo board which is the bottom layer and the black opaque sheet (on the right) which is the top layer having mounting holes for the USSM sensor.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img alt="image" style="display:block;margin-left:auto;margin-right:auto;max-height:328px;max-width:511px;"  height="328" src="https://community.element14.com/resized-image/__size/1022x656/__key/communityserver-discussions-components-files/444/pastedimage1760770867406v1.png" width="511" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The USSMs are mounted as per the instructions(as shown below) which is given in the sensor&amp;#39;s&amp;nbsp;&lt;/span&gt;&lt;span&gt;datasheet.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760771353095v2.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This acrylic enclosure&amp;nbsp;allows the two USSM1.0 PLUS-FS sensors to be snugly fitted and secured with their included locking nuts. This setup not only protects the&amp;nbsp;two USSM&amp;#39;s but also provides a solid base for the demo board along with the USSM&amp;#39;s, so that I can easily mount them to a tripod for testing and configuration.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/Screenshot-2025_2D00_10_2D00_18-130946.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Here&amp;#39;s how it looks after all the assembly is done.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760771513754v3.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id="mcetoc_1j7r540lo3"&gt;&lt;span&gt;Getting&amp;nbsp;the TDK USSM GUI&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Now that I have fitted the sensors and the demo kit into the enclosure, I can proceed to download the GUI by going to the&amp;nbsp;&lt;span style="font-weight:400;"&gt;TDK Demo Kit Software downloads page.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-weight:400;"&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760771952171v4.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-weight:400;"&gt;&amp;nbsp;And then I clicked on get user interface/ firmware.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-weight:400;"&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760772085704v5.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-weight:400;"&gt;Then I entered the details in the pop-up &amp;ldquo;Get the Software&amp;rdquo; then&amp;nbsp;clicked on send and&amp;nbsp;got the download option(as shown below) to download the .zip file.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-weight:400;"&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760772368519v6.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-weight:400;"&gt;After the .zip file is downloaded I extracted the files to a folder. There&amp;#39;s a folder named &amp;quot;config&amp;quot; and an .exe file. The .exe file named &amp;quot;20250228_TDK_USSM_Sensor_GUI_V3.5&amp;quot; is the GUI for the USSM Demo kit.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-weight:400;"&gt;Note :&amp;nbsp;The instructions for installation and using the GUI, provided in the reference manual seems to be for the previous version of the GUI which is different as compared to the present(v3.5) version of the GUI available for download.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id="mcetoc_1j7r54al54"&gt;&lt;span&gt;&lt;span style="font-weight:400;"&gt;Exploring the TDK USSM Demo Kit&amp;#39;s GUI&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-weight:400;"&gt;Now, after downloading and extracting the GUI, I connected the demo kit to the pc via the USB cable and then launched the GUI.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-weight:400;"&gt;&lt;img loading="lazy" alt="image" style="display:block;margin-left:auto;margin-right:auto;max-height:267px;max-width:480px;"  height="267" src="https://community.element14.com/resized-image/__size/960x534/__key/communityserver-discussions-components-files/444/Screenshot-2025_2D00_10_2D00_16-103823.png" width="480" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-weight:400;"&gt;Note: The demo kit has to be connected to the PC before launching the GUI, else the GUI doesn&amp;#39;t detect the connected demo kit and you&amp;#39;ll have to relaunch the GUI for it to detect the demo kit.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After the GUI loaded&amp;nbsp;I was greeted with the home screen consisting of the &lt;strong&gt;Measurements&lt;/strong&gt;, &lt;strong&gt;Data Visualization&lt;/strong&gt; and the &lt;strong&gt;Terminal&lt;/strong&gt; sections as shown below.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760780650746v9.png" /&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;At the bottom of the GUI application the connection status and through which COM port the device is connected is listed.&lt;/p&gt;
&lt;h2 id="mcetoc_1j7rmiqe80"&gt;Measurements Section&lt;/h2&gt;
&lt;p&gt;The measurements section is&lt;span&gt;&amp;nbsp;the command panel for running tests. It&amp;#39;s possible to&amp;nbsp;add new measurement tasks, select from the sensor&amp;#39;s various operational modes (I&amp;#39;ll discuss more about these modes in the project blog) as shown below.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760781017773v10.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;STREAMOUT&lt;/strong&gt; is the preferrable type of measurement for my initial testing which involves getting the sensor&amp;#39;s reading in centimeters so as to check how accurate the distance reading from the USSM is. Another point to be noted is that only one type of measurement can be active at a time, it&amp;#39;s not possible to allocate multiple type of measurements for each USSM.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The measurements section can also be used to assign specific sensors to the measurement task, and then start, stop, and save or either export the results from/to a file. There&amp;#39;s also a icon to access the Registers Window which allows for the configuration of the sensors parameters (I&amp;#39;ll dive into this in my project blog since there&amp;#39;s a lot of parameters(109 of them ! but only a few may be required in the final application) to be discussed and configured).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760793143946v1.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: The measurement profiles A,B,C can also be configured through this &lt;strong&gt;Registers Window&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760793353977v2.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j7rmitmc1"&gt;&lt;span&gt;Data Visualization Section&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt; It&amp;#39;s a real-time graphing window that visualizes the data from the USSMs. It&amp;#39;s possible add and visualize&amp;nbsp;data from multiple USSMs and see the sensor&amp;#39;s perception through this section.&lt;/span&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760794221799v4.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note :&amp;nbsp;It also has some features for data analysis through transforms, accessible by right-clicking on the graph, which is useful for some quick analysis of the USSM&amp;#39;s waveforms.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760794373882v5.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j7rniq862"&gt;&lt;span&gt;Terminal Section&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;This is the only working serial console available to pass send commands(as listed in the reference manual) directly to the demo kit through the COM port. It&amp;#39;s also possible to save the log of commands and update the firmware of the board in this terminal section.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760794088035v3.png" /&gt;&lt;/p&gt;
&lt;p&gt;Note: I did try to connect through the COM port using PuTTY to send commands but it wasn&amp;#39;t working. Pressing on the boot button gave some metadata.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-discussions-components-files/444/PuTTY_5F00_conn.mp4"&gt;community.element14.com/.../PuTTY_5F00_conn.mp4&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j7ro5qcl3"&gt;Taking the measurements from the&amp;nbsp;USSMs&lt;/h2&gt;
&lt;p&gt;I mounted the TDK USSM Demo Kit on the tripod stand and took it outside to take some measurements using the solo mode for each USSM, by placing a wooden&amp;nbsp;surface&amp;nbsp;nearly 3 feet away from the sensors.&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s how it looks&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760795029805v6.png" /&gt;&lt;/p&gt;
&lt;p&gt;Now, using the &lt;strong&gt;STREAMOUT &lt;/strong&gt;measurement type, I observed the measurements from the USSMs.&lt;/p&gt;
&lt;p&gt;It seems like the sensor_0 was giving me some fluctuating and &amp;quot;jumpy&amp;quot; readings, especially when compared to the sensor_1&amp;#39;s readings, the same result can also be observed from the Distance tab (only the solo measurement mode is available to test even though the picture at the center of GUI shows the range for pitch and catch mode) in the TDK GUI.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-discussions-components-files/444/distance_5F00_tab_5F00_readings.mp4"&gt;community.element14.com/.../distance_5F00_tab_5F00_readings.mp4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Even after placing the the sensors nearly 2 feet away from the wooden surface the sensor_0 readings had too much of the fluctuations.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-discussions-components-files/444/streamout_5F00_2ft.mp4"&gt;community.element14.com/.../streamout_5F00_2ft.mp4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, I looked into the sensor parameter&amp;#39;s through the Registers Window and found that the some of the register values were a bit different.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760797299238v7.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;My first thought was that this might be an error. But in fact, this is probably the sign of calibration during the manufacturing process. No two physical components are ever&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="ng-star-inserted"&gt;perfectly&lt;/span&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;identical. There may be some tiny, microscopic variations in the piezoelectric material of the transducer or in the analog components of the ASIC and TDK probably performed an end-of-line calibration for each sensor,&amp;nbsp;&lt;span&gt;testing its specific performance and then writing a unique set of calibration values to its internal EEPROM (non-volatile memory) to compensate for the these defects.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;This discovery also likely explains an issue I was having, was related to these parameters. So I did adjust the noise suppression from 0% to 50% and the temperature, to try and see if the readings are stabilized for the sensor_0.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760798846347v8.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;After comparing the data from the STREAMOUT measurement for both the USSM&amp;#39;s the readings seems to be relatively stable after the calibration, with the margin of error within +/- 1cm (hopefully after&amp;nbsp;a through final re-calibration, I&amp;#39;ll try to resolve this too).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-discussions-components-files/444/after_5F00_calibration.mp4"&gt;community.element14.com/.../after_5F00_calibration.mp4&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;Then, I&amp;nbsp;moved the&amp;nbsp;the wooden surface and then did a max range test of the USSM&amp;#39;s solo mode (only the pitch and catch mode has the max range of 5m)&amp;nbsp; both the sensors gave different values.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;Sensor_0 maxed out at 238 cms&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760800540793v9.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;Sensor_1 maxed out at 251 cms.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;&lt;img loading="lazy" alt="image" style="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/444/pastedimage1760800714624v10.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span class="ng-star-inserted"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-weight:400;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Unboxing TDK Ultrasonic Sensor Kit (EcoFill #1)</title><link>https://community.element14.com/thread/56285?ContentTypeID=0</link><pubDate>Fri, 17 Oct 2025 17:17:29 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:f7cc4f47-19fb-4e5b-b31c-817b200d0d34</guid><dc:creator>taifur</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/56285?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56285/unboxing-tdk-ultrasonic-sensor-kit-ecofill-1/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I am proud to be an official challenger of &lt;strong&gt;In Reach! Ultrasonic Sensor Sending Challenge&lt;/strong&gt;. Although I received the challenger kit two weeks ago, I couldn&amp;#39;t start until yesterday. Yesterday, when I first opened the box, it gave me a good feeling about the organization of the kit inside a small box. The kit includes a demo board inside an antistatic bag, two waterproof sensors, two sensor connection cables for linking the sensor unit to the demo board, one micro USB cable for connecting the demo board to the PC, and two sensor washers and gaskets for waterproof mounting.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:495px;max-width:636px;"  height="495" src="https://community.element14.com/resized-image/__size/1272x990/__key/communityserver-discussions-components-files/444/1.jpg" width="636" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;em&gt;Fig 1. Inside the box&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The inner side of the box&amp;rsquo;s top cover features three QR codes linking to the demo kit quick-start guide, the demo kit software, and the official landing page.&amp;nbsp;These three QR codes immediately caught my attention as soon as I opened the box.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:405px;max-width:639px;"  height="405" src="https://community.element14.com/resized-image/__size/1278x810/__key/communityserver-discussions-components-files/444/2.jpg" width="639" /&gt;&lt;/p&gt;
&lt;p&gt;The size, shape, and design of the sensors make it ideal for installation inside a liquid tank for precise level monitoring. Its compact form even allows it to fit inside a regular water bottle&amp;mdash;perfect for creating a smart water bottle project, which I might explore in the future.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/demo_2D00_board.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The kit comes with a demo board featuring two sensor connectors and a pair of I2C ports. I&amp;rsquo;m not entirely sure about the purpose of the I2C ports yet, but I plan to explore their functionality during later experiments. The sensor ports have only three pins, and this confirms that the sensor will communicate with only one wire. It seems the board also has a 10-pin JTAG connector, possibly for programming and debugging the microcontroller.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:408px;max-width:640px;"  height="408" src="https://community.element14.com/resized-image/__size/1280x816/__key/communityserver-discussions-components-files/444/5.jpg" width="640" /&gt;&lt;/p&gt;
&lt;p&gt;Design and quality of the sensor cables are very impressive. I also like the aluminum washers.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/6.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The 3-pin interfacing cable is long enough for experimental application, and attaching the sensor to the demo board using the interfacing cable was very easy.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:372px;max-width:639px;"  height="372" src="https://community.element14.com/resized-image/__size/1278x744/__key/communityserver-discussions-components-files/444/7.jpg" width="639" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:373px;max-width:639px;"  height="373" src="https://community.element14.com/resized-image/__size/1278x746/__key/communityserver-discussions-components-files/444/8.jpg" width="639" /&gt;&lt;/p&gt;
&lt;p&gt;First, I connected one of the sensors to the demo board, but I was curious to see how it looks with both of the sensors. And I finally did it, and it looks cool. Though the accuracy and stability of the sensor are more important than the looks but I believe that as it looks cool, it will work cool.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:479px;max-width:639px;"  height="479" src="https://community.element14.com/resized-image/__size/1278x958/__key/communityserver-discussions-components-files/444/9.jpg" width="639" /&gt;&lt;/p&gt;
&lt;p&gt;I have not powered the sensors yet. Before powering the device, I want to read the datasheet and reference materials. I will share my experience soon.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Echo Park – Hardware Design Post 3</title><link>https://community.element14.com/thread/56269?ContentTypeID=0</link><pubDate>Mon, 13 Oct 2025 03:44:25 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:a9134da5-501b-48d5-88e4-72ebdec2b496</guid><dc:creator>ralphjy</dc:creator><slash:comments>9</slash:comments><comments>https://community.element14.com/thread/56269?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56269/echo-park-hardware-design-post-3/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h2 id="mcetoc_1j7dnm8m7c"&gt;&lt;strong&gt;&lt;u&gt;Hardware Description&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="mcetoc_1j7dnmfk8d"&gt;&lt;u&gt;Features&lt;/u&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ultrasonic Sensor measures vehicle position from 225cm to 50cm&lt;/li&gt;
&lt;li&gt;Visual indication of position in 25cm steps&lt;/li&gt;
&lt;li&gt;Audible and Visual feedback when position is less than 50cm&lt;/li&gt;
&lt;li&gt;Onboard display of measured distance&lt;/li&gt;
&lt;li&gt;Vehicle identification using License Plate Recognition (LPR)&lt;/li&gt;
&lt;li&gt;MQTT notification of vehicle parked&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j7dnlth7b"&gt;&lt;strong&gt;&lt;u&gt;Block Diagram&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;img alt="image" style="max-height:413px;max-width:734px;"  height="413" src="https://community.element14.com/resized-image/__size/1468x826/__key/communityserver-discussions-components-files/444/Echo-Park-Block-Diagram.jpg" width="734" /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1j7dnjjcm9"&gt;&lt;strong&gt;&lt;u&gt;Components&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="mcetoc_1j7dnk0u6a"&gt;&lt;u&gt;Module BOM&lt;/u&gt;&lt;/h3&gt;
&lt;table style="float:left;" width="967" height="209"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;Component&lt;/td&gt;
&lt;td style="text-align:center;"&gt;Description&lt;/td&gt;
&lt;td style="text-align:center;"&gt;Qty&lt;/td&gt;
&lt;td style="text-align:center;"&gt;Link&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;TDK USSM1.0 PLUS-FS&lt;/td&gt;
&lt;td style="text-align:center;"&gt;ULTRASONIC SENSOR, 74.5KHZ&lt;/td&gt;
&lt;td style="text-align:center;"&gt;1&lt;/td&gt;
&lt;td style="text-align:left;"&gt;&lt;a href="https://www.newark.com/epcos/b59110w2111w032/ultrasonic-sensor-74-5khz-60deg/dp/82AK9947?COM=e14c-direct-ugc&amp;amp;CMP=e14c-direct-ugc&amp;amp;osetc=e14c-direct-ugc" target="_blank" data-e14adj="t"&gt;www.newark.com/.../82AK9947&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;Xiao ESP32S3 Sense&lt;/td&gt;
&lt;td style="text-align:center;"&gt;Xiao ESP32S3 with OV2640 Camera&lt;/td&gt;
&lt;td style="text-align:center;"&gt;1&lt;/td&gt;
&lt;td style="text-align:left;"&gt;&lt;a href="https://www.seeedstudio.com/Seeed-Studio-XIAO-ESP32S3-Sense-Pre-Soldered-p-6335.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;www.seeedstudio.com/Seeed-Studio-XIAO-ESP32S3-Sense-Pre-Soldered-p-6335.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;Xiao Expansion Board&lt;/td&gt;
&lt;td style="text-align:center;"&gt;Xiao Expansion Board with 0.96 OLED&lt;/td&gt;
&lt;td style="text-align:center;"&gt;1&lt;/td&gt;
&lt;td style="text-align:left;"&gt;&lt;a href="https://www.seeedstudio.com/Seeeduino-XIAO-Expansion-board-p-4746.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;www.seeedstudio.com/Seeeduino-XIAO-Expansion-board-p-4746.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;DC-DC Boost Converter&lt;/td&gt;
&lt;td style="text-align:center;"&gt;3.3V to 12V Boost Converter&lt;/td&gt;
&lt;td style="text-align:center;"&gt;1&lt;/td&gt;
&lt;td style="text-align:left;"&gt;&lt;a href="https://www.amazon.com/dp/B08M19C7MM" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;www.amazon.com/.../B08M19C7MM&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;2N7000 MOSFET&lt;/td&gt;
&lt;td style="text-align:center;"&gt;N-Channel MOSFET 200mA 60V&lt;/td&gt;
&lt;td style="text-align:center;"&gt;1&lt;/td&gt;
&lt;td style="text-align:left;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;DC 5V Active Buzzer&lt;/td&gt;
&lt;td style="text-align:center;"&gt;Electromagnetic Buzzer 2300Hz 85dB @10cm&lt;/td&gt;
&lt;td style="text-align:center;"&gt;1&lt;/td&gt;
&lt;td style="text-align:left;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;Carbon Film Resistors&lt;/td&gt;
&lt;td style="text-align:center;"&gt;Various values 5% 1/4W&lt;/td&gt;
&lt;td style="text-align:center;"&gt;3&lt;/td&gt;
&lt;td style="text-align:left;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;NeoPixel Stick&lt;/td&gt;
&lt;td style="text-align:center;"&gt;8 x 5050 RGB LED with Integrated Drivers&lt;/td&gt;
&lt;td style="text-align:center;"&gt;1&lt;/td&gt;
&lt;td style="text-align:left;"&gt;&lt;a href="https://www.adafruit.com/product/1426" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;www.adafruit.com/.../1426&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;"&gt;JST SH 1.0mm pigtail&lt;/td&gt;
&lt;td style="text-align:center;"&gt;3 Pin Male Connector with 20AWG 20cm wires&lt;/td&gt;
&lt;td style="text-align:center;"&gt;1&lt;/td&gt;
&lt;td style="text-align:center;"&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I will defer the detailed hardware description to the final project blog post but will show the operation of the prototype assembly that I am testing.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1j7dnj7nd8"&gt;&lt;strong&gt;&lt;u&gt;Initial tests&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="mcetoc_1j7dnivkk7"&gt;&lt;u&gt;Boost converter&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;The first component that I checked out was the DC-DC Converter.&amp;nbsp; I didn&amp;rsquo;t expect any issues because it is using the PW5300A part which has far more capability than is required for this simple circuit and it is switching at a fixed frequency of 1.2MHz.&lt;/p&gt;
&lt;p&gt;The input to the converter is the output of the 3.3V regulator on the Xiao ESP32S3.&amp;nbsp; The documentation states that you can draw 700mA from the regulator, but I&amp;rsquo;ll need to be wary of too much WiFi activity.&amp;nbsp; I want to use the 3.3V because I&amp;rsquo;d like to have the ability to run off a battery if I want to use this project in a portable mode.&lt;/p&gt;
&lt;p&gt;The output of the converter by default is 12V but is selectable to 5V, 8V, or 9V using pad jumpers.&amp;nbsp; I decided to leave it at 12V to match the setup on the Demo board.&amp;nbsp; The USSM is capable of running down to 8V but it is easier to correlate when setups are the same.&lt;/p&gt;
&lt;p&gt;The output was at 11.98V with reasonable output ripple.&amp;nbsp; I will document this in the final blog.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:235px;max-width:484px;"  height="235" src="https://community.element14.com/resized-image/__size/968x470/__key/communityserver-discussions-components-files/444/DC_2D00_DC-Converter.jpg" width="484" /&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j7dnikss6"&gt;&lt;u&gt;Level converter&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;Since I only have to translate a single IO pin for the sensor I decided to use a discrete MOSFET circuit rather than use a 4 channel BSS138 level converter that I have from Adafruit.&amp;nbsp; It will also make it easier to make changes to the pullup resistors in case that is necessary.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:240px;max-width:533px;" height="240" src="https://community.element14.com/resized-image/__size/1066x480/__key/communityserver-discussions-components-files/444/pastedimage1760322026449v1.png" width="533"  /&gt;&lt;/p&gt;
&lt;p&gt;My primary concern with this circuit is that I am using a relatively old N-channel FET so the on resistance and VGS threshold are higher than more recent parts.&amp;nbsp; The typical values for this part should be fine for this circuit but if I get a part that is on the high side of the specification it could be marginal.&amp;nbsp; E.G. the typical VGS is 2V but max is 3V.&amp;nbsp; The currents&amp;nbsp;are under 1mA for this setup so that helps.&amp;nbsp; I tested the converter statically and everything looked good (under 10mV).&amp;nbsp; I also observed it on a scope and it was switching cleanly but I may reduce the 15K pullup on the USSM side to get better transitions (when I copied the circuit from the reference manual I did not account for the extra 10K pullup in the cable &amp;ndash; that was pointed out by another challenger).&amp;nbsp; I&amp;nbsp;am doing the testing&amp;nbsp;using my handheld scope and I haven&amp;rsquo;t set up&amp;nbsp;the USB interface to my PC yet so some of this documentation is being deferred until the project blog.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="mcetoc_1j7dng8mk1"&gt;&lt;strong&gt;&lt;u&gt;Prototype Assembly&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Echo-Park-Prototype.jpg" /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j7dngku52"&gt;&lt;u&gt;Distance visual feedback&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;Dave Beacon had mentioned in a comment on an earlier post that I could use an LED pixel strip as a horizontal light bar that illuminated more pixels as you got closer then flashed solid red once you reached zero distance.&amp;nbsp; It turns out that I had an Adafruit 8 NeoPixel strip available so the following is my first implementation attempt.&amp;nbsp; I am just lighting a single pixel that moves across the strip based on distance, but I may change that later.&amp;nbsp; My initial testing was in my office, so my &amp;ldquo;zero&amp;rdquo; distance was 25cm and 25cm steps from right to left as distance increases.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The following pictures show the progression of the pixel lighting based on the distance that is displayed on the OLED screen.&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t implemented blinking all the LEDs red at the &amp;ldquo;zero&amp;rsquo; distance, but I will do that later in addition to adding an audible alarm using the buzzer.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/25cm.jpg" /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/50cm.jpg" /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/150cm.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;One thing that I had forgotten about is how bright these NeoPixels are.&amp;nbsp; It&amp;rsquo;s recommended that you run them off a 5V supply, but I usually connect them to a Grove interface, so I run them on 3.3V.&amp;nbsp; I had left the intensity at 100% and when testing I had one light up when I was looking directly at it, and I had flashes in my vision for about 10 minutes.&amp;nbsp; I&amp;rsquo;ve reduced the brightness to 30% while testing.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="mcetoc_1j7dngvks3"&gt;&lt;u&gt;Zero distance audible alarm&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;There is a passive buzzer on the Xiao Expansion board down next to the MCU.&amp;nbsp; I was going to use this as alarm when the correct parking distance was reached.&amp;nbsp; When I tried the test program I didn&amp;rsquo;t hear anything.&amp;nbsp; It turns out that I had cut the jumper trace to the buzzer so that I could use that GPIO pin elsewhere.&amp;nbsp; I restored the connection, and the buzzer was audible but not very loud.&amp;nbsp; This is a passive buzzer driven with a PWM pattern on the GPIO pin.&amp;nbsp; I then recalled that I have never had any luck with these passive buzzers.&amp;nbsp; I had probably cut that trace earlier because it was a waste of a GPIO pin&amp;hellip;&lt;/p&gt;
&lt;p&gt;I also recalled that I had purchased a bag full of active buzzers to address this problem.&amp;nbsp; These are relatively small (12mm diameter x 10mm tall) and even though they are rated at 4-6V, they work well at 3.3V.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:177px;max-width:128px;"  height="177" src="https://community.element14.com/resized-image/__size/256x354/__key/communityserver-discussions-components-files/444/Active-buzzer_5F00_.jpg" width="128" /&gt;&lt;/p&gt;
&lt;p&gt;So, I added some jumper wires to the GPIO and ground, mounted it near the level converter, and proceeded to test it out. The sound level was good, but I&amp;rsquo;ll have to see whether it can be heard in the vehicle (might be difficult with the windows up and the engine running). I then encountered something that I hadn&amp;rsquo;t considered &amp;ndash; my distance measurements were all messed up. The resonant frequency of the buzzer is 2300Hz, but that all must have been reflected at the sensor because of where I had mounted it. I repositioned the buzzer behind the assembly and pointed upward and that corrected the problem.&amp;nbsp; I am going to mount the LED strip and buzzer separately from the sensor assembly in the final version, so hopefully this shouldn&amp;#39;t be a problem.&lt;/p&gt;
&lt;h2 id="mcetoc_1j7docokpi"&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1j7dobc6fg"&gt;Testing in the garage&lt;/h2&gt;
&lt;p&gt;Time to do some testing in the garage. I have changed the &amp;quot;zero&amp;quot; distance to 50cm.&amp;nbsp; For the first test I positioned the sensor assembly at the garage door and just walked toward it. I couldn&amp;rsquo;t find a small &amp;ldquo;vehicle&amp;rdquo; handy that I could attach the cell phone to, so apologies for the shaky video.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j7dnh8p44"&gt;&lt;u&gt;Echo Park Distance Test&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;&lt;u&gt;&lt;a href="https://youtu.be/E_o9vvhoHYE"&gt;https://youtu.be/E_o9vvhoHYE&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Then I did a quick test with the sensor pointed at the front of the car.&amp;nbsp; I was somewhat surprised that the sensor actually alarmed at 50cm and stopped at 53cm.&amp;nbsp; Of course, this was not a dynamic test and I&amp;rsquo;m realizing that it might be a real challenge trying out to figure out how to document that.&amp;nbsp; Maybe if I had a dashcam...&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j7dnhi3k5"&gt;&lt;u&gt;Parking Distance 50cm&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;&lt;u&gt;&lt;a href="https://youtu.be/RtsqxCBWcwo"&gt;https://youtu.be/RtsqxCBWcwo&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;At 53cm the first pixel lights and the alarm stops.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Parking-Distance-53cm.jpg" /&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;I am having concerns about how responsive this system needs to be.&amp;nbsp; I have a median filter to try to de-glitch the measurements and a moving average filter following it.&amp;nbsp; I&amp;rsquo;ve had to back those off a lot to get a reasonable tracking response.&amp;nbsp; I guess a lot of empirical testing will be required.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&amp;nbsp;&lt;/u&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j7dne9mt0"&gt;&lt;strong&gt;&lt;u&gt;License Plate Recognition&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;I haven&amp;rsquo;t quite got this working yet.&amp;nbsp; I plan to use a cloud service to do the number/character extraction.&amp;nbsp; I&amp;rsquo;ve seen several project examples using this method.&amp;nbsp; My first attempt has been experiencing memory issues, and I&amp;rsquo;ve been getting into reboot loops a lot.&lt;/p&gt;
&lt;p&gt;I have a couple of more things to try and I&amp;rsquo;m still hopeful that I can get this working.&amp;nbsp; That will be the subject of the next post.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>SwishMaster - #4 - Connecting USSM to Arduino</title><link>https://community.element14.com/thread/56263?ContentTypeID=0</link><pubDate>Sat, 11 Oct 2025 06:17:11 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:ac8f95bc-c847-437a-9795-24962b84efc4</guid><dc:creator>amgalbu</dc:creator><slash:comments>1</slash:comments><comments>https://community.element14.com/thread/56263?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56263/swishmaster---4---connecting-ussm-to-arduino/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;As I said in my previous post, the SwishMaster device will be based on an Arduino 33 BLE Sense, which connects to two USSMs by means of level shifters. The overall hardware architecture is shown in the following picture&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/6165.Diagramma.png" /&gt;&lt;/p&gt;
&lt;p&gt;However, after checking parts availability in my components shelf, I switched the an Arduino Nano 33 IoT&lt;/p&gt;
&lt;h1 id="mcetoc_1j78smijl0"&gt;Connecting the USSM&lt;/h1&gt;
&lt;p&gt;As shown in the diagram above, I am going to use a level shifter to connect the USSM IO data line to the Arduino board. In particular, I chose a bidirectional level shifter converter made by Adafruit, which is made by four identical channels. Each channel features the following circuit&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760161412230v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;Here LV (low-voltage) side is connected to a IO on the Arduino board, and the HV (high voltage) side is connect to the USSM IO data line. Regarding the MOSFET pins,&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the gate (G) is tied to the LV power supply (in my case, 3.3V)&lt;/li&gt;
&lt;li&gt;the&amp;nbsp;source (S) is connected to the Arduino IO pin&lt;/li&gt;
&lt;li&gt;the drain (D) is connected to the USSM IO data line&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The principle of operation for thsi circuit is&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;when both sides&amp;nbsp;(LV1 and HV1) are high, the voltage on the source is equal to the&amp;nbsp;voltage on the gate, and the MOSFET is not conducting. Hence, HV1 is pulled-up to the voltage of the HV power supply&lt;/li&gt;
&lt;li&gt;when LV1 is pulled-down, the MOSFET furms on because the voltage between gate and source is 3.3 V. The drain is pulled-down as well, so the low state is propagated to HV1&lt;/li&gt;
&lt;li&gt;when HV1 is pulled-down, the&amp;nbsp;MOSFET&amp;rsquo;s body diode (intrinsic diode between drain and source) conducts slightly, pulling the source (LV side) a little below 0.7 V. This drop causes the&amp;nbsp;MOSFET to turn on, and the low state is propagated to LV1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;According to Adafruit documentation, the maximum voltage on the HV side is 10V. This statement puzzles me, because the BSS138 states that the maximum drain-source voltage is 50 V. Anyway, just to be on the safe side, I will power the USSM with 10V, since such a voltage is still within the specifications.&lt;/p&gt;
&lt;p&gt;Another problem with the breakout board is the 10K pullup resistor (or, at least, this is my explanation). This resistor is bit too strong and prevents the signal to get close to the ground when the sensor imposes a low state on the data line. This condition is shown in the following screenshots of the signals captured by the oscilloscope (red signal is the signal on the LV side, yellow is the signal on the HV side)&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Scope.png" /&gt;&lt;/p&gt;
&lt;p&gt;The signal from USSM is read correctly by Arduino, but, in my opinion, the voltage of the low state is too close to the threshold between low and high states. As a matter of fact, according to the&amp;nbsp;Microchip SAMD21G18 datasheet, a low&amp;nbsp;state is detected when voltage is below 0.99 V...&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The simplest solution is to remove or short-circuit the pull-up resistor on the breakout board and add an external pull-up resistor of maybe 15K or more. At the moment, I will keep on working without any changes because I fear damaging the board. I will make this change after I have a working prototype&lt;/p&gt;
&lt;h1 id="mcetoc_1j78tt8so1"&gt;Reading USSM data&lt;/h1&gt;
&lt;p&gt;To interface with the USSM, I will leverage the Arduino library provided by TDK and can be downloaded from &lt;a href="https://www.tdk-electronics.tdk.com/en/3105452/design-support/design-tools/ussm/ussm-arduino-library" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;this link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can install the library from the Arduino IDE by clicking &lt;strong&gt;Sketch&amp;nbsp;&lt;/strong&gt;-&amp;gt; &lt;strong&gt;Include library&lt;/strong&gt; -&amp;gt;&amp;nbsp;&lt;strong&gt;Add .ZIP library&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760162679429v2.png" /&gt;&lt;/p&gt;
&lt;p&gt;Here is an example of usage of the library. In my case, I just need to measure distance in centimeter. The example TDK_USSM_multiple_cm implements exactly what I need for this project&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#include &amp;lt;TDK_USSM.h&amp;gt;


//-- Sensors Pinmap Sensors
#define N_SENSORS 2
const int IoPins[N_SENSORS] = {14, 16}; // Trigger/Echo Pin of Ultrasonic Sensor

// Note: Echo Pins could be same as Trigger pin if a bidir level shifter is used.

TDK_USSM TdkUssm(IoPins, N_SENSORS); //Initialize Sensor Pins

//-- Setup
void setup()
{
  Serial.begin(115200);
}

//-- Runtime.
void loop()
{
 while(1)
 {
   for(int i=0; i&amp;lt;N_SENSORS; i++)
   {
     Serial.print( TdkUssm.GetDistanceCm(i) ); // Prints Distance in cm of sensor i.
     Serial.print(&amp;quot; &amp;quot;);
     delay(100);
   }

   Serial.println(); // Terminate single capture line
   delay(2);
 }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;I just changed &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;N_SENSORS&lt;/span&gt; (from 4 to 2) and &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;IoPins&lt;/span&gt; to match the pins used on my board.&lt;/p&gt;
&lt;p&gt;The original version of the library did not compile, so I had to make a little change to the file &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;Arduino/Libraries/TDK_USSM_Ultrasonic_Sensor-1.0.2/src/tdk_ussm_defs.h&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The change is shown in the following code snippet&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;/*! \ingroup tdk_ussm
 * \brief Measurement Data Structure.
 */
typedef struct
{
    uint16_t id; // &amp;lt;-- original code was uint8_t id
    uint8_t lsb;
    uint8_t nbit;
    uint32_t val;
    const char *name;
    const char *description;
    const eLUTStruct *lut;
} eParameterElement;
&lt;/pre&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j78ua5h22"&gt;First test&lt;/h1&gt;
&lt;p&gt;And here is the terminal output&amp;nbsp;after&amp;nbsp;the above test&amp;nbsp;code have been downloaded and run&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760163202448v3.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1j78uebvh3"&gt;Next steps&lt;/h1&gt;
&lt;p&gt;I am going now to implement the firmware to calculate the ball parabola,&amp;nbsp;show results on a local LCD screen, send data out through BLE and so on and so on.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>The Water Wizard: 01 - Concept &amp; Challenge Kickoff</title><link>https://community.element14.com/thread/56261?ContentTypeID=0</link><pubDate>Fri, 10 Oct 2025 22:18:56 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:55640fa5-8dd4-48ad-909b-581cfcf3ca0b</guid><dc:creator>sunnyiut</dc:creator><slash:comments>3</slash:comments><comments>https://community.element14.com/thread/56261?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56261/the-water-wizard-01---concept-challenge-kickoff/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p style="text-align:center;"&gt;**&lt;em&gt;the images in this introductory blog are AI generated. I have used it for reference to describe the concept.&amp;nbsp;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div class="table-of-contents"&gt;
&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#mcetoc_1j780j3t93" data-e14adj="t"&gt;The Frustration of an Empty Tank&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1j780k2t94" data-e14adj="t"&gt;A Simple, Wire-Free Solution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1j780mb125" data-e14adj="t"&gt;The Concept in a Nutshell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1j781ff6e6" data-e14adj="t"&gt;Micromanaging the power&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1j7825eib8" data-e14adj="t"&gt;Exploring the Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1j78str1f0" data-e14adj="t"&gt;Limitation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This is the introductory blog for the&amp;nbsp;&lt;b&gt;&amp;ldquo;In Reach! - Ultrasonic Sensor Sensing Challenge,&amp;rdquo;&lt;/b&gt; and my project is something very familiar to all &amp;ndash; a Water Level Monitor. A simple project with smartness of precise sensing, battery-efficient and completely wireless.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s for those living in areas with unreliable water supply.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;img alt="image" style="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/444/pastedimage1760131817524v1.png" /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j780j3t93"&gt;&lt;b&gt;The Frustration of an Empty Tank&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;Well, I know that you all know how it feels to find out the empty tank suddenly and you are quite familiar with the water level monitoring devices. Still then trying to keep it short &amp;ndash;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a common issue for people living in any region where water supply isn&amp;rsquo;t consistent. Resulting the motor runs too long, tanks overflow, or sometimes, the pump is never turned on in time or even running the pump dry.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The solutions are there as water level monitoring devices are available, but it needs long wires from the pump control unit to the sensor. Which also makes the installations complicated. Wires from float sensors or long cables increases the risk of break, corrode or cause leakage.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;On the other hand, the advanced wireless devices are quite expensive and power hungry.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j780k2t94"&gt;A Simple, Wire-Free Solution&lt;/h3&gt;
&lt;p&gt;The core goal of &lt;b&gt;The&lt;/b&gt; &lt;b&gt;Water Wizard&lt;/b&gt; is to create a &lt;b&gt;battery-friendly, wire-free system&lt;/b&gt; to monitor water levels in any tank, whether it&amp;rsquo;s at home or out in the field. I&amp;rsquo;ll use the TDK USSM-plus-FS, an advanced ultrasonic sensor to measure the water level in the tank and use the Bluetooth Low Energy for long range energy efficient wireless communication. Primarily, I intend to utilize a couple of Nordic nRF5340 boards.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It sends water level data straight to a control panel and automates the pump when needed.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j780mb125"&gt;The Concept in a Nutshell&lt;/h3&gt;
&lt;p&gt;This project is about &lt;b&gt;simplicity, affordability, and reliability.&lt;/b&gt; The target is to develop such a product that gives no hassle to the user and the key features are &amp;ndash;&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;{gallery}Concept in a nutshell&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760132556970v6.png" /&gt;&lt;/p&gt;
&lt;p&gt;The sensor - TDK USSM plus-fs ultrasonic sensor +&amp;nbsp;nRF5340&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760132607522v7.jpeg" /&gt;&lt;/p&gt;
&lt;p&gt;Wireless solution - BLE - nRF5340&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760132693182v8.png" /&gt;&lt;/p&gt;
&lt;p&gt;BLE nRF5340 + solid state relay&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760132761248v10.png" /&gt;&lt;/p&gt;
&lt;p&gt;Sample image of a companion app&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style="padding-left:30px;"&gt;&lt;b&gt;The Sensor Node:&lt;/b&gt;&lt;/h4&gt;
&lt;p style="padding-left:30px;"&gt;In this project the sensor module will be consists of two main components.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;I&amp;rsquo;m pairing the&amp;nbsp;&lt;b&gt;TDK USSM plus-fs ultrasonic sensor&lt;/b&gt; (the &amp;quot;eyes&amp;quot; of the system) with the incredibly energy efficient &lt;b&gt;nRF5340 BLE module&lt;/b&gt; (the &amp;quot;voice&amp;quot;). The Ultrasonic sensor will accurately measure the water level, and the nRF5340 will process that data and send it out wireless.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style="padding-left:30px;"&gt;&lt;b&gt;No Wires, No Worries:&lt;/b&gt;&lt;/h4&gt;
&lt;p style="padding-left:30px;"&gt;The entire &lt;b&gt;sensor node&lt;/b&gt; sits right on or inside the tank. It uses &lt;b&gt;Bluetooth Low Energy (BLE) Long Range mode&lt;/b&gt; and is designed for &lt;b&gt;low power&lt;/b&gt;, avoiding cables for power or data. I&amp;#39;ll be aiming for months of operation on a battery pack or potentially even a small solar cell. I&amp;#39;ll try to make it simple&amp;nbsp;and it should like &amp;#39;a plug n play&amp;#39; sensor.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;/p&gt;
&lt;h4 style="padding-left:30px;"&gt;&lt;b&gt;The Control Panel:&lt;/b&gt;&lt;/h4&gt;
&lt;p style="padding-left:30px;"&gt;A separate &lt;b&gt;Control Panel&lt;/b&gt;, also powered by an &lt;b&gt;nRF5340&lt;/b&gt;, will receive the wireless data from the tank. This unit acts as the interface between the sensor and the pump automation..&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;/p&gt;
&lt;h4 style="padding-left:30px;"&gt;&lt;b&gt;Pump Automation &amp;amp; Alerts:&lt;/b&gt;&lt;/h4&gt;
&lt;p style="padding-left:30px;"&gt;The Control Panel&amp;nbsp;will actively control the water pump using a relay. I&amp;#39;ll be using a magnetic contactor or Solid State Relay. This means we can automate the pumping: turn it on when the tank is low and off when it&amp;#39;s full.&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;h4 style="padding-left:30px;"&gt;&lt;b&gt;Data in the Pocket:&lt;/b&gt;&lt;/h4&gt;
&lt;p style="padding-left:30px;"&gt;Finally, there will be an&amp;nbsp;Android app which connects to the Control Panel, allowing to check the current water level, view history, and receive alerts right on the phone.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j781ff6e6"&gt;Micromanaging the power&lt;/h3&gt;
&lt;p&gt;A major issue for the wireless solutions currently available is that it&amp;#39;s not only expensive, but also very much power hungry. The sensor nad communication module needs to be powered by a separate supply. I have to keep it in my mind to make this solution energy - efficient as much as I can.&lt;/p&gt;
&lt;p&gt;My power management strategy will be putting the nRF5340 and TDK USSM into deep sleep when the motor is turned off. In my case the water pump is turned on manually twice a day and it runs around 30mins to fill up the tank fully. So, for most of the day, when the pump is idle, the nRF5340 can remain in its ultra-low-power sleep mode. So, it will be drawing only a few microamps (&amp;mu;A) to maintain an internal clock and listen for a &amp;quot;pump-on&amp;quot; trigger through BLE. This &amp;#39;pump-on&amp;#39; trigger can be generated by the control unit itself after a certain amount of time automatically.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Comparatively the ultrasonic sensor draws most of the current when it&amp;#39;s active. During this motor off period, the &amp;#39;power down&amp;#39; mode can be activated which makes it draw nearly zero current. Upon receiving the signal from the cotrol unit, the system wakes up and takes a precise measurement.&lt;/p&gt;
&lt;p&gt;Another option to further conserve the power could be adapting the sample rate. When the pump starts to fill up the tank the sensor can check the level every two minutes initially and upto 95% fill. As the tank approaches the 90% full mark it can increase the measurement frequency like every 30 seconds. I hope that we don&amp;#39;t need to make continuous measurement and that can save the battery energy.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j7825eib8"&gt;Exploring the Kit&lt;/h3&gt;
&lt;p&gt;&lt;span class="citation-35"&gt;This time I received the kit without any hassle - Thanks to TNT and element14 team for that.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="citation-34 citation-end-34"&gt;The USSM1.0 PLUS-FS is an ultrasonic pulse-echo product intended for range-finding and presence-detection&amp;nbsp;applications.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="citation-33 citation-end-33"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760134587232v11.jpeg" /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1760134674089v12.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span class="citation-33 citation-end-33"&gt;image courtesy: TDK Electronics&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span class="citation-33 citation-end-33"&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span class="citation-33 citation-end-33"&gt;Key Features and Technical Advantages&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span class="citation-33 citation-end-33"&gt;The main feature of the USSM plus-fs for this project is the combination of robustness and advanced signal processing:&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span class="citation-33 citation-end-33"&gt;&lt;b&gt;Integrated ASIC and Driver:&lt;/b&gt;&lt;span class="citation-32"&gt; The module is an &lt;/span&gt;&lt;b&gt;&lt;span class="citation-32"&gt;all-in-one package. Single transducer&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span class="citation-32"&gt;can be used for both Tx and Rx or two of them can be paired together. The sensor&lt;/span&gt;&lt;span class="citation-32"&gt;&amp;nbsp;includes the piezoelectric transducer, the necessary driver circuitry, and a high-end &lt;/span&gt;&lt;b&gt;&lt;span class="citation-32"&gt;Application-Specific Integrated Circuit (ASIC)&lt;/span&gt;&lt;/b&gt;&lt;span class="citation-32 citation-end-32"&gt; for signal processing.&lt;/span&gt; This integration handles complex Time-of-Flight (ToF) calculations internally, delivering clean, reliable digital range readings to the connected microcontroller (like the nRF5340 - for my project). I&amp;#39;ll be using the &amp;#39;single mode&amp;#39;. The range can be around 18cm to 5m.&amp;nbsp;Detects transparent surfaces, insensitive to object color and density, which is important for this project. Also it has high immunity against electromagnetic interferences (EMI) noise, maybe helpful as I&amp;#39;ll be using the wireless communication.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span class="citation-33 citation-end-33"&gt;&lt;b&gt;Mechanical Decoupling (Vibration Immunity):&lt;/b&gt;&lt;span class="citation-31"&gt;&amp;nbsp;The &lt;span data-huuid="1031955228746678797"&gt; piezoelectric disk, is physically separated from the main housing&lt;/span&gt;. I am not sure whether it&amp;#39;s through a matching material or something else [which is not clear to me]. However,&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span class="citation-31"&gt;mechanically decoupled&lt;/span&gt;&lt;/b&gt;&lt;span class="citation-31 citation-end-31"&gt; sensor element &lt;span class="citation-31"&gt;is a critical industrial feature&lt;/span&gt;.&lt;/span&gt; External mechanical vibrations can produce the false measurement result. It&amp;#39;s good to see that this sensor has good immunity to the vibration, and I would like to check it out during my experiments.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span class="citation-33 citation-end-33"&gt;&lt;span class="citation-30 citation-end-30"&gt;&lt;b&gt;Robust Environment Performance:&lt;/b&gt;&lt;span class="citation-29"&gt; The sensor has a compact, durable, w&lt;/span&gt;&lt;span class="citation-29 citation-end-29"&gt;ater/dust protected chassis integration up to IP65/67 (EN60529).&lt;/span&gt;&amp;nbsp;I&amp;#39;ll check it&amp;#39;s performance to dust, water splashes, and even temporary submersion. It&amp;#39;s essential for outdoor water tank monitoring. It works in a wide range of lighting conditions, including full sunlight to complete darkness.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span class="citation-33 citation-end-33"&gt;&lt;span class="citation-30 citation-end-30"&gt;&lt;b&gt;Power Down Mode:&lt;/b&gt;&amp;nbsp;An interesting feature that gives me the opportunity to&amp;nbsp; make it more energy-efficient. The inclusion of a dedicated &lt;b&gt;Power Down Mode&lt;/b&gt; is crucial for battery-powered projects. I need to check it out - I think it can be a&lt;span data-huuid="4899585640585073468"&gt;ctivated by sending a command to the sensor using bidirectional IO (3-wire) communication interface.&lt;span class="pjBG2e" data-cid="e78f9135-5923-44cf-ac46-667442bfe347"&gt;&lt;span class="UV3uM"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="citation-33 citation-end-33"&gt;&lt;span class="citation-30 citation-end-30"&gt;**&lt;em&gt;I&amp;#39;ll cover more details in my second blog on the transducer itself. I had a previous experience of housing raw piezoelectric transducer in a PVC tube with matching material, backing material prepared from epoxy resin. I&amp;#39;ll try to prepare a writeup on that too - it was interesting and I hope others will like it.&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Application in Water Level Monitoring&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;For water level monitoring in the reservoir, there are general purpose ultrasonic sensor modules available with lower price range. But&amp;nbsp; the TDK USSM plus-fs offers two major advantages:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;High Accuracy and Range:&lt;/b&gt;&amp;nbsp;In single mode, the range is 18 to 5m. It provides accurate, centimeter-level distance measurement over a range suitable for most domestic and industrial tanks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;Reliability in Adverse Conditions:&lt;/b&gt;&amp;nbsp;We often experience rooftop water tanks prone to condensation, temperature fluctuations, and exposure to dust/insects.&amp;nbsp;The USSM has a robust housing. Also it&amp;#39;s more immune to&amp;nbsp; vibration which can ensure that the sensor continues to provide stable, reliable readings. I&amp;#39;ll try to check it&amp;#39;s performance in adverse condition during my experiments to be rational.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1j78str1f0"&gt;Limitation&lt;/h3&gt;
&lt;p&gt;A major limitation could be the range of the nRF5340. In the long range mode [coded PHY] it should cover a good distance which can be helpful for farms like places where line of sight communication will be available. But for indoor, this range may get reduced. Which I need to check and if I cannot reach a good coverage, then I may need to think about some alternatives.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;script&gt;window.top.e14.func.queueScripts.add(function() { window.top.e14.func.e14DynaloadGallery(window.document);}, true );&lt;/script&gt;</description></item><item><title>Echo Park – Sensor Characterization Setup Post 2</title><link>https://community.element14.com/thread/56250?ContentTypeID=0</link><pubDate>Wed, 08 Oct 2025 22:02:50 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:34444b14-812e-4c98-aca8-6167ac8b945e</guid><dc:creator>ralphjy</dc:creator><slash:comments>2</slash:comments><comments>https://community.element14.com/thread/56250?ContentTypeID=0</comments><wfw:commentRss>https://community.element14.com/challenges-projects/design-challenges/in-reach-ultrasonic-sensor-sensing-challenge/f/forum/56250/echo-park-sensor-characterization-setup-post-2/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;&lt;u&gt;Sensor Characterization Setup&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have used a lot of the simple HC-SR04 Ultrasonic Ranging Modules that have similar range capabilities (2cm-4m).&amp;nbsp; These modules use separate send and receive elements and provide the transmit and receive circuits but use an external MCU to do the time-of-flight calculations.&amp;nbsp; The MCU sends a trigger pulse and receives an echo pulse.&amp;nbsp; It provides the timing to determine the roundtrip time and calculates the distance.&amp;nbsp; These modules operate at 40KHz and are not configurable.&amp;nbsp; They are easy to use (just program the MCU using one of many available libraries) and they just seem to work with moderate accuracy.&lt;/p&gt;
&lt;p&gt;So, I was very interested in testing the TDK USSM1.0 PLUS-FS module, which uses the &lt;a href="https://www.elmos.com/fileadmin/elmos-website/products/sensors/ultrasonic/elmos-compact-feature-description-for-sensor-integrated-applications-ic-e52433-an.pdf" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;&lt;strong&gt;elmos&lt;/strong&gt; E524-33 ASIC&lt;/a&gt;. &amp;nbsp;&amp;nbsp;This is a pulse-echo module that uses&amp;nbsp;a single piezo sensor for sending and receiving (to measure very short range (4cm), two modules can be used to send/receive).&amp;nbsp; The module operates at 74.5 KHz and has a single sensor range of (18cm-5m).&lt;/p&gt;
&lt;p&gt;This is a highly configurable module that can be tuned for specific measurement environments.&amp;nbsp; The following parameters can be adjusted:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Transmit Burst Power: Adjusts the energy of the ultrasonic pulse. Higher power is generally used for longer ranges.&lt;/li&gt;
&lt;li&gt;Receiver Sensitivity (Gain): Controls how faint an echo the sensor can detect. Higher sensitivity is needed for longer ranges, while lower sensitivity helps prevent false echoes from nearby objects. The E524.33 features advanced settings for the dynamic gain curve.&lt;/li&gt;
&lt;li&gt;Threshold Levels: Digital signal processing compares the received echo against programmable threshold levels. You can set a primary and a secondary threshold.&lt;/li&gt;
&lt;li&gt;Burst Length and Frequency: Defines the duration and frequency of the ultrasonic pulse.&lt;/li&gt;
&lt;li&gt;Damping Algorithm: For near-field measurements, the &amp;quot;Smart Damping&amp;quot; algorithm can be configured to minimize the transducer&amp;#39;s &amp;quot;settling time&amp;quot; or &amp;quot;blind zone&amp;quot; after transmitting the burst.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This configurability is a blessing and a curse.&amp;nbsp; This is certainly not a point and shoot sensor.&amp;nbsp; I was somewhat surprised when I set up the Demo Kit on my desk, pointed it at a large cardboard panel about 160cm away and got very noisy readings using the Streamout measurement although the average value was correct.&amp;nbsp; I moved the panel back to 175cm and got similar results.&amp;nbsp; Here are a couple of short videos of the Streamout plots.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/UzgbIyHvets" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;&lt;a href="https://youtu.be/UzgbIyHvets"&gt;https://youtu.be/UzgbIyHvets&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/AWDGroIn7N0" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;&lt;a href="https://youtu.be/AWDGroIn7N0"&gt;https://youtu.be/AWDGroIn7N0&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I then decided to try the measurements out in the hallway next to my office and the results were so bad that the average value was not monotonic as I varied the range. Here&amp;rsquo;s a plot of the sensor pointed at the door at the end of the hall at about 135cm.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1759953547958v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;I realized that the default threshold and gain settings were not correctly configured for my measurement setup and that I was detecting lots of multipath reflections.&lt;/p&gt;
&lt;p&gt;The sensor specification indicates that the reference target is a cylindrical pole, 75mm diameter, 1m height.&amp;nbsp; That should provide a good primary reflection and scattering of any of the sound waves that do not strike perpendicular to the target.&amp;nbsp; That should minimize the amplitude of multipath reflections.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To test this out I used the Envelope measurement which provides an analog measurement of the amplitude and time of received echoes.&lt;/p&gt;
&lt;p&gt;Here is a comparison of the Envelope measurement of a cylinder and a cardboard panel at 65cm.&amp;nbsp; In the initial 1000us or so of both plots you see the initial transmission pulse and the ringdown period (time for the piezo element to settle).&amp;nbsp; During this period the receiver is clipping.&amp;nbsp; The target reflection occurs around 4000us and in the case of the cardboard panel the echo is strong enough to drive the receiver to clip while in the case of the cylinder it only has around 40% of that amplitude.&amp;nbsp; The secondary multipath reflections are also significantly larger for the cardboard panel.&amp;nbsp; The secondary reflections are also a lot earlier in time.&amp;nbsp; This demonstrates that if the receiver gain and threshold are set for a faraway target that a near target measurement will suffer from significant multipath noise.&amp;nbsp; Or if there is no near target it could mistake a multipath echo in its field of view (FOV) as the target.&amp;nbsp; The shift in time of the secondary reflections shows the effect of the shape and size of the target surface relative to the location of other reflecting surfaces in the environment.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Cylinder-at-65cm.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Cardboard-Panel-at-65cm.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;My project target is the front of a vehicle which is not solid or flat, so it is obvious that I will need to do my sensor characterization and parameter tuning in the garage with the vehicle (I&amp;rsquo;ll ignore for the moment that different cars may have different profiles).&amp;nbsp; To that end, I built two tripod mounted measurement setups.&amp;nbsp; The kit has two sensors, and I am doing single sensor measurements, so I have one sensor attached to the Demo Board so that I can leverage the capabilities of the Demo GUI software and I have the other sensor attached to the Xiao ESP32-S3 in my project configuration in order to test my application program.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Characterization-Setup.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/DemoKit_5F00_Setup1.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/Xiao_5F00_ESP32S3_5F00_Setup.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The USSM sensor internal registers contain the following information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ID, EEPROM, Wakeup, Standby&lt;/li&gt;
&lt;li&gt;Sensor calibration&lt;/li&gt;
&lt;li&gt;Measurement configuration&lt;/li&gt;
&lt;li&gt;Threshold setting for profiles A and B. C uses one of them&lt;/li&gt;
&lt;li&gt;Status: measurement context and feedback, near-field flag&lt;/li&gt;
&lt;li&gt;Temperature&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These registers contain 93 values that are stored in volatile memory.&lt;/p&gt;
&lt;p&gt;There is also non-volatile EEPROM memory that stores the factory calibration data.&amp;nbsp; After power-up the calibration data is copied into the volatile memory, and the default values are written to the Measurement Setup and Threshold Setup A/B registers.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="https://community.element14.com/resized-image/__size/1280x720/__key/communityserver-discussions-components-files/444/pastedimage1759958044996v2.png" /&gt;&lt;/p&gt;
&lt;p&gt;The 4 registers &amp;quot;Measurement Setup&amp;quot;, &amp;quot;Threshold Setup A&amp;quot;, &amp;quot;Threshold Setup B&amp;quot; and &amp;quot;Calibration Setup&amp;quot; are used to configure the device.&amp;nbsp; During characterization I&amp;rsquo;ll need to determine the correct measurement modes and threshold values.&amp;nbsp; These values will need to be written to registers after power-up.&lt;/p&gt;
&lt;p&gt;The Threshold Setups allow the configuration of 10 Threshold vs Time zones that&amp;nbsp;set the detection sensitivity at different distances.&amp;nbsp; The default values lower the detection thresholds as distance increases.&amp;nbsp; Not sure about why the final threshold is 0 lsb, but I&amp;#39;ll check that out.&lt;/p&gt;
&lt;p&gt;TdkUssm[1].THRESHOLD_A[20] = {&lt;br /&gt;0 | 75 | 5 | 31 |THVAL_A1 | 31 | 155.000 lsb |THVAL_A1&lt;br /&gt;1 | 72 | 3 | 1 |THPOS_A1 | 1 | 256.000 us |THPOS_A1&lt;br /&gt;2 | 67 | 5 | 15 |THVAL_A2 | 15 | 38.000 lsb |THVAL_A2&lt;br /&gt;3 | 64 | 3 | 2 |THPOS_A2 | 2 | 512.000 us |THPOS_A2&lt;br /&gt;4 | 59 | 5 | 15 |THVAL_A3 | 15 | 38.000 lsb |THVAL_A3&lt;br /&gt;5 | 56 | 3 | 2 |THPOS_A3 | 2 | 512.000 us |THPOS_A3&lt;br /&gt;6 | 51 | 5 | 10 |THVAL_A4 | 10 | 22.000 lsb |THVAL_A4&lt;br /&gt;7 | 48 | 3 | 2 |THPOS_A4 | 2 | 512.000 us |THPOS_A4&lt;br /&gt;8 | 43 | 5 | 10 |THVAL_A5 | 10 | 22.000 lsb |THVAL_A5&lt;br /&gt;9 | 40 | 3 | 4 |THPOS_A5 | 4 |2048.000 us |THPOS_A5&lt;br /&gt;10 | 35 | 5 | 10 |THVAL_A6 | 10 | 22.000 lsb |THVAL_A6&lt;br /&gt;11 | 32 | 3 | 4 |THPOS_A6 | 4 |2048.000 us |THPOS_A6&lt;br /&gt;12 | 27 | 5 | 5 |THVAL_A7 | 5 | 11.000 lsb |THVAL_A7&lt;br /&gt;13 | 24 | 3 | 4 |THPOS_A7 | 4 |2048.000 us |THPOS_A7&lt;br /&gt;14 | 19 | 5 | 5 |THVAL_A8 | 5 | 11.000 lsb |THVAL_A8&lt;br /&gt;15 | 16 | 3 | 5 |THPOS_A8 | 5 |4096.000 us |THPOS_A8&lt;br /&gt;16 | 11 | 5 | 5 |THVAL_A9 | 5 | 11.000 lsb |THVAL_A9&lt;br /&gt;17 | 8 | 3 | 5 |THPOS_A9 | 5 |4096.000 us |THPOS_A9&lt;br /&gt;18 | 3 | 5 | 0 |THVAL_A10 | 0 | 0.000 lsb |THVAL_A10&lt;br /&gt;19 | 0 | 3 | 5 |THPOS_A10 | 5 |4096.000 us |THPOS_A10&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;My initial plan had been to use the full 5m range of the sensor to track the vehicle from the point where it entered the garage up to its parking position.&amp;nbsp; It seems that it&amp;nbsp;might require me to dynamically change the gain and threshold profile to reliably track it.&amp;nbsp; I&amp;rsquo;ve decided that initially I&amp;rsquo;ll just characterize and track the&amp;nbsp;final 2m.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll describe my project configuration and measurement characterization results in future posts.&lt;/p&gt;
&lt;p&gt;Note: Other challengers have been doing a good job of describing the sensor and kit specifications and operation using excerpts of the user and reference manuals, so I won&amp;rsquo;t include a lot of redundant information.&amp;nbsp; I&amp;rsquo;ll reference specific features and specifications when&amp;nbsp;they are unique to my project.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>