ዝርዝር ሁኔታ:
- ደረጃ 1: Conectando O ዳሳሽ
- ደረጃ 2 ሞንታንዶ እና ሊክስራ
- ደረጃ 3 - ፓራ አንድ ኑዌምን ይስቀሉ
- ደረጃ 4 Recuperando Dados Do ThingSpeak
- ደረጃ 5: Criando a Aplicação Android
- ደረጃ 6: Recuperando O Feed No Android
- ደረጃ 7: Mostrando No Mapa
- ደረጃ 8: Conclusão
ቪዲዮ: SmartBin: 8 ደረጃዎች
2024 ደራሲ ደራሲ: John Day | [email protected]. ለመጨረሻ ጊዜ የተሻሻለው: 2024-01-31 10:16
Este é um 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 recuperadas.
ፓራ ሞንታር ፕሮጄቶ ፣ እና አስፈላጊ -
- NodeMCU
- ዳሳሽ Ultrassônico de Distancia
- Caixa de papelão
- ፕሮቶቦርድ
- ካቦስ
- Android ን ያውርዱ
ደረጃ 1: Conectando O ዳሳሽ
Primeiramente, vamos efetuar a conexão entre o sensor ultrassônico e o NODEMCU. ፓራ ታንቶ ፣ ቫሞስ ኮንቴክታር እንደ ፖርታስ ማስነሻ እና ዳሰሳ ዳሳሾች እና ወደቦች D4 እና D3 NodeMCU
// የፒን ቁጥሮችን #ይገልጻል pino_trigger 2 // D4
#ጥራት ያለው ፒኖ_ሴቾ 0 // D3
ይህንን ለማድረግ ሌንስታ ዶስ ዳዶስ ፣ ዳሳሽ ፣ ዳዮ ዳውዝ ማድረግ ፣ የማጠናከሪያ ትምህርት ኤላቦራዶ ፔሎ ፊሊፔፍሎፕ ፣ ሌላውን ማስተላለፍ።
ተንሳፋፊ cmMsec ፣ inMsec;
ረጅም ማይክሮ ሰከንድ = ለአልትራሳውንድ። ሰዓት ();
cmMsec = ultrasonic.convert (microsec ፣ Ultrasonic:: CM);
inMsec = ultrasonic.convert (microsec ፣ Ultrasonic:: IN);
// Exibe ምንም ተከታታይ ክትትል የለውም
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. ለምሳሌ ፣ ለምሳሌ ፣ ካባን እና ፊትን ማግለል። ኢሜ ሴጉይዳ ፣ ቴሞስ ኬር ሜዲር በተርታ ኢንሺያ ፣ ፓራ ሳቤር ወይም ደፋር ለሊሴራ ቫዚያ። የለም ፣ ምንም 26 ፣ 3 ሴሜ የለም። Esse é o valor que considerrarmos para uma lixeira vazia.
ፓራ 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.
// ሲሙላንዶ 4 lixeiras
ረጅም lixeiraID;
ባዶነት loop () {
lixeiraID = በዘፈቀደ (1 ፣ 5);
}
ደረጃ 3 - ፓራ አንድ ኑዌምን ይስቀሉ
Agora, precisamos enviar estes dados para a nuvem. ዩ ኤስኮሊ ወይም ThingSpeak ፣ በፎርሚዳዴድ ኮም o mesmo። Primeiramente ፣ é necessário criar um novo canal, recebendo 4 parâmetros, referentes ao volume de cada lixeira.
በ ‹ThingSpeak› ፣ በ ‹ኤፒአይ› ቦይ ክሪአዶን ያስተዋውቁ። Siga os passos descritos ምንም ጣቢያ የለም።
ደ 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).
ባዶነት connectWifi () {
Serial.print ("ከ"+ *ssid ጋር በመገናኘት ላይ);
WiFi.begin (ssid ፣ ማለፍ);
ሳለ (WiFi.status ()! = WL_CONNECTED) {
መዘግየት (500);
Serial.print (".");
}
Serial.println ("");
Serial.print ("Conectado na rede");
Serial.println (ssid);
Serial.print ("IP:");
Serial.println (WiFi.localIP ());
}
ዱራንቴ o ማዋቀር ፣ ድንኳን ተደጋግሞ እና ተገናኝቶ።
ባዶነት ማዋቀር () {
Serial.begin (9600);
Serial.println ("Lendo dados do sensor …");
// Conectando ao Wi-Fi
connectWifi ();
}
E ፣ para enviar os dados para o ThingSpeak ፣ basta abrir uma conexão HTTP padrão ፣ passando o número da API እና os parâmetros።
ባዶ ላክ ውሂብ (ተንሳፋፊ cmMsec ፣ ረጅም መታወቂያ) {
ከሆነ (client.connect (አገልጋይ ፣ 80)) {
Serial.println ("Enviando dados para o ThingSpeak");
ሕብረቁምፊ ልጥፍ Str = apiKey;
postStr += "& መስክ";
postStr += id;
postStr += "=";
postStr += ሕብረቁምፊ (cmMsec);
postStr += "\ r / n / r / n";
Serial.println (postStr);
client.print ("POST /update HTTP /1.1 / n");
client.print ("አስተናጋጅ: api.thingspeak.com / n");
client.print ("ግንኙነት ፦ close / 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)።
ኦ መታወቂያ እና ሊክኢራራ ለታምፓም ፓራ ለይቶ ለፓራ ካምፖ ሴራ ፌይኦኦ ኦፕሎድ ያድርጉ።
ደረጃ 4 Recuperando Dados Do ThingSpeak
ኦ ThingSpeak permite efetuar leitura dos dados do seu canal, atraves de um serviço retornando um JSON. እንደ ልዩነቱ ለፓራቱራቱ ምግብ እንደሚሰጥ የባህር ሰርጥ ኢስትኦ 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
ዳዴ ካምፖ ኢስታ ዲክሪቶ ምንም አገናኝ መረጃ አዋቂ የለም። ኦስ mais importantes para o projeto são:
- CHANNEL_ID ፦ número do seu ቦይ
- FIELD_NUMBER: o numero do campo
- ኤፒአይ_ኬይ - አንድ chave de API do seu ቦይ
Esta é a URL que será lida do aplicativa Android, para recuperar os dados do ThingSpeak.
ደረጃ 5: Criando a Aplicação Android
ምንም የ Android ስቱዲዮ የለም ፣ አንድም Android ን በ projeto አይመለከትም። ለፓራኮ ኮንትራክተሩ ዳፕሊኬሽን ዳ አፕሊኬሽን ፣ እንደአስፈላጊነቱ AndroidManifest ን እንደአቅጣጫው ያዋቅራል።
የጉግል ካርታዎች ፣ ጉግል ካርታ። Siga os passos descritos ምንም አገናኝ Obter chave de API.
Uma vez com a chave, você deve também configurá-la na aplicação.
ለ Google ካርታዎች-ተኮር ኤፒአይዎች የኤፒአይ ቁልፍ እንደ ሕብረቁምፊ ሀብት ይገለጻል።
(ፋይሉን "res/values/google_maps_api.xml" ይመልከቱ)።
የኤፒአይ ቁልፍ ኤፒኬውን ለመፈረም ጥቅም ላይ ከሚውለው የኢንክሪፕሽን ቁልፍ ጋር የተገናኘ መሆኑን ልብ ይበሉ። ኤፒኬውን ለማተም የሚያገለግል የመልቀቂያ ቁልፍን ጨምሮ ለእያንዳንዱ የኢንክሪፕሽን ቁልፍ የተለየ የኤፒአይ ቁልፍ ያስፈልግዎታል። በ src/debug/እና src/release/ውስጥ ለማረም እና ለመልቀቅ ዒላማዎች ቁልፎችን መግለፅ ይችላሉ።
<ሜታ-ውሂብ
android: ስም = "com.google.android.geo. API_KEY"
android: እሴት = "@string /google_maps_key" />
የ AndroidManifest anexado ao projeto ን ያጠናቅቃል።
n
ደረጃ 6: Recuperando O Feed No Android
በ Android ፣ MainActivity ፣ crie 4 variáveis para identificar of cada um dos canais ማድረግ ThingSpeak a serem lidos:
የግል ሕብረቁምፊ 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";
ፓራ ኢትቱዋር አንድ ሌቱራ ዶስ ዳዶስ ፣ አይሪሞስ ለ 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 as urls, vamos usar criar uma umasese 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 (String url ፣ String method ፣ Map params) {
ሞክር {
Uri. Builder ግንበኛ = አዲስ Uri. Builder (); ዩአርኤል urlObj; ሕብረቁምፊ encodedParams = ""; ከሆነ (ግቤቶች! }} ከሆነ (builder.build (). getEncodedQuery ()! = null) {encodedParams = builder.build (). getEncodedQuery ();
}
ከሆነ ("GET".equals (ዘዴ)) {url = url + "?" + encodedParams; urlObj = አዲስ ዩአርኤል (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (ዘዴ);
} ሌላ {
urlObj = አዲስ ዩአርኤል (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (ዘዴ); urlConnection.setRequestProperty ("የይዘት ዓይነት" ፣ "ትግበራ/x-www-form-urlencoded"); urlConnection.setRequestProperty ("የይዘት-ርዝመት" ፣ String.valueOf (encodedParams.getBytes (). ርዝመት)); urlConnection.getOutputStream ()። ይፃፉ (encodedParams.getBytes ()); } // ከአገልጋዩ ጋር ይገናኙ urlConnection.connect (); // መልሱን ያንብቡ = urlConnection.getInputStream (); BufferedReader አንባቢ = አዲስ BufferedReader (አዲስ InputStreamReader (ነው)); StringBuilder sb = አዲስ StringBuilder (); ሕብረቁምፊ መስመር;
// ምላሹን ይለዩ
ሳለ ((መስመር = አንባቢ.readLine ())! = ባዶ) {sb.append (መስመር + "\ n"); } ዝግ ነው (); json = sb.toString (); // ምላሹን ወደ JSON Object jObj = new JSONObject (json) ይለውጡ ፤
} መያዝ (የማይደገፍ ኢኮዲንግ ኢክሳይሽን ሠ) {
e.printStackTrace (); } መያዝ (ProtocolException e) {e.printStackTrace (); } መያዝ (IOException e) {e.printStackTrace (); } መያዝ (JSONException e) {Log.e ("JSON Parser" ፣ "Data analysis of error" + e.toString ()); } መያዝ (ልዩ ሠ) {Log.e (“ልዩ” ፣ “መረጃን መተንተን ስህተት” + e.toString ()); }
// JSON ን ይመልሱ
ተመለስ jObj;
}
}
ደ ቮልታ እና አቲቪዴድ ርዕሰ መምህር ፣ ቫሞስ ኤፌቱር አንድ ቻማዳ urs de forma assíncrona ፣ escrevendo este código dentro do método doInBackground.
@Override የተጠበቀ String doInBackground (String… params) {HttpJsonParser jsonParser = new HttpJsonParser ();
responseLixeiraA = jsonParser.makeHttpRequest (url_a ፣ “GET” ፣ ባዶ)
responseLixeiraB = jsonParser.makeHttpRequest (url_b ፣ “GET” ፣ ባዶ) responseLixeiraC = jsonParser.makeHttpRequest (url_c ፣ “GET” ፣ ባዶ); responseLixeiraD = jsonParser.makeHttpRequest (url_d ፣ “GET” ፣ ባዶ)
ተመለስ ባዶ;}
በ ‹Backgroundé encerrado ›፣ ወይም በ ‹PostExecute› ላይ የ Android passa para o método ን ለማዘመን። Neste método, vamos criar os objetos Lixeira, e popular com os dados recuperados do ThingSpeak:
የተጠበቀ ባዶነት በ ‹PostExecute ›(የገመድ ውጤት) {pDialog.dismiss (); runOnUiThread (አዲስ Runnable () {public void run () {
// ListView listView = (ListView) findViewById (R.id.feedList);
MainView = (ይመልከቱ) findViewById (R.id.activity_main) ን ይመልከቱ ፤ ከሆነ (ስኬት == 1) {ይሞክሩ {// 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 ('ለ');
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 ('D');
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);
// የሬኩፔራ ክፍሎች
TextView createDate = (TextView) mainView.findViewById (R.id.date); ListView listaDeLixeiras = (ListView) findViewById (R.id.lista); አስማሚ.addAll (feedList);
// የውሂብ ትክክለኛ
ቀን currentTime = Calendar.getInstance (). GetTime (); SimpleDateFormat simpleDate = አዲስ SimpleDateFormat ("dd/MM/yyyy"); ሕብረቁምፊ currentDate = simpleDate.format (currentTime); createDate.setText (KEY_DATE + currentDate + ""); listaDeLixeiras.setAdapter (አስማሚ);
} ይያዙ (JSONException e) {
e.printStackTrace (); }
} ሌላ {
Toast.makeText (MainActivity.this ፣ “ውሂብ በመጫን ጊዜ አንዳንድ ስህተት ተከስቷል” ፣ ቶስት. LENGTH_LONG)። አሳይ ();
}
} }); }
አጎራ ፣ እና በቴላ ተደራጅተው aplicativo ፣ serão listados os dados de cada lixeira።
ደረጃ 7: Mostrando No Mapa
አይንዳ እና የአቲቪዲዴ ርዕሰ መምህር ፣ ቫሞስ አድሲዮናር uma ação a ser relacionada ao botão Mapa ፣ እና tela inicial።
/ ** ተጠቃሚው የማፓ አዝራሩን መታ ሲያደርግ ተጠርቷል*/ የህዝብ ባዶ ክፍት ካርታዎች (እይታ ይመልከቱ) {Intent intention = new Intent (ይህ ፣ LixeiraMapsActivity.class) ፤
// ፓስሳ አንድ ሊስታ ዴ ሊክስራስ
የጥቅል ጥቅል = አዲስ ቅርቅብ (); bundle.putParcelableArrayList ("lixeiras", feedList); intention.putExtras (ጥቅል);
ጅምር እንቅስቃሴ (ዓላማ);
}
ማፓ የለም ፣ አንድ ሰው አስፈፃሚውን ያካሂዳል-
- marcar a posição atual do caminha de lixo
- ማርካር ኦስ ፖንቶስ ዘጋቢዎች አንድ cada lixeira no mapa
- traçar a rota entre os pontos
Para executar os passos acima, vamos ኤፒአይ የጉግል አቅጣጫዎችን ይጠቀማል። ለምሳሌ ፣ እንደ ሮታስ ፣ ለሴጉዶስ ኦስ ፓሶስ አጋዥ ስልጠናን በ Google ካርታ Android ኤፒአይ V2 ውስጥ የ Google አቅጣጫዎችን በመጠቀም በሁለት አካባቢዎች መካከል የመንዳት መንገድ አቅጣጫዎችን መሳል
ፕሪሚሮ ፣ ቫሞስ ቄሪያል አካዳዲዳስ ለፓዳ ኡም ፖንቶስ que desejamos ማርካር
// ቦታዎች
የግል LatLng የአሁኑ;
የግል LatLng lixeiraA; የግል LatLng lixeiraB; የግል LatLng lixeiraC; የግል LatLng lixeiraD;.
ፓራ adicionar a posição atual no mapa, foi criado o método:
የግል ባዶ ቼክLocationandAddToMap () {// ተጠቃሚው ፈቃዱን (ActivityCompat.checkSelfPermission (ይህ ፣ android. Manifest.permission. ACCESS_FINE_LOCATION)) ከሆነ! = PackageManager. ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// የአካባቢውን ፈቃድ መጠየቅ ActivityCompat.requestPermissions (ይህ ፣ አዲስ ሕብረቁምፊ {android. Manifest.permission. ACCESS_FINE_LOCATION} ፣ LOCATION_REQUEST_CODE) ፤ መመለስ; }
// ፉስን በመጠቀም የመጨረሻውን የታወቀ ቦታ ማምጣት
የአካባቢ ሥፍራ = LocationServices. FusedLocationApi.getLastLocation (googleApiClient);
// MarkerOptions አዲስ ጠቋሚ ለመፍጠር ጥቅም ላይ ይውላሉ። በ MarkerOptions አካባቢን ፣ ርዕስን ወዘተ መግለፅ ይችላሉ።
this.current = new LatLng (location.getLatitude (), location.getLongitude ()); MarkerOptions markerOptions = new MarkerOptions (). አቀማመጥ (የአሁኑ).title ("Posição atual");
// የተፈጠረውን ምልክት በካርታው ላይ በማከል ፣ ካሜራውን ወደ ቦታው በማንቀሳቀስ
markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_GREEN)); System.out.println ("++++++++++++++ Passei aqui! +++++++++++++"); mMap.addMarker (markerOptions);
// በ 15 ማጉላት ካሜራውን ወዲያውኑ ወደ ቦታው ያንቀሳቅሱት።
mMap.moveCamera (CameraUpdateFactory.newLatLngZoom (የአሁኑ ፣ 15));
// አጉላ ፣ ካሜራውን እያነቃቃ።
mMap.animateCamera (CameraUpdateFactory.zoomTo (14) ፣ 2000 ፣ ባዶ);
}
ኢም ሰጉይዳ ፣ ፓራ ካዳ ሊክሴራ ፣ ፎረም ክሪዶስ ሜቶዶስ ሲሚላሬስ አአ አባይxo ፦
የግል ባዶነት addBinALocation () {// ተጠቃሚው ፈቃዱን ከሰጠ (ActivityCompat.checkSelfPermission (ይህ ፣ android. Manifest.permission. ACCESS_FINE_LOCATION)! = PackageManager. PERMISSION_GRANTED && ActivityCompat.checkSelfPermission (ይህ ፣ android. ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// የአካባቢውን ፈቃድ መጠየቅ ActivityCompat.requestPermissions (ይህ ፣ አዲስ ሕብረቁምፊ {android. Manifest.permission. ACCESS_FINE_LOCATION} ፣ LOCATION_REQUEST_CODE) ፤ መመለስ; }
// Praça da Estação
ድርብ ኬክሮስ = -19.9159578; ድርብ ኬንትሮስ = -43.9387856; this.lixeiraA = አዲስ LatLng (ኬክሮስ ፣ ኬንትሮስ);
MarkerOptions markerOptions = new MarkerOptions (). አቀማመጥ (lixeiraA).title ("Lixeira A");
markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_RED)); mMap.addMarker (markerOptions); }
እንደ ኬክሮስ (ኬክሮስ) እና ኬንትሮስ / ዴአድ / lixeira foram recuperadas através do próprio Google Maps, e deixadas fixas no código. ለነገሩ ፣ ፋሲሊየም ሳልቫስ ኢም ባንኮ ዴ ዳዶስ (ለምሳሌ Firebase)። Será a primeira evolução deste projeto!
ኦ último passo agora é traçar as rotas entre os pontos. ፓራ 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 አመጣጥ ፣ የ LatLng ጥፋት ፣ የመንገድ ነጥቦችን ዝርዝር) {
// የመንገድ አመጣጥ
ሕብረቁምፊ str_origin = "origin ="+origin.latitude+","+origin.longitude;
// የመንገድ መድረሻ
ሕብረቁምፊ str_dest = "መድረሻ ="+dest.latitude+","+dest.longitude;
// በመንገድ ላይ የመንገድ ነጥቦች
// የመንገድ ነጥቦች = አሻሽል -እውነት -እውነት -19.9227365 ፣ -43.9473546 | -19.9168006 ፣ -43.9361124 ሕብረቁምፊ የመንገድ ነጥቦች = "የመንገድ ነጥቦች = ማመቻቸት ፦ እውነት" ፤ ለ (LatLng point: waypointsList) {waypoints += "|" + point.latitude + "," + point.longitude; }
// ዳሳሽ ነቅቷል
ሕብረቁምፊ ዳሳሽ = "ዳሳሽ = ሐሰት";
// ለድር አገልግሎት ግቤቶችን መገንባት
የገመድ መለኪያዎች = str_origin+"&"+str_dest+"&"+sensor+"&"+waypoints;
// የውጤት ቅርጸት
ሕብረቁምፊ ውፅዓት = "json";
// ለድር አገልግሎት ዩአርኤልን መገንባት
ሕብረቁምፊ url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; System.out.println ("+++++++++++++++"+url);
ዩአርኤል መመለስ;
}
ኢ ፣ ፖርፊም ፣ ጁንታንዶ ቱዶ ኖ ሜቶዶ ርዕሰ መምህር ዳ ክላሴ ፣ onMapReady
@MapReady (GoogleMap googleMap) ላይ የህዝብ ባዶነት {mMap = googleMap;
checkLocationandAddToMap ();
ከሆነ (lixeirasList.get (0).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE
|| lixeirasList.get (0).getPesoLixo ()-10> Lixeira. MIN_SIZE_GARBAGE) {addBinALocation (); } ከሆነ (lixeirasList.get (1).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE || lixeirasList.get (1).getPesoLixo ()> Lixeira. MIN_SIZE_GARBAGE) {addBinBLocation (); } ከሆነ (lixeirasList.get (2).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE || lixeirasList.get (2).getPesoLixo ()> Lixeira. MIN_SIZE_GARBAGE) {addBinCLocation (); } ከሆነ (lixeirasList.get (3).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE || lixeirasList.get (3).getPesoLixo ()> Lixeira. MIN_SIZE_GARBAGE) {addBinDLocation (); }
// መስመሮችን ይሳሉ
// ዩአርኤልን ወደ ጉግል አቅጣጫዎች ኤፒአይ ማግኘት
ነጥቦችን ይዘርዝሩ = አዲስ ArrayList (); ነጥቦች.add (lixeiraB); ነጥቦች.add (lixeiraC); ነጥቦች.add (lixeiraD);
ሕብረቁምፊ url = getDirectionsUrl (የአሁኑ ፣ lixeiraA ፣ ነጥቦች);
DownloadTask downloadTask = new DownloadTask (); // የጄሰን መረጃን ከ Google አቅጣጫዎች ኤፒአይ ማውረድ ይጀምሩ ።Task.execute (url); }
አ Aqu ፓሳሞስ አፔናስ ፔሎስ tosንቶስ ርእሰ መምህራን። O código completo do projeto será disponibilizado para consulta.
ደረጃ 8: Conclusão
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. እንደዚሁም ፣ እንደዚሁም በቪዲዮው ውስጥ የተካተቱትን ነገሮች ሁሉ አያካትትም።
የሚመከር:
በ Flick ውስጥ የጨዋታ ንድፍ በ 5 ደረጃዎች 5 ደረጃዎች
በ 5 ደረጃዎች ውስጥ በ Flick ውስጥ የጨዋታ ንድፍ -ፍሊክስ ጨዋታን በተለይም በእውነቱ እንደ እንቆቅልሽ ፣ የእይታ ልብ ወለድ ወይም የጀብድ ጨዋታ የመሰለ ቀላል መንገድ ነው።
የአርዱዲኖ መኪና የተገላቢጦሽ የመኪና ማቆሚያ ማስጠንቀቂያ ስርዓት - ደረጃዎች በደረጃ: 4 ደረጃዎች
የአርዱዲኖ መኪና የተገላቢጦሽ የመኪና ማቆሚያ ማንቂያ ስርዓት | ደረጃዎች በደረጃ-በዚህ ፕሮጀክት ውስጥ አርዱዲኖ UNO እና HC-SR04 Ultrasonic Sensor ን በመጠቀም ቀላል የአርዱዲኖ መኪና የተገላቢጦሽ የመኪና ማቆሚያ ዳሳሽ ወረዳ እቀዳለሁ። ይህ በአርዱዲኖ ላይ የተመሠረተ የመኪና ተገላቢጦሽ የማስጠንቀቂያ ስርዓት ለራስ ገዝ አሰሳ ፣ ሮቦት ሬንጅንግ እና ለሌላ ክልል አር
በ Raspberry Pi 4B ላይ የፊት ለይቶ ማወቅ በ 3 ደረጃዎች 3 ደረጃዎች
በ Raspberry Pi 4B ላይ የፊት ለይቶ ማወቅ በ 3 እርከኖች-በዚህ መመሪያ ውስጥ የሹንያፊትን ቤተመፃሕፍት በመጠቀም ከ Rasyaberry O/S ጋር Raspberry Pi 4 ላይ የፊት ለይቶ ማወቅን እናከናውናለን። ሹነፊታ የፊት መታወቂያ/ማወቂያ ቤተ -መጽሐፍት ነው። ፕሮጀክቱ ፈጣን የመለየት እና የማወቅ ፍጥነትን ለማሳካት ያለመ ነው
በ GameGo ላይ በ ‹GoGo› ላይ ማለቂያ ከሌላቸው ደረጃዎች ጋር የመሣሪያ ስርዓት - 5 ደረጃዎች (ከስዕሎች ጋር)
በ GameGo ላይ በ MakeGo Arcade የመጫወቻ ማዕከል ላይ ገደብ የለሽ ደረጃዎች ያለው የመሣሪያ ስርዓት - GameGo በ TinkerGen STEM ትምህርት የተገነባ የ Microsoft Makecode ተኳሃኝ የሆነ የሬትሮ ጨዋታ ተንቀሳቃሽ ኮንሶል ነው። እሱ በ STM32F401RET6 ARM Cortex M4 ቺፕ ላይ የተመሠረተ እና ለ STEM አስተማሪዎች ወይም የሬትሮ ቪዲዮ ጨዋታን መፍጠር መዝናናትን ለሚወዱ ሰዎች ብቻ የተሰራ ነው
SmartBin: 4 ደረጃዎች
ስማርትቢን - የዚህ ፕሮጀክት ዋና ዓላማ ቢያንስ አንድ Raspberry Pi የሚጠቀም የኤሌክትሮኒክ መሣሪያ መፍጠር ነው። ቡድኑ በ 5 የወደፊት ሜካኒካዊ መሐንዲሶች እና በአንድ አውቶሜሽን መሐንዲስ የተሠራ ነው። የእኛ ፕሮጀክት የሚከፈት እና የሚዘጋ የቆሻሻ መጣያ መሥራት ነው