å³1
ç®æ¬¡
èšäº1.ã«åºã¥ãããããïŒandroidãarduinoãbluetoothã éå§ãã
èšäº2.ã«åºã¥ãããããïŒandroidãarduinoãbluetoothã ååž°çã ããŒã2
èšäºãèªãã§ãã人ã¯ãã§ã«æ¬¡ã®ããšãèããŠãããšæ³å®ãããŸãã
-ãšã¬ã¯ãããã¯ã¹ã®åºæ¬æŠå¿µ
-åã®èšäº
åé¡ã®å£°æ
次ã®æ©èœãå®è¡ãããããããäœæããŸãã
-ã¹ããŒããã©ã³ã䜿çšãããªã¢ãŒãã³ã³ãããŒã«ïŒåæ¹ãåŸæ¹ãå·Šãå³ïŒ
-ã¹ããŒããã©ã³ã®åã«ããç©äœãŸã§ã®è·é¢ã«é¢ããããŒã¿ãéä¿¡ããŸãïŒè¶ é³æ³¢ã»ã³ãµãŒã«åºã¥ãïŒ
-èªåŸå¶åŸ¡ã¢ãŒãããããŸãïŒé害ç©ã«ééãããšãéšå±ã®åšããé£ç¶çã«ç§»åãã移åæ¹åãå€æŽããŠãé害ç©ãæåãããŸãã
çè«ã®ããã
ç§ãã¡ã®äžçã¯è€éãªã·ã¹ãã ã§ãããèšå€§ãªæ°ã®ãªããžã§ã¯ããç¹å®ã®ç©çæ³åã«åŸã£ãŠçžäºäœçšããããããã®ã·ã¹ãã å ã§æ©èœãããããããäœæããããšã¯éåžžã«éªšã®æããäœæ¥ã§ãã æåã®ãããããäœæããããã»ã¹ãç°¡çŽ åããããã«ãç°å¢ïŒãããããé 眮ãããïŒãšããããã®ã¢ã¯ã·ã§ã³ãæœè±¡åãããšããæŠå¿µã䜿çšããŸãã ãããªãèšäºã§ã¯ãç°å¢ãè€éã«ããããã«å¿ããŠããããã®åäœãè€éã«ããŸãã
æœè±¡ç°å¢
æåã®ãããããäœãç°å¢ã¯2次å ã®äžçã§ããã次ã®ç¹åŸŽããããŸãã
1ïŒå®å šã«èŠ³å¯å¯èœãããªãã¡ ããããã»ã³ãµãŒã¯ããã€ã§ãç°å¢ã®ç¶æ ã«é¢ããå®å šãªæ å ±ãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ããããã¯ããã®äžçã§èµ·ãããã¹ãŠãèªèããããã«å éšç¶æ ãç¶æããå¿ èŠããªããããå®å šã«èŠ³å¯å¯èœãªç°å¢ã®ããªãšãŒã·ã§ã³ã䟿å©ã§ãã
2ïŒç¢ºå®çã åªäœã®æ¬¡ã®ç¶æ ãçŸåšã®ç¶æ ãšããããã«ãã£ãŠå®è¡ãããã¢ã¯ã·ã§ã³ã«ãã£ãŠå®å šã«æ±ºå®ãããå Žåããã®ãããªåªäœã¯æ±ºå®è«ãšåŒã°ããŸãã ãã以å€ã®å Žåã確ççã§ãã
3ïŒãšããœãŒãã äžæçãªåé¡ã®ç°å¢ã§ã¯ãããããã®äœéšã¯è€éãªãšããœãŒãã§æ§æãããŸãã åãšããœãŒãã«ã¯ãããããã«ããç°å¢ã®èªèãšã1ã€ã®ã¢ã¯ã·ã§ã³ã®å®è¡ãå«ãŸããŸãã ããã«ã次ã®ãšããœãŒããåã®ãšããœãŒãã§å®è¡ãããã¢ã¯ã·ã§ã³ã«äŸåããªãããšãéåžžã«éèŠã§ãã ç°å¢ã®ãšããœãŒãããŒãžã§ã³ã§ã¯ãåãšããœãŒãã§ã®ã¢ã¯ã·ã§ã³ã®éžæã¯ããšããœãŒãèªäœã«ã®ã¿äŸåããŸãã
4ïŒéçã ããããã次ã®ã¢ã¯ã·ã§ã³ãéžæããéäžã§ç°å¢ãå€åããå¯èœæ§ãããå Žåããã®ãããªç°å¢ã¯ããããã®åçãšåŒã°ããŸãã ãã以å€ã®å Žåã¯éçã§ãã
5ïŒé£ç¶-åªäœã®é¢æ£ããŒãžã§ã³ãšé£ç¶ããŒãžã§ã³ã®éãã¯ãåªäœã®ç¶æ ãæéã®èæ ®æ¹æ³ããšãŒãžã§ã³ãã®èªèãšã¢ã¯ã·ã§ã³ã«é¢é£ããå¯èœæ§ããããŸãã ç§ãã¡ã®å Žåãç°å¢ã®ç¶æ ã¯ç¶ç¶çã«å€åãããšèããããŠããŸãã ããšãã°ããã§ã¹ã®ã²ãŒã ã¯ãæéæ°ã®ç°ãªãç¶æ ãæã£ãŠãããããé¢æ£çã§ãã
6ïŒã·ã³ã°ã«ãšãŒãžã§ã³ãã¯ã1ã€ã®ãªããžã§ã¯ãïŒããããïŒãé 眮ãããŠããç°å¢ã§ãããä»ã®ãªããžã§ã¯ãã¯ããã«åœ±é¿ãäžããã競åããŸããã
ããããã®åäœã®æœè±¡å
1ïŒç§»å-ããããã¯2æ¹åïŒååŸïŒã«ç§»åãããã®å Žã§åããå€ããããšãã§ããŸãïŒå·Šãå³ïŒ
2ïŒããããã»ã³ãµãŒïŒè¶ é³æ³¢ã»ã³ãµãŒïŒããªããžã§ã¯ããŸã§ã®è·é¢ã決å®ã§ããŸãã è·é¢ã¯0.02ã¡ãŒãã«ãã4ã¡ãŒãã«ãŸã§æ±ºå®ã§ããŸãã
ãããã£ãŠããã®èšäºã§äœæããããããã¯åçŽãªåå°åããããã§ãããšå€æããŸãã ãã®ãããªããããã¯ãçŸåšã®ç¥èŠè¡çºã«åºã¥ããŠè¡åãéžæããç¥èŠè¡çºã®æ®ãã®å±¥æŽãç¡èŠããŸãã
䜿çšãããéšåãšã¢ãžã¥ãŒã«ã«é¢ããç°¡åãªæ å ±
HG7881ãšã³ãžã³ãã©ã€ããŒã ããããã®ã¢ãŒã¿ãŒãå¶åŸ¡ããã«ã¯ãäœé»åã®å¶åŸ¡ä¿¡å·ãã¢ãŒã¿ãŒãå¶åŸ¡ããã®ã«ååãªé»æµã«å€æããããã€ã¹ãå¿ èŠã§ãã ãã®ãããªããã€ã¹ã¯ããšã³ãžã³ãã©ã€ããŒãšåŒã°ããŸãã
HG7881ã¯2ãã£ã³ãã«ãšã³ãžã³ãã©ã€ããŒã§ãã2.5ã12 Vã®é»æºããé»åãäŸçµŠã§ããŸãããã©ã€ããŒåºåã®èª¬æïŒ
è¡š1
ãããã« | 説æ |
B-ia | ãšã³ãžã³Bå ¥åAïŒIAïŒ |
B-ib | ãšã³ãžã³Bå ¥åBïŒIBïŒ |
GND | å°çïŒãã€ãã¹ïŒ |
Vcc | åäœé»å§2.5-12VïŒãã©ã¹ïŒ |
A-IA | ãšã³ãžã³Aå ¥åAïŒIAïŒ |
A-ib | ãšã³ãžã³Aå ¥åBïŒIBïŒ |
ãšã³ãžã³ãå¿ èŠãªæ¹æ³ã§åäœãããã«ã¯ãåºåïŒB-IAãB-IBãA-IAãA-IBïŒã«è«çä¿¡å·ïŒHIGHãLOWïŒãäŸçµŠããå¿ èŠããããŸãã ãšã³ãžã³ã®ççå€è¡šïŒ
è¡š2
IA | IB | ãšã³ãžã³ç¶æ |
L | L | ãªã |
H | L | é²ã |
L | H | é |
H | H | ãªã |
è¶ é³æ³¢è·é¢ã»ã³ãµãŒHC-SR04ã ãªããžã§ã¯ãããã®é³æ³¢ã®åå°æéã枬å®ããããšã«ããããªããžã§ã¯ããŸã§ã®è·é¢ã決å®ããŸãã
ã»ã³ãµãŒã¯çãè¶ é³æ³¢ãã«ã¹ãçºãïŒæé0ïŒãç©äœããåå°ããŠã»ã³ãµãŒãåä¿¡ããŸãã è·é¢ã¯ããšã³ãŒãåä¿¡ããããŸã§ã®æéãšç©ºæ°äžã®é³éã«åºã¥ããŠèšç®ãããŸãã
10ÎŒsã®ãã«ã¹ãåºåïŒTrigïŒã«éä¿¡ãããè¶ é³æ³¢ã¢ãžã¥ãŒã«ã¯åšæ³¢æ°40 kHzã®è¶ é³æ³¢ä¿¡å·ã8ããã¯æŸåºãããšã³ãŒãæ€åºããŸãã ãªããžã§ã¯ããŸã§ã®æž¬å®è·é¢ã¯ãšã³ãŒã®å¹ ã«æ¯äŸãïŒãšã³ãŒïŒã次ã®åŒã§èšç®ã§ããŸãã
ãã«ã¹å¹ / 58 =è·é¢ïŒcmïŒã
ããããã®çµã¿ç«ãŠãšãã¹ãŠã®ã¢ãžã¥ãŒã«ã®æ¥ç¶
ãã©ãããã©ãŒã ãçµã¿ç«ãŠãŸãïŒå³2ïŒã
å³2
ãšã³ãžã³ããã©ã€ããŒã«æ¥ç¶ããŸãïŒå³3ïŒã ãã©ã€ããŒã³ãã¯ã¿ããšã«2ã€ã®ã¢ãŒã¿ãŒãã€ãŸã ãã©ãããã©ãŒã ã®å·ŠåŽã®ã¢ãŒã¿ãŒããã¢ãŒã¿ãŒBãã³ãã¯ã¿ãŒã«ãå³åŽã®ã¢ãŒã¿ãŒããã¢ãŒã¿ãŒAãã«æ¥ç¶ããŸãã ãã©ãããã©ãŒã ã¯ã远跡ããããã©ãããã©ãŒã ãšåæ§ã«å¶åŸ¡ãããŸãã ååŸã«ç§»åããå Žåããã¹ãŠã®ãšã³ãžã³ã¯äžæ¹åã«åæããŠåäœããå³ã«æ²ãããšãã©ãããã©ãŒã ã®å³åŽã®ãšã³ãžã³ãåæ¢ããå·Šã«æ²ãããšå·ŠåŽã®ãšã³ãžã³ãåæ¢ããå³ã«ãšã³ãžã³ãåæããŠåããŸãã
å³3
ãã©ãããã©ãŒã ã®äžéšãåºå®ããŸãã ãšã³ãžã³ãã©ã€ããŒãarduinoãããããªãŒãBTã¢ãžã¥ãŒã«ãããã³è¶ é³æ³¢ã»ã³ãµãŒããã¬ããããŒãã«æ¥ç¶ããŸãïŒå³4ïŒ
å³4
æ¥ç¶å³ãïŒå³5ïŒã«ç€ºããŸãã Arduinoãè¶ é³æ³¢ã»ã³ãµãŒããšã³ãžã³ãã©ã€ããŒïŒãããã£ãŠãšã³ãžã³èªäœïŒã¯ãçŽåã«æ¥ç¶ããã4ã€ã®ããããªãŒïŒ1.2 Vã2700 mA / hïŒã§é§åãããBTã¢ãžã¥ãŒã«ã«ã¯3.3 Vã®Arduinoåºåããé»åãäŸçµŠãããŸãã
å³5
ããããã¯çµã¿ç«ãŠãããŠããŸããã¢ã³ããã€ãããéä¿¡ãããã³ãã³ããå®è¡ããããã«åŒ·å¶ããå¿ èŠããããŸãã
Arduino STEP 1ã®ã¹ã±ãã-ãªã¢ãŒãããããå¶åŸ¡
åã«BTã¢ãžã¥ãŒã«ããé»æºãåæããããšãå¿ããã«ãã¹ã±ãããarduinoã«ããŒãããŸãïŒããããªããšããŒãã§ããŸããïŒã
Arduino STEP 1ã®ã¹ã±ãã
// char incomingbyte; // //motors A (RIGHT) int R_A_IA = 9; // A-IA int R_A_IB = 10; // A-IB //motors B (LEFT) int L_B_IA = 11; // B-IA int L_B_IB = 12; // B-IB // void setup() { Serial.begin(38400); //motors RIGHT pinMode(R_A_IA,OUTPUT); digitalWrite(R_A_IA, HIGH); pinMode(R_A_IB,OUTPUT); digitalWrite(R_A_IB, HIGH); //motors LEFT pinMode(L_B_IA,OUTPUT); digitalWrite(L_B_IA, HIGH); pinMode(L_B_IB,OUTPUT); digitalWrite(L_B_IB, HIGH); } void go_forward(){ //motors LEFT digitalWrite(L_B_IA, LOW); digitalWrite(L_B_IB, HIGH); //motors RIGHT digitalWrite(R_A_IA, LOW); digitalWrite(R_A_IB, HIGH); } void go_back(){ //motors LEFT digitalWrite(L_B_IA, HIGH); digitalWrite(L_B_IB, LOW); //motors RIGHT digitalWrite(R_A_IA, HIGH); digitalWrite(R_A_IB, LOW); } void go_right(){ //motors LEFT digitalWrite(L_B_IA, LOW); digitalWrite(L_B_IB, HIGH); //motors RIGHT digitalWrite(R_A_IA, LOW); digitalWrite(R_A_IB, LOW); } void go_left(){ //motors LEFT digitalWrite(L_B_IA, LOW); digitalWrite(L_B_IB, LOW); //motors RIGHT digitalWrite(R_A_IA, LOW); digitalWrite(R_A_IB, HIGH); } void stop_robot(){ //motors LEFT digitalWrite(L_B_IA, LOW); digitalWrite(L_B_IB, LOW); //motors RIGHT digitalWrite(R_A_IA, LOW); digitalWrite(R_A_IB, LOW); } // void loop() { if (Serial.available() > 0){ incomingbyte = Serial.read(); if (incomingbyte == '1'){ go_forward(); Serial.println("FORWARD"); } if (incomingbyte == '2'){ go_back(); Serial.println("BACK"); } if (incomingbyte == '3'){ go_right(); Serial.println("RIGHT"); } if (incomingbyte == '4'){ go_left(); Serial.println("LEFT"); } if (incomingbyte=='0'){ stop_robot(); Serial.println("STOP"); } } }
å€æ°ã宣èšããŸãïŒR_A_IAãR_A_IB-ãšã³ãžã³Aãå¶åŸ¡ãã端æ«ã®çªå·ã決å®ããŸãïŒå³åŽã®ãšã³ãžã³ïŒãL_B_IAãL_B_IB-ãšã³ãžã³Bãå¶åŸ¡ããçªå·ã®çµè«ïŒå·ŠåŽã®ãšã³ãžã³ãã·ãªã¢ã«æ¥ç¶ãéå§ããããŒã¿è»¢éé床ãããã/ cïŒããŒïŒ-38400ã§èšå®ããŸããã¢ãŒã¿ãŒãå¶åŸ¡ãã端æ«ã®åäœã¢ãŒã-åºåïŒåºåïŒãèšå®ãããã¹ãŠã®åºåã«HIGHãé©çšããŸãïŒã€ãŸããã¢ãŒã¿ãŒããªãã«ãªããŸãïŒïŒè¡š2ïŒã
é¢æ°ãå®çŸ©ããŸãïŒgo_forwardïŒïŒãgo_backïŒïŒãgo_rightïŒïŒãgo_leftïŒïŒãstop_robotïŒïŒããããã¯ãšã³ãžã³ãå転ã®é æ¹åãŸãã¯éæ¹åã«éå§ããããã«ãã£ãŠãããããåé²ãåŸéãå³ãå·Šãåæ¢ãããã«å¿ããŠã
ã¡ã€ã³ããã°ã©ã ãµã€ã¯ã«ã§ã¯ãBTã¢ãžã¥ãŒã«ããåä¿¡ããŠã·ãªã¢ã«ããŒãã«åŠçãããããŒã¿ãèªã¿åãããŠåŠçãããŸãã åä¿¡ããã³ãã³ãã«å¿ããŠã1ã€ãŸãã¯å¥ã®æ©èœãå®è¡ããããã®å®è¡ã«é¢ããããã¹ããã·ãªã¢ã«ããŒãçµç±ã§éä¿¡ãããŸãã
Androidã¢ããªã±ãŒã·ã§ã³ã¹ããã1-ããããããªã¢ãŒãã³ã³ãããŒã«ãã
æ°ãããããžã§ã¯ããAndroid application projectããäœæããŸãã åã®èšäºã§æžããããã«ãBTã䜿çšããã«ã¯ãBTãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããæš©å©ãèšå®ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ããããã§ã¹ãã«ç§»åãã[ã¢ã¯ã»ã¹èš±å¯]ã¿ããéžæããŠ[è¿œå ]ãã¯ãªãã¯ãã[ã¢ã¯ã»ã¹èš±å¯ã䜿çš]ãã¯ãªãã¯ããŠã次ã®æš©éãèšå®ããŸããandroid.permission.BLUETOOTHãandroid.permission.BLUETOOTH_ADMIN
ã¡ã€ã³ã¢ã¯ãã£ããã£ãäœæããres / layout / activity_main.xmlã«ã³ãŒããé 眮ããŸãã
ã³ã¢ã¢ã¯ãã£ããã£ã¹ããã1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/txtrobot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" " /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/b1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="100" android:text="" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="100" > <Button android:id="@+id/b4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="100" android:text="" /> <Button android:id="@+id/b0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="100" android:text="" /> <Button android:id="@+id/b3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="100" android:text="" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/b2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="100" android:text="" /> </LinearLayout> </LinearLayout>
ããã¯ãã¡ã€ã³ã¢ã¯ãã£ããã£ã®å€èŠ³ã§ãã
txtrobotããã¹ãããã¯ã¹ã«ã¯ãå¿ èŠãªãã¹ãŠã®æ å ±ã衚瀺ãããŸãã ãã¿ã³b0ãb1ãb2ãb3ãb4ã¯ãarduinoã«ã³ãã³ããéä¿¡ããŸãïŒ0ã1ã2ã3ã4ïŒ
ããã§src /../ MainActivity.javaã«ç§»åãããšãã¡ã€ã³ã³ãŒããé 眮ãããŸãã
åã®èšäºã®ã¹ããã4ã§ãBTã§ããŒã¿ãéåä¿¡ã§ããã³ãŒããæ瀺ãããŸããã ãã®ã³ãŒããåºç€ãšããŠã¿ãŸãããã
onPauseïŒïŒããã³onResumeïŒïŒã¢ã¯ãã£ããŒã·ã§ã³ç¶æ ã§ã¯ãAndroidã§ã®BTã®ååšã確èªãããããæå¹ã«ãªã£ãŠãããã©ãããå€æããããã®æ¡ä»¶ãè¿œå ããŸãã åã®èšäºã§ã¯ãBTãç¡å¹ã«ãªã£ãŠããå Žåã«ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšããšã©ãŒã§çµäºãããã®åŸBTããªã³ã«ããããšãææ¡ããããããã®æ¡ä»¶ã¯ååšããŸããã§ããã
if (btAdapter != null){ if (btAdapter.isEnabled()){ // } }
ãã¿ã³ãä¿åããããã®å€æ°ã宣èšããŸãã
Button b0, b1, b2, b3, b4;
IDã§æ€çŽ¢ïŒ
b0 = (Button) findViewById(R.id.b0);// b1 = (Button) findViewById(R.id.b1);// b2 = (Button) findViewById(R.id.b2);// b3 = (Button) findViewById(R.id.b3);// b4 = (Button) findViewById(R.id.b4);//
ãããã®ãã¿ã³ãæŒããŠã³ãã³ããéä¿¡ããããã®ãã³ãã©ãŒãäœæããŸãã
b0.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("0"); } }); b1.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("1"); } }); b2.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("2"); } }); b3.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("3"); } }); b4.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("4"); } });
å®å šãªã¢ããªã±ãŒã·ã§ã³ã³ãŒãïŒ
ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¹ããã1
package com.example.rob_2_3_0; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.UUID; import com.example.rob_2_3_0.R; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import android.bluetooth.*; import android.content.Intent; public class MainActivity extends Activity { private static final int REQUEST_ENABLE_BT = 1; final int ArduinoData = 1; final String LOG_TAG = "myLogs"; private BluetoothAdapter btAdapter = null; private BluetoothSocket btSocket = null; private static String MacAddress = "20:11:02:47:01:60"; // MAC- private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); private ConnectedThred MyThred = null; public TextView mytext; Button b0, b1, b2, b3, b4; boolean fl=false; Handler h; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btAdapter = BluetoothAdapter.getDefaultAdapter(); mytext = (TextView) findViewById(R.id.txtrobot); if (btAdapter != null){ if (btAdapter.isEnabled()){ mytext.setText("Bluetooth . ."); }else { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } }else { MyError("Fatal Error", "Bluetooth "); } b0 = (Button) findViewById(R.id.b0);// b1 = (Button) findViewById(R.id.b1);// b2 = (Button) findViewById(R.id.b2);// b3 = (Button) findViewById(R.id.b3);// b4 = (Button) findViewById(R.id.b4);// b0.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("0"); } }); b1.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("1"); } }); b2.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("2"); } }); b3.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("3"); } }); b4.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("4"); } }); h = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case ArduinoData: byte[] readBuf = (byte[]) msg.obj; String strIncom = new String(readBuf, 0, msg.arg1); mytext.setText(" Arduino: " + strIncom); break; } }; }; } @Override public void onResume() { super.onResume(); if (btAdapter != null){ if (btAdapter.isEnabled()){ BluetoothDevice device = btAdapter.getRemoteDevice(MacAddress); Log.d(LOG_TAG, "*** Device***"+device.getName()); try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); Log.d(LOG_TAG, "... ..."); } catch (IOException e) { MyError("Fatal Error", " onResume() : " + e.getMessage() + "."); } btAdapter.cancelDiscovery(); Log.d(LOG_TAG, "*** ***"); Log.d(LOG_TAG, "***...***"); try { btSocket.connect(); Log.d(LOG_TAG, "*** ***"); } catch (IOException e) { try { btSocket.close(); } catch (IOException e2) { MyError("Fatal Error", " onResume() " + e2.getMessage() + "."); } } MyThred = new ConnectedThred(btSocket); MyThred.start(); } } } @Override public void onPause() { super.onPause(); Log.d(LOG_TAG, "...In onPause()..."); if (btAdapter != null){ if (btAdapter.isEnabled()){ if (MyThred.status_OutStrem() != null) { MyThred.cancel(); } try { btSocket.close(); } catch (IOException e2) { MyError("Fatal Error", " onPause() " + e2.getMessage() + "."); } } } }//OnPause private void MyError(String title, String message){ Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); finish(); } // private class ConnectedThred extends Thread{ private final BluetoothSocket copyBtSocket; private final OutputStream OutStrem; private final InputStream InStrem; public ConnectedThred(BluetoothSocket socket){ copyBtSocket = socket; OutputStream tmpOut = null; InputStream tmpIn = null; try{ tmpOut = socket.getOutputStream(); tmpIn = socket.getInputStream(); } catch (IOException e){} OutStrem = tmpOut; InStrem = tmpIn; } public void run() { byte[] buffer = new byte[1024]; int bytes; while(true){ try{ bytes = InStrem.read(buffer); h.obtainMessage(ArduinoData, bytes, -1, buffer).sendToTarget(); }catch(IOException e){break;} } } public void sendData(String message) { byte[] msgBuffer = message.getBytes(); Log.d(LOG_TAG, "*** : " + message + "***" ); try { OutStrem.write(msgBuffer); } catch (IOException e) {} } public void cancel(){ try { copyBtSocket.close(); }catch(IOException e){} } public Object status_OutStrem(){ if (OutStrem == null){return null; }else{return OutStrem;} } } }
ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãAndroidã䜿çšããŠãããããå¶åŸ¡ããBTã³ãã³ããArduinoã«éä¿¡ããããããããã¹ãå¿çãåä¿¡ã§ããŸãã ã¿ã¹ã¯ã®æåã®éšåãå®äºããŸããã
Arduino STEP 2ã®ã¹ã±ãã-èªåŸããããå¶åŸ¡ã¢ãŒã
è¶ é³æ³¢ã»ã³ãµãŒã䜿çšããã«ã¯ãæ¢è£œã®ã©ã€ãã©ãªã䜿çšããŸã
è¶ é³æ³¢-HC-SR04.zip
ãã¡ã€ã«ã解åããã¹ã±ãããé 眮ãããŠãããã£ã¬ã¯ããªã«é 眮ããŸã
ã©ã€ãã©ãªãæ¥ç¶ãã
#include "Ultrasonic.h"
Ultrasonicã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãTrigãšEchoãããããæ¥ç¶ããããã³çªå·ã®2ã€ã®ãã©ã¡ãŒã¿ãŒãåãå ¥ããŸãã
Ultrasonic ultrasonic(5, 6);
ãªããžã§ã¯ããŸã§ã®è·é¢ã«é¢ããããŒã¿ãã»ã³ãã¡ãŒãã«åäœã§ååŸããŸãã
float dist_cm = ultrasonic.Ranging(CM); //
BTã¢ãžã¥ãŒã«ãä»ããåŸç¶ã®éä¿¡ã®ããã«ãã·ãªã¢ã«ããŒãã«ããŒã¿ã転éããŸãã
Serial.print("*"); Serial.print(dist_cm); Serial.print("#");
èšå·ã*ãããã³ãïŒãã¯ããªããžã§ã¯ããŸã§ã®è·é¢ã«é¢ããæ å ±ã®éä¿¡ãããã¯ã®éå§ãšçµäºãæå³ããŸãã ããã¯ãå¿ èŠãªããŒã¿ãçžäºã«æ確ã«åé¢ããããã«å¿ èŠã§ãããªããªãããããã転éããããšãäžéšã倱ããããé ãããããããã§ãã
Arduinoã§ããŒãããããã®å®å šãªã¹ã±ããïŒ
Arduino STEP 2ã®ã¹ã±ãã
#include "Ultrasonic.h" // char incomingbyte; int i=0; //motors A (LEFT) int R_A_IA = 9; // A-IA int R_A_IB = 10; // A-IB //motors B (RIGHT) int L_B_IA = 11; // B-IA int L_B_IB = 12; // B-IB // Ultrasonic ultrasonic(5, 6); // void setup() { Serial.begin(38400); //RIGHT pinMode(R_A_IA,OUTPUT); digitalWrite(R_A_IA, HIGH); pinMode(R_A_IB,OUTPUT); digitalWrite(R_A_IB, HIGH); //LEFT pinMode(L_B_IA,OUTPUT); digitalWrite(L_B_IA, HIGH); pinMode(L_B_IB,OUTPUT); digitalWrite(L_B_IB, HIGH); } void go_forward(){ //LEFT digitalWrite(L_B_IA, LOW); digitalWrite(L_B_IB, HIGH); //RIGHT digitalWrite(R_A_IA, LOW); digitalWrite(R_A_IB, HIGH); } void go_back(){ //LEFT digitalWrite(L_B_IA, HIGH); digitalWrite(L_B_IB, LOW); //RIGHT digitalWrite(R_A_IA, HIGH); digitalWrite(R_A_IB, LOW); } void go_right(){ //LEFT digitalWrite(L_B_IA, LOW); digitalWrite(L_B_IB, HIGH); //RIGHT digitalWrite(R_A_IA, LOW); digitalWrite(R_A_IB, LOW); } void go_left(){ //LEFT digitalWrite(L_B_IA, LOW); digitalWrite(L_B_IB, LOW); //RIGHT digitalWrite(R_A_IA, LOW); digitalWrite(R_A_IB, HIGH); } void stop_robot(){ //LEFT digitalWrite(L_B_IA, LOW); digitalWrite(L_B_IB, LOW); //RIGHT digitalWrite(R_A_IA, LOW); digitalWrite(R_A_IB, LOW); } // void loop() { if (Serial.available() > 0){ incomingbyte = Serial.read(); if (incomingbyte == '1'){ go_forward(); } if (incomingbyte == '2'){ go_back(); } if (incomingbyte == '3'){ go_right(); } if (incomingbyte == '4'){ go_left(); } if (incomingbyte=='0'){ stop_robot(); } } float dist_cm = ultrasonic.Ranging(CM); // Serial.print("*"); Serial.print(dist_cm); Serial.print("#"); }
Androidã¢ããªã±ãŒã·ã§ã³ã¹ããã2-ããããã®èªåŸå¶åŸ¡
ãã¿ã³ãb5ãïŒèªåå¶åŸ¡ïŒãã¡ã€ã³ã¢ã¯ãã£ããã£ã«è¿œå ããŸãã ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
ã³ã¢ã¢ã¯ãã£ããã£ã¹ããã2
å 容
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/b5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="" /> </LinearLayout> <TextView android:id="@+id/txtrobot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" " /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/b1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="100" android:text="" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="100" > <Button android:id="@+id/b4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="100" android:text="" /> <Button android:id="@+id/b0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="100" android:text="" /> <Button android:id="@+id/b3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="100" android:text="" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/b2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="100" android:text="" /> </LinearLayout> </LinearLayout>
å 容
ãããã£ãŠãäž»ãªã¢ã¯ãã£ããã£ã¯æ¬¡ã®åœ¢åŒã«ãªããŸãã
å€æ°b5ã宣èšããŸãã
Button b0, b1, b2, b3, b4, b5;
ãŸããèªåå¶åŸ¡ãæå¹ã«ãªã£ãŠãããã©ãããå€å¥ã§ãããã©ã°ïŒ
boolean fl=false;
IDã§æ€çŽ¢ïŒ
b5 = (Button) findViewById(R.id.b5);//
æŒãããã®ãã³ãã©ãŒãäœæããŸãã
b5.setOnClickListener(new OnClickListener() { public void onClick(View v) { Log.d(LOG_TAG, " "); if (!fl){ Log.d(LOG_TAG, " "); fl=true; b1.setEnabled(false); b2.setEnabled(false); b3.setEnabled(false); b4.setEnabled(false); MyThred.sendData("1"); Log.d(LOG_TAG, " 1"); } } });
ãŸãããã¿ã³ãã³ãã© "b0"ïŒåæ¢ïŒã«å€æŽãå ããŸãã
b0.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("0"); if (fl) { fl = false; b1.setEnabled(true); b2.setEnabled(true); b3.setEnabled(true); b4.setEnabled(true); } } });
ãããããç¬ç«ããŠéšå±ãåãåããé害ç©ãè¿åã§ããããã«ããã¢ã«ãŽãªãºã ãäœæããããšã¯æ®ã£ãŠããŸãã
arduinoããéä¿¡ããããªããžã§ã¯ããŸã§ã®è·é¢ã«é¢ããåä¿¡ããŒã¿ãåŠçããŸãã ãªããžã§ã¯ããŸã§ã®è·é¢ã50 cmæªæºã®å Žåã¯ãå³ã«æ²ãããŸãããã以å€ã®å Žåã¯ããŸã£ããã«é£ã¹ãŸãã
byte[] readBuf = (byte[]) msg.obj; String strIncom = new String(readBuf, 0, msg.arg1); sb.append(strIncom);// int beginOfLineIndex = sb.indexOf("*");// int endOfLineIndex = sb.indexOf("#");// // *# if ((endOfLineIndex > 0) && (beginOfLineIndex == 0)) { String sbprint = sb.substring(beginOfLineIndex+1, endOfLineIndex-3); mytext.setText(" Arduino: " + sbprint); if (fl){ int dist = Integer.parseInt(sbprint); if (dist<50) { MyThred.sendData("3"); } else { MyThred.sendData("1"); } } } sb.delete(0, sb.length());
å®å šãªã¢ã¯ãã£ããã£ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¹ããã2
package com.robot.rob_2_3; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.UUID; import com.robot.rob_2_3.R; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Handler; import android.app.Activity; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import android.bluetooth.*; import android.content.Intent; public class MainActivity extends Activity { private static final int REQUEST_ENABLE_BT = 1; final int ArduinoData = 1; final String LOG_TAG = "myLogs"; private BluetoothAdapter btAdapter = null; private BluetoothSocket btSocket = null; private static String MacAddress = "20:11:02:47:01:60"; // MAC- private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); private static final long MILLIS_PER_SECOND = 0; private ConnectedThred MyThred = null; public TextView mytext; Button b0, b1, b2, b3, b4, b5; boolean fl=false; Handler h; private StringBuilder sb = new StringBuilder(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btAdapter = BluetoothAdapter.getDefaultAdapter(); mytext = (TextView) findViewById(R.id.txtrobot); if (btAdapter != null){ if (btAdapter.isEnabled()){ mytext.setText("Bluetooth . ."); }else { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } }else { MyError("Fatal Error", "Bluetooth "); } b0 = (Button) findViewById(R.id.b0);// b1 = (Button) findViewById(R.id.b1);// b2 = (Button) findViewById(R.id.b2);// b3 = (Button) findViewById(R.id.b3);// b4 = (Button) findViewById(R.id.b4);// b5 = (Button) findViewById(R.id.b5);// b0.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("0"); if (fl) { fl = false; b1.setEnabled(true); b2.setEnabled(true); b3.setEnabled(true); b4.setEnabled(true); } } }); b1.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("1"); } }); b2.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("2"); } }); b3.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("3"); } }); b4.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyThred.sendData("4"); } }); b5.setOnClickListener(new OnClickListener() { public void onClick(View v) { Log.d(LOG_TAG, " "); if (!fl){ Log.d(LOG_TAG, " "); fl=true; b1.setEnabled(false); b2.setEnabled(false); b3.setEnabled(false); b4.setEnabled(false); MyThred.sendData("1"); Log.d(LOG_TAG, " 1"); } } }); h = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case ArduinoData: byte[] readBuf = (byte[]) msg.obj; String strIncom = new String(readBuf, 0, msg.arg1); sb.append(strIncom);// int beginOfLineIndex = sb.indexOf("*");// int endOfLineIndex = sb.indexOf("#");// // *# if ((endOfLineIndex > 0) && (beginOfLineIndex == 0)) { // , String sbprint = sb.substring(beginOfLineIndex+1, endOfLineIndex-3); // mytext.setText(" Arduino: " + sbprint); if (fl){ int dist = Integer.parseInt(sbprint); if (dist<50) { MyThred.sendData("3"); } else { MyThred.sendData("1"); } } } sb.delete(0, sb.length()); break; } }; }; } @Override public void onResume() { super.onResume(); if (btAdapter != null){ if (btAdapter.isEnabled()){ BluetoothDevice device = btAdapter.getRemoteDevice(MacAddress); Log.d(LOG_TAG, "*** Device***"+device.getName()); try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); Log.d(LOG_TAG, "... ..."); } catch (IOException e) { MyError("Fatal Error", " onResume() : " + e.getMessage() + "."); } btAdapter.cancelDiscovery(); Log.d(LOG_TAG, "*** ***"); Log.d(LOG_TAG, "***...***"); try { btSocket.connect(); Log.d(LOG_TAG, "*** ***"); } catch (IOException e) { try { btSocket.close(); } catch (IOException e2) { MyError("Fatal Error", " onResume() " + e2.getMessage() + "."); } } MyThred = new ConnectedThred(btSocket); MyThred.start(); } } } @Override public void onPause() { super.onPause(); Log.d(LOG_TAG, "...In onPause()..."); if (btAdapter != null){ if (btAdapter.isEnabled()){ if (MyThred.status_OutStrem() != null) { MyThred.cancel(); } try { btSocket.close(); } catch (IOException e2) { MyError("Fatal Error", " onPause() " + e2.getMessage() + "."); } } } }//OnPause private void MyError(String title, String message){ Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); finish(); } // private class ConnectedThred extends Thread{ private final BluetoothSocket copyBtSocket; private final OutputStream OutStrem; private final InputStream InStrem; public ConnectedThred(BluetoothSocket socket){ copyBtSocket = socket; OutputStream tmpOut = null; InputStream tmpIn = null; try{ tmpOut = socket.getOutputStream(); tmpIn = socket.getInputStream(); } catch (IOException e){} OutStrem = tmpOut; InStrem = tmpIn; } public void run() { byte[] buffer = new byte[1024]; int bytes; while(true){ try{ bytes = InStrem.read(buffer); h.obtainMessage(ArduinoData, bytes, -1, buffer).sendToTarget(); }catch(IOException e){break;} } } public void sendData(String message) { byte[] msgBuffer = message.getBytes(); Log.d(LOG_TAG, "*** : " + message + "***" ); try { OutStrem.write(msgBuffer); } catch (IOException e) {} } public void cancel(){ try { copyBtSocket.close(); }catch(IOException e){} } public Object status_OutStrem(){ if (OutStrem == null){return null; }else{return OutStrem;} } } }
æ瀺ãããarduinoã®ã¹ã±ãããšé£åããŠäœæãããAndroidã®ã¢ããªã±ãŒã·ã§ã³ã¯ããããããç¬ç«ããŠãªã¢ãŒãå¶åŸ¡ããããšãããããããåæ¹ã«ç§»åããå¿ èŠã«å¿ããŠé害ç©ãåé¿ããèªåŸå¶åŸ¡ã¢ãŒãããªã³ã«ããããšãã§ããŸãã
ãã®äœæ¥ã®çµæã¯ãæãåçŽãªåå°ããããã§ãã ç¹å®ã®ãã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ãšã¹ã±ããã«åºã¥ããããè€éãªã¢ã«ãŽãªãºã ãããã«é©çšãããšãã¢ãã«ãç®æšããŠãŒãã£ãªãã£ãåŠç¿ãããããªã©ã«åºã¥ããŠãããããäœæã§ããŸãã
次ã®èšäºã§ã¯ããã£ã1ã€ã®ã¢ãžã¥ãŒã«ã泚æããŸããã
ãåå | ãªã³ã¯ | ããªãããã®äŸ¡æ Œ | äŸ¡æ Œæ©æŠ | æ°é | éé¡ |
Wifiã¢ãžã¥ãŒã« | dx.com/p/hi-link-hlk-rm04-serial-port-ethernet-wi-fi-adapter-module-blue-black-214540#.UutHKD1_sd0 | 14,99 | 524.65 | 1 | 524.65 |
åèšïŒ524.65
åã®èšäºãžã®ã³ã¡ã³ãã§ããããŠãŒã¶ãŒã®åžä»€å®ã¯ãè»èŒªãåçºæããã®ã§ã¯ãªããæšæºã®Firmataãããã³ã«ïŒarduinoãšãµãŒããŒéã§ããŒã¿ã亀æããããã®ãããã³ã«ïŒã䜿çšããããšãæšå¥šããŸããã æ®å¿µãªãããBTãšé£åããAndroidã®å®è¡å¯èœãªã©ã€ãã©ãªã¯èŠã€ãããŸããã§ããã ã©ã€ãã©ãªãæžãã®ã«ååãªæéãšãšãã«ã®ãŒããªãã®ã§ããã®èšäºã§ã¯ãã€ãŒã«ã®åçºæãç¶ããŸãã HabrãŠãŒã¶ãŒã®èª°ãããã®ãããªã©ã€ãã©ãªã«é¢ããæ å ±ãæã£ãŠããå Žåã¯ãå ±æããŠãã ããã