ARDUINO Bluetooth Smartphone

Die Vernetzung von einzelnen Hardwarekomponenten ist ein aktuelles Thema. Bisher kommunizierten sogenannte „embedded system“ (->in der Regel kleinere uController) über leitungsgebundene Schnittstellen wie virtuelle COM Schnittstelle mit einem PC. Auf dem PC werden die Daten visualisiert. Diese Art der Kommunikation zwischen uC und PC ist heute noch üblich. Inzwischen gibt es jedoch weitere Schnittstellen wie Ethernet, WIFI, und auch Bluetooth.

Für den Anfänger beginnt man mit der seriellen Schnittstelle (COM). Unter virtueller COM-Schnittstelle versteht man eine Verbindung über ein USB Kabel mit dem Protokoll der seriellen Schnittstelle. Auf der Seite des uC braucht man dafür einen speziellen Controller, ein sogenannter FDTI Chip, auf der Seite des PCs einen dazu passenden Softwartreiber. Wenn das klappt, dann sieht man im Gerätemanager des PCs bei den COM Schnittstellen den Controller und kann dann einfach die Daten im PC auswerten, die vom Controller kommen. Am einfachsten, man nutzt auf PC Seite eine Visualisierungssoftware wie Profilab oder LabVIEW, oder ähnliches.

Nun ist es möglich die Daten der seriellen Schnittstelle  auch drahtlos zu übertragen. Das geht einfach und effektiv über die drahtlose Bluetooth-Schnittstelle. Auf der Seite des uControllers benötigt man einen Adapter, z.B. ein HC-06 Modul.

roboter-bausatz HC06   Hier kann man das Modul in Deutschland gut beschaffen. Fairer Preis.
Hier ein paar Beispiele aus dem Netz:

arduino uni Hannover  Guter Einstieg in das Thema, auch die AT-Befehle werden erklärt, damit man das Bluetooth-Modul konfigurieren kann. Der Unterschied HC05 und HC06 kann man auch nachlesen.
 shelvin    Die Konfiguration des HC06 Bluetooth Moduls wird gezeigt. Man kann in dem Bluetooth-Modul den Namen, das Passwort die Daten der seriellen Schnittstelle einstellen. Das ist ziemlich wichtig! Dazu muss man zuerst eine Software auf den Arduino aufspielen, dann das Modul an TxD und RxD vom Arduino gekreuzt verbinden und dann im Seriell Monitor von Arduino die AT-Befehle eingeben. Das beschreibt dieser Link.
funduino  Einfacher Einstieg mit einfacher Handy-App

Eine sehr gute App für Android Geräte:  Keuwl  Diese App kann man selbst gestalten mit einer grafischen Oberfläche. Die App ist kostenfrei. Am Anfang muss man sich etwas eindenken ist dann aber sehr flexibel und kann tolle Oberflächen „zaubern“.

DSCN3077

DSCN3076.JPG

Film Demo  Mein YouTube Channel

Ein Software-Beispiel: Hier wird eine Kommunikation zum Smartphone aufgebaut.

// MEGA Monitor Via Bluetooth
// By keuwlsoft: http://www.keuwl.com 26th Sept 2015
// cc Attribution-ShareAlike

// This sketch monitors the Analogue and Digital Inputs and sends
// the results via Bluetooth to keuwlsofts ‚Bluetooth Electronics‘ app.

/*————-bearbeitet Gerhard Neumaier —–Dez 2018-
Hardware: ARDUINO MEGA; Bluetooth ModulHC06 angeschlossen an serielle Schnittstelle
Hinweise: Bluetooth Modul beim Programmieren entfernen. TxD und RxD Leitungen kreuzen – oder wie beim MEGA möglich und hier benutzt: Die ser. Schnittstelle 1 an den Pins 18 und 19
HC06-Modul kann direkt angeschlossen werden. VCC= +5V
*/
String colors[]={„R0G0B0″,“R0G150B0“}; //App Light colours for LOW and HIGH
/* Erklaerung: Wenn auf dem Handy eine LED leuchten soll, muss man die Farbe
mitteilen. Ein Farbdisplay arbeitet mit 24bit Farbtiefe: Rot0..255 Gelb0..255 Blau0..255
String colors[]={„R0G0B0″,“R0G150B0″} legt ein array an mit 2 Zeichenketten: Die erste ist die Farbe schwarz
die zweite die Farbe gelb
*/
//Hier werden die Buchstaben in einem array abgespeichert
//String receive_chars=“abcdefghijkl“; //so app knows which data goes where
//Besser,weil nahe an C:
char receive_chars[]={„abcdefghijkl“}; //Array mit Buchstaben
int interval=100; //Gives the serial link and app a chance to process data
float voltage; //Assumes 0-1023 range over 5V
char BluetoothData; // the Bluetooth data received

void setup() {
//Initiate Digital pins as Inputs PIN22 bis 29 entsprechen PORTA
for(int i=22;i<=29;i++) pinMode(i, INPUT);
//Initiate Digital pins as Outputs PIN37 bis PIN30 entsprechen PORTC
for(int i=37;i>=30;i–) pinMode(i, OUTPUT);
//Initiate Serial for Bluetooth Communication
Serial.begin(9600);
Serial1.begin(9600); // Mega kann Serial1 bis Serial3 nutzen Vorteil: Man muss das Bluetooth Modul
//beim Programmieren nicht ausstecken
}

void loop() {

//Read Digital Pins and Send results over Bluetooth
for(int i=22;i<=29;i++){
//Serial.print(„*“+String(receive_chars.charAt(i-22))+colors[digitalRead(i)]+“*“);
Serial1.print(„*“+String(receive_chars[i-22])+colors[digitalRead(i)]+“*“);
// An das Smartphone muss eine 24bit Farbe gesendet werden (sinnvoll:schwarz oder grün)
//Ausgegeben wird *aR0G0B0* wenn Pin22 0 eingelesen wird digitalRead kann nur 0 oder 1 werden
//Ausgegeben wird *bR0G150B0* wenn Pin23 1 eingelesen wird usw Im serial Monitor beobachten

}
/*
//Graph – Read Analogue Pins and Send Results over Bluetooth
Serial.print(„*G“); //using ‚G‘ as receive char for graph in app
for(int i=0;i<=2;i++){
voltage=analogRead(i)*0.0048828;
Serial.print(String(voltage)+“,“);
}
Serial.print(„*“);
*/
Serial1.print(„*A“); //using ‚A‘ as receive char for graph in app
voltage=analogRead(A8)/10.23; //1023/100=10,23 Analog A8
Serial1.print(String(voltage)+“,“); //0.00..100.00
Serial1.print(„*“);
Serial1.print(„*B“); //using ‚B‘ as receive char for graph in app
voltage=analogRead(A9)/10.23; //1023/100=10,23 AnalogA9
Serial1.print(String(voltage)+“,“); //0.00..100.00
Serial1.print(„*“);

Serial1.write(13); //Zeilenumbruch für serial Monitor somit besser lesbar

//Pause before taking next measurement
delay(interval); //interval oben definiert

//Date receive from Bluetooth HC06
if (Serial1.available())
{ BluetoothData=Serial1.read(); //Get next character from bluetooth

if(BluetoothData==’C‘)
{ // C Button Pressed
digitalWrite(37,1); //Turn digital out PIN37 to High
}

if(BluetoothData==’c‘){ //  Button Released
digitalWrite(37,0);
}
if(BluetoothData==’D‘)
{ // D Button Pressed
digitalWrite(36,1); //Turn digital out 5 to High
}

if(BluetoothData==’d‘){ //  Button Released
digitalWrite(36,0);
}
if(BluetoothData==’E‘)
{ // E Button Pressed
digitalWrite(35,1); //Turn digital out 6 to High
}

if(BluetoothData==’e‘){ //  Button Released
digitalWrite(35,0);
}
if(BluetoothData==’F‘)
{ // F Button Pressed
digitalWrite(34,1); //Turn digital out 5 to High
}

if(BluetoothData==’f‘){ //  Button Released
digitalWrite(34,0);
}

}
Serial.print(BluetoothData);

Serial.write(13); //Zeilenumbruch für serial Monitor
//Pause before taking next measurement
delay(interval);
}

Advertisements