{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "SEN Blog — English",
  "home_page_url": "https://intosen.com/blog/en/",
  "feed_url": "https://intosen.com/blog/en/feed.json",
  "description": "Technology and experience from building products and putting them to work in the field.",
  "language": "en",
  "authors": [
    {
      "name": "SEN"
    }
  ],
  "items": [
    {
      "id": "https://intosen.com/blog/posts/projects/lora-01-sync-word-en/",
      "url": "https://intosen.com/blog/posts/projects/lora-01-sync-word-en/",
      "title": "LoRaWAN Sensor Network Join Failure - A Sync Word Behind Total Silence",
      "summary": "A node would not join our LoRaWAN sensor network and the gateway packet capture showed nothing - not even a CRC error. The cause was a LoRaWAN Public toggle left off on the gateway, which put the sync word out of step.",
      "content_text": "Thirty sensors on one shared LoRaWAN gateway, and a node that would not join. With no CRC error to go on, the answer turned out to be the sync word set by a single toggle.",
      "date_published": "2026-09-03T15:00:00.000Z",
      "date_modified": "2026-09-03T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "LoRa"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/lora-02-sensor-simulator-en/",
      "url": "https://intosen.com/blog/posts/projects/lora-02-sensor-simulator-en/",
      "title": "LoRaWAN Sensor Network Testing - A Modbus Slave Simulator on a PC",
      "summary": "The sensors for our LoRaWAN sensor network were on site, so we built a Modbus RTU slave simulator that impersonates several slave IDs on one PC serial port - and it exposed four contradictions in the vendor protocol document.",
      "content_text": "The radio worked, but the sensors were in the field. A PC program that answers like one turned up four contradictions in the protocol document and a timer bug that split good frames in half.",
      "date_published": "2026-09-03T15:00:00.000Z",
      "date_modified": "2026-09-03T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "LoRa"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/lora-03-tools-en/",
      "url": "https://intosen.com/blog/posts/projects/lora-03-tools-en/",
      "title": "LoRaWAN Sensor Network Polling - 30 Devices From 42 Seconds to 30",
      "summary": "Letting 30 devices transmit on their own schedule forces the interval out to five minutes. Switching our LoRaWAN sensor network to server-driven Class C polling - and not waiting for replies - cut a full round from 42 seconds to 30.",
      "content_text": "Calling each device in turn fixed the collisions but cost 42 seconds a round, until we stopped waiting for replies. Plus the uplink monitor and the configuration tool built along the way.",
      "date_published": "2026-09-03T15:00:00.000Z",
      "date_modified": "2026-09-03T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "LoRa"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/lora-polling-gateway-en/",
      "url": "https://intosen.com/blog/posts/projects/lora-polling-gateway-en/",
      "title": "LoRaWAN Sensor Network Uplink Loss - OK Every Time, Half the Data Gone",
      "summary": "Our LoRaWAN sensor network uploaded from inside the gateway every five minutes, yet the server kept only one record every ten - with every send returning OK. Identical content, it turned out, is stored only once per ten minutes.",
      "content_text": "Three wrong theories built on partial logs, and then a line-by-line comparison of the full record explained all thirteen uploads at once.",
      "date_published": "2026-09-03T15:00:00.000Z",
      "date_modified": "2026-09-03T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "LoRa"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/lorawan-sensor-network-series-en/",
      "url": "https://intosen.com/blog/posts/projects/lorawan-sensor-network-series-en/",
      "title": "LoRaWAN Sensor Network Series Index - Five Posts from Enclosure to Server",
      "summary": "Five posts on building a LoRaWAN sensor network that collects readings from a large site without wiring. The node enclosure, the sync word behind a failed join, a PC sensor simulator, Class C polling, and missing uploads - here is what each part covers.",
      "content_text": "From cutting the enclosure to data that never reaches the server, five posts on a LoRaWAN sensor network - every one of them starting with a signal that said everything was fine.",
      "date_published": "2026-09-03T15:00:00.000Z",
      "date_modified": "2026-09-03T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "LoRa"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-11-mains-barrier-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-11-mains-barrier-en/",
      "title": "PCB design automation isolation barrier - our ruler disagreed with KiCad ten times",
      "summary": "Ten parts in, the boards were all 24V. This one carries 220V. It is our first motor brake rectifier after twenty years of low-voltage control boards, and the grid we use to measure the isolation barrier disagreed with KiCad DRC ten times - every one of them in the more permissive direction. One let a mains trace come within 3.88mm of a SELV pad. Part 11 of the series.",
      "content_text": "Measure the same board with two rulers and you get two answers, and the wrong one was always ours. Ten disagreements found by changing how we measured rather than by fixing the tool.",
      "date_published": "2026-09-03T15:00:00.000Z",
      "date_modified": "2026-09-03T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/rak19011-lora-case-en/",
      "url": "https://intosen.com/blog/posts/projects/rak19011-lora-case-en/",
      "title": "LoRaWAN Sensor Node Enclosure - Zero Interference and Still Unbuildable",
      "summary": "An enclosure for a LoRaWAN sensor network node - a RAK19011, a RAK11310 and an RS485 converter. The interference check kept reporting 0 mm3 while assembly failed five times, and it finally cleared a case whose screw bosses had vanished.",
      "content_text": "An automated clearance check that reads 0 mm3 is not the same as a case you can build. Five assembly failures, and the worst was a check that ran perfectly and reached the opposite conclusion.",
      "date_published": "2026-09-03T15:00:00.000Z",
      "date_modified": "2026-09-03T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "LoRa"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/rp2350-lcd-boot-download-mode-en/",
      "url": "https://intosen.com/blog/posts/projects/rp2350-lcd-boot-download-mode-en/",
      "title": "When the RP2350 Board Stops Responding",
      "summary": "How to enter USB download mode on the RP2350 Touch LCD 3.5 when it will not boot or accept a firmware upload: unplug USB-C, hold the BOOT button, and reconnect. Explains the difference between the BOOT, RESET, and PWR buttons and what to do once the board shows up as a removable drive.",
      "content_text": "When the RP2350 Touch LCD 3.5 will not boot or the upload port cannot be found, unplug USB-C, hold the BOOT button, and reconnect the cable to enter USB download mode.",
      "date_published": "2026-08-31T15:00:00.000Z",
      "date_modified": "2026-08-31T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "RP2350 3.5″ Touch LCD"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/rp2350-lcd-ride-timer-en/",
      "url": "https://intosen.com/blog/posts/projects/rp2350-lcd-ride-timer-en/",
      "title": "RP2350 Touch LCD Timer for Ride Time Control",
      "summary": "A ride-time countdown timer on the RP2350 touch LCD for a horse-riding machine. The MM:SS countdown starts only after the inverter RUN feedback and actual frequency are confirmed, and a STOP command is sent automatically when the time runs out. Covers millis-based elapsed time instead of delay, locking the setting while running, and confirming the actual stop.",
      "content_text": "An RP2350 touch LCD timer that starts its MM:SS countdown only when the inverter is confirmed running - not when START is touched - and handles the STOP command and actual-stop check when time runs out.",
      "date_published": "2026-08-31T15:00:00.000Z",
      "date_modified": "2026-08-31T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "RP2350 3.5″ Touch LCD"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/rp2350-riding-machine-controller-en/",
      "url": "https://intosen.com/blog/posts/projects/rp2350-riding-machine-controller-en/",
      "title": "RP2350 Touch LCD Horse-Riding Machine Control System",
      "summary": "A horse-riding machine controller built with the 3.5-inch RP2350 touch LCD. Covers one manual mode, 11 program modes, 10-stage speed profiles, 6-60 Hz inverter control, RS485 Modbus RTU status checks, and dual-core screen processing.",
      "content_text": "A horse-riding machine controller built with the 3.5-inch RP2350 touch LCD, with one manual mode, 11 program modes, 10-stage speed profiles, and RS485 Modbus RTU inverter control.",
      "date_published": "2026-08-31T15:00:00.000Z",
      "date_modified": "2026-08-31T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "RP2350 3.5″ Touch LCD"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/rp2350-rs485-modbus-inverter-control-en/",
      "url": "https://intosen.com/blog/posts/projects/rp2350-rs485-modbus-inverter-control-en/",
      "title": "RP2350 RS485 Modbus RTU Inverter Motor Control",
      "summary": "Controlling an inverter motor's RUN/STOP and speed over RS485 Modbus RTU from an RP2350 3.5-inch touch LCD, and graphing only the actual speed read back from the inverter status response. Also covers mistaking the RS485 request echo for a real reply and how it was fixed.",
      "content_text": "RUN/STOP and speed control of an inverter over RS485 Modbus RTU, with the RP2350 touch LCD graphing only the speed the inverter actually reported - not the commanded value.",
      "date_published": "2026-08-31T15:00:00.000Z",
      "date_modified": "2026-08-31T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "RP2350 3.5″ Touch LCD"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/rp2350-lcd-korean-font-en/",
      "url": "https://intosen.com/blog/posts/projects/rp2350-lcd-korean-font-en/",
      "title": "Korean Fonts on an Arduino TFT LCD - Bitmap Conversion for RP2350 and ST7796",
      "summary": "How we put Korean, English, and numeric text on the RP2350 Touch LCD 3.5 (ST7796) by converting TTF fonts into 20px, 28px, and 64px bitmap data, and what to check when Korean characters show up as question marks.",
      "content_text": "Copying a TTF file into an Arduino project does not put Korean text on a TFT LCD. Here is how we converted only the glyphs and sizes the screen needs into bitmap data for the RP2350 Touch LCD 3.5.",
      "date_published": "2026-08-24T15:00:00.000Z",
      "date_modified": "2026-08-24T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "RP2350 3.5″ Touch LCD"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/rp2350-lcd-sprite-animation-en/",
      "url": "https://intosen.com/blog/posts/projects/rp2350-lcd-sprite-animation-en/",
      "title": "RP2350 TFT LCD Animation - Reducing Flicker with ST7796 Partial Redraw",
      "summary": "A running-horse animation on the RP2350 Touch LCD 3.5 (ST7796) built from three PNG frames converted to RGB565 arrays. Covers background restore, transparent frame compositing, and sending only the changed region.",
      "content_text": "Instead of playing a video, we cycle three PNG frames and redraw only the region where the horse moves, cutting flicker on the ST7796 LCD.",
      "date_published": "2026-08-24T15:00:00.000Z",
      "date_modified": "2026-08-24T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "RP2350 3.5″ Touch LCD"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-10-place-again-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-10-place-again-en/",
      "title": "PCB design automation placement loop - before you say it cannot be done",
      "summary": "A new four-layer RP2040 board still had unrouted nets. Three times we called it physically impossible, and three times our own tools had failed to see the channel. Holding the minimum manufacturing specs fixed, we put placement inside a loop that runs until unrouted hits zero. Part 10 of the series.",
      "content_text": "An unrouted net is not a conclusion but the starting point of the next investigation. Measuring in coordinates, suspecting the tool, unifying the pass criteria, and finally putting the placement choice itself inside the loop.",
      "date_published": "2026-08-19T15:00:00.000Z",
      "date_modified": "2026-08-19T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-design-automation-series-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-design-automation-series-en/",
      "title": "PCB Design Automation Series Index - Ten Posts from Schematic to Gerber",
      "summary": "Ten posts on replacing hand-drawn PADS schematics and layout with generated KiCad files. Unit errors, library conversion, autorouter failures, non-deterministic DRC, the move to four layers, the last unrouted net, and a 220V isolation barrier - here is what each part covers.",
      "content_text": "Ten posts on PCB design automation, from generating the schematic to reaching DRC 0, collected on one page in the order the problems appeared.",
      "date_published": "2026-08-19T15:00:00.000Z",
      "date_modified": "2026-08-19T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/field/modular-conveyor-belt-control-field-en/",
      "url": "https://intosen.com/blog/posts/field/modular-conveyor-belt-control-field-en/",
      "title": "Modular Conveyor Belt Control in the Field",
      "summary": "A modular conveyor belt control site connecting straight, curved, and inclined conveyors with Wi-Fi communication, inverters, sensors, and a PC integrated control UI.",
      "content_text": "A field installation connecting straight, curved, and inclined conveyors and controlling each module through Wi-Fi and a PC integrated control UI.",
      "date_published": "2026-08-17T15:00:00.000Z",
      "date_modified": "2026-08-17T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Field",
        "Conveyor"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-artwork-automation/",
      "url": "https://intosen.com/blog/posts/projects/pcb-artwork-automation/",
      "title": "PCB Artwork Automation",
      "summary": "We've been designing PCBs for over 20 years. Our in-house library went through AI to become an automation pipeline — enter a \"design intent\" and go from schematic to Gerber in one pass.",
      "content_text": "Every time we scaled an 8-channel board to 16 channels, we had to redo the schematic and artwork. To cut the repetitive work, we introduced AI automation and built a library and pipeline.",
      "date_published": "2026-08-11T15:00:00.000Z",
      "date_modified": "2026-08-11T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-02-scale-bug-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-02-scale-bug-en/",
      "title": "PCB design automation verification - the 1.5× board that passed every gate",
      "summary": "We redesigned a shipping 8-channel relay board 1:1 from PADS to KiCad. All 60 components and 152 net pairs matched and both ERC and DRC were clean, yet the board came out 1.5× too large - a unit scale bug that every internal check passed. Part 2 of the series.",
      "content_text": "Reading PADS ASCII coordinates as 1nm made the parts, the traces and the board all 1.5× too large together, so every internal consistency check stayed green while the object was wrong.",
      "date_published": "2026-08-11T15:00:00.000Z",
      "date_modified": "2026-08-11T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-03-library-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-03-library-en/",
      "title": "PCB design automation library - one backslash and a 3D model rabbit hole",
      "summary": "We rebuilt our PADS library as native KiCad - 1,214 footprints and 857 symbols. A single backslash made the whole library unreadable, three guesses about 3D model placement were all wrong, and matching pad patterns finally found the 90 degree rotation. Part 3 of the series.",
      "content_text": "A backslash that invalidated an entire file, pad fields shifted by one slot, and a 3D model rotation we guessed wrong three times - what we hit while moving 1,214 footprints and 857 symbols into a KiCad library.",
      "date_published": "2026-08-11T15:00:00.000Z",
      "date_modified": "2026-08-11T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-04-routing-fails-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-04-routing-fails-en/",
      "title": "PCB design automation autorouting - 45°, staircases, and three failures",
      "summary": "The autorouter climbs like a staircase, burrows between component pads and leaves trace ends hanging in mid-air. Three ways of hand-routing the important nets and giving the router the rest all came out worse, and the real cause was a missing per-layer direction in the Specctra DSN. Part 4 of the series.",
      "content_text": "The 45° rule, staircases and antennas - none of which DRC catches - each needed a checker of its own, and the per-layer routing directions had to be injected straight into the DSN file.",
      "date_published": "2026-08-11T15:00:00.000Z",
      "date_modified": "2026-08-11T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-05-measurement-bug-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-05-measurement-bug-en/",
      "title": "PCB design automation DRC - the measurement was changing the board",
      "summary": "Running DRC on the same untouched board gave 0, then 16, then 3, then 50 violations, because kicad-cli was overwriting the board file. And the trace widths that kept coming undone came from correction code quietly shaving traces to clear a violation. Part 5 of the series.",
      "content_text": "If the measurement changes the subject, it is not data. How we caught a check command rewriting the board and a fixer script shaving trace widths to turn DRC green, then measured our own shipping boards for the real numbers.",
      "date_published": "2026-08-11T15:00:00.000Z",
      "date_modified": "2026-08-11T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-06-four-layer-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-06-four-layer-en/",
      "title": "PCB design automation four layers - good numbers, bad routing",
      "summary": "Right angles went from 28 to 3, arbitrary angles from 78 to 17, and trace widths were fully unified - then we zoomed in and the routing was still a mess. Rule violation counts and routing quality are two different things, and the cause was a shortage of layers. Part 6 of the series.",
      "content_text": "12.9 bends per net and a detour ratio up to 3.0× said what the gates would not: a 16-channel board was being crammed onto two layers. How we moved it to four and re-injected the per-layer directions.",
      "date_published": "2026-08-11T15:00:00.000Z",
      "date_modified": "2026-08-11T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-07-last-mile-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-07-last-mile-en/",
      "title": "PCB design automation last mile - unrouted nets, shorts, and DRC noise",
      "summary": "Getting DRC from 12 down to 4 took half a day and the last few took another half. Overlapping zones made DRC non-deterministic, vias punched through inner-layer nets and created shorts, and the maze search was surrounded. A record of stripping out tool defects by measurement. Part 7 of the series.",
      "content_text": "The longest stretch in automation is not the first 90 percent but the last single item. Ranking the metrics as shorts over unrouted over clearance, and solving a blocked spot with a transaction that moves the wall.",
      "date_published": "2026-08-11T15:00:00.000Z",
      "date_modified": "2026-08-11T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-08-done-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-08-done-en/",
      "title": "PCB design automation done - DRC 0, zero arbitrary angles, and 0.1mm",
      "summary": "The last four errors were all lies told by our own tools - a tally that did not count crossings as shorts, an obstacle model that inflated pads into circles, and a search with the wrong origin. What remained was a 0.009mm alley, solved by moving parts 0.1mm rather than by routing. Part 8, the finale.",
      "content_text": "DRC 0, unrouted 0, shorts 0, measured five times with the same result five times. The closing round that took arbitrary angles to zero, plus the seven ways our own tools lied along the way.",
      "date_published": "2026-08-11T15:00:00.000Z",
      "date_modified": "2026-08-11T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/pcb-auto-09-review-en/",
      "url": "https://intosen.com/blog/posts/projects/pcb-auto-09-review-en/",
      "title": "PCB design automation review - the things we thought we had verified",
      "summary": "We reviewed the four-layer board we had called done in part 8, one drawing at a time - ICs with pin length 0 and no legs, a schematic redrawn while the original PADS drawing sat right there, four label gates, a substitution that failed silently, and angles DRC never looks at. Part 9 of the series.",
      "content_text": "The metrics we measured passing is no evidence that the items we did not measure are correct. The schematic, label and angle gaps a review exposed after we called the board done, and the gates built to close them.",
      "date_published": "2026-08-11T15:00:00.000Z",
      "date_modified": "2026-08-11T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "PCB Automation"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/ai-plc-hmi-workflow-en/",
      "url": "https://intosen.com/blog/posts/guides/ai-plc-hmi-workflow-en/",
      "title": "PLC Ladder and HMI Screens With AI - Senbrix and Senvas Together",
      "summary": "Building one machine takes both control logic (PLC) and an operator screen (HMI). Senbrix writes the ladder, Senvas draws the screens, both are built by talking to an AI, and the two meet on the same Modbus TCP address space.",
      "content_text": "Ladder on one side, screens on the other, and one rule holding them together - the values live in the PLC and the HMI only reads them and draws them.",
      "date_published": "2026-07-29T15:00:00.000Z",
      "date_modified": "2026-07-29T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "SENBRIX"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/senbrix-product-en/",
      "url": "https://intosen.com/blog/posts/guides/senbrix-product-en/",
      "title": "Senbrix Raspberry Pi PLC - Ladder and C# Proven on an Arcade Cabinet",
      "summary": "Senbrix is a compact PLC built on a Raspberry Pi and the .NET runtime. Ladder logic and C# run in one project, and analog and digital I/O expand over a CAN bus. We validated it on an arcade cabinet running four games from a single project.",
      "content_text": "A compact PLC where ladder and C# share the same memory, with AD-4, DA-4 and IO-8 expansion boards on a CAN bus - validated by four games running out of one project.",
      "date_published": "2026-07-29T15:00:00.000Z",
      "date_modified": "2026-07-29T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "SENBRIX"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/beer-pour-game-07-fishing-en/",
      "url": "https://intosen.com/blog/posts/projects/beer-pour-game-07-fishing-en/",
      "title": "Fishing Game on the PLC HMI Arcade Cabinet - Translating \"Not Fun\" Into Numbers",
      "summary": "We reused the beer lever as a fishing rod for game four, and it was not fun. Four vague impressions - too fiddly, the line never snaps, too easy, no vibration - each pointed at exactly one number to fix.",
      "content_text": "No new parts, just the beer lever again. The design looked elegant on paper and played badly, and the work was translating four vague impressions into four exact numbers - tension, fish stamina, hooking, and haptics.",
      "date_published": "2026-07-28T15:00:00.000Z",
      "date_modified": "2026-07-28T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Beer Game Cabinet"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/plc-hmi-arcade-cabinet-series-en/",
      "url": "https://intosen.com/blog/posts/projects/plc-hmi-arcade-cabinet-series-en/",
      "title": "PLC HMI Arcade Cabinet Series Index - Seven Posts, One Lever, Four Games",
      "summary": "Seven posts on building an arcade cabinet from an industrial PLC and an 800×480 touch panel. A potentiometer lever and 3D printing, blackjack on physical buttons, screen animation, ERM haptics, a joystick shooter, and fishing balance - here is what each part covers.",
      "content_text": "From one lever to a cabinet holding four games, seven posts collected on one page - in the order the parts arrived and the games followed them.",
      "date_published": "2026-07-28T15:00:00.000Z",
      "date_modified": "2026-07-28T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Beer Game Cabinet"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/beer-pour-game-06-shooter-en/",
      "url": "https://intosen.com/blog/posts/projects/beer-pour-game-06-shooter-en/",
      "title": "Joystick Shooter on the PLC HMI Arcade Cabinet - Game Three, Vertical Scrolling",
      "summary": "Game three is a vertical scrolling shooter, and the analog joystick came first. Cramped comms addresses forced a remap of two working games, saving bullet memory broke cause and effect, and the stutter was update interval, not frame rate.",
      "content_text": "The input device picked the game again: an analog joystick meant a vertical scrolling shooter. Climbing a night sky, shooting enemies, and getting stronger on pickups - plus a memory remap, a broken cause and effect, and an interpolation fix.",
      "date_published": "2026-07-27T15:00:00.000Z",
      "date_modified": "2026-07-27T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Beer Game Cabinet"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/beer-pour-game-05-haptics-en/",
      "url": "https://intosen.com/blog/posts/projects/beer-pour-game-05-haptics-en/",
      "title": "ERM Haptics on a PLC HMI Arcade Cabinet - Two Wrong Theories, One Measurement",
      "summary": "An ERM motor driven from an analog output was supposed to scale with lever position, but the strength never changed. Two plausible theories were both wrong; the logged values showed the 2.0V floor was already 37% of full strength.",
      "content_text": "The ERM vibration motor promised in Part 2 is installed and buzzing, but pulling the lever further changed nothing. After two wrong theories we stopped guessing, logged the actual values, and found the output window was the problem.",
      "date_published": "2026-07-26T15:00:00.000Z",
      "date_modified": "2026-07-26T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Beer Game Cabinet"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/beer-pour-game-03-blackjack-en/",
      "url": "https://intosen.com/blog/posts/projects/beer-pour-game-03-blackjack-en/",
      "title": "Blackjack on the PLC HMI Arcade Cabinet - When a Machine Becomes a Platform",
      "summary": "We turned the cabinet's title screen into a game select menu and added blackjack as the second game. Four physical buttons wired to the IO expansion board call play, hit, stay, and double, and all 52 cards are drawn in code rather than as images.",
      "content_text": "The title screen became a game select menu and blackjack became game two. A house rule deals the dealer a card every time you take one, and inheriting the first game's leaderboard and comms layer cut the build time in half.",
      "date_published": "2026-07-21T15:00:00.000Z",
      "date_modified": "2026-07-21T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Beer Game Cabinet"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/beer-pour-game-04-live-screen-en/",
      "url": "https://intosen.com/blog/posts/projects/beer-pour-game-04-live-screen-en/",
      "title": "PLC HMI Arcade Cabinet Screen Animation - One AI Outsourced the Art to Another",
      "summary": "Five animations for swelling foam and a wavering stream, a pub background drawn entirely in code, and a bartender character - after four failed bears built from shapes, the AI building the screen commissioned the artwork from another AI.",
      "content_text": "A full day spent making the HMI screen feel alive: five animations, a pub background drawn in code, and a bartender that took four failed shape-built bears before one AI handed the drawing to another.",
      "date_published": "2026-07-21T15:00:00.000Z",
      "date_modified": "2026-07-21T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Beer Game Cabinet"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/beer-pour-game-02-lever-vibration-en/",
      "url": "https://intosen.com/blog/posts/projects/beer-pour-game-02-lever-vibration-en/",
      "title": "PLC HMI Arcade Cabinet Lever - 3D Printing and a Failed Haptics Transplant, Part 2",
      "summary": "We modeled a ball lever and its potentiometer pillar in Blender and 3D printed both, then failed at transplanting the vibration actuator harvested from a Switch Pro Controller. The fix was an ERM motor that matches the board.",
      "content_text": "Part 2 of the arcade cabinet. A ball lever modeled parametrically in Blender and printed on a 3D printer, and a Pro Controller haptics transplant that failed - one photo of the real part overturned the whole design.",
      "date_published": "2026-07-20T15:00:00.000Z",
      "date_modified": "2026-07-20T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Beer Game Cabinet"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/lyra-vs-pi-benchmark-en/",
      "url": "https://intosen.com/blog/posts/projects/lyra-vs-pi-benchmark-en/",
      "title": "Raspberry Pi Zero 2 W vs Luckfox Lyra Zero W Benchmark - Is the Substitute Faster?",
      "summary": "We ran the same .NET 8 benchmark on the Raspberry Pi Zero 2 W and on the Luckfox Lyra Zero W we picked to replace it. The Lyra was 10-12% faster on integer, floating point, and GC work, while the four-core Pi led on parallel work and the real PLC scan.",
      "content_text": "The Pi Zero 2 W is sold out and the Luckfox Lyra Zero W is the substitute - but is it fast enough? Same benchmark, same .NET version, both boards. On paper the Pi should have won, and the clock said otherwise.",
      "date_published": "2026-07-20T15:00:00.000Z",
      "date_modified": "2026-07-20T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Lyra Zero W"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/lyra-zero-w-pi-alternative-en/",
      "url": "https://intosen.com/blog/posts/projects/lyra-zero-w-pi-alternative-en/",
      "title": "Raspberry Pi Zero 2 W Alternative - Moving to the Luckfox Lyra Zero W",
      "summary": "The Raspberry Pi Zero 2 W is sold out, so we moved to the Luckfox Lyra Zero W. Flashing needs SDDiskTool instead of Raspberry Pi Imager, .NET has to be rebuilt for 32-bit ARM, and CAN and wired Ethernet came from a kernel rebuild.",
      "content_text": "The Raspberry Pi Zero 2 W at the heart of ZPi Controller is sold out. We picked the RK3506B-based Luckfox Lyra Zero W as a replacement and actually moved onto it, from flashing the image to rebuilding the kernel and running real CAN control.",
      "date_published": "2026-07-19T15:00:00.000Z",
      "date_modified": "2026-07-19T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Lyra Zero W"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/beer-pour-game-01-making-en/",
      "url": "https://intosen.com/blog/posts/projects/beer-pour-game-01-making-en/",
      "title": "Building a PLC HMI Arcade Cabinet - Playdate's Root Bear With a Real Lever",
      "summary": "We replaced the crank of the Playdate game Root Bear with a potentiometer lever and built a PLC HMI arcade cabinet on a Senbrix PLC and a Senvas HMI. The PLC owns flow rate, scoring, and the leaderboard while the 800×480 touch panel only draws.",
      "content_text": "Root Bear is a Playdate game about turning a crank to pour the perfect root beer. We moved it onto a physical potentiometer lever and a touch panel, and by the end of one day the inside of the cabinet was genuine plant equipment.",
      "date_published": "2026-07-15T15:00:00.000Z",
      "date_modified": "2026-07-15T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Beer Game Cabinet"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/going-connect-raspberry-pi-en/",
      "url": "https://intosen.com/blog/posts/guides/going-connect-raspberry-pi-en/",
      "title": "Finding Raspberry Pis on a Network - Ping Sweep, ARP and MAC Filtering",
      "summary": "A plain Raspberry Pi advertises nothing over mDNS, so we added an active scan - a ping sweep, the ARP table, a Raspberry Pi OUI filter and an SSH query. Nicknames keyed to the MAC keep working after DHCP changes the IP.",
      "content_text": "An IP tells you nothing about which Pi you are looking at. Here is the active scan that finds them and the MAC-keyed nicknames that survive a reboot.",
      "date_published": "2026-07-12T15:00:00.000Z",
      "date_modified": "2026-07-12T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "Going Connect"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/field/theater-control-en/",
      "url": "https://intosen.com/blog/posts/field/theater-control-en/",
      "title": "Stage Control HMI - Every Stage Device on One Modbus TCP Touch Panel",
      "summary": "An industrial HMI that ties several drive control boards together over Modbus TCP so every device on a small theater stage is operated from one 1024×600 touch panel - plus the screen rules that prevent mistakes and the problems fixed on site.",
      "content_text": "The real danger on a stage is not missing information - it is pressing the wrong channel or trusting a device whose link has dropped. The screens were designed around that.",
      "date_published": "2026-06-28T15:00:00.000Z",
      "date_modified": "2026-06-28T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Field",
        "Stage"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/senvas-hmi-tech-en/",
      "url": "https://intosen.com/blog/posts/guides/senvas-hmi-tech-en/",
      "title": "Industrial HMI Software - Draw in SENVAS Designer, Run in Runtime",
      "summary": "The industrial HMI software behind SENVAS Touch has two halves: SENVAS Designer draws the screen on a PC, SENVAS Runtime runs it on the device. Modbus, MQTT, MC and CNet communication, real-time monitoring, SQLite history, alarms and control logic.",
      "content_text": "An industrial HMI does more than draw screens: it talks to the plant floor, records what happens, raises alarms, and runs control logic. Here is the SENVAS Designer and SENVAS Runtime pair that does it on SENVAS Touch.",
      "date_published": "2026-06-23T15:00:00.000Z",
      "date_modified": "2026-06-23T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "SENVAS"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/senvas-vpn-tech-en/",
      "url": "https://intosen.com/blog/posts/guides/senvas-vpn-tech-en/",
      "title": "Industrial HMI Remote Access - Tailscale and Funnel on SENVAS Touch",
      "summary": "How do you reach an industrial HMI device installed at a customer site safely? SENVAS Touch uses a WireGuard-based Tailscale mesh VPN with no port forwarding and no VPN server to run, plus Funnel public HTTPS opened only when it is actually needed.",
      "content_text": "Port forwarding, TeamViewer and self-hosted OpenVPN each come with a catch. SENVAS Touch solves industrial HMI remote access with a WireGuard-based Tailscale mesh VPN and Funnel HTTPS that opens only on demand.",
      "date_published": "2026-06-23T15:00:00.000Z",
      "date_modified": "2026-06-23T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "SENVAS"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/senvas-web-tech-en/",
      "url": "https://intosen.com/blog/posts/guides/senvas-web-tech-en/",
      "title": "Industrial HMI Launcher - .NET 9 Blazor Server on SENVAS Touch",
      "summary": "The web app inside SENVAS Touch is not the HMI itself but the touch management launcher that starts and manages it. .NET 9 Blazor Server with SignalR, Kestrel, a Chromium kiosk and MudBlazor runs deployment, monitoring and remote access.",
      "content_text": "The foundation layer of an industrial HMI device, the touch management launcher, is a .NET 9 Blazor Server app. The kiosk welcome screen, the web console and remote access are all the same app; the operator HMI runs on top of it.",
      "date_published": "2026-06-23T15:00:00.000Z",
      "date_modified": "2026-06-23T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "SENVAS"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/going-connect-en/",
      "url": "https://intosen.com/blog/posts/guides/going-connect-en/",
      "title": "mDNS Device Auto-Discovery - Every Device on the LAN in One Window",
      "summary": "We kept installing Raspberry Pi devices, PLCs and HMIs on site and then asking which IP was which. A standard mDNS advertisement plus one small Windows tray app fixed it, with a TXT record convention written down first.",
      "content_text": "Devices work the moment you plug them in, but somebody still has to remember what runs where. One TXT convention and one tray app removed that chore.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "Going Connect"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/raspberry-pi-plc-series-en/",
      "url": "https://intosen.com/blog/posts/guides/raspberry-pi-plc-series-en/",
      "title": "Raspberry Pi PLC Series Index - Seven Posts on Building ZPi Controller",
      "summary": "Seven posts on building a low-cost industrial PLC from a Raspberry Pi Zero 2 W and a 4-input/4-relay board. Modbus TCP/RTU, a browser rule editor, an AI-generated HMI, the MCP installer, three debugging traps, boot time, and the v2 roadmap - here is what each part covers.",
      "content_text": "Seven posts on building an industrial controller out of a Raspberry Pi, collected on one page - from the hardware and the AI HMI through the debugging traps, boot time, and what comes next.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "ZPi Controller"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/senvas-touch-product-en/",
      "url": "https://intosen.com/blog/posts/guides/senvas-touch-product-en/",
      "title": "Industrial HMI Touch Panel - SENVAS Touch on a Raspberry Pi 4",
      "summary": "SENVAS Touch is an industrial HMI touch device on the Raspberry Pi 4 that works the moment you power it on. Kiosk auto-boot, automatic network discovery, secure remote management, Claude AI integration, app deployment, and the 7.0″ and 10.1″ model specs.",
      "content_text": "An industrial HMI touch device you can carry into a factory, a farm, or a power plant, plug in, and use. Kiosk auto-boot, network discovery, remote management, AI integration, and automated app deployment at a glance.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "SENVAS"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/zpi-01-intro-en/",
      "url": "https://intosen.com/blog/posts/guides/zpi-01-intro-en/",
      "title": "Raspberry Pi PLC - Introducing ZPi Controller on a Pi Zero 2 W",
      "summary": "A low-cost industrial PLC built from a Raspberry Pi Zero 2 W, a 4-input/4-relay board, .NET 9 and Blazor. Part 1 covers Modbus TCP/RTU slave and master, the browser rule editor, hosted user programs and the AI-generated full-screen HMI.",
      "content_text": "ZPi Controller pairs a Raspberry Pi Zero 2 W with a 4-input/4-relay board and runs .NET 9 plus Blazor on top. Part 1 walks through Modbus TCP/RTU, the browser rule editor, hosted user programs and the AI-generated operator HMI.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "ZPi Controller"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/zpi-02-zview-ai-hmi-en/",
      "url": "https://intosen.com/blog/posts/guides/zpi-02-zview-ai-hmi-en/",
      "title": "Raspberry Pi PLC HMI Generated by AI - ZView with Claude and MCP",
      "summary": "A conversation with Claude produces a full-screen industrial HMI that drives real GPIO on a Raspberry Pi PLC the moment it is deployed. ZView puts the workflow inside the MCP tool description and leaves SSE auto-reload and version rollback to the server.",
      "content_text": "Build a full-screen industrial HMI for a Raspberry Pi PLC just by talking to Claude. The workflow lives inside the MCP tool description, and SSE auto-reload plus version rollback stay on the server side.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "ZPi Controller"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/zpi-03-mcp-installer-en/",
      "url": "https://intosen.com/blog/posts/guides/zpi-03-mcp-installer-en/",
      "title": "Raspberry Pi PLC MCP Setup - the One-Double-Click Claude Installer",
      "summary": "The story behind a Windows BAT that registers an MCP server with both Claude Desktop and Claude Code from a single double-click. CP949 encoding, the cmd parser parenthesis trap, PowerShell escaping, and the Microsoft Store launch we gave up on.",
      "content_text": "Connecting a Raspberry Pi PLC to Claude Desktop should take one double-click. Getting there meant fighting encoding traps, cmd parser quirks, PowerShell escaping and three ways of launching Claude that did not work.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "ZPi Controller"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/zpi-04-three-gotchas-en/",
      "url": "https://intosen.com/blog/posts/guides/zpi-04-three-gotchas-en/",
      "title": "Raspberry Pi PLC Debugging - Modbus Port, mDNS Cache and Regex $1",
      "summary": "Three non-obvious bugs from building a Raspberry Pi PLC: a Modbus port typed as 5000 that took the web UI down in a restart loop, an avahi reload that keeps advertising the old hostname, and a C# regex where $1 is swallowed as $15.",
      "content_text": "A mistyped Modbus port that killed the web UI in an infinite restart loop, an avahi reload that keeps advertising the old hostname, and a C# regex replacement where $1 silently becomes $15 - with the broken and fixed code side by side.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "ZPi Controller"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/zpi-05-wifi-boot-en/",
      "url": "https://intosen.com/blog/posts/guides/zpi-05-wifi-boot-en/",
      "title": "Raspberry Pi PLC WiFi Recovery - Boot Time from 1 min 31 s to 33 s",
      "summary": "WiFi and boot time decide the first impression of an industrial Raspberry Pi device. Here is how we restored WiFi credentials from our own backup instead of trusting NetworkManager, and cut boot time from 1 min 31 s to 33 s.",
      "content_text": "WiFi credentials that vanish after a reboot and a boot sequence that stalls for a full minute are both first-impression problems on a Raspberry Pi PLC. This is how we backed up credentials ourselves and dropped boot time to 33 s.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "ZPi Controller"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/zpi-06-whats-next-en/",
      "url": "https://intosen.com/blog/posts/guides/zpi-06-whats-next-en/",
      "title": "Raspberry Pi PLC Roadmap - MQTT, WebSocket and Alarms in ZPi v2",
      "summary": "With ZPi Controller v1 finished, here is the v2 roadmap for this Raspberry Pi PLC: MQTT first, a WebSocket live monitor, alarms and notifications, and AI-generated ZViews driven by a user program manifest, with effort estimates.",
      "content_text": "MQTT as the top priority, WebSocket for a real live monitor, alarms and notifications, and ZViews the AI generates from a user program manifest. The v2 roadmap for this Raspberry Pi PLC and the closing post of the series.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "ZPi Controller"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/guides/zpi-07-modbus-io-mirror-en/",
      "url": "https://intosen.com/blog/posts/guides/zpi-07-modbus-io-mirror-en/",
      "title": "Raspberry Pi PLC Modbus IO Monitor - a ZView HMI in One HTML Page",
      "summary": "A ZView sample showing on one screen how an upstream Modbus master drives four outputs and reads four inputs back from a Raspberry Pi PLC. RTU slave settings, the mirror script, the bit matrix that caught a byte swap, and three link states.",
      "content_text": "A single-page ZView, 10 KB of HTML, showing an upstream Modbus master driving four outputs and reading four inputs back. The bit matrix on screen catches byte swaps and wrong bit positions instantly.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Guides",
        "ZPi Controller"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/arduino-web-uploader-en/",
      "url": "https://intosen.com/blog/posts/projects/arduino-web-uploader-en/",
      "title": "Remote Arduino Firmware Upload - Compile and Flash from a Browser",
      "summary": "Remote Arduino firmware upload without a laptop - we wrapped arduino-cli in a FastAPI server on a Raspberry Pi so board selection, compiling, flashing, library management, a live serial console and Tailscale remote access all happen in a browser.",
      "content_text": "One Raspberry Pi turned into a shared uploader, so a firmware change no longer means carrying a laptop and a USB cable over to the machine.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Arduino Web Uploader"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/going-brochure-ai-iteration-en/",
      "url": "https://intosen.com/blog/posts/projects/going-brochure-ai-iteration-en/",
      "title": "Print-Ready Brochure in HTML and CSS - A Tri-Fold PDF from Chrome",
      "summary": "No Illustrator and no InDesign - just HTML/CSS, headless Chrome and Ghostscript to produce a print-ready A4 tri-fold brochure. A record of iterating with AI through cropped images, 2mm bleed, the fold rule and font outlining.",
      "content_text": "The design tools were never opened. The brochure was written in HTML, exported from Chrome, outlined in Ghostscript, and refined one instruction at a time.",
      "date_published": "2026-06-22T15:00:00.000Z",
      "date_modified": "2026-06-22T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "AI Content Production"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/field/smartfarm-hmi-en/",
      "url": "https://intosen.com/blog/posts/field/smartfarm-hmi-en/",
      "title": "Smart Farm HMI on a Raspberry Pi - The Pump That Would Not Stop",
      "summary": "An Arduino Mega handles the sensors and actuators while Senvas Touch acts as Modbus RTU master and HMI - six crop presets, sunrise and sunset fades, scheduled watering and a live camera on one panel, plus the three problems it took to get there.",
      "content_text": "Coil bit packing, a black MJPEG screen and a pump that ignored its auto-stop - the three troubleshooting stories behind an indoor smart farm on one touch panel.",
      "date_published": "2026-06-21T15:00:00.000Z",
      "date_modified": "2026-06-21T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Field",
        "Smart Farm"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/field/solar-tracker-hmi-en/",
      "url": "https://intosen.com/blog/posts/field/solar-tracker-hmi-en/",
      "title": "Solar Tracking Control HMI - A Two-Axis LDR Tracker and Servo Jitter",
      "summary": "A two-axis solar tracker following the sun with a four-quadrant LDR sensor - Arduino Mega firmware, a Python backend on a Raspberry Pi and a 7-inch touch HMI, plus the three-layer fix for servo jitter and seven rounds of deployment troubleshooting.",
      "content_text": "Four LDRs give the direction error as a vector, two servos follow it, and a 7-inch panel shows the charge. The jitter fix and seven deployment rounds are the interesting part.",
      "date_published": "2026-06-21T15:00:00.000Z",
      "date_modified": "2026-06-21T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Field",
        "Energy"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/3d-cases-blender-mcp-en/",
      "url": "https://intosen.com/blog/posts/projects/3d-cases-blender-mcp-en/",
      "title": "Blender MCP 3D Enclosure Design - Four Printable Cases in One Day",
      "summary": "Four enclosures designed in one day with Blender MCP and Claude Code - a misting nozzle, an Arduino Mega case, an LCD case and a Raspberry Pi 4B case. Three came out print-ready, and the reusable workflow is written down.",
      "content_text": "Three print-ready STLs and one design abandoned after seven rounds of corrections. The workflow, the parametric structure, and what went wrong.",
      "date_published": "2026-06-21T15:00:00.000Z",
      "date_modified": "2026-06-21T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Blender MCP"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/going-panel-stage-hmi-en/",
      "url": "https://intosen.com/blog/posts/projects/going-panel-stage-hmi-en/",
      "title": "Raspberry Pi Touch HMI - Stage Lighting Control with SkiaSharp",
      "summary": "A Raspberry Pi touch HMI built on .NET 8.0 and SkiaSharp that talks to a PLC over Modbus TCP. Four rewrites of the ON/OFF visualisation, five rounds of GPIO conflict on the buzzer, and how a silent disconnect finally got caught.",
      "content_text": "Press the wrong switch on a stage and a set misbehaves. Building a panel where a mistake is obvious took four visualisation rewrites and five rounds of GPIO conflict.",
      "date_published": "2026-06-21T15:00:00.000Z",
      "date_modified": "2026-06-21T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Stage HMI"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/smart-factory-modbus-en/",
      "url": "https://intosen.com/blog/posts/projects/smart-factory-modbus-en/",
      "title": "Modbus RTU Sorting Line Control - Replacing a Bluetooth Teaching Kit",
      "summary": "We pulled the Bluetooth app off an Arduino sorting-line kit and reconnected it to a Senvas Touch HMI over wired Modbus RTU - a Mega 2560, an eight-stage state machine instead of delay(), and a register contract written before any code.",
      "content_text": "A teaching kit becomes an industrial line: no phone in hand, cumulative counts on screen, and a wired link whose loss is actually visible.",
      "date_published": "2026-06-21T15:00:00.000Z",
      "date_modified": "2026-06-21T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Modbus HMI Migration"
      ]
    },
    {
      "id": "https://intosen.com/blog/posts/projects/going-ide-week-build-en/",
      "url": "https://intosen.com/blog/posts/projects/going-ide-week-build-en/",
      "title": "An IDE for RP2040 Industrial Boards - Going.IDE Built in One Week",
      "summary": "A dedicated IDE for our RP2040 industrial board series, built in seven days on .NET 8 WinForms with ScintillaNET, Scriban, arduino-cli and an MCP server - wizard, build, upload, serial monitor, manual PDF and installer in one window.",
      "content_text": "From an empty solution to v1.2.0.5 in seven days. The feature set, seven troubleshooting highlights, and the AI coding patterns that made the week possible.",
      "date_published": "2026-05-21T15:00:00.000Z",
      "date_modified": "2026-05-21T15:00:00.000Z",
      "authors": [
        {
          "name": "SEN"
        }
      ],
      "tags": [
        "Projects",
        "Going.IDE"
      ]
    }
  ]
}