## Drawing with MicroPython (STEM Alliance competition)

•

We have recently discovered the possibility of working with the EV3 with a general purpose and high level computer language as Python, which is used for developing the complex application like scientific and numeric application, and for both desktop and web applications.

If you go to the official Lego website for the EV3, you can obtain the firmware and the documentation about how to program your EV3 brick. To get started you need:

1. Download and flash the EV3 MicroPython image onto a micro SD card
2. Insert your micro SD card into the SD card slot on the EV3 Brick and turn it on
4. Install and activate the LEGO Education EV3 extension
5. Connect the EV3 Brick to your computer and start to code

In our activity in Spain, we have decided to create a DRAWER ROBOT by joining the Robot Educator and a small motor which has a special support for the pen (inspired in one of the task from the Space Challenge), as you can see in this photo:

The basic program for our robot was to draw an square:

#!/usr/bin/env pybricks-micropython

from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port
from pybricks.tools import wait
from pybricks.robotics import DriveBase

# Initialize two motors and a drive base
center = Motor(Port.A)
left = Motor(Port.B)
right = Motor(Port.C)
robot = DriveBase(left, right, 56114)

# Create a variable for the number of sides
sides = 4

# Repeat the movements to create a polygon
for x in range(sides):
# Run the motor up to put down the pen a target angle of 30 deg
center.run_target(5030)
# Drive forward at 100 mm/s for two seconds
robot.drive_time(10002000)
# Run the motor up to put up the pen a target angle of -30 deg
center.run_target(50-30)
# Turn at 45 deg/s for three seconds
robot.drive_time(0360/sides, 1000)

After that, we adapt the program to experiment drawing with different geometrical forms:

If you want to draw more complex geometrical figures as a mosaic made by

repeating a polygon after an advance or a turn, you need to include a second

for function inside the first one, and the code could be like this:

# Create a variable for the number of sides and polygons

sides = 7

polygons = 4

for x in range (polygons):

for x in range(sides):

# Turn and drive back previously

robot.drive_time(0411000

robot.drive_time(-10001050)

# Run the motor to put down the pen to draw

center.run_target(5030)

robot.drive_time(1000700)

# Run the motor to put up the pen

center.run_target(50, -30)

robot.drive_time(1000600)

# Turn and drive forward before to repeat

robot.drive_time(0701000

robot.drive_time(100,0,1600)

We can see some results in this video:

A different strategy is to create a variable (called timer) which could
be increased each time that the program runs and we can create a spiral

# Create a variable for the repetitions
sides = 4
# Create a variable for going forward
time = 0
# increasing the value of the time
def timer():
global time
time+=500
# Repeat the movements to create a form
for x in range(sides):
timer()
center.run_target(5030)
robot.drive_time(1000, time)
center.run_target(50, -30)
robot.drive_time(0360/sides, time/2)

And this is how it works:

NOTE: This is our contribution to the european competition organized
by the STEM Alliance.