ब्लूटूथद्वारे होम रोबोट नियंत्रित करण्यासाठी आम्ही एक Android ॲप्लिकेशन तयार करत आहोत. वाय-फाय मॉड्यूल esp8266 ला arduino ला जोडण्याची शक्यता

विंडोजसाठी 10.07.2019
विंडोजसाठी

हा लेख Android मोबाइल ऑपरेटिंग सिस्टमसाठी एक लहान अनुप्रयोग आणि Arduino साठी एक स्केच तयार करण्याचे तपशीलवार वर्णन करेल. Arduino Uno मध्ये ब्लूटूथ मॉड्यूलसह ​​वायरलेस शील्ड असेल. अनुप्रयोग ब्लूटूथ मॉड्यूलशी कनेक्ट होईल आणि एक विशिष्ट कमांड पाठवेल. या बदल्यात, स्केच हा आदेश Arduino ला जोडलेल्या LEDs पैकी एक प्रकाश किंवा बंद करण्यासाठी वापरेल.

आम्हाला लागेल

एक Android अनुप्रयोग तयार करणे

कोरा

Android OS साठी विकास ADT विकास वातावरण, Android विकास साधने मध्ये चालते. जे गुगल डेव्हलपर पोर्टलवरून डाउनलोड केले जाऊ शकते. ADT डाउनलोड आणि स्थापित केल्यानंतर, ते लाँच करण्यास मोकळ्या मनाने. तथापि, अनुप्रयोग विकसित करणे सुरू करणे अद्याप खूप लवकर आहे. आपल्याला आवश्यक आवृत्तीचा Android SDK देखील डाउनलोड करणे आवश्यक आहे. हे करण्यासाठी, तुम्हाला Android SDK Manager “Window → Android SDK Manager” उघडण्याची आवश्यकता आहे. सूचीमध्ये आम्हाला आवश्यक असलेला SDK निवडायचा आहे, आमच्या बाबतीत Android 2.3.3 (API 10). तुमच्याकडे फोन नसल्यास, 2.3.3 किंवा उच्च निवडा; आणि असल्यास - फोनच्या OS आवृत्तीशी जुळणारी आवृत्ती. नंतर इंस्टॉलेशन प्रक्रिया सुरू करण्यासाठी “Install Packages” बटणावर क्लिक करा.

एकदा डाउनलोड आणि स्थापना पूर्ण झाल्यानंतर, आम्ही अनुप्रयोग तयार करण्यास सुरवात करतो. "फाइल → नवीन → Android अनुप्रयोग प्रकल्प" निवडा. आकृतीत दाखवल्याप्रमाणे विंडोमधील मजकूर भरू.

    अर्जाचे नाव - Google Play Store मध्ये प्रदर्शित होणाऱ्या अनुप्रयोगाचे नाव. परंतु आम्ही अर्ज प्रकाशित करणार नाही, त्यामुळे नाव आमच्यासाठी विशेष महत्त्वाचे नाही.

    प्रकल्पाचे नाव - ADT मधील प्रकल्पाचे नाव.

    पॅकेजचे नाव - ऍप्लिकेशन आयडेंटिफायर. ते खालीलप्रमाणे तयार केले जावे: तुमच्या साइटचे नाव मागे, तसेच काही अर्जाचे नाव.

ड्रॉप-डाउन सूचींमध्ये “किमान आवश्यक SDK”, “लक्ष्य SDK”, “सह संकलित करा”, आम्ही आधी डाउनलोड केलेली आवृत्ती निवडा. SDK च्या नवीन आवृत्त्या अनुप्रयोगांसाठी ग्राफिकल थीमला समर्थन देतात, परंतु जुन्या आवृत्त्या तसे करत नाहीत. म्हणून, “थीम” फील्डमध्ये, “काहीही नाही” निवडा. "पुढील" वर क्लिक करा.

"सानुकूल लाँचर चिन्ह तयार करा" अनचेक करा: या लेखाच्या उद्देशाने, आम्ही अनुप्रयोग चिन्ह तयार करण्यावर लक्ष केंद्रित करणार नाही. "पुढील" वर क्लिक करा.

दिसत असलेल्या विंडोमध्ये, आपण "क्रियाकलाप" दृश्य निवडू शकता: अनुप्रयोग लॉन्च झाल्यावर स्क्रीनवर काय असेल याचे दृश्य. आम्ही "रिक्त क्रियाकलाप" निवडतो, याचा अर्थ असा आहे की आम्हाला सर्वकाही सुरवातीपासून सुरू करायचे आहे. "पुढील" वर क्लिक करा.

आमच्या ॲप्लिकेशनमध्ये फक्त एकच ॲक्टिव्हिटी असेल, त्यामुळे तुम्हाला दिसत असलेल्या विंडोमध्ये काहीही बदलण्याची गरज नाही. तर फक्त "फिनिश" वर क्लिक करा.

तेच, आमचा अर्ज तयार झाला आहे.

एमुलेटर सेट करत आहे

अँड्रॉइड ॲप्लिकेशन्स वास्तविक डिव्हाइसवर डीबग केले जातात किंवा जर तेथे काहीही नसेल तर एमुलेटरवर. चला आपले कॉन्फिगर करूया.

हे करण्यासाठी, “विंडो → Android व्हर्च्युअल डिव्हाइस व्यवस्थापक” लाँच करा. दिसत असलेल्या विंडोमध्ये, "नवीन" वर क्लिक करा. दिसत असलेल्या फॉर्मची फील्ड भरा. एमुलेटर “फोन” ला किती आणि कोणती संसाधने प्रदान करेल हे त्यांच्यावर अवलंबून आहे. वाजवी मूल्ये निवडा आणि ओके क्लिक करा.

Android Virtual Device Manager विंडोमध्ये, “Start” बटणावर क्लिक करा. हे एमुलेटर लाँच करेल. स्टार्टअपला काही मिनिटे लागतात. त्यामुळे धीर धरा.

परिणामी, तुम्हाला यासारखीच एमुलेटर विंडो दिसेल:

भरण्याची क्रिया

ऍप्लिकेशन लॉन्च केल्यानंतर फोन स्क्रीनवर जे प्रदर्शित केले जाते ते क्रियाकलाप आहे. त्यावर "लाट एलईडी दिवा लावा" आणि "निळा LED उजळवा" ही दोन बटणे असतील. चला त्यांना जोडूया. “पॅकेज एक्सप्लोरर” पॅनेलमध्ये, res/layout/activity_main.xml उघडा. त्याचे स्वरूप अंदाजे स्क्रीनशॉट प्रमाणेच असेल.

स्क्रीन फॉर्मवर 2 “टॉगलबटन्स” ड्रॅग करा. “activity_main.xml” टॅबवर स्विच करा आणि खालील कोड पहा:

activity_main_aiutogen.xml xmlns: टूल्स = android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom= android:paddingLeft= android:paddingRight = "@dimen/activity_horizontal_margin" android:paddingTop = "@dimen/activity_vertical_margin" साधने: संदर्भ = "मुख्य क्रियाकलाप" > android:id="@+id/toggleButton1" android:layout_alignParentLeft="सत्य" android:layout_alignParentTop="true" android:text="ToggleButton" /> android:id="@+id/toggleButton2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/textView1" android:layout_alignParentRight="सत्य" android:text="ToggleButton" /> >

हे आमच्या क्रियाकलापापेक्षा अधिक काही नाही, जे ग्राफिक्स म्हणून प्रदर्शित केले जात नाही, परंतु XML स्वरूपात वर्णन केले आहे.

चला घटकांची नावे अधिक स्पष्ट करू. चला खालीलप्रमाणे android:id फील्ड बदलू.

android:id="@+id/toggleRedLed" ... android:id="@+id/toggleGreenLed" ...

आम्ही त्यांना स्वाक्षरी देखील जोडू, त्यांचा रंग आणि मजकूर आकार बदलू. परिणामी मार्कअप कोड यासारखा दिसेल:

activity_main.xml "http://schemas.android.com/apk/res/android" xmlns: टूल्स = "http://schemas.android.com/tools" android:layout_width="fill_parent" android:paddingBottom= "@dimen/activity_vertical_margin" android:paddingLeft= "@dimen/activity_horizontal_margin" android:paddingRight = "@dimen/activity_horizontal_margin" android:paddingTop = "@dimen/activity_vertical_margin" साधने: संदर्भ = "मुख्य क्रियाकलाप" Android:weightSum="2" android:orientation="horizontal" > android:id="@+id/toggleRedLed" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" android:background="#FF0000" android:textOff="OFF" Android:textOn="ON" android:textSize="30dp" /> android:id="@+id/toggleGreenLed" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" android:background="#00FF00" android:textOff="OFF" android:textSize="30dp" android:textOn="ON" /> >

हेच बदल ग्राफिकल मोडमध्ये “आउटलाइन/प्रॉपर्टीज” टॅब वापरून केले जाऊ शकतात.

ट्रायल रन

आपण एमुलेटरवर नवीन तयार केलेले ऍप्लिकेशन चालवू शकतो. लाँच सेटिंग्जवर जा “रन” → रन कॉन्फिगरेशन्स”, डाव्या बाजूला “Android Application” वर क्लिक करा. नवीन कॉन्फिगरेशन "New_configuration" दिसेल. विंडोच्या उजव्या बाजूला, "लक्ष्य" टॅब निवडा आणि "सर्व सुसंगत डिव्हाइसेस/एव्हीडीवर लाँच करा" पर्याय निवडा.

"लागू करा" आणि नंतर "चालवा" वर क्लिक करा. अनुप्रयोग एमुलेटरमध्ये लॉन्च होईल.

तुम्ही बटणे दाबू शकता. परंतु काहीही होणार नाही, कारण आम्ही अद्याप क्लिक हँडलर्स लिहिलेले नाहीत.

वास्तविक डिव्हाइसवर अनुप्रयोग चालविण्यासाठी, आपल्याला त्याच्या सेटिंग्जमध्ये "USB डीबगिंग" पर्याय सक्षम करणे आणि ते आपल्या संगणकाशी कनेक्ट करणे आवश्यक आहे.

वास्तविक डिव्हाइसवर, अनुप्रयोग अगदी सारखाच दिसतो.

Android साठी लेखन कोड

जाहीरनामा संपादित करणे

प्रत्येक Android ॲप्लिकेशनने सिस्टीमला कोणते अधिकार देणे आवश्यक आहे हे सांगणे आवश्यक आहे. अधिकार तथाकथित मॅनिफेस्ट फाइल AndroidManifest.xml मध्ये सूचीबद्ध आहेत. त्यामध्ये आम्ही हे तथ्य सूचित केले पाहिजे की आम्हाला आमच्या अनुप्रयोगात ब्लूटूथ वापरायचे आहे. हे करण्यासाठी, फक्त दोन ओळी जोडा:

AndroidManifest.xml "http://schemas.android.com/apk/res/android" पॅकेज="ru.amperka.arduinobtled" android:versionCode="1" android:versionName="1.0"> android:minSdkVersion="10" android:targetSdkVersion="10" /> "android.permission.BLUETOOTH"/> "android.permission.BLUETOOTH_ADMIN"/>
android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > android:name = "ru.amperka.arduinoobtled.MainActivity" android:label="@string/app_name" > > "android.intent.category.LAUNCHER" /> > > > >

मुख्य कोड जोडत आहे

आमच्या अनुप्रयोगात जीवन श्वास घेण्याची वेळ आली आहे. MainActivity.java फाइल उघडा (src → ru.amperka.arduinobtled). सुरुवातीला त्यात खालील कोड असतो:

MainActivityAutogen.java पॅकेज ru.amperka.arduinobtled ; android.os.Bundle आयात करा;मेनू) ( getMenuInflater() .inflate (R.menu .मुख्य , मेनू) ; खरे परत करा ; ) )

आम्हाला आवश्यकतेनुसार कोड जोडूया:

    ब्लूटूथ बंद असल्यास आम्ही ते चालू करू.

    आम्ही बटण क्लिकवर प्रक्रिया करू

    कोणते बटण दाबले होते याची माहिती आम्ही पाठवू.

आम्ही दोन अंकी क्रमांकासह एक बाइट Arduino मध्ये हस्तांतरित करू. नंबरचा पहिला अंक हा पिनची संख्या आहे ज्यावर विशिष्ट LED जोडलेला आहे, दुसरा LED ची स्थिती आहे: 1 - चालू, 0 - बंद.

कमांड नंबरची गणना अगदी सोप्या पद्धतीने केली जाते: जर लाल बटण दाबले असेल, तर 60 क्रमांक घेतला जाईल (लाल एलईडीसाठी आम्ही अर्डुइनोचा 6 वा पिन निवडला आहे) आणि 1 किंवा 0 त्यात जोडले आहे, एलईडी पाहिजे की नाही यावर अवलंबून. आता चालू आहे की नाही. हिरव्या बटणासाठी, सर्वकाही समान आहे, फक्त 60 ऐवजी, 70 घेतले जातात (हिरवा एलईडी पिन 7 शी जोडलेला असल्याने). परिणामी, आमच्या बाबतीत, 4 संघ शक्य आहेत: 60, 61, 70, 71.

चला कोड लिहू जे सांगितलेल्या प्रत्येक गोष्टीची अंमलबजावणी करते.

MainActivity.java पॅकेज ru.amperka.arduinobtled ; java.io.IOException आयात करा; java.io.OutputStream आयात करा; आयात java.lang.reflect.InvocationTargetException ; java.lang.reflect.InvocationTargetException java.lang.reflect.Method आयात करा; android.app.Activity आयात करा; आयात android.bluetooth.BluetoothAdapter ;आयात android.bluetooth.BluetoothDevice android.bluetooth.BluetoothSocket ; android.content.Intent आयात करा; android.os.Bundle आयात करा; android.util.Log आयात करा; android.view.Menu आयात करा; android.view.View आयात करा; आयात android.view.View.OnClickListener ; android.widget.Toast आयात करा; enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE ; startActivityForResult(नवीन हेतू(सक्षमबीटी) , 0 );//आम्ही डीफॉल्ट ब्लूटूथ ॲडॉप्टर वापरू इच्छितो BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();//या क्रिया करण्याचा प्रयत्न करत आहे प्रयत्न करा ( //या पत्त्यासह डिव्हाइस आमचे ब्लूटूथ बी आहे // पत्ता खालीलप्रमाणे निर्धारित केला जातो: कनेक्शन स्थापित करा //पीसी आणि मॉड्यूल (पिन: 1234) दरम्यान, आणि नंतर सेटिंग्जमध्ये पहा// कनेक्शन मॉड्यूल पत्ता. बहुधा ते समान असेल. BluetoothDevice डिव्हाइस = bluetooth.getRemoteDevice("00:13:02:01:00:09" ); //डिव्हाइससह कनेक्शन सुरू करापद्धत m = device.getClass().getMethod("createRfcommSocket", नवीन वर्ग(int.class)); clientSocket = (ब्लूटूथसॉकेट) m.invoke(device, 1); clientSocket.connect(); //कोणत्याही त्रुटी आढळल्यास, लॉगवर संदेश आउटपुट करा) पकडणे ( IO अपवाद) पकडणे ( सुरक्षा अपवाद) पकडणे ( e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) पकडणे () पकडणे ( NoSuchMethodExceptionबेकायदेशीर युक्तिवाद अपवाद बेकायदेशीर प्रवेश अपवाद InvocationTargetException android.os.Bundle आयात करा; e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ;) // यशस्वी कनेक्शनबद्दल संदेश प्रदर्शित करा Toast.makeText(getApplicationContext(), "CONNECTED", Toast.LENGTH_LONG).show(); ) @CreateOptionsMenu वर सार्वजनिक बुलियन ओव्हरराइड करा(मेनू) ( ;// मेनू फुगवा; हे आयटम उपस्थित असल्यास ॲक्शन बारमध्ये जोडते. getMenuInflater(). inflate (R.menu .main , menu);खरे परत ) //हेच फंक्शन म्हटले जाईल@Override Public void onClick( v) ( //डेटा पाठवण्याचा प्रयत्न करत आहेप्रयत्न करा ( //डेटा हस्तांतरणासाठी आउटपुट प्रवाह मिळवाआउटपुटस्ट्रीम clientSocket.connect(); outStream = clientSocket.getOutputStream(); int मूल्य = 0;// कोणते बटण दाबले गेले यावर अवलंबून, // पाठवण्यासाठी डेटा बदलाजर (v == redButton) ( मूल्य = (redButton.isChecked () ? 1 : 0 ) + 60; ) तर (v == greenButton) (मूल्य = (greenButton.isChecked () ? 1 : 0 ) + 70 ; ) // आउटपुट प्रवाहात डेटा लिहा outStream.write(मूल्य); ) पकडणे ( e) ( //(1 - लाइट अप, 0 - बंद)डिजिटलराईट(इनकमिंगबाइट / 10, इनकमिंगबाइट % 2);

))

स्केच फिलिंगची वैशिष्ट्ये

कंट्रोलरशी ब्लूटूथ-बी संप्रेषण करण्यासाठी, फर्मवेअरसाठी समान पिन (0 आणि 1) वापरल्या जातात. म्हणून, कंट्रोलर प्रोग्रामिंग करताना, “वायरलेस शील्ड” वरील “सीरियल सिलेक्ट” स्विच “USB” स्थितीवर सेट करणे आवश्यक आहे आणि फ्लॅशिंगनंतर ते “MICRO” स्थितीत परत करणे आवश्यक आहे.

परिणाम

निष्कर्ष

या लेखात, आम्ही Android ऑपरेटिंग सिस्टमसाठी अनुप्रयोग कसे तयार करावे आणि ब्लूटूथद्वारे डेटा हस्तांतरित कसा करावा हे शिकलो. आता, जेव्हा तुम्ही अँड्रॉइड ऑपरेटिंग सिस्टमवर आधारित फोनच्या स्क्रीनवरील बटण दाबाल, तेव्हा बोर्डवरील एलईडीची स्थिती बदलेल.

तुम्ही तुमची कल्पना विकसित करू शकता आणि Android वर अधिक वापरकर्ता-अनुकूल इंटरफेस बनवू शकता, त्यासह अधिक जटिल उपकरणे नियंत्रित करू शकता, Android Market मध्ये छान अनुप्रयोग प्रकाशित करू शकता आणि बरेच काही मनोरंजक गोष्टी!

आरसी कार वायफाय कार असू शकते का...?

आरसी कार चांगली असते, परंतु स्वस्त आरसी कारची मर्यादा मर्यादित असते आणि त्या फक्त किटमध्ये पुरवलेल्या विशिष्ट रिमोट कंट्रोलद्वारे नियंत्रित केल्या जातात.

मी फ्लेक्स सस्पेंशन आणि ऑफ-रोड टायर असलेली RC जीप 4x4 सुमारे $30 मध्ये खरेदी केली. मशीनशी खेळल्यानंतर, मी ठरवले की ते वाय-फाय आणि अँड्रॉइड वापरून सुधारले जाऊ शकते. थोडा वेळ घालवल्यानंतर, मी मशीनमधून बोर्ड पूर्णपणे काढून टाकला. मी या बोर्डवरील व्होल्टेज मोजले आणि Arduino वापरून मोटर नियंत्रण प्रणाली विकसित केली. मूळ नियंत्रण प्रणाली वेग नियंत्रित करण्यासाठी PWM वापरत नाही. कार अत्यंत कमी गियरमध्ये अडथळे पार करण्यासाठी आणि परिणामी, अतिशय हळू चालविण्यासाठी डिझाइन केलेली आहे. माझे सर्किट PWM वापरते.

मी अनेक महिन्यांपासून Arduino वापरत आहे. मी WiFi चा प्रयोग करण्यासाठी Dumilanoe Arduino साठी asynclabs WiFi शील्ड देखील खरेदी केले. हे Arduino IDE मध्ये स्थापित केलेल्या लायब्ररीसह येते. मी एक प्रोग्राम बनवू शकलो जो तुम्हाला वायफाय वापरून मोटर्स आणि हालचालीची दिशा नियंत्रित करण्यास अनुमती देतो.

व्हिज्युअल स्टुडिओ वापरून, मी एक प्रोग्राम विंडो विकसित केली जी कार सर्व्हरशी कनेक्ट होते आणि त्यास कमांड देते. नंतर, काही प्रयत्नांनंतर, मी एक Android ॲप लिहिला जो कार नियंत्रित करण्यासाठी एक्सीलरोमीटर वापरतो.

साधने आणि घटक

या प्रकल्पात वापरल्या जाणाऱ्या साधने आणि वस्तूंची ही सर्वसाधारण यादी आहे. ईगल दस्तऐवजीकरण वापरलेल्या घटकांसाठी अचूक तपशील प्रदान करते.
मल्टीमीटर
सोल्डरिंग लोह
सोल्डर
स्क्रूड्रिव्हर्स
बोर्ड एचिंग सोल्यूशन
फॉइल फायबरग्लास
पक्कड
अर्डिनो
RJ45 कनेक्टर
एच-ब्रिज मोटार चालक
कॅपेसिटर

मोटार चालक

ईगल वापरून, मी हे सर्किट डिझाइन केले आणि त्यासाठी पीसीबी बनवला. हे Arduino साठी मोटर ड्रायव्हर आणि पॉवर रेग्युलेटर म्हणून कार्य करते.
हे मुख्य आणि स्टीयरिंग मोटर्स आणि Arduino ला उर्जा देण्यासाठी मानक 7.2V बॅटरी वापरण्याची परवानगी देते.

मोटर्स नियंत्रित करण्यासाठी हे सर्किट SN754410 ड्युअल इंटिग्रेटेड एच-ब्रिज ड्रायव्हर वापरते. ड्रायव्हर कंट्रोल पिन RJ45 केबलला जोडलेल्या असतात, जे AsyncLabs WiFi शील्डला जोडतात.

Arduino शील्ड

Eagle मधील SparkFun लायब्ररी वापरून मी Arduino Shield डिझाईन केले जे वायफाय शील्डमध्ये पिन पास करेल आणि RJ45 कनेक्टर आणि 2 स्क्रू टर्मिनल्सद्वारे मोटर ड्रायव्हरला जोडेल.

RJ45 पिन पिनआउट खूप महत्वाचे आहे. कनेक्शनमधील त्रुटीमुळे अप्रत्याशित परिणाम होऊ शकतात आणि आपल्याला बोर्ड पुन्हा करावे लागेल.

पीसीबी एचिंग

हा विषय बऱ्याच वेळा कव्हर केला गेला आहे आणि मी त्याबद्दल तपशीलात जाणार नाही.
मी ते वापरतो आणि ते माझ्यासाठी अनुकूल आहे आणि अनुभवाने ते उत्कृष्ट परिणाम देते.

केसमध्ये बोर्ड जोडण्यासाठी वेल्क्रोचा वापर केला गेला. मी भाग्यवान होतो कारण... माझ्या कारमध्ये ट्यूबलर फ्रेमच्या खाली इलेक्ट्रॉनिक्ससाठी भरपूर जागा होती.
मी मोटर ड्रायव्हर बोर्ड आणि उर्वरित बोर्ड यांच्यातील कनेक्शनचा फोटो घेण्यास विसरलो, परंतु ते चांगले बसले आणि केसमध्ये जास्त जागा घेतली नाही.

कार्यक्रम

माझा कोड पुरेसा कार्यक्षम नसू शकतो, परंतु तो कार्य करतो.

टंकलेखक

AsynLabs Wifi Sheild सह मला मिळालेल्या सॉकेटसर्व्हर उदाहरणावर आधारित मी CarServer तयार करू शकलो.
तुम्हाला तुमची वायरलेस नेटवर्क माहिती Arduino कोडमध्ये टाकावी लागेल. एकदा मशीन चालू केल्यानंतर, राउटरशी कनेक्शन स्थापित करण्यासाठी 15-45 सेकंद द्या. वायफाय शील्डवरील लाल एलईडी म्हणजे कनेक्शन स्थापित झाले आहे.

मी हा प्रोग्राम C# आणि MS Visual Studio 2008 वापरून बनवला आहे. मी एक छान खिडकी बनवली आणि कार बाणांनी नियंत्रित केली जाऊ शकते.

तुमच्या फोनवरून कार कंट्रोल का करत नाही?

हा विचार मला DroidX खरेदी केल्यानंतर एका आठवड्यानंतर आला. मी प्रयोग सुरू केले आणि Android SDK वापरून संपवले. मला अशीच ॲप्स सापडली जी नियंत्रणासाठी एक्सीलरोमीटर वापरतात. हे अर्ज बघून मी माझे स्वतःचे लिहिले.

Arduino कोडमध्ये निर्दिष्ट केलेले IP आणि पोर्ट पेस्ट करा. तुमचा फोन आडवा धरा. मग पुढे जाण्यासाठी ते तुमच्यापासून दूर आणि मागे जाण्यासाठी तुमच्याकडे वाकवा. तुमचा फोन स्टीयरिंग व्हील म्हणून वापरा.
हे माझे पहिले मोठे Android ॲप आहे. त्यात अजूनही काही बग आहेत, परंतु बहुतेक ते चांगले कार्य करते.

तुमच्या अंगणात वायफायसह तुमची ४x४ कार चालवा!

हा प्रकल्प तयार करताना मला खूप आनंद झाला. मला बरेच ज्ञान आणि नवीन कौशल्ये मिळाली आणि आता माझ्याकडे 4x4 कार आहे जी माझ्या फोनवरून नियंत्रित केली जाऊ शकते.

मला विंडशील्डच्या मागे स्थापित करण्यासाठी कॅमेरा आवश्यक आहे जेणेकरून मी कुठे गाडी चालवत आहे ते पाहू शकेन. ते कमी उर्जा वापरणारे असावे आणि स्वतः व्हिडिओ प्रसारित देखील करावे. (मला वाटते की Arduino हे हाताळू शकते).

रेडिओ घटकांची यादी

पदनाम प्रकार संप्रदाय प्रमाण नोंददुकानमाझे नोटपॅड
मोटार चालक
IC1 चिपSN7544101 नोटपॅडवर
रेखीय नियामक5 व्ही1 नोटपॅडवर
द्विध्रुवीय ट्रान्झिस्टर

2N3904

1 नोटपॅडवर
C1, C2 इलेक्ट्रोलाइटिक कॅपेसिटर 2 नोटपॅडवर
कनेक्टर2 आउटपुट7 नोटपॅडवर
कनेक्टर8 पिन1 नोटपॅडवर
Arduino शील्ड
U1 अर्डिनो बोर्ड 1 नोटपॅडवर
T1 द्विध्रुवीय ट्रान्झिस्टर

2N3904

1 नोटपॅडवर
R1 रेझिस्टर 1 नोटपॅडवर
U$3 ट्रिमर प्रतिरोधक 1 नोटपॅडवर
कनेक्टर2 आउटपुट2

म्हणून आम्ही दोन उलट करता येण्याजोग्या (दोन्ही दिशेने फिरणारे) इंजिन नियंत्रित करू: मुख्य आणि स्टीयरिंग. आम्ही त्यांना 3.7 V बॅटरीमधून उर्जा देऊ, परंतु आपण, तत्त्वतः, आपण नियंत्रकाच्या वीज पुरवठ्याचे समन्वय साधल्यास किंवा वेगळ्या बॅटरीसह व्यवस्थापित केल्यास 12 V पर्यंत पुरवठा करू शकता.

पॉवर विभागात आम्ही सर्वात सोपा लघु स्टेपर मोटर ड्रायव्हर l9110s वापरतो किंवा तुम्ही L293\8 वर असेंब्ली वापरू शकता किंवा तुम्हाला सापडलेला कोणताही तितकाच शक्तिशाली. सर्वसाधारणपणे, मी चित्रात सर्वकाही काढले.

आपण Aliexpress वर प्रकल्पासाठी घटक खरेदी करू शकता:

वापरलेला वायफाय कंट्रोलर माझा आवडता आहे NodeMCU 0.9 ESP8266, परंतु तुम्ही लहान WeMos D1 मिनी देखील वापरू शकता.

मायक्रो USB द्वारे बॅटरी चार्ज केली जाऊ शकते, त्यानंतर ती थेट मोटर ड्रायव्हरला आणि WiFi कंट्रोलरला कनवर्टर 5V वर वाढवा.

प्रोग्राम कोड:

#समाविष्ट करा
const char* ssid = "तुमच्या Wi-Fi नेटवर्कचे नाव";
const char* password = "तुमचा नेटवर्क पासवर्ड";
int up = 2; //विभक्त आउटपुटची संख्या
int down = 14;
int left = 4;
int right = 12;
// सर्व्हरचे उदाहरण तयार करा
// युक्तिवाद म्हणून ऐकण्यासाठी पोर्ट निर्दिष्ट करा
वायफाय सर्व्हर सर्व्हर (80);
शून्य सेटअप() (
Serial.begin(9600);
विलंब(10);
// आउटपुट तयार करणे
पिनमोड (अप, आउटपुट);
डिजिटलराइट(अप, 0);
पिनमोड (खाली, आउटपुट);
डिजिटलराइट (खाली, 0);
पिनमोड (डावीकडे, आउटपुट);
डिजिटलराइट (डावीकडे, 0);
पिनमोड (उजवीकडे, आउटपुट);
डिजिटलराइट (उजवीकडे, 0);

// WiFi नेटवर्कशी कनेक्ट करा
Serial.println();
Serial.println();
Serial.print("कनेक्ट करत आहे");
Serial.println(ssid);

WiFi.begin(ssid, पासवर्ड);

असताना (WiFi.status() != WL_CONNECTED) (
विलंब (500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi कनेक्ट केलेले");

//सर्व्हर सुरू करा
server.begin();
Serial.println("सर्व्हर सुरू झाला");
// पोर्ट मॉनिटरवर IP पत्ता आउटपुट करा
Serial.println(WiFi.localIP());
}
शून्य पळवाट() (
// क्लायंट कनेक्ट केलेले आहे का ते तपासा
WiFiClient क्लायंट = server.available();
जर (!क्लायंट) (
परत
}

//क्लायंट काही डेटा पाठवत नाही तोपर्यंत प्रतीक्षा करा
Serial.println("नवीन क्लायंट");
असताना(!client.available())(
विलंब(1);
}

// विनंतीची पहिली ओळ वाचत आहे
स्ट्रिंग req = client.readStringUntil("\r");
Serial.println(req);
client.flush();

// कमांड प्रोसेसिंग
जर (req.indexOf("/gpio/up") != -1)(
डिजिटलराइट(अप, 1);
डिजिटलराइट (खाली, 0);
विलंब (1000);
डिजिटलराइट(अप, 0);
डिजिटलराइट (खाली, 0);
}
अन्यथा जर (req.indexOf("/gpio/down") != -1)(
डिजिटलराइट(अप, 0);
डिजिटलराइट (खाली, 1);
विलंब (1000);
डिजिटलराइट(अप, 0);
डिजिटलराइट (खाली, 0);
}
अन्यथा जर (req.indexOf("/gpio/left") != -1)(
डिजिटलराइट(अप, 1);
डिजिटलराइट (खाली, 0);
digitalWrite(डावीकडे, 1);
डिजिटलराइट (उजवीकडे, 0);
विलंब (1000);
डिजिटलराइट(अप, 0);
डिजिटलराइट (खाली, 0);
डिजिटलराइट (डावीकडे, 0);
डिजिटलराइट (उजवीकडे, 0);
}
अन्यथा जर (req.indexOf("/gpio/right") != -1)(
डिजिटलराइट(अप, 1);
डिजिटलराइट (खाली, 0);
डिजिटलराइट (डावीकडे, 0);
डिजिटलराइट(उजवीकडे, 1);
विलंब (1000);
डिजिटलराइट(अप, 0);
डिजिटलराइट (खाली, 0);
डिजिटलराइट (डावीकडे, 0);
डिजिटलराइट (उजवीकडे, 0);
}
इतर(
Serial.println("अवैध विनंती");
}

Client.flush();
// प्रतिसादाची तयारी करत आहे
स्ट्रिंग s = "HTTP/1.1 200 ओके\r\nसामग्री-प्रकार: मजकूर/html\r\n\r\n\r\n \r\n ";

S += "


यु.पी.
";
s += "
डावीकडे     ";
s += "बरोबर
";
s += "
खाली";
s += "
\n";
// क्लायंटला प्रतिसाद पाठवा
client.print(s);
विलंब(1);
Serial.println("क्लायंट डिस्कनेक्ट झाला");
) प्रोग्राम Arduino IDE मध्ये लिहिलेला आहे. NodeMCU 0.9 ESP8266 कंट्रोलरसह कार्य करण्यासाठी Arduino IDE कसे कॉन्फिगर करावेलिंक पहा. कंट्रोलरमध्ये प्रोग्राम लोड केल्यानंतर, पोर्ट मॉनिटर तुमच्या WiFi राउटरशी कनेक्ट केल्यानंतर बोर्डला प्राप्त होणारा IP पत्ता वाचू शकतो. तुमच्या संगणकाच्या ब्राउझरमध्ये, तुम्हाला हा पत्ता ॲड्रेस बारमध्ये एंटर करणे आवश्यक आहे आणि कंट्रोलर प्रोग्राम तयार करेल त्या पृष्ठावर जा. हे असे दिसेल:

खाली

जेव्हा तुम्ही UP लिंकवर क्लिक करता तेव्हा कार 1 सेकंद पुढे सरकते आणि थांबते. जेव्हा तुम्ही DOWN दाबाल, तेव्हा कार 1 सेकंदासाठी मागे जाईल. डावीकडे - रोटेशन मोटर चाके डावीकडे वळवेल आणि कार डावीकडे 1 सेकंद चालवेल. जेव्हा तुम्ही RIGHT दाबता तेव्हा तेच उजवीकडे जाते.

ही संपूर्ण प्रणाली केवळ कॉन्फिगर केलेल्या वायफाय ऍक्सेस पॉइंट (वायफाय राउटर) सह कार्य करेल, परंतु भविष्यात मला यासह खेळण्यात रस आहे कंट्रोलर NodeMCU 0.9 ESP8266, जे स्वतः एक ऍक्सेस पॉइंट आयोजित करेल आणि WEB सर्व्हरचे कार्य करेल, म्हणजेच जेव्हा आम्ही ब्राउझरवरून त्याचा IP ऍक्सेस करतो, तेव्हा आम्हाला नियंत्रणांसह एक वेब पृष्ठ दिसेल. अशा एका कंट्रोलरकडून त्यांच्या स्वायत्त वायफाय नेटवर्कद्वारे डेटा ट्रान्सफर आयोजित करणे देखील मनोरंजक आहे.

आणि सायनोजेन 7.1.0 RC1 फर्मवेअर (Android 2.3.4) सह HTC इच्छा. फक्त काही बाबतीत, मी तुम्हाला आठवण करून देतो की खाली वर्णन केलेली प्रत्येक गोष्ट फक्त फोनसाठी Android 2.3.4 आणि टॅब्लेटसाठी Android 3.1 पासून सुरू होते.

येथे हे लक्षात घेण्यासारखे आहे की ही USB होस्ट शिल्ड पूर्णपणे यशस्वी नाही, विशेषत: Arduino Mega 2560 च्या संयोजनात. पहिली अडचण अशी होती की हे विस्तार बोर्ड Arduino UNO साठी बनवले गेले होते आणि ते मेगापेक्षा भिन्न आहे. SPI संपर्क, म्हणून मला जंपर्स जोडावे लागले (फोटो पहा). दुसरी समस्या, अगदी अपेक्षित असली तरी, हे विस्तार कार्ड चालवण्यासाठी बाह्य उर्जा स्त्रोताची आवश्यकता होती. Circuits@Home कडील USB होस्ट शील्ड 2.0 अधिक यशस्वी मानले जाते, परंतु ते अधिक महाग देखील आहे.

इंटरकनेक्टेड एसपीआय संपर्कांसह बोर्ड

Arduino सॉफ्टवेअर सेट करत आहे

1. जर आधीपासून इन्स्टॉल केलेले नसेल, तर Arduino साठी सॉफ्टवेअर डाउनलोड करून इन्स्टॉल करा.
2. ADK पॅकेज डाउनलोड आणि अनपॅक करा (डेमोकिट ऍप्लिकेशन आहे). ॲप, फर्मवेअर आणि हार्डवेअर फोल्डर दिसले पाहिजेत.
3. CapSense लायब्ररी डाउनलोड करा
4. फर्मवेअर/arduino_libs/AndroidAccessory आणि फर्मवेयर/arduino_libs/USB_Host_Shield येथे कॉपी करा /लायब्ररी/.
5. मध्ये CapSense निर्देशिका तयार करा /libraries/ आणि CapSense संग्रहणातून CapSense.cpp आणि CapSense.h कॉपी करा.

फर्मवेअर डाउनलोड

Google कृपया Arduino साठी त्याचे DemoKit स्केच प्रदान करते. तुम्हाला फक्त ते फर्मवेअर/demokit/demokit.pde वरून उघडायचे आहे, ते संकलित करा आणि ते बोर्डवर अपलोड करा.

चाचणी Android अनुप्रयोग

DemoKit पॅकेजमध्ये क्षमता प्रदर्शित करण्यासाठी Android अनुप्रयोगाचे स्त्रोत देखील आहेत. Google आम्हाला स्वतः एक Android प्रकल्प तयार करण्यासाठी आणि हा अनुप्रयोग एकत्र करण्यासाठी आमंत्रित करते. प्रथम, आम्हाला API स्तर 10 स्थापित करणे आवश्यक आहे. मग सर्वकाही सोपे आहे - आम्ही एक Android प्रकल्प तयार करतो आणि ॲप फोल्डरचा मार्ग निर्दिष्ट करतो, बिल्ड टार्गेटमध्ये आम्ही Google API (प्लॅटफॉर्म) निर्दिष्ट करतो 2.3.3 , API स्तर 10). आम्ही अनुप्रयोग एकत्र करतो आणि फोनवर स्थापित करतो. ज्यांना असेंब्लीचा त्रास नको आहे ते रेडीमेड एपीके डाउनलोड करू शकतात.

लाँच करा

आम्ही आमचा फोन फक्त USB होस्ट शील्डशी जोडतो. आम्ही सर्वकाही योग्यरित्या केले असल्यास, DemoKit अनुप्रयोग लाँच करण्याची विनंती स्क्रीनवर दिसून येईल.

ऍप्लिकेशनमध्येच दोन टॅब आहेत - इन (बटणे, जॉयस्टिक आणि सेन्सर्स) आणि आउट (LEDs, रिले आणि सर्वोस).

मी ठरवले की प्रात्यक्षिकासाठी दोन एलईडी आणि एक बटण पुरेसे आहे. हा चमत्कार कसा होतो ते तुम्ही व्हिडिओमध्ये पाहू शकता.

काही कोड

या उदाहरणात, USB द्वारे प्रसारित केलेल्या संदेशांमध्ये तीन बाइट्स असतात:
1 ला बाइट कमांड किंवा डिव्हाइस गट परिभाषित करते, उदाहरणार्थ LEDs - 0x2
2रा बाइट विशिष्ट उपकरण दर्शवितो, उदाहरणार्थ हिरवा एलईडी - 0x1
3 रा बाइटमध्ये डिव्हाइसला दिलेले मूल्य असते, उदाहरणार्थ कमाल ब्राइटनेस - 0xff

अर्डिनो

... /* आरंभ */ AndroidAccessory acc("Google, Inc.", "DemoKit", "DemoKit Arduino Board", "1.0", "http://www.android.com", "0000000012345678"); void setup() ( .... acc.powerOn(); ) void loop() ( byte msg; /* कनेक्शन तपासा */ if (acc.isConnected()) ( /* Android डिव्हाइसवरून संदेश प्राप्त करा */ int len = acc.read(msg, sizeof(msg), 1); if (len > 0) ( LEDs */ if (msg == 0x2) ( if (msg == 0x0) analogWrite(LED3_RED, msg) ; अन्यथा (msg == 0x1) analogWrite(LED3_GREEN, msg); अन्यथा (msg == 0x2) analogWrite(LED3_BLUE, msg) ) msg ​​= 0; msg = ? 1 ; /* पाठवा बटण स्थिती */ acc.write(msg, 3);

Android

com.android.future.usb.UsbAccessory आयात करा; com.android.future.usb.UsbManager आयात करा; ... पब्लिक क्लास डेमोकिटॅक्टिव्हिटी एक्स्टीशन्स इम्प्लीमेंट्स रन करण्यायोग्य (खाजगी USBManager Musbmanager; USBACCESSORY MACCCESSORY; FileinPutstream MinPuSTREAM; Utputstream; ... Private Void Openaccessory (USBACCESSORY) ) ( mAccessory = mAccessory = mAccessory = mFdscripte (fDtscript; Filescriptor); mInputStream = नवीन FileInputStream (एफडी); byte; int i; while (ret >= 0) ( // येणारे संदेश ret = mInputStream.read(बफर); i = 0; असताना (i< ret) { int len = ret - i; switch (buffer[i]) { case 0x1: // сообщение от кнопки if (len >= 3) ( संदेश m = Message.obtain(mHandler, MESSAGE_SWITCH); m.obj = new SwitchMsg(buffer, buffer); mHandler.sendMessage(m); ) i += 3;

खंडित;

अशा संधी उघडून, Google, अर्थातच, सर्व प्रथम, मोठ्या संख्येने सक्रिय Android ॲक्सेसरीजच्या देखाव्यावर अवलंबून आहे, परंतु सर्वात महत्त्वाचे नाही हे तथ्य आहे की थोडक्यात आम्हाला विविध सेन्सर्स, सेन्सर्सशी संवाद साधण्यासाठी एक सोयीस्कर डिव्हाइस मिळते. आणि actuators. असे उपकरण सहजपणे एखाद्या रोबोटिकचा मेंदू बनू शकतो.

तसेच, आपण हे विसरू नये की Arduino साठी Android डिव्हाइस विस्तार बोर्ड म्हणून कार्य करू शकते, ज्यामध्ये GPS, ब्लूटूथ, वायफाय, एक एक्सेलेरोमीटर आणि बरेच काही आहे.

हा लेख चरण-दर-चरण सूचना प्रदान करतो ज्या आपल्याला ब्लूटूथद्वारे काहीतरी नियंत्रित करण्यासाठी डिझाइन केलेल्या Android स्मार्टफोनसाठी आपला स्वतःचा अनुप्रयोग तयार करण्यात मदत करतील. प्रदर्शित करण्यासाठी, आम्ही फोन किंवा टॅब्लेटवरील आदेश वापरून Arduino वर LED ब्लिंक करण्याच्या उदाहरणाचे तपशीलवार विश्लेषण करू. आमच्या सूचनांचे पालन केल्यामुळे, तुम्ही हे करायला शिकाल:

होम रोबोट नियंत्रित करण्यासाठी, तुम्हाला फक्त बटणे जोडणे आणि त्यांच्या आदेशांवर Arduino बाजूला प्रक्रिया करणे आवश्यक आहे.

काय घेईल?

  1. कोणताही Arduino-सुसंगत बोर्ड
  2. ब्लूटूथ मॉड्यूल
  3. ज्या डिव्हाइसवर Android OS स्थापित आहे

ब्लूटूथ मॉड्यूल म्हणून HC-05 वापरणे चांगले. चीनी ऑनलाइन स्टोअरमध्ये किंवा eBay वर खरेदी करणे सोपे आहे. मॉड्यूल 3.3V द्वारे समर्थित आहे, परंतु त्याच्या I/O ओळी 5V लॉजिक हाताळू शकतात, ज्यामुळे त्याचा UART Arduino शी जोडला जाऊ शकतो.

ब्लूटूथ मॉड्यूल HC-05

Arduino ला ब्लूटूथ मॉड्यूल कनेक्ट करत आहे

त्यामुळे आता आम्हाला आमचा Arduino ब्लूटूथने जोडण्याची गरज आहे. जर Arduino मध्ये 3.3V आउटपुट नसेल, परंतु फक्त 5V असेल, तर तुम्हाला पॉवर कमी करण्यासाठी स्टॅबिलायझर स्थापित करावे लागेल. HC-05 पिनची असाइनमेंट इंटरनेटवर शोधणे सोपे आहे. वापरासाठी, आम्ही शिफारस करतो की तुम्ही पॉवर लाईन्स, Rx आणि Tx सह बोर्ड बनवा. Arduino शी कनेक्शन खालील क्रमाने केले पाहिजे:

  • Arduino आउटपुट 3.3V किंवा (5V स्टॅबिलायझरद्वारे!) - ब्लूटूथ मॉड्यूलचे 12 पिन करण्यासाठी
  • Arduino GND आउटपुट - ब्लूटूथ मॉड्यूलचे 13 पिन करण्यासाठी
  • Arduino TX आउटपुट - RX ब्लूटूथ मॉड्यूलचे 2 पिन करण्यासाठी
  • Arduino RX आउटपुट - TX ब्लूटूथ मॉड्यूलचा 1 पिन करण्यासाठी

कनेक्ट केल्यानंतर, आपल्याला ब्लूटूथ मॉड्यूलची कार्यक्षमता तपासण्याची आवश्यकता आहे. Arduino च्या पिन 12 ला LED कनेक्ट करू आणि खालील स्केच बोर्डवर अपलोड करू:

चार इनकमिंगबाइट; // येणारा डेटा int LED = 12; // LED पिन 12 void setup() शी जोडलेले आहे ( Serial.begin(9600); // पोर्ट पिनमोड सुरू करणे(LED, OUTPUT); // आउटपुट म्हणून पिन 12 सेट करा Serial.println("LED चालू करण्यासाठी 1 दाबा किंवा 0 ते LED बंद..."); ) void loop() ( if (Serial.available() > 0) ( // डेटा आला असल्यास incomingByte = Serial.read(); // बाइट वाचा if(incomingByte == "0" ) ( digitalWrite(LED, LOW); // जर 1 असेल, तर LED Serial.println बंद करा ("LED OFF. LED चालू करण्यासाठी 1 दाबा!"); // आणि संदेश परत प्रिंट करा ) if(incomingByte) == "1") ( digitalWrite(LED, HIGH); // 0 असल्यास, LED Serial.println चालू करा("LED चालू. LED बंद करण्यासाठी 0 दाबा!"); ) ) )



आम्ही वाचण्याची शिफारस करतो

वर