M.O.A.S.A.S  Modular Optics And Sensor Array System Deployed · unattended · unit 2 in build

Autonomous multi-sensor field platform

One console.
Swap the mission,
not the machine.

MOASAS is a field instrument that carries optical, thermal, acoustic, environmental, and positional sensors on a single compute core — with an on-board AI layer that reads its own instruments and reports what it finds, in plain language, without a person watching the feed.

Designed and built from scratch by Lee Newton, starting October 2024. It is currently running unattended at a remote residential site over cellular and mesh VPN.

ARRAY 32×24 RATE 8 Hz MAX MIN DET

MLX90640 thermal array with object-detection overlay, as rendered by the on-board dashboard. Frame shown here is simulated for the web — the platform composes the same view live from real sensor output.

Design intent

Built like a console

One body, many missions

The array is the hardware; the mission is the software. The same platform has been pointed at sleep and presence monitoring, wildlife observation, perimeter security, and mechanical health baselines — no rebuild between them.

Every sensor is a sidecar

No sensor is wired into the main application. Each one runs as its own process and publishes to a shared JSON contract. Add a peripheral, and its history becomes queryable by the AI layer without touching the core.

Stability is the feature

The standing rule is features wait, stability doesn't. Any anomaly — a thread, a resource curve, an unexpected log line — stops feature work and starts diagnostics until the cause is named.

Hardware

The array

Chassis, module shells, mounts and panels are designed and printed in-house. Each sensor lives in its own removable bay behind its own faceplate, so a module can be pulled or replaced without opening the compute section — and a new one only has to fit the bay and honour the logging contract.

The array on a tripod at dusk with a mountain ridgeline behind it
Plate 01Ridgeline at dusk; the environmental module’s status LED lit.
The open compute deck showing the single-board computer under a copper heatsink and fan, with the module bays below
Plate 02Compute deck: the board everything else hangs off, under copper and active cooling. Module bays sit directly below.
The rear of the module bay showing a USB cable running to each module
Plate 03Bay rears — every module takes its own USB line back to the switched hub.
The front face of the array in daylight showing four sensor bays
Plate 04Front face in daylight. Left to right: acoustic, environmental, optical, thermal.
Close view of the environmental sensor board behind its faceplate
Plate 05Environmental module: BME688 behind its own faceplate, status LED live.
A hand steadying the array with one sensor bay empty
Plate 06One bay pulled. Modules come out without opening the compute section.
Inside a module shell showing a camera board on printed standoffs
Plate 07Module interior — camera board on printed standoffs, USB-C pass-through, vented floor.
The bare printed chassis frame with empty module bays above a battery bay
Plate 08Chassis frame before population: module bays above, battery bay below.
The array in bench configuration with a carry strap fitted
Plate 09Bench configuration with carry strap fitted; twin rail voltmeters at right.
A sensor faceplate held in one hand with its wiring loom running back into the open module shell
Plate 10Faceplate off the environmental module — the loom stays with the bay, not the chassis.
A printed sensor module held in one hand, showing its vented top and lens aperture
Plate 11A single module in hand. Vented shell, one aperture, four screws.

An earlier revision sweeping on the pedestal head, bays still open. Pointing is currently manual and by tool call; the ground-up turret build replaces this head.

Instrumentation

Specifications

SubsystemHardwareFunction
Compute coreRadxa Rock 5B+ · Ubuntu 22.04 · NVMeFlask/gunicorn platform, all sensor processes, local inference
AI layerClaude API, local 7B fallbackReads live sensor state, answers questions about it, calls read-only tools with audit logging
OpticalArducam · YOLOv8Object and person detection, presence tracking, event-gated recording
ThermalMLX90640 · 32×24 @ 8 HzFalse-colour thermal field, mechanical and body heat signatures
AcousticUSB microphone · YAMNet TFLiteSound-event classification on a rolling buffer, threshold-triggered
EnvironmentalBME688 on ESP32-S2Temperature, humidity, pressure, air quality — logged continuously
PositionBN-880 GPSLocation and time reference for mobile missions
PointingESP32 pan/tilt gimbal · UDPDirected observation; custom pedestal-turret build in progress
LinkSIM7600G-H LTE · dual-radio Wi-Fi · mesh VPNCellular uplink with self-hosted AP; full remote operation and shell access
PowerPD battery rails · inline meteringField endurance measured under full sensor load; hold-through on input transitions in development
Module bayPer-port-power-switched USB hubNamed power control per peripheral for hot-swap and unattended recovery

Interface

One dashboard, both screens

The platform serves a single responsive web interface. The same URL gives a full instrument wall on a desktop and a stacked, thumb-reachable layout on a phone — live camera, thermal field, audio classification, environmental and positional readouts, gimbal control, and a chat pane to the on-board AI. Nothing is desktop-only, which matters when the array is in the field and the operator is holding a phone. Both captures below are the real interface, unedited apart from the network detail.

Wildlife observation, unattended and in real time — deer in the camera feed while the detection log, audio classification, satellite lock and power draw all keep running beside it. Press play; this one doesn't autoload.

Live dashboard during unattended operation. Faces are deliberately obscured and network detail removed; everything else is the real interface, unedited.

The dashboard on a phone showing two deer in the camera feed with a GPS fix
Phone — wildlifeDaylight pass, 3D fix on 12 satellites, gimbal control below the feed.
The dashboard on a phone showing a bear at night in infrared
Phone — night IRInfrared pass at 20:16. Same layout, same controls, no separate mobile build.

The thermal field renders as a character grid rather than an image — each cell is a glyph and a colour, so it stays legible at 32 × 24 and costs almost nothing to push over a slow link. Density and hue climb together, which makes a warm body separate from its background at a glance.

Thermal panel showing a warm human-shaped signature in the character grid
Thermal — occupiedA body reads clearly in the character field even with motion flagged NO.
Environmental and thermal panels stacked, showing temperature, humidity, pressure and gas resistance
Thermal — with environmentThe environmental block sits directly above the thermal field on the same scroll.
Thermal panel showing a broad warm gradient across the scene
Thermal — open sceneA scene with no subject: gradient only, which is what a clear frame looks like.

AI layer

Ask the array

Because every sensor publishes to the same contract and every reading is appended to its own history, the AI layer can be asked about any of it in plain language — no dashboards to read, no logs to grep. It answers from the data it actually holds, and it interprets rather than just reporting: below, it explains a suppressed gas-resistance reading in terms of humidity, because that is how the BME688 behaves.

YOU

Hey HAL, what has the temperature, humidity and air quality looked like today?

HAL

Here's the full picture for today, July 27th — 1,115 readings logged.

Temperature

Min29.5 °C / 85.2 °F
Avg30.2 °C / 86.4 °F
Max31.6 °C / 88.8 °F
Now31.6 °C / 88.8 °F

Stable and hot all day — only a 2°C spread, and you're sitting at the daily maximum right now at 6:34 PM EDT. The space hasn't cooled off yet this evening.

Relative humidity

Floor55.7 %
Avg61.2 %
Max70.3 %
Now67.9 %

Today's RH floor is 55.7% — notably higher than the ~46–50% floors we've seen on better days. The AC either hasn't run long enough or the moisture load has been heavier. Currently climbing back toward the daily high.

Air quality — gas resistance

Min60.5 KΩ
Max106.5 KΩ
Now64.6 KΩ

Sitting near its daily low. That tracks — high humidity suppresses gas resistance on the BME688, and at 68% RH the sensor reads the air as relatively stale. The 106 KΩ peak earlier was likely the driest window, when the AC was running.

KEY TAKEAWAYS

  • The most humid day in recent memory — a floor of 55.7% against the ~46–50% we've been tracking. The AC hasn't pulled it down to its usual depth.
  • Right now is the hottest and most humid point of the day, at 6:34 PM: 88.8°F and 68% RH.
  • The AC may not have run much today, or a door was open for an extended period this morning, loading the space with outdoor humidity.
  • Worth checking whether the AC is on — conditions are at the worse end of what's been logged.

A real exchange, reproduced as returned. The environmental history it draws on runs to several thousand readings at one-minute resolution.

Architecture

The peripheral contract

Every peripheral, wired or wireless, obeys the same agreement. It writes its own state to a file; a generic logger keeps its history; a generic tool makes that history answerable. Nothing about adding a sensor requires editing the application that serves the dashboard.

sensor process shared contract history AI layer ────────────── ─────────────── ─────── ──────── thermal ─┐ detector ─┤ ┌─ "what changed audio class ─┼──▶ sensor_output/<name>.json ──▶ append-only log ──▶ tools ─┤ overnight?" environment ─┤ (one file per sensor) (per sensor) └─ "show me the new module ─┘ sessions" ▸ no sensor is imported into the web application ▸ a new peripheral is queryable the moment it writes its file ▸ privileged actions stay human-in-loop; the AI layer reads first

Hot-swap doctrine

Cold swap is the default for any sensor reconfiguration — it is the only always-safe path. Observation-only port control stays live because it never switches power. Live-bus cycling stays shelved until inrush behaviour is proven on an isolated supply.

Change discipline

Explicit per-file staging, timestamped backups before any edit, a compile gate before any service restart, one command at a time with read-back verification. Destructive writes are confirmed out loud.

Recovery posture

The production disk has a verified bit-for-bit cold spare, checksum-probed and stored offline. A second unit runs from a scrubbed clone with its own identity, so bench work can never reach the deployed system.

Field record

It runs when nobody is looking

Oct 2024first sensor on the bench,
single-sensor prototype
1,115environmental readings in one
day, answerable by prompt
50 GBrolling capture cap with
nightly off-site offload
2units — one deployed,
one on the bench

The live deployment runs an event-gated pipeline end to end without supervision: detection identifies a subject and a context object together, the recorder opens a session, hysteresis closes it, chunks roll to disk under a hard cap, and an overnight pull moves the archive to a second machine on a rate-limited, read-only-at-source transfer. Absence alerting has fired correctly on a real event. The AI layer answers questions about all of it by prompt.

The site is unattended. Everything above was commissioned, and is maintained, over a remote shell from a phone.

Development log

How it got here

Oct 2024
Started. First sensor on the bench — a single-sensor prototype on a desk.
2025
Desktop era. Sixty-four iterations of a local GUI, retired deliberately once the interface became the bottleneck.
Early 2026
Platform rebuild. Moved to a web platform under a production process manager, with a dynamic module registry for hot-detected hardware.
Feb–Mar 2026
AI core matures. Persistent memory made multi-worker-safe, live system state composed at call time, a full sensor mosaic replacing the camera-only view.
Mar 2026
Hearing added. On-device sound-event classification verified live against real ambient audio.
Apr 2026
Provisional patent filed.
Jun 2026
Remote deployment. Platform installed off-site on consumer broadband; full remote operations validated. Absence alerting proven on a live event.
Jul 2026
Capture pipeline. Hardware-encoded session recorder, autonomous triggering, rolling retention, nightly archive offload — a clean one-week soak with zero faults.
Jul 2026
Tool-calling AI. Read-only tools exposed to the assistant with audited actions, so the platform can be asked what it saw instead of grepped.
Jul 2026
Unit 2. Second array built tighter for gimbal loads; per-port power switching proven, named module power control shipped, thermal governor running from boot.

Next

Roadmap

Ordered, and worked one at a time.

Gimbal tool calling Custom pedestal turret 60-sensor array LIDAR Radiometric thermal Weather mapping 24-hour report generation

Contact

Talk about the array

Open to conversations about deployments, sensor integrations, and the platform's use in monitoring and field-observation work.