Introduction: Mario Kart With HM-10

This project was for 'Creative Electronics', a Beng Electronics Engineering 4th year module at the University of Málaga, School of Telecommunications (www.etsit.uma.es).

In this project we are going to show how to BLE based-arduino system works along with raspberry. For this we use HM-10 BLE. These will be the slaves of our multi-thread system. The master will be a Raspberry pi that will have RetroPie installed. We will be able to send data to raspberry and generate keyboard events, taking advantage of Retropie going on Raspbian.

Step 1: What Do You Need?

2x Arduino nano

1x Raspberrypi 3B

1x SD Card 32 GB

1xKeyboard

2x HM-10 BT module

2x MPU-G521

1x Glove

1x Shoe

2x 9v batteries

2x Electrical Bakelite Circuit Board

Step 2: Building the Hardware

Connect both of the gy-521 module and the BT modules to the Arduino nano as the next picture shows.

It is important to put both gy-521 modules as the pictures shows. Pay attention to the RIGHT hand..

Step 3: The Code for Arduino

The code uses Kalman filter in order to minimize the noise and improve the accuracy of the gyroscope's sample.If you want to read more about Kalman filter: https://en.wikipedia.org/wiki/Kalman_filter

There are two different codes,one is for the hand control, the other one is for the foot control. The most part of the code (the Kalman filter and obtaining all of the GY-521 variables) has been taken from this github repository: "KalmanFilter" (thanks a lot for it!)The genuine part is in the void loop() Both codes is based on a state machine.This states machines controlls the actual state of the system.Every loop the system gets the sensor samples and checks the result, if there is a valuable change between the initial position(when the system switch on or reset) and the current one the "Hand" code determines if are you going to the left or to the right.However, the "Foot" code determine if your are accelerating or stopping. When the "Hand" code is on "Right state" or "Left state" checks if the sample shows that you're back to the initial position. Any change makes the program sends a character through Serial that is automatically resended by bluetooth to the raspberrypi.

To program the arduino that goes in the hand you need this code: Hand

To program the arduino that goes in the foot you need this code:Foot

State transition // Code sended

Initial to Right // "D"

Initial to Left // "I"

Left to Initial // "i"

Right to Initial // "d"

Accelerating // "A"

Stopping // "F"

Step 4: Setting Up RetroPie

We have left an image with the Retropie already configured, to do this download this link: RetroPie

Burn the image on the 32GB SD with a program like Win32DiskImager.

Start RetroPie press F4 to launch the terminal and type in:

sudo bash

cd /home/pi/work/bluepy/bluepy

ls

In this folder we find a file in Python that models the communication between the different BLE.
The first one will be to modify this file to put the MACs of your BLE (HM-10) you can consult them type in:

hcitool lescan

Now, to modify the MACs we type: nano prueba.py

We modified the bt_addr array with our MACs (do not forget to put them in lowercase).

I have left a file called keyboard.c which explains how to generate keyboard events in linux. You can modify this file if you want, to add functionality. The important thing is that the executable you generate is called "teclado"

Step 5: Play and Enjoy

We run in the background this application for it type:

Python prueba.py &

Now we go out and start the simulation, type:

exit

emulatestation

You can already use your own body as a keyboard and select the game.

Enjoy :)