Micro:bit Gesture-Controlled Car

by AnasOsama07 in Circuits > Remote Control

2090 Views, 12 Favorites, 0 Comments

Micro:bit Gesture-Controlled Car

main.JPG

This is a project created for participation in the micro:bit Contest and since the only things I don't have were micro:bits, so I've decided to build the project on Tinkercad. Another reason that made me think about this idea, is that I've already created a project like this one using the Arduino Uno, an MPU-6050, and the same components used in this project so I tried to recreate it using micro:bit instead of Arduino, and I hope you like my project.

Supplies

Getting the Controller Ready

note1.JPG
1.2.1.JPG

At first, you must upload the controller's code.

Code in python:

sensitivity = 215 #This variable stores the sensitivity of the controller and the greater its value, the lower its sensitivity will be.
radio.set_group(5)

#In the forever loop, the if statements check the tilt direction of the controller
def on_forever():
  if input.acceleration(Dimension.Y) >= sensitivity and input.acceleration(Dimension.Y) > input.acceleration(Dimension.X): #if the controller is tilted forward
    basic.show_arrow(ArrowNames.North)
    radio.send_number(1) #move the car forward
  else:
    if input.acceleration(Dimension.Y) <= 0 - sensitivity and input.acceleration(Dimension.Y) < input.acceleration(Dimension.X): # if the controller is tilted backward
      basic.show_arrow(ArrowNames.South)
      radio.send_number(2) #move the car backward
    else:
      if input.acceleration(Dimension.X) >= sensitivity and input.acceleration(Dimension.X) > input.acceleration(Dimension.Y): #if the controller is tilted to the right
        basic.show_arrow(ArrowNames.East)
        radio.send_number(3) #turn the car right
      else:
        if input.acceleration(Dimension.X) <= 0 - sensitivity and input.acceleration(Dimension.X) < input.acceleration(Dimension.Y): #if the controller is tilted to the left
          basic.show_arrow(ArrowNames.West)
          radio.send_number(4) #turn the car left
        else: #if there's no tilt direction detected
          basic.show_icon(IconNames.No)
          radio.send_number(0) #stop the car
basic.forever(on_forever)

Getting the Car's Micro:bit Ready

1.1.JPG
note2.JPG
2.1.JPG
2.2.JPG
2.3.JPG
2.4.JPG

Next, upload the sketch below to one of the microbits and then you need to connect it to the breakout board and then connect it to a breadboard.

Note: connecting the car's micro:bit to a breadboard is optional if you plan to use something else for wiring.


Code in Python:

value = 0    #This variable stores the value received by radio
radio.set_group(5)


# The forever loop is empty since we don't need it in our car
def on_forever():
  pass
basic.forever(on_forever)

# This function starts moving the car when the controller sends the direction.
def on_radio_received_number(arg0):
  global value
  value = arg0
  
  # move the car forward
  if value == 1:
    basic.show_arrow(ArrowNames.North)
    pins.digital_write_pin(DigitalPin.P2, 1)
    pins.digital_write_pin(DigitalPin.P0, 1)
    pins.digital_write_pin(DigitalPin.P1, 0)
    pins.digital_write_pin(DigitalPin.P11, 1)
    pins.digital_write_pin(DigitalPin.P5, 1)
    pins.digital_write_pin(DigitalPin.P8, 0)
  else:
    # move the car backward
    if value == 2:
      basic.show_arrow(ArrowNames.South)
      pins.digital_write_pin(DigitalPin.P2, 1)
      pins.digital_write_pin(DigitalPin.P0, 0)
      pins.digital_write_pin(DigitalPin.P1, 1)
      pins.digital_write_pin(DigitalPin.P11, 1)
      pins.digital_write_pin(DigitalPin.P5, 0)
      pins.digital_write_pin(DigitalPin.P8, 1)
    else:
      # turn the car right
      if value == 3:
        basic.show_arrow(ArrowNames.East)
        pins.digital_write_pin(DigitalPin.P2, 1)
        pins.digital_write_pin(DigitalPin.P0, 0)
        pins.digital_write_pin(DigitalPin.P1, 1)
        pins.digital_write_pin(DigitalPin.P11, 1)
        pins.digital_write_pin(DigitalPin.P5, 1)
        pins.digital_write_pin(DigitalPin.P8, 0)
      else:
	# turn the car left
        if value == 4:
          basic.show_arrow(ArrowNames.West)
          pins.digital_write_pin(DigitalPin.P2, 1)
          pins.digital_write_pin(DigitalPin.P0, 1)
          pins.digital_write_pin(DigitalPin.P1, 0)
          pins.digital_write_pin(DigitalPin.P11, 1)
          pins.digital_write_pin(DigitalPin.P5, 0)
          pins.digital_write_pin(DigitalPin.P8, 1)
        else:
	  # stop the car's motion
          basic.show_icon(IconNames.No)
          pins.digital_write_pin(DigitalPin.P2, 0)
          pins.digital_write_pin(DigitalPin.P0, 0)
          pins.digital_write_pin(DigitalPin.P1, 0)
          pins.digital_write_pin(DigitalPin.P11, 0)
          pins.digital_write_pin(DigitalPin.P5, 0)
          pins.digital_write_pin(DigitalPin.P8, 0)
radio.on_received_number(on_radio_received_number)

Downloads

Adding External Power and the Motors

3.1.JPG

If you're using a breadboard for wiring, connect the 9V battery with one of the power busses/rails and then connect the negative rail to the GND pin of the car's micro:bit, and then connect the motors to their wheels and add them to the breadboard as well but make sure you connect them the same way as I did and they don't have to be in the same places.

[Click on the photo above to see how] or [if you don't want to open the photo, then both the motors on the left are connected to each other, but the bottom one must be different and you'll have to connect it's negative pin as the positive and its positive as its negative, and the same thing applies to the motors on the right. The reason is that if you connect both pins the right way, one motor will spin in the wrong direction and we adjust this by doing the previous explaination]

Adding the H-Bridge

4.1.JPG

Here we're adding the H-Bridge motor driver to our circuit and we connect the power to it so that it could operate the motors as well as connecting the motors. The connections are in the picture above.

Connecting the Micro:bit to the H-Bridge Motor Controller

5.1.JPG

Connections:

Pin 2 : Right Motors Speed Control
Pin 0 : Right Motors Forward Direction Control
Pin 1 : Right Motors Backward Direction Control

Pin 11 : Left Motors Speed Control
Pin 5 : Left Motors Forward Direction Control
Pin 8 : Left Motors Backward Direction Control

Done!

Schematic.JPG

You can also view it here on Tinkercad:

micro:bit Gesture Controlled Car - Tinkercad