Making a DIY Hologram

I recently saw an article that teaches you how to make a very simple hologram with a bit of plastic and a phone. I’ve always been fascinated by holograms, so I decided to make one for my girlfriend as a little gift and have a bit of fun in the process.

Electronics Workshop

I am running a free electronics workshop for complete beginners. If you ever wanted to find out what goes on behind the scenes in your smartphone, or how to automate simple tasks with electronics, this workshop will be perfect for you. You will acquire a high-level understanding of the basics of electronics, as well as get a hands-on experience with creating and programming an electronic toy.

The sign-up link can be found here.

Everyone will get a set of the components pictured above for the hands-on workshop.

Here is an overview of the topics that I’ll cover -

  • Bit & bytes
  • Highs and lows
  • Hands-On
    • Blinking LED
    • Button as input
    • Playing melody

Before coming, it is very important that you download and install the following programs.

Materials can be found here.

Project Make-Possible

At the start of this summer a few friends and I participated in a makerthon called Project Make-Possible, jointly organised by the student chapters of Institute of Engineers as well as Engineers Without Borders Asia. Project Make-Possible is an initiative to introduce and promote the spirit of humanitarian engineering amongst students in NUS. Over the course of a week, we were exposed to humanitarian efforts in engineering, as well as workshops teaching us the basics of engineering skills such as 3D printing and laser cutting. There was a site visit to SPD as well.

We were given three problem statements to choose from. Here is the one which we chose:

PWDs (persons with disabilities) find it hard to manage many different electronic devices (such as handphones, iPads, laptops) due to their limited mobility and lack of “holder” accessories to secure these devices for the wheelchair. There is no inter-device communication application that a PWD can use to access all his devices on a single platform.

After the workshop and the site visits, we were given time to brainstorm and come up with a solution for this problem. Our group’s idea was simple - if PWDs find it hard to manage their electronic devices on the existing tray attached to their wheelchair, we will redesign it to be more user-friendly.

Our solution

Components

To that end, our design consists of a double-deck device holder, where the laptop will be kept below the transparent cover, and mobile devices can be strapped to the bottom of the cover. The upside of doing this is that touch-enabled devices can still be used and it prevents theft as everything is now kept underneath the cover.

Additionally, the device will be motorized, utilizing bluetooth connection to be controlled by an app we created on the Android platform. There are three other functions which the app is capable of - automatically swinging headphones when the user receives a call, flagging down a vehicle, as well as buzzing to get attention. This user control module (aka handphone) will be separately mounted on the armrest of the wheelchair.

You can see the end product in action below.

Judging

In the end, we were chosen by the judges and came first in our problem statement. The prize is of course funding to continue the project and to come up with a working prototype, so it’s not the end just yet! A big shout out to all the organizers of this event! It was really fun and I learnt a lot along the way.

Components

Making keychain flashlights

It’s the end of the school semester, and a lot of my seniors in college are leaving this place. It’s sad, but as the Chinese saying goes, there is no banquet that never ends. I wanted to do something so they can remember this place, and I thought what could be better than a small keychain which you can hang on your bag and whenever others ask you about it, you can fondly recount “Back in the days when I was in CAPT…”

So, here I detail the process of designing and making these little things.

Components used

  • Wide-angle white LED
  • Switch
  • Keychain
  • 3D-printed model

Components

1. Designing the cover

Originally, I wanted to buy a some battery holders and incorporate that into the design, but after walking through Sim Lim Tower for a morning I couldn’t find what I needed, so I decided to 3D-print everything instead. I downloaded a generic keychain flashlight from Thingiverse, and started by designing the plates which will spell out the words CAPT. After tweaking the dimensions and putting holes to hold the switch and the plates, it was ready to print. Going through a few revisions, I eventually got what I wanted.

Components

2. Wiring the insides

The insides were pretty simple to setup. I connected one end of the LED to the switch, and the other one will touch the positive end of the button cells. The switch closes the circuit by touching the negative end of the button cells. The end product looked like this.

Components

3. Glueing it together

After this is done, the rest was just putting on the keychain and glueing it together. Special thanks to my friend Yvonne who lent me her glue gun. The finished product is shown below

Components Components

Controlling aircon via bluetooth

I live in a student dormitary where the aircon controller is attached to the wall next to the door. I guess I should be content with air conditioning, but it is the nature of human beings that we are never satisfied. Sometimes, I find myself wishing for a remote to turn off my aircon or change the temperature at night when I’m in bed. Since I have always been wanting to do something with my Arduino, I decided to make my aircon bluetooth compatible with my phone.

Components used

  • Arduino Nano (shown below)
  • HC-06 bluetooth module (shown below)
  • 9v battery
  • 100 ohm resistor
  • 220 ohm resistor
  • 10k ohm resistor
  • Wires

Components

1. Wiring the controller

After testing the switches on my aircon controller, I determined that they are active-low and that a single pulse is sent whenever a switch is depressed. I connected the on/off toggle switch and the temperature control switches to pins 10, 11 and 12 on the Arduino. I then wired up the HC-06 bluetooth module to the Arduino by connecting the TX on the blueooth module to RX on the Arduino and vice-versa. Note that the bluetooth module uses a logic level of 3.3v while the Arduino uses 5v, so the TX line from the Arduino needs to be divided using a potential divider circuit to prevent it from damaging the bluetooth module. This is done by connecting a 100 ohm resistor in series and a 220 ohm resistor in parallel with it. The other line can be directly connected as the Arduino is 3.3v tolerant. The whole circuit is powered by a 9v battery. The schematic can be seen below.

Schematic

2. Program the Arduino

After wiring the controller, we need to make sure that the Arduino recognize signals from the bluetooth module. I programmed the Arduino to always output HIGH on pins 10, 11 and 12 unless a signal is received which will toggle the pin to LOW for half a second. This effectively mimics the pressing of the switch. The Arduino code is shown below:

#include <SoftwareSerial.h>
char receivedChar;
int powerPin = 12; // power pin
int tempUpPin = 11; // to increase temperature
int tempDownPin = 10; // to decrease temperature
SoftwareSerial mySerial(0, 1); // bluetooth serial RX,TX

void setup()
{
  // Set pins as output
  pinMode(powerPin, OUTPUT);
  pinMode(tempUpPin, OUTPUT);
  pinMode(tempDownPin, OUTPUT);
  // Set pins as high initially (active low logic)
  digitalWrite(powerPin, HIGH);
  digitalWrite(tempUpPin, HIGH);
  digitalWrite(tempDownPin, HIGH);  
  // Open serial communications and wait for port to open
  mySerial.begin(9600);
  mySerial.println("Sending a '1' will turn toggle aircon on/off");
  delay(1000);
  mySerial.println("Sending a '2' will increase temperature");
  delay(1000);
  mySerial.println("Sending a '3' will decrease temperature");
}

void loop()
{

  while (!mySerial.available());   // Wait for COM port to open
  receivedChar = mySerial.read();
  if (receivedChar == '1') {
    digitalWrite(powerPin, LOW);
    delay(50);
    digitalWrite(powerPin, HIGH);
  } // Toggle power pin to simulate button press
  if (receivedChar == '2') {
    digitalWrite(tempUpPin, LOW);
    delay(50);
    digitalWrite(tempUpPin, HIGH);
  } // Toggle temp up pin
  if (receivedChar == '3') {
    digitalWrite(tempDownPin, LOW);
    delay(50);
    digitalWrite(tempDownPin, HIGH);
  } // Toggle temp down pin
}

3. Testing the setup

After everything is done, I downloaded Bluetooth Terminal on my phone and paired it with the bluetooth module using the default code ‘1234’. I received the following on my phone.

Sending a '1' will turn toggle aircon on/off
Sending a '2' will increase temperature
Sending a '3' will decrease temperature

Yes, success! The final product is shown below.

Final product

The only caveat is that this is extremely power inefficient and the 9v battery won’t last long. I am planning to replace this with an Arduino on breadboard and use a bluetooth low energy chip which can last a few months on two AA batterys. Any updates will be posted!

How to set up a wireless printer server

Recently my senior (and dear friend) left Singapore for exchange in London, and left me his printer as part of his legacy. I didn’t really want to keep it in my room, and since it’s a wired printer, I had to find a way to make it wireless. Fortunately, NUS Hackers had a Raspberry Pi lying around which no one was using, so I sought to make full use of it and acquaint myself with the Pi at the same time.

Components

The first step, of course, is to find an SD card which acts as the hard drive for the Pi. You can buy one preloaded with NOOBS, the operating system, on their website, or you can download NOOBS onto any existing SD card which you might own. In my case, I bought one from the local Co-op and loaded NOOBS myself. At the same time, I grabbed a Wi-fi dongle from my deceased desktop, which I’ll be needing later.

Components

1. Enable SSH

After booting up the Pi, the first thing that you’ll want to do is to enable ssh. This way, you can control the Pi just by having it plugged into the local network, instead of having to connect it to a screen and keyboard every time.

You can do this by entering sudo raspi-config in the terminal, then navigate to ‘Advanced Options’, and enable ssh server under ‘SSH’.

2. Set up wireless dongle

Unfortunately, my wireless dongle, a TP-Link TL WN725N V2, did not work out of the box. However, a simple Google search led me to a site where all the drivers are available. If your wireless dongle is a different model, just search for its drivers online. Before downloading the driver, make sure that it’s for the right version of the Pi that you have. If you’re unsure, do a uname -a to find your Pi’s current version. After that, follow the commands below to install the driver. Note that you’ll have to connect your Pi using the LAN port to download the driver.

wget https://dl.dropboxusercontent.com/u/80256631/8188eu-201xyyzz.tar.gz //make sure it's the right version!
tar -zxvf 8188eu-201xyyzz.tar.gz
sudo install -p -m 644 8188eu.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless
sudo insmod /lib/modules/$(uname -r)/kernel/drivers/net/wireless/8188eu.ko
sudo depmod -a
sudo reboot

3. Configure wireless network

After this is done, it is time to configure your network. You’ll have to edit your network interface as well as wpa_supplicant file, which contains the details for your network. Since you don’t want the IP address to change every time the Pi reboots, you have to give it a static IP address. First, do sudo nano /etc/network/interfaces, and change the line iface wlan0 inet dhcp to

iface wlan0 inet static
address yourAddress
netmask yourNetmask
gateway yourGateway

If you’re unsure of these values, do a ifconfig to find the current IP address and netmask, and route -nee to find the current default gateway.

After you’re done, edit your network details by doing sudo nano etc/wpa_supplicant/wpa_suppicant.conf. By default, these two lines should be at the top:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

After these two lines, edit the file to look like the following:

network={
    ssid="yourNetworkSSID"
    psk="yourNetworkPassword"
}

The above is the simplest example for a WPA authenticated network, but since the NUS network uses a different kind of authentication, it’s a little more complicated than that.

network={
    ssid="NUS"
    proto=RSN
    key_mgmt=WPA-EAP
    pairwise=CCMP
    auth_alg=OPEN
    eap=PEAP
    identity="yourUsername"
    password="yourPassword"
}

This will get you connected to the NUS network. If your Wi-Fi connection drops though, you’re gonna have trouble reconnecting to your Pi again. So, to prevent that, we set up a script which checks the connection every minute, and reconnects to the network if it’s down. Put the following script in /usr/local/bin/network-monitor.sh:

#!/bin/bash

TESTIP=8.8.8.8

ping -c4 ${TESTIP} > /dev/null

if [ $? != 0 ]
then
    logger -t $0 "WiFi has gone down- run ifup"
    /sbin/ifdown --force wlan0
    /sbin/ifup wlan0
else
        logger -t $0 "WiFi is currently up"
fi

Finally, do sudo crontab -e and add this to the end of the file: * * * * * /usr/local/bin/network-monitor.sh. Cron is a service which starts up automatically whenever the Pi boots, so this will tell Cron to run the script every minute.

4. Set up CUPS and your printer

Now that you’re done setting up your Pi, we can finally get to installing the printer. Do sudo apt-get install cups to install CUPS, an open source printing system developed by Apple for UNIX-based operating systems. Next, do sudo usermod -a -G lpadmin username to add yourself to the admin files. After this is done, you can access CUPS on any connected computer using your Pi’s IP address, as such: yourAddress:631.

  1. Connect your printer to your Pi, and navigate to https://yourAddress:631/admin.
  2. Under Administration, click Add Printer. If prompted, login using your Pi’s username and password.
  3. Select your printer from the Local Printer list, it is probably the one with an usb in its name.
  4. Next, enter the description, location and tick Share This Printer.
  5. On the next page, choose your printer’s model from the existing list, or if it is not available, provide a PPD file corresponding to the model of your printer. These can be found easily through a simple Google search.

And you’re done! All you have to do now is to mount your Pi somewhere it can receive wireless signals. I 3D-printed a case from Thingiverse and mounted it on the wall beside my printer.

Final product

Now you can add your network printer to any computer that is connected within the same network. In my case, I can print from any corner of NUS!