সুচিপত্র:
- ধাপ 1: কানেক্ট্যান্ডো হে সেন্সর
- পদক্ষেপ 2: মন্টান্ডো এবং লিক্সেইরা
- ধাপ 3: একটি নুভেমের জন্য আপলোড করুন
- ধাপ 4: Recuperando Dados Do ThingSpeak
- ধাপ 5: অ্যান্ড্রয়েড অ্যাপলিকেশন
- ধাপ:: Recuperando O Feed No Android
- ধাপ 7: মোস্ট্রান্ডো নো ম্যাপা
- ধাপ 8: উপসংহার
ভিডিও: স্মার্টবিন: 8 টি ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-31 10:17
Este mm projeto para um sistema inteligente de coletas, no qual os caminhões de lixo recebem dados das lixeiras, identificando a quantidade de lixo presente em cada uma delas, e uma rota de coleta traçada, com base nas informações recurades।
প্যারা মন্টার এই প্রজেক্টো, প্রয়োজনীয়তা:
- NodeMCU
- সেন্সর Ultrassônico de Distancia
- Caixa de papelão
- প্রোটোবোর্ড
- কাবোস
- ডিসপোজিটিভো অ্যান্ড্রয়েড
ধাপ 1: কানেক্ট্যান্ডো হে সেন্সর
Primeiramente, vamos efetuar a conexão entre o sensor ultrassônico e o NODEMCU। Para tanto, vamos conectar as portas trigger e echo do sensor nas portas D4 e D3 do NodeMCU:
// পিন সংখ্যা সংজ্ঞায়িত করে #ডিফাইন পিনো_ট্রিগার 2 // ডি 4
#ডিফাইন পিনো_ইকো 0 // ডি 3
Para efetuar a leitura dos dados do sensor, foi seguido o tutorial elaborado pelo FilipeFlop, disponível aqui।
ভাসা cmMsec, inMsec;
দীর্ঘ microsec = ultrasonic.timing ();
cmMsec = ultrasonic.convert (microsec, Ultrasonic:: CM);
inMsec = ultrasonic.convert (microsec, Ultrasonic:: IN);
// Exibe informacoes কোন সিরিয়াল মনিটর
Serial.print ("Distancia em cm:");
Serial.print (cmMsec);
Serial.print (" - Distancia em polegadas:");
Serial.println (inMsec);
স্ট্রিং ডেটা = স্ট্রিং (cmMsec);
Serial.println (তথ্য);
পদক্ষেপ 2: মন্টান্ডো এবং লিক্সেইরা
আগোরা, ভ্যামোস মন্টার এ লিক্সেইরা ইন্টেলিজেন্ট। Precisaremos conectar o sensor ultrassônico no “teto” da lixeira। উদাহরণস্বরূপ, ব্যবহার করুন Em seguida, temos que medir a distância inicial, para saber o valor para a lixeira vazia। কোন মিউ ক্যাসো, ফোই ডি 26, 3 সেমি Esse é o valor que considerarmos para uma lixeira vazia।
Para simulação, visto que não possuo mais de um sensor ultrassônico, foi feito um algoritmo para salvar randomicamente a distancia lida em 4 lixeiras diferentes।
// Simulando 4 lixeiras
দীর্ঘ lixeiraID;
অকার্যকর লুপ () {
lixeiraID = এলোমেলো (1, 5);
}
ধাপ 3: একটি নুভেমের জন্য আপলোড করুন
Agora, precisamos enviar estes dados para a nuvem। Eu escolhi o ThingSpeak, poramilidade com o mesmo। Primeiramente, é essentialário criar um novo canal, recebendo 4 parâmetros, referentes ao volume de cada lixeira
Para conectar a aplicação com o ThingSpeak, é essentialário salvar o número da API do canal criado। Siga os passos descritos কোন সাইট অফিশিয়াল।
De volta à aplicação, vamos utilizar a biblioteca ESP8266WiFi.h para efetuar conexão com o ThingSpeak, e transferir os dados।
Primeiramente, uma função para efetuar conexão com a rede (defina previamente duas variáveis, ssid e pass , contendo o identificador e a senha de sua rede)।
অকার্যকর সংযোগ ওয়াইফাই () {
Serial.print ("কানেক্ট করা হচ্ছে"+ *ssid);
WiFi.begin (ssid, pass);
যখন (WiFi.status ()! = WL_CONNECTED) {
বিলম্ব (500);
সিরিয়াল.প্রিন্ট ("।");
}
Serial.println ("");
Serial.print ("Conectado na rede");
Serial.println (ssid);
সিরিয়াল.প্রিন্ট ("আইপি:");
Serial.println (WiFi.localIP ());
}
Durante o setup, tentamos efetuar a conexão com a rede।
অকার্যকর সেটআপ() {
Serial.begin (9600);
Serial.println ("Lendo dados do sensor…");
// কানেক্ট্যান্ডো এও ওয়াই-ফাই
সংযোগ ওয়াইফাই ();
}
E, para enviar os dados para o ThingSpeak, basta abrir uma conexão HTTP padrão, passando o número da API e os parâmetros।
অকার্যকর sendDataTS (float cmMsec, long id) {
if (client.connect (server, 80)) {
Serial.println ("Enviando dados para o ThingSpeak");
স্ট্রিং postStr = apiKey;
postStr += "& ক্ষেত্র";
postStr += id;
postStr += "=";
postStr += স্ট্রিং (cmMsec);
postStr += "\ r / n / r / n";
Serial.println (postStr);
client.print ("পোস্ট /আপডেট HTTP /1.1 / n");
client.print ("হোস্ট: api.thingspeak.com / n");
client.print ("সংযোগ: বন্ধ / n");
client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n");
client.print ("বিষয়বস্তু-প্রকার: অ্যাপ্লিকেশন/x-www-form-urlencoded / n");
client.print ("বিষয়বস্তু-দৈর্ঘ্য:");
client.print (postStr.length ());
client.print ("\ n / n");
client.print (postStr);
বিলম্ব (1000);
}
client.stop ();
}
O Primeiro parâmetro corresponde à distância em centímetros encontrada pelo sensor ultrassônico। O segundo parâmetro é o ID da lixeira que foi lida (que foi gerado randomicamente, um número de 1 a 4)।
O ID da lixeira também para identificar para qual campo será feito o upload do valor lido।
ধাপ 4: Recuperando Dados Do ThingSpeak
O ThingSpeak permite efetuar leitura dos dados do seu খাল, através de um serviço retornando um JSON। হিসাবে diferentes opções para leitura do feed do seu canal estão descritas aqui:
www.mathworks.com/help/thingspeak/get-a-ch…
Neste projeto, optou-se por ler diretamente os dados de cada campo। O padrão de URL para este cenário é:
api.thingspeak.com/channels/CHANNEL_ID/fields/FIELD_NUMBER/last.json?api_key=API_KEY&status=true
Cada campo está descrito কোন লিঙ্ক informato previamente। ওস মেস গুরুত্বপূর্ণ
- CHANNEL_ID: número do seu খাল
- FIELD_NUMBER: o número do campo
- API_KEY: a chave de API do seu খাল
Esta é a URL que será lida do aplicativa Android, para recuperar os dados do ThingSpeak।
ধাপ 5: অ্যান্ড্রয়েড অ্যাপলিকেশন
অ্যান্ড্রয়েড স্টুডিও নেই, অ্যান্ড্রয়েড ব্যবহার করুন। Para o correto funcionamento da aplicação, é needário configurar as permissões abaixo no AndroidManifest।
গুগল ম্যাপের জন্য ব্যবহার করুন Siga os passos descritos no link Obter chave de API।
Uma vez com a chave, você deve também configurá-la na aplicação।
গুগল ম্যাপ-ভিত্তিক এপিআইগুলির জন্য এপিআই কী স্ট্রিং রিসোর্স হিসাবে সংজ্ঞায়িত করা হয়েছে।
("Res/values/google_maps_api.xml" ফাইলটি দেখুন)।
মনে রাখবেন API কী সাইন ইন করার জন্য ব্যবহৃত এনক্রিপশন কী এর সাথে সংযুক্ত। প্রকাশের জন্য APK- এ সাইন করার জন্য ব্যবহৃত রিলিজ কী সহ প্রতিটি এনক্রিপশন কী -এর জন্য আপনার আলাদা API কী প্রয়োজন। আপনি src/debug/এবং src/release/এ ডিবাগ এবং রিলিজ টার্গেটগুলির জন্য কীগুলি সংজ্ঞায়িত করতে পারেন।
<মেটা-ডেটা
অ্যান্ড্রয়েড: নাম = "com.google.android.geo. API_KEY"
android: value = "@string /google_maps_key" />
একটি কনফিগারেশন সম্পূর্ণভাবে অ্যান্ড্রয়েড ম্যানিফেস্ট অ্যানেক্সাডো এও প্রজেটো।
n
ধাপ:: Recuperando O Feed No Android
অ্যান্ড্রয়েড, মেইনঅ্যাক্টিভিটি, প্রিন্সিপাল এন্ড্রয়েড, মেইন অ্যাক্টিভিটি, ক্রি 4 ভেরিয়েভিস প্যারা আইডেন্টিফিকার ক্যাডা উম ডস ক্যানাইস ডু থিংসস্পিক এ সেরেম লিডোস:
ব্যক্তিগত স্ট্রিং url_a = "https://api.thingspeak.com/channels/429823/fields/1/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; ব্যক্তিগত স্ট্রিং url_b = "https://api.thingspeak.com/channels/429823/fields/2/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; ব্যক্তিগত স্ট্রিং url_c = "https://api.thingspeak.com/channels/429823/fields/3/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; ব্যক্তিগত স্ট্রিং url_d = "https://api.thingspeak.com/channels/429823/fields/4/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true";
Para efetuar a leitura dos dados, iremos utilizar uma classe do Android específica, chamada JSONObject। Mais uma vez, vamos criar um objeto para cada URL:
JSONObject responseLixeiraA; JSONObject responseLixeiraB; JSONObject responseLixeiraC; JSONObject responseLixeiraD;
Para abrir a conexão com urls হিসাবে, vamos usar criar uma classe auxiliar, chamada HttpJsonParser। Esta classe será responsável por abrir uma conexão com um URL, efetuar leitura dos dados encontrados, e retornar o objeto JSON montado।
পাবলিক JSONObject makeHttpRequest (স্ট্রিং url, স্ট্রিং পদ্ধতি, ম্যাপ প্যারাম) {
চেষ্টা করুন {
Uri. Builder builder = নতুন Uri. Builder (); URL urlObj; স্ট্রিং এনকোডেড প্যারাম = ""; যদি (params! = null) {for (Map. Entry entry: params.entrySet ()) {builder.appendQueryParameter (entry.getKey (), entry.getValue ()); }} if (builder.build ()। getEncodedQuery ()! = null) {encodedParams = builder.build ()। getEncodedQuery ();
}
যদি ("GET"। সমতুল্য (পদ্ধতি)) {url = url + "?" + এনকোডেড প্যারামস; urlObj = নতুন URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (পদ্ধতি);
} অন্য {
urlObj = নতুন URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (পদ্ধতি); urlConnection.setRequestProperty ("বিষয়বস্তু-প্রকার", "অ্যাপ্লিকেশন/x-www-form-urlencoded"); urlConnection.setRequestProperty ("Content-Length", String.valueOf (encodedParams.getBytes ()। length)); urlConnection.getOutputStream ()। লিখুন (encodedParams.getBytes ()); } // সার্ভারের সাথে সংযুক্ত করুন urlConnection.connect (); // প্রতিক্রিয়া পড়ুন = urlConnection.getInputStream (); BufferedReader পাঠক = নতুন BufferedReader (নতুন InputStreamReader (হয়)); StringBuilder sb = নতুন StringBuilder (); স্ট্রিং লাইন;
// প্রতিক্রিয়া বিশ্লেষণ করুন
while ((line = reader.readLine ())! = null) {sb.append (line + "\ n"); } আপনি উত্তর দিবেন না(); json = sb.toString (); // প্রতিক্রিয়াকে JSON অবজেক্টে পরিবর্তন করুন jObj = নতুন JSONObject (json);
} ধরা (UnsupportedEncodingException e) {
e.printStackTrace (); } ধরা (ProtocolException e) {e.printStackTrace (); } ধরা (IOException e) {e.printStackTrace (); } catch (JSONException e) {Log.e ("JSON Parser", "Error parseing data" + e.toString ()); } catch (Exception e) {Log.e ("Exception", "Error parseing data" + e.toString ()); }
// JSON অবজেক্ট ফিরিয়ে দিন
ফিরে jObj;
}
}
De volta a atividade প্রধান, Vamos efetuar a chamada urs urls de forma assíncrona, escrevendo este código dentro do método doInBackground।
Ver ওভাররাইড সুরক্ষিত স্ট্রিং doInBackground (স্ট্রিং… params) {HttpJsonParser jsonParser = নতুন HttpJsonParser ();
responseLixeiraA = jsonParser.makeHttpRequest (url_a, "GET", null);
responseLixeiraB = jsonParser.makeHttpRequest (url_b, "GET", null); responseLixeiraC = jsonParser.makeHttpRequest (url_c, "GET", null); responseLixeiraD = jsonParser.makeHttpRequest (url_d, "GET", null);
শূন্য ফেরত;}
Quando o método doInBackgroundé encerrado, o controle de execução do Android passa para o método onPostExecute। Neste método, vamos criar os objetos Lixeira, e জনপ্রিয় com os dados recuperados do ThingSpeak:
সুরক্ষিত শূন্যতা onPostExecute (স্ট্রিং ফলাফল) {pDialog.dismiss (); runOnUiThread (নতুন Runnable () {public void run () {
// ListView listView = (ListView) findViewById (R.id.feedList);
দেখুন mainView = (দেখুন) findViewById (R.id.activity_main); if (success == 1) {try {// Cria feedDetail para cada lixeira Lixeira feedDetails1 = new Lixeira (); Lixeira feedDetails2 = নতুন Lixeira (); Lixeira feedDetails3 = নতুন Lixeira (); Lixeira feedDetails4 = নতুন Lixeira ();
feedDetails1.setId ('A');
feedDetails1.setPesoLixo (Double.parseDouble (responseLixeiraA.getString (KEY_FIELD1))); feedDetails1.setVolumeLixo (Double.parseDouble (responseLixeiraA.getString (KEY_FIELD1)));
feedDetails2.setId ('B');
feedDetails2.setPesoLixo (Double.parseDouble (responseLixeiraB.getString (KEY_FIELD2))); feedDetails2.setVolumeLixo (Double.parseDouble (responseLixeiraB.getString (KEY_FIELD2)));
feedDetails3.setId ('C');
feedDetails3.setPesoLixo (Double.parseDouble (responseLixeiraC.getString (KEY_FIELD3))); feedDetails3.setVolumeLixo (Double.parseDouble (responseLixeiraC.getString (KEY_FIELD3)));
feedDetails4.setId ('ডি');
feedDetails4.setPesoLixo (Double.parseDouble (responseLixeiraD.getString (KEY_FIELD4))); feedDetails4.setVolumeLixo (Double.parseDouble (responseLixeiraD.getString (KEY_FIELD4)));
feedList.add (feedDetails1);
feedList.add (feedDetails2); feedList.add (feedDetails3); feedList.add (feedDetails4);
// ক্যালকুলা দাদোস দাস লিক্সিরাস
SmartBinService ক্যালকুলেটর = নতুন SmartBinService (); calculator.montaListaLixeiras (feedList);
// Recupera উপাদান
TextView createDate = (TextView) mainView.findViewById (R.id.date); ListView listaDeLixeiras = (ListView) findViewById (R.id.lista); adapter.addAll (feedList);
// ডেটা অ্যাটুয়াল
তারিখ currentTime = Calendar.getInstance ()। GetTime (); SimpleDateFormat simpleDate = new SimpleDateFormat ("dd/MM/yyyy"); স্ট্রিং currentDate = simpleDate.format (currentTime); createDate.setText (KEY_DATE + currentDate + ""); listaDeLixeiras.setAdapter (অ্যাডাপ্টার);
} ধরা (JSONException e) {
e.printStackTrace (); }
} অন্য {
Toast.makeText (MainActivity.this, "ডেটা লোড করার সময় কিছু ত্রুটি ঘটেছে", Toast. LENGTH_LONG)
}
} }); }
Agora, na tela inicial do aplicativo, serão listados os dados de cada lixeira।
ধাপ 7: মোস্ট্রান্ডো নো ম্যাপা
Ainda na atividade প্রধান, vamos adicionar uma ação a ser relacionada ao botão Mapa, na tela inicial।
/ ** কল করা হয় যখন ব্যবহারকারী ম্যাপা বোতাম*/ পাবলিক অকার্যকর openMaps (দেখুন দেখুন) ট্যাপ করে
// পাসা একটি তালিকা de lixeiras
বান্ডিল বান্ডেল = নতুন বান্ডেল (); bundle.putParcelableArrayList ("lixeiras", feedList); inte.putExtras (বান্ডিল);
startActivity (অভিপ্রায়);
}
কোন ম্যাপ নেই, টেমোস ট্রাইস একজন এক্সিকিউটারের উপর নির্ভর করে:
- marcar a posição atual do caminha de lixo
- marcar os pontos correspondentes a cada lixeira no mapa
- traçar a rota entre os pontos
প্যারা এক্সিকিউটার os passos acima, vamos usar a API Google Directions। রোটা হিসাবে প্যারা ডেসেনহার, ফোরাম সেগুইডোস ওএস পাসোস টিউটোরিয়াল গুগল ম্যাপ অ্যান্ড্রয়েড এপিআই ভি 2 এ গুগল ডাইরেকশন ব্যবহার করে দুটি অবস্থানের মধ্যে ড্রাইভিং রুটের দিকনির্দেশনা আঁকছে
Primeiro, vamos criar localidades para cada um dos pontos que desejamos marcar:
// অবস্থান
ব্যক্তিগত LatLng বর্তমান;
ব্যক্তিগত LatLng lixeiraA; ব্যক্তিগত LatLng lixeiraB; ব্যক্তিগত LatLng lixeiraC; ব্যক্তিগত LatLng lixeiraD;।
Para adicionar a posição atual no mapa, foi criado o método:
Private void checkLocationandAddToMap () {// ব্যবহারকারী অনুমতি দিয়েছে কিনা তা পরীক্ষা করা হচ্ছে (ActivityCompat.checkSelfPermission (this, android. Manifest.permission. ACCESS_FINE_LOCATION)! ACCESS_COARSE_LOCATION! প্রত্যাবর্তন; }
// Fus ব্যবহার করে সর্বশেষ পরিচিত অবস্থান আনা
অবস্থানের অবস্থান = LocationServices. FusedLocationApi.getLastLocation (googleApiClient);
// MarkerOptions একটি নতুন Marker তৈরি করতে ব্যবহার করা হয়। আপনি MarkerOptions দিয়ে অবস্থান, শিরোনাম ইত্যাদি নির্দিষ্ট করতে পারেন।
this.current = নতুন LatLng (location.getLatitude (), location.getLongitude ()); MarkerOptions markerOptions = নতুন MarkerOptions ()। অবস্থান (বর্তমান).শিরোনাম ("Posição atual");
// ম্যাপে তৈরি করা মার্কার যুক্ত করা, ক্যামেরাটিকে অবস্থানে সরানো
markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_GREEN)); System.out.println ("+++++++++++++++++++++++++++++++++++" "; mMap.addMarker (markerOptions);
// 15 এর জুম সহ ক্যামেরাটি তাত্ক্ষণিকভাবে অবস্থানে সরান।
mMap.moveCamera (CameraUpdateFactory.newLatLngZoom (বর্তমান, 15 %));
// জুম ইন, ক্যামেরা অ্যানিমেশন।
mMap.animateCamera (CameraUpdateFactory.zoomTo (14), 2000, null);
}
Em seguida, para cada lixeira, foram criados métodos similares ao abaixo:
ব্যক্তিগত অকার্যকর addBinALocation () {// ব্যবহারকারী অনুমতি দিয়েছেন কিনা তা পরীক্ষা করা হচ্ছে (ActivityCompat.checkSelfPermission (this, android. Manifest.permission. ACCESS_FINE_LOCATION)! ACCESS_COARSE_LOCATION! প্রত্যাবর্তন; }
// Praça da Estação
দ্বিগুণ অক্ষাংশ = -19.9159578; দ্বিগুণ দ্রাঘিমাংশ = -43.9387856; this.lixeiraA = নতুন LatLng (অক্ষাংশ, দ্রাঘিমাংশ);
MarkerOptions markerOptions = নতুন MarkerOptions ()। অবস্থান (lixeiraA).শিরোনাম ("Lixeira A");
markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_RED)); mMap.addMarker (markerOptions); }
Posições de latitude e longitude de cada lixeira foram recuperadas através do próprio Google Maps, e deixadas fixas no código। Idealmente, estes valores ficariam salvos em um banco de dados (উদাহরণস্বরূপ ফায়ারবেস)। Será a primeira evolução deste projeto!
O último passo agora é traçar as rotas entre os pontos। Para tal, um conceito muito importante, e que será utilizado neste projeto, são os Waypoints!
Foi criado um método para traçar a rota entre dois dados pontos:
ব্যক্তিগত স্ট্রিং getDirectionsUrl (LatLng Origin, LatLng dest, List waypointsList) {
// রুটের উৎপত্তি
স্ট্রিং str_origin = "origin ="+origin.latitude+","+origin.longitude;
// রুটের গন্তব্য
স্ট্রিং str_dest = "গন্তব্য ="+dest.latitude+","+dest.longitude;
// রুট বরাবর ওয়েপয়েন্ট
//waypoints=optimize:true|-19.9227365, -43.9473546 | -19.9168006, -43.9361124 স্ট্রিং ওয়েপয়েন্ট = "ওয়েপয়েন্টস = অপ্টিমাইজ: ট্রু"; জন্য (LatLng পয়েন্ট: waypointsList) {waypoints += "|" + point.latitude + "," + point.longitude; }
// সেন্সর সক্ষম
স্ট্রিং সেন্সর = "সেন্সর = মিথ্যা";
// ওয়েব পরিষেবাতে প্যারামিটার তৈরি করা
স্ট্রিং প্যারামিটার = str_origin+"&"+str_dest+"&"+sensor+"&"+waypoints;
// আউটপুট ফরমেট
স্ট্রিং আউটপুট = "json";
// ওয়েব পরিষেবাতে url তৈরি করা
স্ট্রিং url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; System.out.println ("+++++++++++++++"+url);
url ফেরত দিন;
}
E, por fim, juntando tudo no método প্রধান da classe, onMapReady:
MOverride public void onMapReady (GoogleMap googleMap) {mMap = googleMap;
checkLocationandAddToMap ();
যদি (lixeirasList.get (0).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE
|| lixeirasList.get (0).getPesoLixo ()-10> Lixeira. MIN_SIZE_GARBAGE) {addBinALocation (); } if (lixeirasList.get (1).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE || lixeirasList.get (1).getPesoLixo ()> Lixeira. MIN_SIZE_GARBAGE) {addBinBLocation (); } if (lixeirasList.get (2).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE || lixeirasList.get (2).getPesoLixo ()> Lixeira. MIN_SIZE_GARBAGE) {addBinCLocation (); } if (lixeirasList.get (3).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE || lixeirasList.get (3).getPesoLixo ()> Lixeira. MIN_SIZE_GARBAGE) {addBinDLocation (); }
// রুট আঁকুন
// গুগল দিকনির্দেশ API- এ URL পাওয়া
তালিকা পয়েন্ট = নতুন ArrayList (); points.add (lixeiraB); points.add (lixeiraC); points.add (lixeiraD);
স্ট্রিং url = getDirectionsUrl (বর্তমান, lixeiraA, পয়েন্ট);
ডাউনলোড টাস্ক ডাউনলোড টাস্ক = নতুন ডাউনলোড টাস্ক (); // Google Directions API downloadTask.execute (url) থেকে json ডেটা ডাউনলোড করা শুরু করুন; }
Aqui passamos apenas pelos pontos Principais। O código completo do projeto será disponibilizado para consulta।
ধাপ 8: উপসংহার
Este foi um projeto trabalhando conceitos de IoT, mostrando uma das várias opções de conectar dispositivos através da nuvem, e efetuar tomada de decisões sem interferência humana direta। Em anexo, segue um vídeo do projeto completo, para ilustração, e os fontes das atividades criadas no Android।
প্রস্তাবিত:
কিভাবে 4G LTE ডাবল BiQuade অ্যান্টেনা সহজ ধাপ: 3 ধাপ
কিভাবে 4G LTE ডাবল BiQuade অ্যান্টেনা সহজ ধাপ তৈরি করতে হয়: বেশিরভাগ সময় আমি মুখোমুখি হয়েছি, আমার প্রতিদিনের কাজের জন্য আমার ভাল সংকেত শক্তি নেই। তাই। আমি বিভিন্ন ধরণের অ্যান্টেনা অনুসন্ধান করি এবং চেষ্টা করি কিন্তু কাজ করি না। নষ্ট সময়ের পরে আমি একটি অ্যান্টেনা খুঁজে পেয়েছি যা আমি তৈরি এবং পরীক্ষা করার আশা করি, কারণ এটি নির্মাণের নীতি নয়
Arduino Halloween Edition - Zombies Pop -out Screen (ছবি সহ ধাপ): 6 টি ধাপ
আরডুইনো হ্যালোইন সংস্করণ - জম্বি পপ -আউট স্ক্রিন (ছবি সহ ধাপ): আপনার বন্ধুদের ভয় দেখাতে চান এবং হ্যালোইনে কিছু চিৎকারের শব্দ করতে চান? অথবা শুধু কিছু ভাল কৌতুক করতে চান? এই Zombies পপ আউট পর্দা যে করতে পারেন! এই নির্দেশনায় আমি আপনাকে শেখাবো কিভাবে সহজেই আরডুইনো ব্যবহার করে লাফ দিয়ে জম্বি তৈরি করতে হয়। HC-SR0
Arduino Uno ধাপে ধাপে ধাপে ধাপে (8-ধাপ): 8 টি ধাপ
Arduino Uno ধাপে ধাপে ধাপে ধাপে (8-ধাপ): অতিস্বনক শব্দ ট্রান্সডুসার L298N Dc মহিলা অ্যাডাপ্টার একটি পুরুষ ডিসি পিন Arduino UNO ব্রেডবোর্ড দিয়ে কিভাবে এটি কাজ করে: প্রথমে, আপনি Arduino Uno এ কোড আপলোড করুন (এটি ডিজিটাল সজ্জিত একটি মাইক্রোকন্ট্রোলার এবং এনালগ পোর্ট কোড রূপান্তর করতে (C ++)
11 ধাপ রুবে গোল্ডবার্গ মেশিন: 8 টি ধাপ
11 স্টেপ রুবে গোল্ডবার্গ মেশিন: এই প্রজেক্টটি একটি 11 স্টেপ রুবে গোল্ডবার্গ মেশিন, যা একটি জটিল পদ্ধতিতে একটি সহজ কাজ তৈরি করার জন্য ডিজাইন করা হয়েছে। এই প্রকল্পের কাজ হল সাবানের বার ধরা
স্মার্টবিন: 4 টি ধাপ
স্মার্টবিন: এই প্রকল্পের মূল উদ্দেশ্য হল একটি ইলেকট্রনিক ডিভাইস তৈরি করা যা কমপক্ষে একটি রাস্পবেরি পাই ব্যবহার করে। দলটি 5 ভবিষ্যত যান্ত্রিক প্রকৌশলী এবং একজন অটোমেশন প্রকৌশলী নিয়ে গঠিত। আমাদের প্রকল্পে রয়েছে একটি আবর্জনা তৈরি করা যা খোলে এবং বন্ধ হয়