Instructables
Picture of Connect Arduino Uno to Android via Bluetooth
IMG_20140426_104845.jpg

In this project a serial Bluetooth module is used to create a connection between Arduino Uno and an Android app that I created with MIT App Inventor.

Arduino listens for commands to light some LED's or show its status. In addition, a timer interrupt makes it check for temperature via a TMP36 sensor: if temperature is greater than a threshold a LED is lit; every n seconds (where n is a parameter set through the app) a status report is sent to the app. A simple command structure enables the app to send parameters and values to Arduino and the other way round.

There are many Bluetooth modules and even Arduino shields: my choice has fallen on JY-MCU that I bought from Hobby Components in the UK.

The JY-MCU is a class-2 Bluetooth module that acts like a serial port with no need of any software configuration on the Arduino. This module is available in several configurations, and this has been the first hurdle to overcome.

The one we need to make the connection between Arduino and the Android phone is a Slave Module. To make things very simple, there are two types of devices: Master and Slave; a Master can communicate with more than one Slave while a Slave can communicate with a single Master at a time, Master-Master and Slave-Slave communication is not allowed. Since the Bluetooth module in all smartphones is of Master type, the one we need for Arduino must be a Slave (this has nothing to do with client-server communication as we'll see later in the app description).

 
Remove these adsRemove these ads by Signing Up
zefram-381 month ago

really nice job.

I've in mind project base on Arduino Uno + Sensor DHT11 ==> Moisture + temperature Sensor.

With DHT11 Sensor, we need to use DHT library.

hereby a sample squetch :

#include "DHT.h"

#define DHTPIN 8

#define DHTTYPE DHT11 //#define DHTTYPE DHT22 (pour un capteur DHT22)

DHT dht(DHTPIN, DHTTYPE);

float h = 0;

float t = 0;

void setup(){

Serial.begin(9600);

dht.begin();

Serial.print("Test Connexion");

}

void loop(){

h = dht.readHumidity();

t = dht.readTemperature();

if (isnan(t) || isnan(h))

Serial.println( "Lecture impossible !");

else{

Serial.print("Humidite :");

Serial.print(h);

Serial.print(" %\t");

Serial.print("Temperature :");

Serial.print(t);

Serial.println(" *C");

}

delay(1000);

}

I was wondering how it is possible (with few modifications) to adapt your code with this sensor instead of the TMP36?

there is a few difference with your squetch :

- Pin definition is Digital instead of Analogic

- Reading value (temp/moisture) is made inside the loop.

Thx 4 ur help.

sau.beo.7391 month ago

How can I convert the master-slave relationship (Android is slave and arduino is master), or anyway to send message or control android by arduino via bluetooth?

pmosconi (author)  sau.beo.7391 month ago

You can't change the master-slave BT relationship because the phone chip is of master type. Anyway, you'll probably looking at client-server communication: the client starts the exchange (the Android app in this example) while the server (Arduino) keeps listening for incoming client connections. You can certainly swap this logic by changing the logic of both applications.

In any case, also as it is now you can have Arduino send input to the Android app: this is happening with status messages that are displayed in the big text box in the lower half of the app screen.

SabriM2 months ago

Is android interface source code available? Open source?

pmosconi (author)  SabriM2 months ago
Hi,
the code is available as an attachment to the Instructable (it is called BTArduinoConnection.aia) and it is open source.
pmosconi
pmosconi (author)  pmosconi2 months ago
Don't drive the motor directly from the Arduino output, but use an external source. There are a lot of examples and explanations about this in various scenarios.
SabriM pmosconi2 months ago

Thank you I got that. Created in app inventor. I would like to ask something else. Can I use a more powerful DC motor for ardunio uno? whats the max voltage of uno? Thanks in advance.

1beertap5 months ago

I really like your code, but how can I change it to convert Celsius to Fahrenheit and display it?

pmosconi (author)  1beertap5 months ago

Sorry, for the delay. In this great Adafruit tutorial you can find all info you need: https://learn.adafruit.com/tmp36-temperature-sensor/using-a-temp-sensor#

1beertap 1beertap5 months ago

Nevermind, I took the output of the Celsius temperature, using a formula I converted it to Fahrenheit, and saved the data to another variable I created and then printed the new data. Thanks for sharing!!!

can i use

Freeduino USB with Atmega8

http://www.electroncomponents.com/Freeduino-USB-Atmega8?filter_name=arduino

mcdrew2 made it!5 months ago

GREAT INSTRUCTABLE!!! This is the first time I have tried bluetooth so the detailed explanation was extremely helpful. Everything worked as described. I am planning to try and adapt this to a automatic door opener control as I am in a wheelchair.

First bluetoooth led.jpg
pmosconi (author)  mcdrew25 months ago

Many thanks :-) !! You might want also to check Bluetooth Low Energy (BLE, iBeacon, ...) technology to trigger proximity actions such as open a door when automatically when you're close by. The problem with it is that MIT App Inventor doesn't support it so you need to use "real" programming or prepackaged applications.

mcdrew2 pmosconi5 months ago

If I wanted to take out the interrupt feature so it only read the status when requested what specific code would I remove.

Thank you.

pmosconi (author)  mcdrew25 months ago

Hi, the interrupt routine is initialized between the instructions

cli(); // disable global interrupts

and

sei(); // enable global interrupts

at the end of setup() function, so just delete all lines from cli(); to sei(); included.

Also, you won't need any more the interrupt routine itself: delete the function ISR(TIMER1_COMPA_vect)

Hope this helps

mcdrew2 pmosconi5 months ago

Awesome! Thank you.