{"id":15648156,"url":"https://github.com/noracodes/arduics","last_synced_at":"2026-02-07T19:03:00.235Z","repository":{"id":20879446,"uuid":"24166638","full_name":"NoraCodes/ArduICS","owner":"NoraCodes","description":"A cheap, Arduino-based ICS system.","archived":false,"fork":false,"pushed_at":"2014-09-24T15:16:41.000Z","size":3220,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-29T23:28:56.188Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NoraCodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-09-17T23:49:58.000Z","updated_at":"2016-10-28T13:32:29.000Z","dependencies_parsed_at":"2022-08-30T14:22:05.823Z","dependency_job_id":null,"html_url":"https://github.com/NoraCodes/ArduICS","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NoraCodes/ArduICS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoraCodes%2FArduICS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoraCodes%2FArduICS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoraCodes%2FArduICS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoraCodes%2FArduICS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NoraCodes","download_url":"https://codeload.github.com/NoraCodes/ArduICS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoraCodes%2FArduICS/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259876945,"owners_count":22925398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T12:23:45.674Z","updated_at":"2026-02-07T19:02:53.694Z","avatar_url":"https://github.com/NoraCodes.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"ArduICS THIS PROJECT IS ON HOLD\n=======\n## Overview\n### Vital Statistics\n\n* Controller: **Atmel ATMega 32u4** on 5V at 16MHz\n* Bus Support: **XPAND** **I2C** **SPI** **UART** **USB**\n* Programmable via **USB** in **Wiring** or **AVR-C**\n* Inputs/Outputs: **5x Digital I/O** 5V @ 20 mA  and **4x 10-bit analog input** and **3x relay outputs** (contact rated 120 VAC / 30 VDC @ 1 A)\n\n### What is ArduICS?\nAn Arduino-compatible industrial control system for long-term, low maintenance applications. ArduICS uses simple, easy to manage XPAND interfaces, using 74HC595 shift registers; just send bits along the wire using ShiftIn(), and your outputs will switch. ArduICS uses mostly through-hole (THT) components; no difficult surface-mount soldering means you can assemble everything yourself and save money, and maintenance is as easy as looking up a schematic and popping in a replacement part.\n\n### What is ArduICS XPAND?\nXPAND is a very simple \"bus\" based on 74HC595 SIPO (serial in parallel out) shift registers. Using only two digital I/O pins, huge numbers of devices can be controlled (hundreds of relays, LEDs, or anything else that can be controlled with a digital signal). It is comparatively slow, so SPI, I2C, or a dedicated digital I/O pin are still recommended for complex/fast/PWM signals, but XPAND is an extremely simple way to control a lot of whatever you need to control. It uses standard 3.5 mm stereo cable, which is already resistant to electrical noise and easy to route.\n\n### Why not use an existing solution?\nPLCs are very hard to program, and far more powerful than needed for most small businesses. For many applications, a slower and cheaper system would work fine; but such a thing doesn't really exist. ArduICS is easy to program (using either the Arduino's Wiring language or AVR-C), and once it's set up, it can be left running for a very long time. Plus, if you solder headers into the motherboard instead of soldering the controller in directly, you can swap out programs in seconds, or replace a broken or \"bricked\" controller cheaply. Its \"brain\" is the ATMega32u4 on [LadyAda's breakout board](http://www.adafruit.com/products/296?\u0026main_page=product_info\u0026cPath=19\u0026products_id=296)\n\n## Hardware\n\n### Motherboard\nCurrent motherboard version: **Mk2**\n\u003cimg src=\"https://raw.githubusercontent.com/SilverWingedSeraph/ArduICS/master/images/AICS%20Motherboard%20Mk2_pcb.jpg\"\u003e\n\n#### Board:\n\n* 3x relay output ports\n* 4x analog I/O ports @ 20 mA\n* 5x 5V TTL digital I/O ports @ 20mA\n* 1x each:\n\t* Hardware accelerated **I2C** \n\t* Hardware accelerated **SPI** \n\t* Hardware accelerated **UART**\n\t* Native **USB 2.0**\n\t* Software **XPAND**\n* 4 amp 5 volt supply on board (for powering peripherals)\n* Dual regulated input voltage\n* Power and Controller indication at a glance\n* Supports resetting controller from external button or logical device\n* Support for XPAND bus:\n\t* Uses 3.5mm stereo plug\n\t* Simple to implement: Sleeve common, ring data, tip clock.\n\t* Based on 74HC595 shift registers; tons of documentation available\n\t* Uses Arduino ShiftOut() function\n\n#### Controller:\n\nATMega 32u4 by Atmel on LadyAda's beautiful breakout board\n\n* 32K Non Volatile Memory\n* 2.5K Volatile RAM\n* 16 MHz Clock\n* 5V TTL Logic Level\n* Natively USB and ISP/ICSP Programmable\n\n### XPAND Boards\n* XPAND General **v0.1a**: 8 digital outputs. Use this to send digital signals to pretty much any 5V TTL devices (or through a level shifter to 3.3V or 12V devices). Or, use it to produce SS signals for your vast array of SPI sensors and actuators.\n* XPAND LED **v0.1a**: 8 indicator LEDs. Use this module to allow at-a-glance status monitoring.\n* XPAND Relay **v0.1a**: 8 relay-based outputs. Control your HV devices simply and reliably, but (relatively) slowly.\n\n### I2C Expansion Boards\n* 16 Pin I/O with MCP23017: Use this when there just aren't enough digital I/O pins. Can use up to 8 of these on one I2C bus.\n* 1MB EEPROM: A tiny board with 1MB of non-volatile memory that can be accessed quickly over the I2C bus. Up to 8 on one I2C bus.\n* 8IO 8 Pin I/O expander: Use this to add 8 more 5 volt digital input/output channels to your system. Max 8 per bus.\n\n### SPI Expansion Boards\n* SPI RTC: A battery-backup Real Time Clock. Keep fairly precise time even when your ICS system is off.\n\n### Other Expansion Boards\n* Power Regulator for Peripherals **v0.1a**: Provide clean, regulated power to your XPAND boards and other peripherals. Input +6 to +12 volts (from an ATX or other cheap power supply), and get out +5 volts of beautifully flat, clean voltage.\n\n## Contributing and Meta\n\n### What are the design principles?\nArduICS has a few simple design principles. Anything you submit should adhere to these.\n\n* Safe; keep HV away from logic (and humans!)\n* Simple; try not to use convoluted control schemes or proprietary interfaces\n* Self-contained; try to make each module work by itself, and put as much documentation as possible on the PCB's silkscreen.\n* Serial; don't connect parallel interfaces towards the motherboard unless absolutely necessary. Convert to parallel as close to the end as possible (use 74HC595s or similar chips). This keeps the number of wires (and lines of code!) low.\n* Extensible; Make sure your modules fit in with the rest of the ecosystem, and expand the capabilities of the system as a whole, rather than limiting them. For example, try to always pass busses through rather than capping them, and if there are extra inputs or outputs available on your ICs, try to break them out, even if only to headers or unpopulated pads.\n\n### What are my rights?\n(Lawyers should see the `LICENSE` file.) ArduICS is open source, under the GPLv3. You can do anything with it (yes, anything, including sell it) except sue me or change how it is licensed, as long as you:\n* say where you got it (i.e., link back here)\n* include a copy of or link to the GPLv3\n*  say how you changed it (if at all)\n\n### How can I help?\nPlease feel free to contribute your XPAND boards, or any other projects designed to interface with the ArduICS motherboard. Everything is currently being designed in [Fritzing](http://fritzing.org/home/) and should be in Fritzing Zip (.fzz) format. This is the default save format. If you submit a module using a different format such as Gerber, please include the PCB files, BoM, and any pertinent documentation.\n\nHave ideas for more modules but don't have the know-how to make them yourself? Notice problems with the existing boards, or ways improvements could be made? First, make sure nobody else has submitted the same thing; then [file an issue](https://github.com/SilverWingedSeraph/ArduICS/issues/new).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoracodes%2Farduics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoracodes%2Farduics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoracodes%2Farduics/lists"}