Welcome to my GitHub page
This page is place where my most important projects are showcased.
Weather Station Server
The backend-server written in NodeJS interacts with the data-acquisition system and queries for weather data. The response is the parsed, stored in a local mongodb data database, uploaded to a cloud mongodb instance, uploaded to world weather aggregators like openweathermap.org and served to browser, all in real-time. On the browser, a minimal AngularJS app receives the data as it arrives and creates a table on the fly, so as the code is robust even for new sensor additions on the weather station. Details about the architecture, instrumentation and code here.
Controlling Analysis & Design Software Programmatically
STAAD Pro V8i
One of the most popular package for analysis and design of concrete and steel structures, it does'nt, natively play well with other applications like AUTOCAD, or EXCEL which are essentially the part of the process workflow. Thankfully, it exposes most of the functionality through it API - OpenSTAAD. Macros can be written in VBA inside STAAD that be used to control it, a few examples, introduction to the API and code explanation here.
If however, you need to do something, not supported by the API currently like, for example, reading the design results, then one might have to resort more arcane approach of parsing the results file, a tedious and error-prone task, as output standards are never documented, and one has to rely on reading and understanding the results text file. Files with extension ANL generated by STAAD can be opened in a text-editor and hence, be parsed by any program. One such attempt using regular expressions to read through the file and extracting useful model information in VC++ in this repo.
A general FEA solution, ABAQUS has very detailed UI that makes it difficult for beginners to make changes to model quickly. Thankfully, they provide pretty powerful python and C++ APIs to affect the changes programmatically. Often helpful in using the API, is the auto-generated JNL file in the working directory, which has, in python, each and every step as performed through the UI. This makes using the API a breeze for when some complicated UI jugglery is involved. This python code reads the model-info like length, width and height of beam from an excel file and then updates the model. It then waits for the model to be solved based on the load and applied boundary conditions and then exports the results to an excel file.
This programmatic approach can really help in performing parametric studies on models where analysis has to be done numerous times after making some changes in the base model. The API also enables in the creation of custom UIs on top of the existing software enabling ease of use for special cases.
TIVA-C Launchpad - Analog-to-Digital Converter
TIVA-C Launchpad is a low-cost general purpose cortex-M3 based micro-controller board from Texas Instruments. It allows interfacing of with various sensors, actuators and control systems using variety of communication options including serial, I2C, SPI etc.
Various sensors like strain gages, load cells, LVDTs find application in Civil Engineering experimentation, and require costly data-acquisitions systems for recording of data and interfacing with PCs. This makes digital experiments to be limited to well-funded research labs and require constant support from system vendors, as in essence, their operation and programming is typical to that system.
A general-purpose board like TIVA-C launchpad, might not be a total replacement for industrial grade data-acquisition systems, they provide good starting points in learning the concepts of instrumentation, and for some cases be adequate for the problem at hand.
To illustrate the use of the board, and for general experiments involving analog sensors, code was developed and tested using a potentiometer as a sensor. Code 1 triggers the ADC conversion after a fixed interval, while Code 2 triggers the ADC conversion upon a switch press. The code converts the analog signal to a digital value and then sends it to the connected UART device, normally a PC. Interfacing can be written on the PC to read this value and store it or relay it as per the requirement.