Hi, my name is Varun Kumar. I’m currently pursuing my BTech. in Electronics and Communication Engineering from IIIT Delhi. I was always fascinated by the realms of Electronics and Embedded Systems since my childhood and the same fascination and intrest brought here, to this point. I hope that my DIY projects will also intrigue you to learn more about Electronics.
My major areas of intrest are listed below.
Communication Systems
I've worked extensivly on real life implementation of comunication systems using USRPs and open source development toolkits for SDRs like GNUradio, OpenBTS.
Embedded Circuits
There is something special about embedded systems and micro controllers which draws my attention more than anything else, may be it's the degree of freedom they give to an indivisual to tinker and control things in his enviornment.
Analog Circuit Design
Considered as the most challenging realm of electronics world.
If mastered correctly, will give a distinguisable edge to an indivisual over others.
I made this project in order to build a surveillance car which can be controlled over Internet or any private network. My objective was to easily and cost effectively do something that can be used for security purposes.
My car uses DTMF module which takes it’s input from mobile phone attached to the car, that mobile is not only used to generate DTMF tones but also for the surveillance by providing Live Footage from it’s camera, over the network using AirDroid.
Conventionally, any project using DTMF requires call from another cell phone to the one attached to the project, which is not cost effective, but in case of my project I used an android app DTMF Tone Generator which generates DTMF tone, now for this to work I shared my phone’s screen over the network using VNC server, hence cost effective.
To make this Idea more effective I mounted the phone on a servo motor. This gave my Camera one degree of freedom, i.e. I can move it left and right without moving the bot.
Generally, there is one more security problem involved with DTMF that I took care of was that anyone can control the bot by calling the mobile phone attached to the bot. A simple solution to this problem is to apply a PIN using DTMF tones. I demonstrated this concept in the video and for the inner working you can check the source code.
An extension of this project
I tethered wifi from the phone mounted on the vehicle, thereby creating a local network. Now I was able to control my vehicle without the need of an external router or internet. Although I wasn’t able to get the live feed as Airdroid need internet connection to initialize.
This game test reaction time of two players, and declare the fastest one as winner. To do this I am using external interrupts and pin change interrupts in atmega328p. It gives four chance to each play, time of each chance is summed up and then player with minimum time is declared as the winner.
For the demo purpose, I’ll be using pseudo random function in it, just to keep track.
This game has precision of 1ms and accuracy of about +/- 4ms.
It also displays the concept of debouncing.
This game’s main motive is to show the beauty of external interrupts over polling and to show the how to reduce debouncing effect using software modifications.
Adaptive Screen Brightness using LDR and Python script
Every wondered how useful is the automatic brightness feature on phones, quickly adapting screen’s brightness according to the surrounding light intensity.
In this project I try to create something similar for any PC or Laptop running on Linux(preferably Ubuntu 14.04).
My goal was to keep it cheap and simple as much as possible.
So to make a prototype of it I used LDR to measure light intensity and an arduino communicate with my machine. On my machine I used a python script to communicate over USB with arduino and to edit the file which is responsible for the brightness of screen.
This project cost around Rs 300 just because of microcontroller that is being used(needless to say it’s a prototype).
It has got very high utility specially for PC users.
Liquid Crystal Displays are important in projects where interaction with Human is involved. LCD JHD162A is a small LCD which can be used with atmega328p. It has 16 columns and 2 row, therefore 32 segments. Each segment is composed of 8 rows of 5 dots.
Although this module is very versatile and handy but it’s very tricky to use. Arduino IDE has a library which contain important functions to get this module up and running.
I wanted to build a library for Atmega328p which does almost similar functions as LiquidCrystal Library in Arduino IDE. Interfacing with LCD is a task in itself one has to learn and understand the working of LCD in order to use it even for a simple project.
This library don’t require any in depth knowledge of LCD JHD162A and it’s working.
Just include lcd.h in your source code and you are ready to go.
Controlling Mouse Pointer using Python Script and Accelerometer
There are many ways of controlling mouse pointer using atmega328p, and I find using a python script and an arduino best and effective one because of the following reasons:
Python is a common language and comes pre-installed in almost all LINUX distros.
Using python script makes this project compatible to cross platforms, as no fancy software is needed.
Using an arduino saves me from the trouble that goes into making the whole circuit and then connecting it through a USB to TTL converter.
I’ll be using two non-standard libraries viz. Pyserial and Autopy both of them are freely available and easy to install, just like any non-standard library.
Accelerometer that I’m using is ADXL335, it’s a triple axis accelerometer.
Implementation of BPSK Modulation Using GNURadio and NI-USRP2920
BPSK stands for binary phase shift keying. In this kind of modulation scheme data bits are mapped to phase of carrier frequency and the two phase are separated by 180 degree from each other.
In this implementation I am going to map 0’s and 1’s to pi and 0 and then add them to the phase of carrier frequency.
One can view adding 0 and pi to the phase of the carrier wave, same as changing its direction without changing its magnitude.
SDR that I am using is gnuradio 3.7.7.1 with NI USRP 2920. As gnuradio is very fast developing platform hence version of gnuradio is very important as it might give some backward compatibility issues.
Swapping Workspace in Ubuntu using Accelerometer and Python Script
In this project I’ll demonstrate swapping of workspace in ubuntu using accelerometer and python script. I am using wmctrl command that will take arguments according to the accelerometer values.
On hardware level this project is similar to Controlling Mouse Pointer using Python Script and Accelerometer, you can check it outon the main page.
Python libraries that are being used are Pyserial, subprocess and sys. Pyserial is used to communicate between arduino and my machine. Subprocess is used to execute bash commands in python script and sys is used to exit program using try and except block.
Pyserial is a freely available non-standard library that is easy to install, just like any non-standard library.
Accelerometer that I’m using is ADXL335, it’s a triple axis accelerometer.
This circuit demonstrate the working of ADC in atmega328p using interrupts, using two different kinds of sensors one is LDR it’s resistance decrease with increase in light intensity other is NTC its resistance decreases with increase in temperature.
Simulating Concept of Threading Using Timers in Atmega328p
A thread is a lightweight process that is executed independently. But due to hardware limitation let's assume that a thread is simply a function manipulating one of the integers mentioned above. Since Atmega328P is equipped with only one ALU, either thread1 or thread2 is able to run. They can never run at the same time.
In this project I build a task scheduler which switches between two threads in an interval of 5.5 seconds.
First task(thread 1) is to increment an integer value displayed on first row of LCD every second.
Second task(thread 2) is decrement an integer value displayed on second row every two seconds.
Both integers start from Zero.
Example:
1. t1 is running and increments the integer in the first row every second
2. After 5.5 seconds, t1 stops and t2 starts decrementing the integer in the second row every 2 seconds
3. After 5.5 seconds, stop t2, start t1, go back to 1)