
Generic module something
monsterzack5/AutoMato
A Car based automation framework, fully integrated with Node-Red!

A Car based automation framework, fully integrated with Node-Red!
Generic module is an open-source printed circuit board by monsterzack5, from the monsterzack5/AutoMato repository on GitHub. It is a 2-layer board of 117.5 × 55 mm with 73 parts on 134 nets, routed with 940 tracks and 159 vias.
It is built around the AMSROL-7805NZ, ESP-12F and ESP32-S3-WROOM-1-N8, with the ESP32-WROOM-32, TJA1050T/CM and TXS0108EPW among its other parts. Its parts include 14 capacitors, 8 ICs, 7 connectors, 5 resistors and 1 inductor. It belongs with the ESP32 and ESP8266 boards of this library.
Although near completely functional, AutoMato and generally everything in this repository are in an alpha state. Error handling and reliability are areas that are definitely lacking, and need to be improved before we can recommend actually using this inside of your car.
A car specific framework for automation to breathe new life into an old car.
We all have things we wish our car could do, especially if you have an older one. AutoMato seeks to give users the ability to program automations to make that happen. AutoMato is an extensible framework that allows users to create modules that control features of the car based on events or user input.
AutoMato implements 3 things to help abstract away all the complexities of car automation:
Modules are pieces of hardware that contain a microcontroller and specific circuitry to control features of the car such as the windows, climate controls, or windshield wipers. Modules can be connected together via CANBUS or serial by default, but other interfaces can be added in through our library. Modules can be powered all the time (S0) or can be powered only when the car is in ACC (S1). It is planned to have a module to make the car go into ACC to access any S1 modules that are in an offline flow.
users are encouraged to control as much as they can with a single module due to power draw. Simply put, the fewer modules the car has the less quiescent current will be drawn when the car is off.
Automation flows can be created very easily using NodeRed and the AutoMato plugin for it. The modules that are connected to the system will be added dynamically to the interface with the help of CanRed when you add them to the network.
There are two types of flows that can be created:
Online event flows require the SBC (ex: Raspberry Pi) to be powered up in order for them to work. These are generally meant to be used only when the car is running because it has a high power draw. With this configuration, NodeRed is actively handling module events and issuing commands. This allows you to use the powerful existing library of NodeRed nodes with your flows.
For example: using a PID control node for the cabin temperature of your car.
Offline event flows can be run when the car is on or off, allowing you to have flows that can be run 24/7. These are compiled from NodeRed into "Event Blocks" and spread throughout the modules used in the flow.
For example: using a rain sensor to roll up the windows in your car.
Information about specific systems and general development info can be found in /Documentation.
The docs are only loosely organized and are by no-means extensive. In the future, as more systems get ironed out, documentation will improve drastically.
In the "finished" system, CanRed and NodeRed are both ideally ran on an SBC (ex: Raspberry Pi) inside of your car with the ability to turn itself off to conserve power. As mentioned above, modules can either be connected to a fulltime 12v source, or the cars ACC line. CanRed can be linked to the modules via a CANBUS network or the modules can be daisy chained to each other via Serial. You can even mix and match depending on what is best suited for your application.
Modules are intended to be user programmed, where the user can create specific functions to do specific tasks, and then register these with the AutoMato library so that they can be called from anywhere. A rough example of that:
AutomatoReturnData LockAllCarDoors(const void*)
{
bool did_doors_lock = lock_all_the_doors();
if (did_doors_lock) {
return automato_return(true);
} else {
return automato_return(false);
}
}
int main() {
Automato automato(configuration_string);
// The "1" here corresponds to the ID of the function,
// ideally you'll be able to leave this out in the future.
automato.register_callback(1, LockAllCarDoors);
while (true) {
automato.loop();
// Other user specific code here
}
}CanRed creates and listens to any socket connections to /tmp/CanRed/red.sock. This API can be used as an IPC system for any other programs running on the Raspberry Pi. Internally it's how NodeRed talks to CanRed, and vise versa.
Modules can be connected to each other in all sorts of ways, this allows flexibility and the ability to overcome device number limits on busses if neccessary.
For example, this is a perfectly valid setup:
------------ ----------------
> | Module 2 | <-CANBUS-> | Non-Automato |
| ------------ | Module |
---------- ------------ | ------------ ----------------
| CanRed | <-Serial-> | Module 1 | <- CANBUS +> | Module 3 |
---------- ------------ | ------------
^ | ------------
| > | Module 4 |
| ------------
| Serial
| ------------
- > | Module 5 |
------------Using the translate_between_layers API, you can have multiple networks and sub-networks happily interact with each other.
Currently this system uses runtime-polymorphism since it was the easiest to implement, but avoiding the overhead of vtables is planned in the future. The API is subject to drastically change in the future.
Although the AutoMato library tries to implement specialized wrapper code for interacting with EEPROM and connecting to a network (Like CANBUS/Serial), sometimes you want to be able to use something else, LINBUS or Z-Wave. We allow users to be able to implement this themselves by passing the implementation to either the AutoMato constructor (in the case of a custom EEPROM or NVS implementation) or by using the .add_interface API for custom bus interfaces.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 7 | 100nF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C3, C4, C5, C6, C11, C12, C13 |
| 5 | 10k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R1, R2, R3, R4, R5 |
| 4 | Connector_PinHeader_2.54mm:PinHeader_1x17_P2.54mm_Vertical | , , , | |
| 4 | Connector_PinHeader_2.54mm:PinHeader_1x19_P2.54mm_Vertical | , , , | |
| 3 | 22uF 12v | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C8, C9, C10 |
| 2 | 15pF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C1, C2 |
| 2 | RJ45_Shielded | Connector_RJ:RJ45_Ninigi_GE | J1, J2 |
| 1 | Connector_PinHeader_2.54mm:PinHeader_1x16_P2.54mm_Vertical | ||
| 1 | Connector_PinHeader_2.54mm:PinHeader_1x13_P2.54mm_Vertical | ||
| 1 | Connector_PinHeader_2.54mm:PinHeader_1x07_P2.54mm_Vertical | ||
| 1 | 100pF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C14 |
| 1 | 10uF 50V | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C7 |
| 1 | 12V IN | TerminalBlock:TerminalBlock_bornier-2_P5.08mm | J3 |
| 1 | 3v3_A | TestPoint:TestPoint_Pad_D2.0mm | TP14 |
| 1 | 3v3_B | TestPoint:TestPoint_Pad_D2.0mm | TP15 |
| 1 | 3v3_C | TestPoint:TestPoint_Pad_D2.0mm | TP16 |
| 1 | 3v3_D | TestPoint:TestPoint_Pad_D2.0mm | TP17 |
| 1 | 47uH | random:SDEI054T | L1 |
| 1 | 5V_EN | TestPoint:TestPoint_Pad_D2.0mm | TP9 |
| 1 | 5v_A | TestPoint:TestPoint_Pad_D2.0mm | TP10 |
| 1 | 5v_B | TestPoint:TestPoint_Pad_D2.0mm | TP11 |
| 1 | 5v_C | TestPoint:TestPoint_Pad_D2.0mm | TP12 |
| 1 | 5v_D | TestPoint:TestPoint_Pad_D2.0mm | TP13 |
| 1 | ACC|BAT | Jumper:SolderJumper-3_P1.3mm_Open_Pad1.0x1.5mm | JP1 |
| 1 | AMSROL-7805NZ | random:amsrol_78XXnz | U2 |
| 1 | AP2213 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U1 |
| 1 | CLKOUT | TestPoint:TestPoint_Pad_D2.0mm | TP22 |
| 1 | CS | TestPoint:TestPoint_Pad_D2.0mm | TP20 |
| 1 | ESP-12F | RF_Module:ESP-12E | U8 |
| 1 | ESP32-S3-WROOM | !esps2:ESP32-S3-WROOM-1-N8 | U7 |
| 1 | ESP32-WROOM-32 | RF_Module:ESP32-WROOM-32 | U6 |
| 1 | ESP_FLASH_BTN | Button_Switch_THT:SW_PUSH_6mm | FLASH |
| 1 | ESP_RESET_BTN | Button_Switch_THT:SW_PUSH_6mm | RESET |
| 1 | INT | TestPoint:TestPoint_Pad_D2.0mm | TP1 |
| 1 | JTAG | Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical | J4 |
| 1 | MCP2515-xSO | Package_SO:SOIC-18W_7.5x11.6mm_P1.27mm | U4 |
| 1 | MISO | TestPoint:TestPoint_Pad_D2.0mm | TP19 |
| 1 | MOSI | TestPoint:TestPoint_Pad_D2.0mm | TP18 |
| 1 | PROG | Connector_PinHeader_1.27mm:PinHeader_2x03_P1.27mm_Vertical | J5 |
| 1 | RASPI_ZERO | random:RASPI_ZERO(W) | J8 |
| 1 | RH100 | random:RH100 | Y1 |
| 1 | RST | TestPoint:TestPoint_Pad_D2.0mm | TP7 |
| 1 | RX0 | TestPoint:TestPoint_Pad_D2.0mm | TP2 |
| 1 | RX1 | TestPoint:TestPoint_Pad_D2.0mm | TP3 |
| 1 | SCK | TestPoint:TestPoint_Pad_D2.0mm | TP21 |
| 1 | SIM7000A header | random:SIM7000_MODULE | J6 |
| 1 | SIM7000_3v3/5v | Jumper:SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm | GNS5V|3V3 |
| 1 | TJA1050T | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U3 |
| 1 | TX0 | TestPoint:TestPoint_Pad_D2.0mm | TP4 |
| 1 | TX1 | TestPoint:TestPoint_Pad_D2.0mm | TP5 |
| 1 | TX2 | TestPoint:TestPoint_Pad_D2.0mm | TP6 |
| 1 | TXS0108EPW | Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm | U5 |
The 72 most common of 73 parts.
It measures 117.5 × 55 mm and has 2 copper layers, 1.6 mm thick.
73 parts, built around the AMSROL-7805NZ, ESP-12F, ESP32-S3-WROOM-1-N8 and ESP32-WROOM-32. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the monsterzack5/AutoMato repository on GitHub, at the commit this page was made from: the board is Modules/Common/Schematics/generic_module/generic_module.kicad_pcb and its schematic Modules/Common/Schematics/generic_module/generic_module.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask monsterzack5 before reusing the design.

monsterzack5/AutoMato
A Car based automation framework, fully integrated with Node-Red!


cukier/LoraProgrammer
Firmware ESP32 (ESP-IDF) para programar e configurar módulos de rádio LoRa, expondo a configuração através de um servidor HTTP em Wi-Fi (SoftAP/STA), acessível também via mDNS (http:// .local/).

mayoogh-flexli/Meesho-Put-To-Light
Modular, daisy-chained 5-node IR emitter/receiver rail for the Meesho put-to-light system. Each 400 mm board has five bin positions on an 84 mm pitch.


AugustoS97/CanBus-Radio-VAG
CANBUS PCB to control original functions of VAG (VW, SKODA, SEAT, AUDI) cars (such us original DSP and other functions).

JeyRunner/actonator
3D printable robot actuator with belt-driven gearbox and custom FOC driver board.

dremeier/Arduino-JK-BMS-To-Pylontech-CAN-PCB
PCB and Case for the Arduino JK-BMS To Pylontech CAN converter

AugustoS97/BMS-BatterySystem
Repositorio con el diseño de un BMS y una batería como TFM