Python code for the EV3-Print3rbot, based on the ev3dev project.
The ev3dev version must be at least ev3dev-jessie-ev3-generic-2017-02-11.
The code uses the ev3dev Python3 API from @rhempel and @ddemidov. It is already installed on the ev3dev distribution.
To put the EV3-Print3rbot code on your EV3, clone this repository:
git clone https://github.com/cavenel/ev3-print3rbot.git
cd ev3-print3rbot/
You can then launch the robot using
python3 writer.py
or make sure the file is executable and launch it directly:
chmod +x writer.py
./writer.py
EV3-Print3rbot can then be launched from brickman via the file explorer.
The file writer.py
contains four parameters that may need to be tuned if you did not follow precisely the building instructions: xA
, yA
, xB
, yB
, r1
and r2
. They define the position and length of the robots arms:
.E The pen is at coordinates E = (xE,yE)
/ \ r1 = CE = DE = 17.3125 lego units.
/ \ r2 = AC = BD = 11 lego units.
/ \ A = (0,0)
C. .D B = (6,0)
\ /
\ /
A. .B
-------
[robot]
-------
The EV3 Print3rbot can draw directly from SVG images, using the svg.path library (included in sources). The images must contain only paths without transformations. To convert any SVG image, you can use inkscape in command line:
inkscape --verb=EditSelectAll --verb=ObjectToPath --verb=SelectionUnGroup --verb=FileSave --verb=FileClose --verb=FileQuit myfile.svg
Make sure that Inkscape is configured with "Transforms -> Store transformation" set to "Optimized" to remove all transformations in the process.
The image will be automatically resized to fit in the robot drawing area. To draw an image, use the code:
wri = Writer(calibrate = True)
wri.draw_image(image_file = 'images/test.svg')
The image must be uploaded on the EV3 first. You can use any SFTP client program to transfer files, like WinSCP (Windows) or NetworkManager (Ubuntu).
The robot can use mouse as input. The code is based on the python-evdev package (already installed on ev3dev). To use mouse as input, use the code:
wri = Writer(calibrate = True)
wri.follow_mouse()
See the project page for building instructions.