ScanBot
|
Or how to build a page turning book scanner
Contents
Project ScanBot
Goal
"Make a low cost, fully automatic book scanner that is easy to build from readily available materials with common hand tools and publish clear and easy to follow instructions and videos to make such a book scanner. All hardware designs, software, instructions and videos should be open source or equivalent."
Goals
- fully automatic
- easy to build
- cheap
- fully documented
- open source
Why
The e-book revolution is picking up speed but is a largely passive experience for users. One has to buy e-books from publishers, re-buy e-book versions of books one already owns in print and wait for publishers to publish e-book version of old print books. Automatic book scanners are largely unavailable to users because of their prohibitive cost and hand scanning takes too much time for most users. A cheap automatic book scanner will give users the possibility to transform their print book collections into e-book collections themselves and become active contributors to the e-book revolution.
This project will go through 3 phases:
Phase 1: Make a working prototype
Make something that actually scans a book and produces automatically an e-book ( like a PDF ). Obviously while constructing this prototype we have to keep the final goal in mind "build from readily available materials with common hand tools" but for the prototype we can make some short-cuts just to make it work.
Phase 2: Optimize the design
Change and optimize the design to make it reliable and "easy to build". Many books have to be scanned to prove reliability and every part has to be inspected and redesign to make certain that it is easy to build. Software should be "super easy" to use and install.
Phase 3: Make and publish instructions
Completely document the full hardware and software. Write building instructions and a users manual. Make videos demonstrating the building and the operation of ScanBot. Publish everything and promote it.
We are now at the end of phase 1 and starting phase 2.
Description
The book sits in an adjustable cradle and this cradle can slide left and right easily. Page turning is done by a transparent plexiglass box which can be pulled vacuum by a household vacuum cleaner. This vacuum box can be lifted by a windscreen wiper motor through a linkage. The weight of the box is compensated by a counter weight in the form of a soda bottle filled with steel bolts. The bottom edge of the vacuum box has small holes to create the vacuum that makes the pages stick to the box. A small servo motor moves a finger that actually flips the pages when the vacuum box is lifted. Lights are installed at a correct distance and angle to provide light to the book without reflecting into the camera's. Two USB operated camera's take images of the pages through the vacuum box. An Arduino controls the vacuum, turning motor and finger servo.
Hardware
Camera's
A good scan needs 300 dpi. For a typical A4 page that means about 3600 on 2500 pixels or a total of 9 M pixels. So a 10 Mega pixel camera is needed. Sadly most consumer camera's can not be used as high resolution webcams. The only known project that tries to add functionality to the standard firmware is CHDK for the Canon Powershot series.
Which Powerpshot model? It has to be low cost, have at least 10 Mega pixels and can run CHDK. There is not much choice, only the Canon Powershot A480 which is not any more in production but can still be bought online. We have A480 models in the hackerspace. The modern model of that line is the A495 for which CHDK has not yet been ported. In the future we may do the effort to port CHDK to newer Powershot models.
We use two Powershot A480 now. CHDK with PTP extensions is installed on the SD cards. Using the ptpcam command line tool ( source only, needs compilation, only dependent on usblib ) we can shoot pictures and transfer image files over USB. The image transfer sadly seems to work only at USB 1.1 speed (?!), rather slow... The A480 can not be powered by USB ( argh! ) and are powered by 3.3 volt of a PC power supply.
Arduino and electronics
The book scanner has a USB hub which connects to the two camera's and an Arduino Uno. The Arduino is powered by the extrenal PC. The Arduino powers and controls the servo of the finger. It also can switch on and off the vacuum cleaner through a solid state relay. It can also make the windscreen wiper motor turn by activating a relay on a separate relay board. The relay board gets power ( 12V ) from the PC power supply and sends it as PWM using a MOSFET (IRF540) to the motor to control speed. The PWM is generated by a 555 but can also be controlled by the Arduino.
Servo Motor specs
[1] The TP SG90servo weighs 0.32 ounces (9.0 grams). Total weight with wire and connector is 0.37 ounces (10.6 grams). The TP SG90 has the universal "S" type connector that fits most receivers, including Futaba, JR, GWS, Cirrus, Blue Bird, Blue Arrow, Corona, Berg, Spektrum and Hitec. The wire colors are Brown-Red-Orange: Red = battery positive Brown = battery negative Orange = signal
TP SG90 Specifications: Dimensions (L x W x H) = 0.86 x 0.45 x 1.0 inch (22.0 x 11.5 x 27 mm) Weight = 0.32 ounces (9 grams) Weight with wire and connecter = 0.37 ounce (10.6 grams) Stall Torque at 4.8 volts = 17.5 oz/in (1.2 kg/cm) Operating Voltage = 3.0 to 7.2 volts Operating Speed at 4.8 volts (no load) = 0.12 sec/ 60 degrees Connector Wire Length = 5.9 inches (150 mm)
Hardware mods still to do
Although ScanBot is fully functional it might benefit from a few extra mechanical modifications
- add black screens to block reflections of the camera into itself
- control the power level of vacuum cleaner by Arduino
- add small air jet to separate pages if several are picked up ( happens not a lot )
- add damping to left-right movement of cradle
- get better marbles for left-right movement
- add buttons to control the Arduino directly
Software
The software right now has 3 components: the Arduino firmware, the ptpcam command line tool and a python script to glue everything together. This is only a testing setup. The Arduino gets simple commands from the python script like: "turn vacuum on", "set servo finger to 30 degrees"... The logic and timing of the page turning cycle is in the python script for easy editing and experimenting. This functionality should be moved to the Arduino once the detailed specifications are known. The python script also activates the ptpcam tool to shoot pictures and transfer them to the PC. The PC runs Linux but any OS should be possible.
Software to do
- Assemble all jpg files into a PDF or Djvu (better!). Check out the tools of the DIY book scanner project. Maybe OCR?
- Make the arduino control the speed of the turning motor
- Create a previous page, box up and box down functionality
- page number recognition?
- move all page turning logic into Arduino
- interleave image transfer and page turning to speed up cycle
- ...
Results
ScanBot can scan now any book that you can read on a table. This means: a book that will stay open without you needing to hold down the pages. A cheap small pocket book with a stiff binding that you actually have to push open to read can not be scanned. But then most automatic book scanners can not do this. So if you can read a book on a table without touching it to keep the pages down ( ie. most quality books ), it can be scanned.
Some Pictures
These pictures are old. New ones coming soon.
external links
Some video and other stuff when ScanBot was presented at Constant VJ13 on 2011-12-01
- http://video.constantvzw.org/VJ13/Bookscanner1.ogg from minute 13 till 34
- http://video.constantvzw.org/VJ13/Bookscanner4.ogg from minute 40 till 48
- http://gallery3.constantvzw.org/index.php/V-J13-2
- http://www.vj13.constantvzw.org/site/transmission/archive
- a short basic video http://vimeo.com/32984387
and some pictures of the first presentation on 2011-05-24
The project that came up with the cradle design, lights etc...
Ze company in Austria that came up with the idea of "intra page vacuum" to pick up pages and sells this for $$$
Ze hackerspace in Berlin (cbase) also having a go