The next step after extracting all electronic components is combining all of them to form a cheap and stable circuit. In order to check the stability of a combination, we had to make sure that all the requirements, such as voltage/current needs, of each component were being fulfilled. After making sure that the required components were available in our database, we then prioritized the needs and checked if these were being met in their prioritized order. Additional components were added to meet further needs if required, fulfilling the higher priority needs first and established the stable combination with the least cost.
The next step is placement. For this, Artificial Intelligence based techniques are used. The Learning Classifier System with Reinforcement Learning is utilized to place parts. LCS has various rules which help the agents learn in a multiagent environment. Various rules are implemented to meet all the constraints and then parts are placed at optimal positions on PCB.
After placement, we need to connect these components according to the given nets, called routing of PCB. We developed an automated routing methodology using path finding algorithms of Artificial Intelligence. Our approach gives the fully optimized routing for the given PCB in a few minutes depending on the dimensions of the PCB, such as size and resolution of the grid for any number of layers of the PCB. It takes a PCB layout and provides a complete and optimized routing.
At times, the complete circuit requires multiple PCBs or external batteries. These need to be placed inside the cover being generated. For this purpose, Bin Packing Algorithm is used which places multiple PCBs and batteries within the cover.
3D Routing module is responsible for connecting parts with wires in 3D space while catering to electronics, time and space constraints. Search algorithm with some additional modifications and constraints is employed to obtain short, natural looking routes which are ready to be deployed in real world scenarios.
Designing the cover is an important part of circuit design. The manual cover’s design is only suitable for one specific case and cannot fit other PCB’s/circuits. To adjust that, we needed a strategy that could generate the cover on runtime based on user selection. We are currently halfway through research needed to achieve this after which we will be able to design the dimensions and data of the cover.
The Gerber/FirmWare module takes in optimal placements, routing and drilling information and churns out Gerber files for these. These files can then be sent out to PCB manufacturers to make PCBs. These files contain machine commands, translated from Python arrays, and may contain layers of data as per the user’s needs. All these files are stored in separate directories marked by timestamps and are then ready to be shipped out for manufacturing.
At the end of the process, an apk is generated automatically which will control the user required product. For example, in the case of a drone, an apk will be generated that will control the drone. In case of a wireless video doorbell, the app will provide the video feed. In order to achieve this, different blocks are created. Each block controls sensor/communication and when we create a design, different blocks are connected and so consequently, the app is controlled from the smartphone.
In order to address this problem, Kotlin programming language is being used to create modularized code snippets.
Why Kotlin not Java?
Both languages are JVM based but Kotlin allows the creation of DSL (Domain Specific Language) easily with less of a boilerplate code. Code snippets are created with pure abstraction so that they can decouple easily with one another, much like puzzle pieces. A Python based APK generator script combines these snippets and builds an APK.