The hardware of the scanner consist of two mechanical parts:
1. The paper insert
The paper insert is a simple shaft with some rubber attached so the paper moves along with it if it rotates. The shaft is rotated by a standard small stepper motor(28BYJ-48). The stepper motor shaft is inserted into the rod with some hot glue.
2. The scanner head
The scanner head moves along a threaded rod (M5), the head is attached to a square nut mounted on the rod. The rod is rotated by a geared DC motor. I use a geared DC motor because it gets stuck if you use a DC motor without gearbox. If you keep it moving it won't get stuck but there were some problems with the rotation detection that made me switch over to the geared DC motor. The DC motor is attached via some silicone tubing like a U joint.
The Arduino inserts the paper and starts scanning. It takes 80 readings in the x-axis and the paper is moved 100 steps (about 0.8mm) after these 80 readings. These readings are outputted over serial.
The hall effect sensor is wired up so that the output value of sensor is read high if the magnet passes over the sensor and low if the magnet is further away from the sensor.
The program written to display the data coming from the Arduino is written in Processing.py. This program reads the data from the serial line and puts it into a 2D array, this array is drawn on screen with rectangles.
The data from the Arduino is send as: line, position, value this data is put into an array. The array is formated like this: array[line][position] = value
This will result in a 2D array like this:
[val1, val2, etc...], // line 1
[val1, val2, etc...], // line 2
Before using the geared DC motor I used a normal DC motor that rotated much faster but this made the rotation readings unstable that resulted in warped images.
When I replaced the DC motor with the geared DC motor the images started to get recognizable.
The final results look much better and the scanned images are recognizable. The images are sharper then when it scanned every 5mm.