Prop Palm Scanner
I was asked to make a “superhero” console for the role play corner of a primary school. We all know keeping your superhero identity secret is vital so the console had to have a “palm scanner” to allow access. Here’s how I made it.
Construct Frame
Construct the frame of the palm scanner. Decide on the shape and size of the scanner and cut out a thin piece of MDF or plywood. I decided to make my life hard and made a complicated polygon (a rectangle is much easier and quicker). Next the base needs to be framed using more of the MDF. The frame doesn’t need to be very deep ~ 1cm
Add LED Strip
Next stick the LED strips to the bottom of the frame. These will be turned on and off in sequence to give the illusion of scanning. There are 13 digital pins on the Arduino which will control the strips allowing you to use up to 13 strips. I used 8 allowing me to have spare pins to have an “access granted” light. The -ve pin of each strip is soldered together and then connected to the ground of the Arduino. The +ve of each strip is connected to a separate pin of the Arduino D12, D11, D10, etc. The strips can be then turned on and off in order to simulate the scanning process.
Add the Activator Switch
To activate the “Scan” I used a light dependent resistor in a voltage divider arrangement. The 5v and ground on the Arduino are connected together via a resistor (10kohm) and LDR. Analogue pin A0 is connected between the resistor and LDR. The Arduino reads the voltage on the A0 pin and when it gets to a set value can be used to trigger the programme. The voltage depends on the values of the resistors, the 10 kohm value is fixed but the resistance of the LDR changes depending on how much light is falling on it and as its resistance changes the voltage the A0 pin sees changes. The LDR needs to be placed in the centre of the scanner where the palm would fall, covering it and cutting out most of the light falling on it.
Add the Cover
The final step before wiring the Arduino is to cover the scanner with a diffuser to hide the LED strips. I used printable vellum (a kind of translucent paper available in craft shops or on-line). It allowed me to print a hand shape and some circuit patterns. You need to leave a hole in the diffuser for the LDR. Finally fix the acrylic pale to the top either with screws or glue (if you use screws be sure to drill through the acrylic first else it will split).
Wiring the Arduino
The wiring is shown in the diagram. The LED strips -ve are connected together and to the ground pin of the Arduino. Each +ve of the LED strip is connected to an individual digital pin. The LDR in the scanner is connected as described in the Voltage divider diagram using pin A0. There is a second voltage divider connected to pin A1. This LDR is used to measure the abient light level in the room. If we used just one LDR the scanner would trigger when the room is dark (which I found out the first time I tried this build). Finally an LED is attached to pin D4 which is turned on at the end of the scan to indicate “access granted”.
Programme the Arduino
Once the build is complete you can programme the Arduino. The programme is quite simple and when the LDR in the scanner measures a particular level of darkness the LED strips are triggered in succession so it appears to travel down the scanner and back.
Copy the sketch below and paste it into the Arduino IDE and upload to the Arduino
int sensorPin = A0; // select the input pin for ldr
int sensorValue = 0; // variable to store the value coming from the sensor
int sensorPin2 = A1; // select the input pin for ldr
int sensorValue2 = 0;
void setup() {
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
Serial.begin(9600); //sets serial port for communication
}
void loop() { // read the value from the sensor:
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue); //prints the values coming from the sensor on the screen
sensorValue2 = analogRead(sensorPin2);
Serial.println(sensorValue2);
if(sensorValue < 350 & sensorValue2 >360) //setting a threshold value
{
digitalWrite(12,LOW);
digitalWrite(12,HIGH);
delay (150);
digitalWrite(12,LOW);
digitalWrite(11,HIGH);
delay (150);
digitalWrite(11,LOW);
digitalWrite(10,HIGH);
delay (150);
digitalWrite(10,LOW);
digitalWrite(9,HIGH);
delay (150);
digitalWrite(9,LOW);
digitalWrite(8,HIGH);
delay (150);
digitalWrite(8,LOW);
digitalWrite(7,HIGH);
delay (150);
digitalWrite(7,LOW);
digitalWrite(6,HIGH);
delay (150);
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
delay (150);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
delay (150);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay (150);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay (150);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
delay (150);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay (150);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay (150);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
delay (150);
digitalWrite(12,LOW);
digitalWrite(4,HIGH);
delay (3000);
digitalWrite(4,LOW);
delay (3000);
}
delay(100);
}
Change the Settings
Once you have loaded the Arduino sketch there’s one line you will need to alter:
if(sensorValue < 210 & sensorValue2 >200)
sensorValue is the level of “darkness” used to trigger the scanner and sensorValue2 is the level of ambient light below which the palm scanner won’t work (to stop it triggering in a dark room). The value you need to set will depend on the LDR you are using and the value of resistor you are using. To determine the value you use the “serial monitor”
With the Arduino connected to the computer open the Arduino IDE programme, click “Tools” and “serial monitor”. A window will open with a list of numbers scrolling down the window. These are the readings from the 2 LDR voltage dividers in pairs (A0 & A1). To determine the values needed cover the palm scanner with your hand and read the value (it should have dropped). Put this value in the sensorValue . For the ambient light value put the scanner in a dark room and use that value for sensorValue2.
It will take a little bit of trial and error to get the right values so the scanner triggers every time, but not so sensitive it triggers early. It’s worth the effort.