-
ATLAS, Real GPS, and Initial Case Fit
6 minutes ago • 0 commentsAs of today, the AI Field Analyzer finally fits inside its case. This marks the first full hardware integration milestone: all core sensors are live, the display is working, GPS is fused and parsed in real time, and the device is now portable and testable in real-world environments. That said, the case is still temporary. Most modules are loosely fitted, and I’ll need to create custom PCBs and proper mounts to secure things long-term. But this is a key checkpoint.. it’s no longer a dev board taped to a battery. It’s becoming a proper field tool.
I’ve also migrated everything to the Raspberry Pi Pico 2, (what a pain in the axx!!) which gave me extra RAM and CPU headroom needed to implement GPS anti-spoofing/jamming, altitude fusion, environmental logic, and a full diagnostic framework (ish).
One of the biggest challenges in this update was tuning the location detection logic. Getting the right balance between CO₂ levels, lux, humidity, and GPS speed wasn’t as straightforward as it sounds. Early versions constantly flipped between states, especially indoors near windows or while driving. I had to weight each sensor’s influence carefully and add sticky state logic for VEHICLE mode to prevent false switches when stopping at lights or losing signal momentarily.
Not everything is online yet: the SD card was lost during testing, so logging is offline until I add a new breakout. The Geiger radiation sensor is also shelved for now... it works, but it needs a dedicated co-processor to handle accurate pulse timing without overloading the main loop.
Bad News...
The AI Coral board and 5MP camera will have to wait, while I miniaturize the sensor and main PICO2 board. I also may need to resort to a Li-poly battery. I'm not happy about that, as I was trying to reduce fire risk.
v2.5 Feature Highlights:
-
GPS over I²C with real-time NMEA parsing
-
Anti-spoofing logic using satellite quality, HDOP, fix type, and motion behavior
-
Pressure fusion to validate GPS altitude using BMP390
-
Jam detection via GPS silence combined with stable sensor input
-
Major logic re-written for (INDOOR, OUTDOOR, CAVE, VEHICLE) with weight tuning and more
-
Sticky vehicle mode for stop-and-go travel accuracy
-
Temperature fusion using BMP390 and SCD41 for stable ambient readings
-
Sensor health monitoring, timeouts, and adaptive polling
-
Fully enclosed (temporary) case milestone (I have some work to go)
-
SD logging temporarily offline (the swap to the Pico 2 required me to get a SD card SPI reader breakout)
-
Radiation detection on hold pending co-processor integration
v2.5 code will be posted soon as I have some final cleanup to do.
For the integration, I 3D printed a sensor mounting plate and made a custom low profile PICO2 main board.
-
-
ATLAS v1.9 - GPS Integration & Location Intelligence
3 days ago • 0 commentsATLAS v1.9 - GPS Integration & Location Intelligence
Rebranding to ATLAS: I've been calling this project the "AI Field Analyzer" but let's be honest - ATLAS (Advanced Tactical Location Aware Sensor) sounds way cooler and actually describes what it does. Plus, like the mythological Atlas holding up the world, this thing carries all your environmental awareness on its shoulders.
Well, I got tired of my ATLAS not knowing where it was, so I taught it some location awareness using clever sensor fusion. Next upgrade will be adding a SparkFun GPS Breakout - NEO-M9N (parts on order), but for now it's pretty smart at figuring out if you're in a cave, your car, or standing in a field using what it already has.
Key v1.9 Upgrades:
- Location Detection: Uses light levels and sensor patterns to determine environment (GPS upgrade coming soon)
- Enhanced Weather Prediction: Storm probability calculations with arrival timing (because "might rain" isn't useful, "70% chance in 2 hours" is)
- Location-Aware Sensor Polling: Automatically adjusts update rates based on detected environment
- 8-Screen Display System: Added dedicated weather and location screens
- Memory Optimization: Fixed the display hanging issues and scrolling problems
- Enhanced Error Handling: Because field equipment that crashes is useless equipment
Location Intelligence - The Cool Part:
The ATLAS now automatically detects whether you're OUTDOOR (bright light = 8+ simulated satellites), INDOOR (moderate light = 2 satellites), VEHICLE (based on sensor patterns), or CAVE (dark = 0 satellites). Here's where it gets smart - when outdoors, it focuses on weather sensors for storm prediction. Move indoors? Shifts focus to air quality monitoring. The system adapts automatically, giving you exactly the environmental intelligence you need for your current situation.
The Fog Detection Discovery: Had a cool "aha!" moment when the device was screaming about fog after a heavy rain - high humidity, low light, all the classic fog indicators. But I was standing outside and could see perfectly fine. Turns out the lux sensor was the key - real fog blocks light significantly, but post-rain high humidity without the light reduction isn't actually fog. Now the system uses sensor fusion between humidity, temperature, and actual light levels to distinguish between "fog conditions" and "actual fog." Sometimes the best discoveries happen when your device disagrees with your assumptions and you realize it's teaching you something new about the environment.
The result? Intelligent power management and relevant data prioritization without manually switching modes. Once I get the real GPS module integrated, this will be even more accurate, but the current sensor-fusion approach works surprisingly well.
Plus, the weather prediction system provides localized forecasting based on your detected environment. It's telling you "STORM INCOMING: 75% probability in 1-3 hours" based on multi-sensor atmospheric analysis.
Code Architecture: Split the codebase into modular components -
sensor_manager.py
handles all the hardware interfacing and data collection,display_manager.py
manages the 8-screen UI and user interface,weather_manager.py
handles the storm prediction algorithms, andmain.py
coordinates everything and runs the main operational loop. Clean separation makes the code way easier to maintain and debug when you're iterating this fast.Code is on GitHub as always - if you want to build your own ATLAS, everything's there. Still spending every penny on prototypes, but hey, the future isn't coming fast enough, so I'm building it myself.
-
AS5600 Powers Miniature Anemometer
7 days ago • 0 commentsI built a weather program that is near 95-98% accurate with current sensors, but to me that was not good enough. I really needed a wind speed sensor. I just seen a AS5600 rotation sensor posted by Adafruit and it dawned on me that this is more than perfect, I can build a 3D printed cup micro anemometer! I have the 1mm pins, 3x3x3 magnets, low friction bearings, and professional 3D printed parts on the way...
Basically I’m building a compact, rugged wind sensor to bring real wind speed data to my portable AI Field Analyzer. Most “handheld” weather gadgets skip wind entirely though I wanted something better for field forecasting and storm alerts.
How it works:
-
3D-printed micro cup rotor spins on 1mm steel shafts and 681ZZ ball bearing for ultra-low friction.
-
AS5600 magnetic angle sensor + 3x3x3mm N52 magnet tracks absolute shaft rotation, turning every breeze into high-res data, no gears, no slip rings.
-
Shown with a banana for scale and mounts right to the analyzer’s case.
Why this matters/important :
Wind speed is key for early storm prediction, AI-based weather analysis, and real microclimate logging. With this setup, I can catch wind spikes that most portables miss.Parts on order:
-
AS5600 sensor, N52 magnet, 681ZZ bearings, 1mmx14mm rods, SLA-printed rotor/top (Accura Xtreme White 200).
Next steps will be:
Assemble, calibrate with a reference anemometer, and integrate with my weather algorithms. STL and code coming soon—banana not included (that's mine lol)
-
-
More Sensors and Weather Prediction
06/28/2025 at 17:10 • 0 commentsVast software improvements:
I have jumped a bit from 1.6 to 1.7 in the code. Hardware wise, I now have the following sensors.
- Pocket Geiger Counter (radiation detection with CPM and µSv/h)
- SCD41 (Real CO2, temperature, humidity, and VOC analysis)
- TSL2591 (Light/Lux measurement with safety warnings)
- BMP180 (Barometric pressure with storm prediction capabilities) *may upgrade in future to more accurate/low power module
v1.6
Added the much nicer real CO2 sensor and at the moment removed the VOC
- SCD41 sensor upgrade: Real CO2, temperature, humidity
- 6-screen rotating display: CO2/VOC, Temp/Humid, Light/UV, Radiation, System, Summary
- Star Trek-style tricorder interface with smooth animations
- Low battery warning from Adafruit PowerBoost 1000C LBO pin
v1.7
- Weather trend analysis with pressure change rates
- Storm warnings with severity levels and timing predictions
- Enhanced environmental correlations (pressure vs humidity/temp)
- Pressure-based altitude estimation for field work
- Aviation mode for pressure monitoring during flight
Things I need to fix/add:
- So far the code is been a single file, while that is ok I really need to start to split them up into manageable pieces or modules. This should make dev a bit easier, sort of. As if I do it right I can ensure a change in one module does not effect another. Harder said then done I think.
- The radiation sensor has priority, however it is missing pulses, so I will need to move it to a sub processor and monitor like another I2C sensor. In a way make it a smart sensor that can detect is own pulses and calculate the levels and then the main processor just pings it for info when needed.
- I will be upgrading to the PICO2, not that it is needed quite yet but I want to add menus to the screen and have it seem responsive I feel that is going to take some clock cycles. Will likely be needed when I go to more sensor fusion warnings.
-
Sweet Sweet Data
06/21/2025 at 16:16 • 0 commentsNewest code on GitHub, v1.5 adds a lot, a new system screen including CPU and memory usage, scrolling messages, more priority to the radiation sensor to not miss detections and the code has been significantly optimized. CPU hovering ~5% utilization with spikes to 15% that are short lived.
CO2 is wildly off as it is a estimate, I have a real SCD-41 - True CO2 Temperature and Humidity Sensor on the way. This should correct the false C02 readings the SPG30 is giving. I will still keep the SPG30 for it's VOC sensor.
Radiation had a spike however it was still background radiation. The following charts cover about a 26min test run. In the Car, then walking around in 90 degree sun.
https://github.com/thedocdoc/AI-Field-Analyzer/tree/main
-
OLED Is up and running
06/20/2025 at 23:11 • 0 commentsHuge milestone reached today! I was able to not only add the TSL2591 over the last week but I just got the OLED online and working. It is currently flashing though a Initial splash screen/boot up, Summary page, Air quality, Light/UV, and Radiation. I have a video as well. I temp hooked up the test button to the LED as a "flashlight". It is running on power alone so the code has been labeled main.py.
The rads are blank as it takes 2 mins to calculate the proper dose, however if you hear closely you can make out the background radiation detections though the piezo.
-
Keypad PCB Layout and Camera
06/14/2025 at 22:46 • 0 commentsWhen I was looking for switches I knew I wanted some quality momentary ones, so I went with the UB15SKG03N-G shown below, As it is a though hole Device and where most of the quality feel for the use will be. So I took the time to whip up a PCB to mount them to the case. If my measurements are right they should line up perfect. I added the piezo speaker too as it had room...
Next up to add a additional feature and get the Coral dev board mini doing something, I added a camera to the back of it and the Coral will run something like MobileNetV3 image classification.
To classify a image it would go something like this--- User selects menu button, scrolls down one, hits enter, the proc reads in the button/menu section, It brings the Coral out of idle and tells it to take a image, at the same time the microprocessor is reading in ambient light and turning on the two bright white LED's near the camera to help if needed, a image is taken, the AI does inference in 10ms or so and send the message back to the Pico to display on the screen (“Possibly: Sugar Maple — Confidence: 89%”). Issue at least for now is the Coral can indeed same image to the SD card however I will not be displaying it on screen.
With the addition of the super bright white LED's a easy value add is a simple selection to turn them on/off for a flashlight if needed.
Going to cover with a 16mm x 1mm sapphire watch glass as well. hence the larger round cutout.
-
Compass Progress & Anomaly Detector
06/14/2025 at 00:07 • 0 commentsThe Bruised Compass
I recently combined two Adafruit sensors—the TLV493D magnetometer and the LIS3DH accelerometer, to build a digital compass with tilt compensation. I secured them together with a Velcro cable tie (very professional) so the accelerometer stays aligned during calibration. While some call this “sensor fusion,” here it simply means combining data from both sensors to get a reliable heading.
Getting it to work took some troubleshooting, especially with heading jumps and interference indoors. Magnetometers are *very* sensitive to electrical noise, so outdoor testing and a properly isolated case are next on my list. I finally added some smoothing but also a way to reject large jumps... the code is tested and probably as stable as you can get indoors...
In hindsight, using an integrated IMU like the Adafruit BNO085 would’ve made this process much smoother, since it handles sensor fusion and tilt compensation internally. I plan to upgrade to this chip for the next iteration.
Now for some fun code... *untested*
The Anomaly Detector
For the next phase, I decided, why stop at practical features? So I built a multinet anomaly detector... It doesn’t just warn you about boring stuff like sudden movement or a weird tilt. it’s also on the lookout for “high strangeness.” We’re talking time hiccups, gravity doing a backflip, compass spins worthy of a paranormal show, or sudden stillness so perfect you might wonder if you just glitched into a simulation or got stuck in a stasis field but for some reason the analyzer is still working...
Some of these nets are dead serious (catching real hazards and sensor issues). Others? Let’s just say they’re designed to flag the impossible, the improbable, and anything else that would get Mulder and Scully interested. Either way, the whole point is that you get plain English explanations.
The compass code has been tested the anom code will need to wait till the IMU arrives. (also not sure it can ever be fully tested)
AI Field Analyzer on GitHub
-
Geiger Counter Online
06/12/2025 at 12:57 • 0 commentsHad some older C++ code that I was able to get converted to CircuitPython. Ran into a few issues first it was not detecting pulses, then it dawned on me the reason back in the day I went with C++ is it had code interrupts, though CircuitPython does not. So I had to basically optimize the code to update the screen less, every 3 seconds and also read the +CO2 and VOX sensor.
Current output
CO₂: 533 ppm | TVOC: 0 ppb | CPM: 5 | uSv/h: 0.0942827 | ✅ Excellent air quality. | ✅ Air is clean. | ✅ Background radiation—no risk.Pulse detected! Total: 2 CO₂: 535 ppm | TVOC: 0 ppb | CPM: 5 | uSv/h: 0.0942827 | ✅ Excellent air quality. | ✅ Air is clean. | ✅ Background radiation—no risk.Pulse detected! Total: 3 CO₂: 551 ppm | TVOC: 0 ppb | CPM: 5 | uSv/h: 0.0942827 | ✅ Excellent air quality. | ✅ Air is clean. | ✅ Background radiation—no risk..
As I have built a few Geiger's in the past I ended up getting a calibrated Cesium-137 check disk. I use this to do a calibration of the sensor. (when I get this fully built I should rent a real Geiger Counter and compare the too) This Geiger is a solid state version on a tube and will detect pulsus right at first power on however it really is only good for gamma rays and it was mentioned it was best to sample over a 2 minute time before displaying results. You can still hold it up to a source/sample and if i add the piezo you should hear detections. It the sample is very high detections I would leave it alone/walk away, if it is a mild detection there is likely no harm to stay for the full two minute cycle to get a more scientific/actuate reading
The counter is also calculated to give you a proper "uSv/h" (microsieverts per hour). Prob will need to redo the alpha calibration as it seems my last version was missing detections. However this code runs the radiation sensor at realtime.
alpha = 53.032 # uSv to CPM conversion factor cpm = pulse_count uSv_h = cpm / alph
GitHub link with the newest code - https://github.com/thedocdoc/AI-Field-Analyzer/tree/main I also added a helpful little program that scan the I2C Bus
I let it collect data for a bit then graphed out the data to get this: Based on the graph it might be good to do a bit of averaging on the TVOC and CO2 values, just not enough to skew the results. I.E take 3 readings in rapid / 3 = Result to print to OLED
-
Case redesign
06/11/2025 at 22:52 • 0 commentsI printed the T1 case to hold in my hands and found it boxy and uncomfortable. So, I went back and redesigned the whole thing to actually feel good, thinner overall, with big fillets at the bottom for two-handed grip. It’s amazing what holding a prototype will teach you that CAD never will.
Other upgrades:
-
Front hole for the radiation sensor. (I mean lets be honest we really want to be as far away as possible even if it's 4 inches)
Small window under the display for the TSL2591 High Dynamic Range Digital Light Sensor. Placed so you don’t shadow it or block it with your fingers, and it’ll double as an ambient light sensor for auto-adjusting display contrast. \o/
-
Larger vent near the screen: Expanded by 3–4mm in each direction, with 1mm steel wire mesh on the inside for protection. Nothing says “field-ready” like mesh that can stop a grasshopper?
-
Active airflow: Added a 17x17mm, 3V fan to blow air in. This means sensors react faster, and in the worst-case scenario, it just might save your bacon. (this should allow for positive air flow and also cool off internal electronics, yea I'm looking at you Google Coral Dev Mini!)
-
Tighter clamshell fit... You can actually pick it up and shake it now, no rattles, crazy right?
Pro tip: If you do build this, don’t even think about bringing it through TSA. Especially not with Play-Doh inside. I’m not responsible for the “sir, please step over here” moment.
Redesign after T1 design.
-