6
Ένα γρήγορο project με Android και Arduino συνδεδεμένο με Bluetooth Module HC-05, στο οποίο επικοινωνούν σειριακά μέσω Bluetooth.
Το κύκλωμα είναι το ίδιο με το προηγούμενο project http://www.hlektronika.gr/forum/showthread.php?t=68881
Αλλά τώρα το Arduino με το HC-05 είναι Slave και το Android είναι Master.
Ο κώδικας για το Arduino είναι σχετικά απλός. Αφού ορίσουμε το HC-05 σαν Slave, περιμένουμε data από το Android.
Αν έρθει το 99 ανάβει το led και αν έρθει το 98 σβήνει.
Αν έρθουν τιμές 0-90 είναι το pitch από τον orientation sensor του κινητού τηλεφώνου, οπότε και εμφανίζονται στα 7-seg displays.
Για το Android την εφαρμογή την έκανα με το M.I.T App Inventor http://appinventor.mit.edu/Κώδικας:#include <SoftwareSerial.h> #define RxD 7 #define TxD 8 #define Reset 9 #define PIO11 A2 #define Led 13 #define led_dec 10 #define led_mon 11 int BinaryPins[] = {3,4,5,6}; unsigned int decades; unsigned int monades; SoftwareSerial blueToothSerial(RxD,TxD); void setup() { Serial.begin(38400); pinMode(RxD, INPUT); pinMode(TxD, OUTPUT); pinMode(Led, OUTPUT); pinMode(PIO11, OUTPUT); digitalWrite(PIO11, LOW); pinMode(Reset, OUTPUT); digitalWrite(Reset,HIGH); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(led_dec, OUTPUT); pinMode(led_mon,OUTPUT); digitalWrite(led_dec,HIGH);//decades 7-seg disp OFF digitalWrite(led_mon,HIGH); setupBlueToothConnection(); } //-----------------------------------------------------// //----------Decades 7-seg disp driver------------------// void sevenSegWriteDec(int digit) { if (digit>0) digitalWrite(led_dec,LOW); else digitalWrite(led_dec,HIGH); //if value is 0 stays OFF digitalWrite(led_mon,HIGH); //monades 7-seg disp OFF //convert dec number to 4 bits binary for (byte i = 0; i < 4; i++) { int dec_val=digit&1; //interested only for LSB of digit digitalWrite(BinaryPins[i],dec_val); //set it to BinaryPin i=0 is LSB and goes to pin A of 74LS47 BCD-to-7-Segment digit=digit>>1; //shift right digit 1 bit } } //-----------------------------------------------------// //----------Monades 7-seg disp driver------------------// void sevenSegWriteMon(int digit) { digitalWrite(led_dec,HIGH); //decades 7-seg disp OFF digitalWrite(led_mon,LOW); //monades 7-seg disp ON //convert dec number to 4 bits binary for (byte i = 0; i < 4; i++) { int mon_val=digit&1; //interested only for LSB of digit digitalWrite(BinaryPins[i],mon_val); //set it to BinaryPin i=0 is LSB and goes to pin A of 74LS47 BCD-to-7-Segment digit=digit>>1; //shift right digit 1 bit } } void loop() { int recvChar,pitch; if (blueToothSerial.available()) recvChar = blueToothSerial.read(); if(recvChar == 99){ digitalWrite(Led, HIGH); } if(recvChar == 98){ digitalWrite(Led, LOW); } pitch=recvChar; if ((pitch>=0) && (pitch<=90)){ decades=pitch/10; monades=pitch%10; } sevenSegWriteDec(decades); //display decades to decades 7-seg disp delay(10); sevenSegWriteMon(monades); //display monades to monades 7-seg disp delay(10); } void setupBlueToothConnection() { enterATMode(); sendATCommand("RESET"); delay(1000); sendATCommand("ORGL"); delay(1000); sendATCommand("UART=38400,0,0"); delay(1000); sendATCommand("ROLE=0"); delay(1000); sendATCommand("PSWD=1234"); delay(1000); sendATCommand("CMODE=1"); delay(1000); enterComMode(); } void resetBT() { digitalWrite(Reset, LOW); delay(1000); digitalWrite(Reset, HIGH); } void enterComMode() { blueToothSerial.flush(); delay(1000); digitalWrite(PIO11, LOW); resetBT(); delay(1000); blueToothSerial.begin(38400); } void enterATMode() { blueToothSerial.flush(); delay(1000); digitalWrite(PIO11, HIGH); resetBT(); delay(1000); blueToothSerial.begin(38400); } void sendATCommand(char *command) { blueToothSerial.print("AT"); if(strlen(command) > 1){ blueToothSerial.print("+"); blueToothSerial.print(command); } blueToothSerial.print("\r\n"); } void sendATCommand() { blueToothSerial.print("AT\r\n"); }
Ο σχεδιασμός και ο προγραμματισμός είναι σχετικά εύκολος και είναι κάπως έτσι:
Μπορείς να επιλέξεις με ποια συσκευή Bluetooth θέλεις να συνδεθείς, όταν πατάς το πλήκτρο ΟΝ στέλνει 99 και το OFF στέλνει 98 στο Arduino, επίσης διαβάζει το pitch του orientation sensor, το μετατρέπει σε τιμές από 0-90 και το στέλνει στο Arduino.
Εδώ είναι τα source αρχεία για το MIT App Inventor
Arduino_Android_bluetooth.zip
Εδώ μπορείτε να κατεβάσετε το APP http://www.kokoras.com/ardandrblue/A..._bluetooth.zip
Νομίζω ότι ο συνδιασμός των Android, Arduino και Bluetooth, μπορεί να μας δώσει πολλές δυνατότητες για την υλοποιήση εφαρμογών ασύρματου ελέγχου.
Ευχαριστώ Κώστας.