Სარჩევი:
- ნაბიჯი 1: Conectando O სენსორი
- ნაბიჯი 2: მონტანდო და ლიქსერა
- ნაბიჯი 3: ატვირთეთ დამატებით
- ნაბიჯი 4: Recuperando Dados Do ThingSpeak
- ნაბიჯი 5: დააინსტალირეთ Android პროგრამა
- ნაბიჯი 6: Recuperando O Feed No Android
- ნაბიჯი 7: Mostrando No Mapa
- ნაბიჯი 8: დასკვნა
ვიდეო: SmartBin: 8 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-31 10:21
ჩვენ გვთავაზობენ ჩვენს სისტემაში ინტელექტუალური სისტემების მუშაობას, არ ვიცი, რაში მდგომარეობს ის, რომ ჩვენ გვთავაზობენ ჩვენს ლიცენზიებს, იდენტიფიცირებენ რა რაოდენობრივ დეფექტებს, ჩვენ ვიღებთ ინფორმაციას, თუ როგორ უნდა გამოვიყენოთ ინფორმაცია.
Para montar este projeto, აუცილებელია საჭირო:
- NodeMCU
- სენსორი Ultrassônico de Distancia
- Caixa de papelão
- პროტობორდი
- კაბოსი
- განკარგვა Android
ნაბიჯი 1: Conectando O სენსორი
პირველ რიგში, თქვენ შეძლებთ შეაერთოთ სენსორი ულტრაბგერითი და NODEMCU. უფრო მეტიც, vamos conectar როგორც portas trigger echo do sensor n portas D4 e D3 do NodeMCU:
// განსაზღვრავს ქინძისთავების რიცხვებს #განსაზღვრეთ pino_trigger 2 // D4
#განსაზღვრეთ pino_echo 0 // D3
იმისათვის, რომ გაარკვიოთ, რომ მიიღოთ სენსორი, გაეცანით ან გაეცანით სასწავლო პროგრამას FilipeFlop, disponível aqui.
float cmMsec, inMsec;
ხანგრძლივი microsec = ულტრაბგერითი. დრო ();
cmMsec = ულტრაბგერითი. კონვერტირება (მიკროსკოპი, ულტრაბგერითი:: CM);
inMsec = ულტრაბგერითი. კონვერტირება (მიკროსკოპი, ულტრაბგერითი:: IN);
// Exibe informacoes არ აქვს სერიული მონიტორი
Serial.print ("დისტანცია em სმ:");
Serial.print (cmMsec);
Serial.print (" - Distancia em polegadas:");
Serial.println (inMsec);
სიმებიანი მონაცემები = სიმებიანი (cmMsec);
Serial.println (მონაცემები);
ნაბიჯი 2: მონტანდო და ლიქსერა
Agora, vamos montar a lixeira inteligente. Precisaremos conectar o sensor ultrassônico no “teto” da lixeira. მაგალითად, გამოიყენეთ cabo e fita isolante. Em seguida, temos que medir a distância inicial, para saber o valor para a lixeira vazia. არა მე, 26, 3 სმ. Esse é o valor que konsiderrarmos para uma lixeira vazia.
სიმულაციისთვის, ჩვენ შეგვიძლია გავარკვიოთ რა არის სენსორი ულტრაბგერითი, რომლითაც ჩვენ ვცდილობთ გავზარდოთ შემთხვევითი დაშორება 4 განსხვავებულ დიაპაზონში.
// სიმულანდო 4 ლიქსერა
ხანგრძლივი lixeiraID;
ბათილი მარყუჟი () {
lixeiraID = შემთხვევითი (1, 5);
}
ნაბიჯი 3: ატვირთეთ დამატებით
Agora, precisamos enviar estes dados para a nuvem. Eu escolhi o ThingSpeak, por familidade com o mesmo. Primeiramente, iécrio criar um novo canal, recebendo 4 parâmetros, referentes ao volume de cada lixeira.
თქვენ შეგიძლიათ გამოიყენოთ ThingSpeak, რომელიც აუცილებელია API– ს არხების კრიმინალის შესანახად. Siga os passos descritos არ არის ოფიციალური საიტი.
ვრცელდება პროგრამის გამოყენებით, იყენებს ბიბლიოთეკას ESP8266WiFi.h, რათა შეინარჩუნოს ის ThingSpeak, e transferir os dados.
Primeiramente, uma função para efetuar conexão com a rede (განსაზღვრეთ previamente duas variáveis, ssid e pass , contendo o identificador e a senha de sua rede).
void connectWifi () {
Serial.print ("დაკავშირება"+ *ssid);
WiFi. დასაწყისი (ssid, pass);
ხოლო (WiFi.status ()! = WL_CONNECTED) {
დაგვიანება (500);
Serial.print (".");
}
Serial.println ("");
Serial.print ("Conectado na rede");
Serial.println (ssid);
Serial.print ("IP:");
Serial.println (WiFi.localIP ());
}
გამყარებაში ან კონფიგურაციაში, თქვენ შეგიძლიათ სწრაფად შეცვალოთ იგი.
void setup () {
სერიული.დაწყება (9600);
Serial.println ("Lendo dados do sensor …");
// Conectando ao Wi-Fi
connectWifi ();
}
E, para enviar os dados para o ThingSpeak, გაააქტიურეთ და შეაერთეთ HTTP პროგრამით, გაიარეთ API და os parimetro.
void sendDataTS (float cmMsec, long id) {
if (client.connect (სერვერი, 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 ("POST /განახლება 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 შეესაბამება à 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 to valor lido.
ნაბიჯი 4: Recuperando Dados Do ThingSpeak
O ThingSpeak permite efetuar leitura dos dados do seu canal, através de um serviço retornando um JSON. As 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 URL– ს პარაგრაფისათვის, ეს არის:
api.thingspeak.com/channels/CHANNEL_ID/fields/FIELD_NUMBER/last.json?api_key=API_KEY&status=true
Cada campo está descrito არ არის წინასწარი ინფორმაციის ბმული. Os mais importantes for o projeto são:
- CHANNEL_ID: número do seu არხი
- FIELD_NUMBER: ახლავე კამპოს
- API_KEY: chave de API do seu არხი
ეს არის URL, რომლის საშუალებითაც შეგიძლიათ გამოიყენოთ Android, თქვენი კომპიუტერის აღდგენის მიზნით ThingSpeak.
ნაბიჯი 5: დააინსტალირეთ Android პროგრამა
არ არის Android Studio, არ არის ახალი Android. იმისათვის, რომ გამოვიყენოთ ფუნქცია, საჭიროა კონფიგურაცია, როგორც ნებადართულია AndroidManifest– ის გარეშე.
Google Maps– ის გამოყენებით, თქვენ უნდა შეცვალოთ იგი Google– ში. Siga os passos descritos არ არის დაკავშირებული Obter chave de API.
Uma vez com a chave, você deve também configurá-la na aplicação.
Google Maps– ზე დაფუძნებული API– ების API გასაღები განისაზღვრება, როგორც სიმებიანი რესურსი.
(იხილეთ ფაილი "res/values/google_maps_api.xml").
გაითვალისწინეთ, რომ API გასაღები უკავშირდება დაშიფვრის ღილაკს, რომელიც გამოიყენება APK– ის ხელმოსაწერად. თქვენ გჭირდებათ განსხვავებული API გასაღები თითოეული დაშიფვრის გასაღებისთვის, მათ შორის გამოშვების გასაღები, რომელიც გამოიყენება APK გამოსაქვეყნებლად. თქვენ შეგიძლიათ განსაზღვროთ გამართვისა და გათავისუფლების სამიზნეები src/debug/და src/release/.
<მეტა მონაცემები
android: name = "com.google.android.geo. API_KEY"
android: value = "@string /google_maps_key" />
სრული კონფიგურაცია არის Android– ის მანიფესტის სრული ვერსია, რომელიც შექმნილია პროგრამის დასრულებისთვის.
n
ნაბიჯი 6: Recuperando O Feed No Android
ძირითადი პრინციპები არ არის Android, MainActivity, crie 4 vari paraveis for identificar cada um dos canais do ThingSpeak 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 ოპერაციული სისტემა, chamada JSONObject. უფრო მეტიც, თქვენ უნდა მიუთითოთ URL მისამართი:
JSON ობიექტის პასუხიLixeiraA; JSON ობიექტის პასუხიLixeiraB; JSON ობიექტის პასუხიLixeiraC; JSON ობიექტის პასუხიLixeiraD;
გთხოვთ, შეაფასოთ როგორც urls, ასევე გამოიყენოთ criar uma classe auxiliar, chamada HttpJsonParser. ეს ნიშნავს, რომ თქვენ შეგიძლიათ შეაფასოთ თქვენი მისამართი URL– სთან ერთად, გაააქტიურეთ ის, რაც შეიცავს JSON montado– ს და შემდგომში.
საჯარო JSONObject makeHttpRequest (სიმებიანი url, სიმებიანი მეთოდი, რუქის ჩარჩოები) {
სცადე {
Uri. Builder მშენებელი = ახალი Uri. Builder (); URL urlObj; სიმებიანი კოდირებული პარამი = ""; if (params! = null) {for (Map. Entry entry: params.entrySet ()) {builder.appendQueryParameter (entry.getKey (), entry.getValue ()); }} if (builder.build (). getEncodedQuery ()! = null) {encodedParams = builder.build (). getEncodedQuery ();
}
if ("GET". ტოლია (მეთოდი)) {url = url + "?" + კოდირებული პარამები; urlObj = ახალი URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (მეთოდი);
} სხვა {
urlObj = ახალი URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (მეთოდი); urlConnection.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded"); urlConnection.setRequestProperty ("Content-Length", String.valueOf (encodedParams.getBytes (). სიგრძე)); urlConnection.getOutputStream (). ჩაწერეთ (encodedParams.getBytes ()); } // სერვერთან დაკავშირება urlConnection.connect (); // წაიკითხეთ პასუხი არის = urlConnection.getInputStream (); BufferedReader მკითხველი = ახალი BufferedReader (ახალი InputStreamReader (არის)); StringBuilder sb = ახალი StringBuilder (); სიმებიანი ხაზი;
// გაანალიზეთ პასუხი
while ((line = reader.readLine ())! = null) {sb.append (ხაზი + "\ n"); } ახლოს არის(); json = sb.toString (); // პასუხის გარდაქმნა JSON ობიექტზე jObj = ახალი JSONObject (json);
} დაჭერა (UnsupportedEncodingException e) {
e.printStackTrace (); } catch (ProtocolException e) {e.printStackTrace (); } catch (IOException e) {e.printStackTrace (); } catch (JSONException e) {Log.e ("JSON Parser", "Error parsing data" + e.toString ()); } catch (გამონაკლისი e) {Log.e ("გამონაკლისი", "მონაცემთა გაცნობის შეცდომა" + e.toString ()); }
// JSON ობიექტის დაბრუნება
დაბრუნება jObj;
}
}
როგორც წესი, თქვენ უნდა შეაფასოთ chamada– ს url– ის ფორმა, რომელიც დაფუძნებულია თქვენს ანგარიშზე, ეს არის ის, რაც გვთავაზობს dentro do metodo doInBackground– ს.
@Override დაცული სიმებიანი 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);
დაბრუნება null;}
Quanto o método doInBackgroundé encerrado, ან კონტროლის შემსრულებელი Android passa para or metodo onPostExecute. Neste método, vamos criar os objetos Lixeira, e popular 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 (respondLixeiraA.getString (KEY_FIELD1)))); feedDetails1.setVolumeLixo (Double.parseDouble (respondLixeiraA.getString (KEY_FIELD1))));
feedDetails2.setId ('B');
feedDetails2.setPesoLixo (Double.parseDouble (respondLixeiraB.getString (KEY_FIELD2)))); feedDetails2.setVolumeLixo (Double.parseDouble (respondLixeiraB.getString (KEY_FIELD2))));
feedDetails3.setId ('C');
feedDetails3.setPesoLixo (Double.parseDouble (respondLixeiraC.getString (KEY_FIELD3)))); feedDetails3.setVolumeLixo (Double.parseDouble (respondLixeiraC.getString (KEY_FIELD3))));
feedDetails4.setId ('D');
feedDetails4.setPesoLixo (Double.parseDouble (respondLixeiraD.getString (KEY_FIELD4)))); feedDetails4.setVolumeLixo (Double.parseDouble (respondLixeiraD.getString (KEY_FIELD4))));
feedList.add (feedDetails1);
feedList.add (feedDetails2); feedList.add (feedDetails3); feedList.add (feedDetails4);
// კალკულაცია dados das lixeiras
SmartBinService კალკულატორი = ახალი SmartBinService (); calculator.montaListaLixeiras (feedList);
// რეკუპერა კომპონენტები
TextView createDate = (TextView) mainView.findViewById (R.id.date); ListView listaDeLixeiras = (ListView) findViewById (R.id.lista); adapter.addAll (feedList);
// მონაცემები ატუალ
თარიღი currentTime = Calendar.getInstance (). GetTime (); SimpleDateFormat simpleDate = ახალი SimpleDateFormat ("დდ/მმ/წწ"); სიმებიანი currentDate = simpleDate.format (currentTime); createDate.setText (KEY_DATE + currentDate + ""); listaDeLixeiras.setAdapter (ადაპტერი);
} დაჭერა (JSONException e) {
e.printStackTrace (); }
} სხვა {
Toast.makeText (MainActivity.this, "მონაცემების ჩატვირთვისას მოხდა გარკვეული შეცდომა", სადღეგრძელო. LENGTH_LONG). ჩვენება ();
}
} }); }
Agora, na tela inicial do aplicativo, ser listo listados os dados de cada lixeira.
ნაბიჯი 7: Mostrando No Mapa
Ainda na atividade principal, vamos adicionar uma ação a ser relacionada ao botão Mapa, na tela inicial.
/ ** იძახება, როდესაც მომხმარებელი დააკაკუნებს Mapa ღილაკს*/ public void openMaps (View view) {Intent purpose = new Intent (this, LixeiraMapsActivity.class);
// Passa a lista de lixeiras
Bundle bundle = ახალი Bundle (); bundle.putParcelableArrayList ("lixeiras", feedList); განზრახვა. inputExtras (პაკეტი);
startActivity (განზრახვა);
}
არა რუქა, თემები იხსნება შემსრულებელი:
- marcar a posição atual do caminha de lixo
- marcar os pontos korrespondentes cada lixeira no mapa
- traçar a rota entre os pontos
შეასრულეთ os passos acima, vamos გამოიყენეთ API Google Directions. იმისათვის, რომ გაიგოთ, გაეცანით გზებს, გაეცანით საგზაო მარშრუტის მიმართულებებს ორ ლოკაციას შორის, Google მიმართულებების გამოყენებით Google Map Android API V2
Primeiro, vamos criar localidades para cada um dos pontos que desejamos marcar:
// ადგილები
პირადი LatLng მიმდინარე;
პირადი LatLng lixeiraA; პირადი LatLng lixeiraB; პირადი LatLng lixeiraC; პირადი LatLng lixeiraD;.
მოგეხსენებათ, რომ არ არის შესაფერისი რუქა, კრიტიკა ან მეთოდები:
private void checkLocationandAddToMap () {// შემოწმება, აქვს თუ არა მომხმარებელს ნებართვა, თუ (ActivityCompat.checkSelfPermission (this, android. Manifest.permission. ACCESS_FINE_LOCATION)! = PackageManager. PERMISSION_GRANTED && ActivityCompat.checkSelfSpace ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// ადგილმდებარეობის ნებართვის მოთხოვნა ActivityCompat.request ნებართვები (ეს, ახალი სტრიქონი {android. Manifest.permission. ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); დაბრუნების; }
// ბოლო ცნობილი ადგილის მოპოვება Fus– ის გამოყენებით
საიდან მდებარეობა = LocationServices. FusedLocationApi.getLastLocation (googleApiClient);
// MarkerOptions გამოიყენება ახალი მარკერის შესაქმნელად. თქვენ შეგიძლიათ მიუთითოთ ადგილმდებარეობა, სათაური და ა.შ MarkerOptions
this.current = ახალი LatLng (location.getLatitude (), location.getLongitude ()); MarkerOptions markerOptions = new MarkerOptions (). Position (current).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, null);
}
Em seguida, para cada lixeira, foram criados métodos similares ao abaixo:
private void addBinALocation () {// შემოწმება, აქვს თუ არა მომხმარებელს ნებართვა if (ActivityCompat.checkSelfPermission (this, android. Manifest.permission. ACCESS_FINE_LOCATION)! = PackageManager. PERMISSION_GRANTED && Activity ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// საიტის ნებართვის მოთხოვნა ActivityCompat.request ნებართვები (ეს, ახალი სტრიქონი {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 (). Position (lixeiraA).title ("Lixeira A");
markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_RED)); mMap.addMarker (markerOptions); }
გრძედის და გრძედის ადგილმდებარეობის დასადგენად, შეგიძლიათ გამოიყენოთ Google Maps- ის პროპორციული პარამეტრები და გამოიყენოთ არავითარი კოდირება. იდეალურია, ეს არის ღირებული ფასდაუდებელი ხსნარი ჩვენს ბანკში (მაგალითად, Firebase). Ser a Primeira evolução deste projeto!
O último passo agora é traçar as rotas entre os pontos. რა თქმა უნდა, um conceito muito importante, და que será utilisado neste projeto, s oso os Waypoints!
Foi criado um método para traçar a rota entre dois dados pontos:
პირადი სიმებიანი getDirectionsUrl (LatLng წარმოშობა, LatLng dest, სია waypointsList) {
// მარშრუტის წარმოშობა
სიმებიანი str_origin = "წარმოშობა ="+წარმოშობა. სიგანე+","+წარმოშობა. სიგრძე;
// მარშრუტის დანიშნულება
სიმებიანი str_dest = "დანიშნულება ="+dest.latitude+","+dest.longitude;
// მარშრუტის გასწვრივ საგუშაგოები
/ for (LatLng წერტილი: waypointsList) {waypoints += "|" + წერტილი. სიგანე + "," + წერტილი. სიგრძე; }
// სენსორი ჩართულია
სიმებიანი სენსორი = "სენსორი = ყალბი";
// ვებ სერვისის პარამეტრების შედგენა
სიმებიანი პარამეტრები = 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 principal da classe, onMapReady:
@Override public void onMapReady (GoogleMap googleMap) {mMap = googleMap;
checkLocationandAddToMap ();
if (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 (); }
// მარშრუტების დახაზვა
// Google მიმართულებების API- ს URL- ის მიღება
სია რაოდენობა = ახალი ArrayList (); რაოდენობა. დამატება (lixeiraB); რაოდენობა. დამატება (lixeiraC); რაოდენობა. დამატება (lixeiraD);
სიმებიანი url = getDirectionsUrl (მიმდინარე, lixeiraA, რაოდენობა);
DownloadTask downloadTask = ახალი DownloadTask (); // დაიწყეთ json მონაცემების გადმოტვირთვა Google Directions API downloadTask.execute (url); }
Aqui passamos apenas pelos pontos principais. თქვენ შეგიძლიათ შეასრულოთ თქვენი კონსულტაცია.
ნაბიჯი 8: დასკვნა
Este foi um projeto trabalhando conceitos de IoT, mostrando uma das várias opções de conectar dispositivos através da nuvem, efetuar tomada de decisões sem interferência humana direta. ანექსო, ჩვენ შეგვიძლია გავაანალიზოთ სრული ვერსია, გამოვიყენოთ ის, რაც შრიფტები გვხვდება Android– ის გარეშე.
გირჩევთ:
ნახევარი ნაბიჯი: 5 ნაბიჯი (სურათებით)
სემინარი: IntroduçãoNeste projeto, você construirá um an sistema de semáforos: არსებობს 3 LED ნათურები სხვადასხვა ბირთვით (verde, amarelo e vermelho) para imitar os semáforos dos carros; არსებობს 2 LED ნათურები სხვადასხვა ბირთვით (verde და vermelho) იმისთვის, რომ გააკეთოთ
Arduino Uno თევზის მიმწოდებელი 6 იაფი და მარტივი ნაბიჯი!: 6 ნაბიჯი
Arduino Uno თევზის მიმწოდებელი 6 იაფი და მარტივი ნაბიჯი! შინაური ცხოველების მქონე ადამიანებს, ალბათ, იგივე პრობლემა ჰქონდათ, როგორც მე: შვებულება და დავიწყება. მე მუდმივად მავიწყდებოდა ჩემი თევზის გამოკვება და ყოველთვის ვცდილობდი ასე გამეკეთებინა სანამ ის წავიდოდა
აკუსტიკური ლევიტაცია Arduino Uno– ით ეტაპობრივად (8 ნაბიჯი): 8 ნაბიჯი
აკუსტიკური ლევიტაცია Arduino Uno– სთან ერთად ეტაპობრივად (8 საფეხური): ულტრაბგერითი ხმის გადამცემები L298N Dc მდედრობითი ადაპტერი დენის წყაროს მამაკაცის dc pin Arduino UNOBreadboard და ანალოგური პორტები კოდის გადასაყვანად (C ++)
ნაბიჯი: 4 ნაბიჯი
聲納: 改作: https: //aboutsciences.com/blog/arduino-radar-using … 我 在 原本 聲納 的 ar ar ar ar ar: arduino uno, 感測器, 馬達, 喇叭: 掃描 到 物品 加速 並 傳 述 cm cm cm cm cm cm cm 10 სმ 時 喇叭 會
SmartBin: 4 ნაბიჯი
SmartBin: ამ პროექტის მთავარი მიზანია შექმნას ელექტრონული მოწყობილობა, რომელიც იყენებს მინიმუმ ერთ Raspberry Pi- ს. გუნდი შედგება 5 მომავალი მექანიკოსის და ერთი ავტომატიზაციის ინჟინრისგან. ჩვენი პროექტი შედგება ნაგვის ურნის დამზადებისგან, რომელიც იხსნება და იხურება