Obsah:
- Krok 1: Senzor Conectando O
- Krok 2: Montando a Lixeira
- Krok 3: Nahrajte časť Para a Nuvem
- Krok 4: Recuperando Dados Do ThingSpeak
- Krok 5: Criando a Aplicação Android
- Krok 6: Recuperando O Feed Žiadny Android
- Krok 7: Mostrando bez mapy
- Krok 8: Conclusão
Video: SmartBin: 8 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-31 10:24
Všetko, čo sa týka projektu, je inteligentný systém zberu, nie je k dispozícii žiadny rad príjemcov, identifikuje a kvantifikuje množstvo údajov, ktoré môžu byť k dispozícii, môžu obsahovať všetky základné informácie o zdrojoch rekuperácie.
Je dôležité zvážiť, čo treba urobiť:
- NodeMCU
- Ultrassônico de Distancia
- Caixa de papelão
- Protoboard
- Cabos
- Dostupný pre Android
Krok 1: Senzor Conectando O
Hlavné prvky, doplnkové a pripojené snímače ultrassônico a NODEMCU. Para tanto, conectar as portas trigger echo do sensor nas portas D4 e D3 do NodeMCU:
// definuje čísla pinov #define pino_trigger 2 // D4
#define pino_echo 0 // D3
Niektoré efekty môžu mať vplyv na snímač, napríklad sprievodca alebo podrobné návody na FilipeFlop, ktoré sú k dispozícii.
float cmMsec, inMsec;
dlhý mikrosek = ultrazvukový.časovanie ();
cmMsec = ultrasonic.convert (mikrosec, Ultrazvuk:: CM);
inMsec = ultrasonic.convert (microsec, Ultrasonic:: IN);
// Exibe informacoes no serial monitor
Serial.print ("Distancia em cm:");
Serial.print (cmMsec);
Serial.print (" - Distancia em polegadas:");
Serial.println (inMsec);
Reťazcové údaje = Reťazec (cmMsec);
Serial.println (údaje);
Krok 2: Montando a Lixeira
Agora, montáže a lixeira inteligentné. Pripojte snímač k ultrassônico bez „teto“da lixeira. Príkladom je použitie cabo e fita izolante. Em seguida, temos que medir a distância inicial, para saber o valor para a lixeira vazia. Žiadne meu caso, foi de 26, 3 cm. 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 randomicament and distancia lida em 4 lixeiras differententes.
// Simulando 4 lixeiras
dlhý lixeiraID;
prázdna slučka () {
lixeiraID = náhodný (1, 5);
}
Krok 3: Nahrajte časť Para a Nuvem
Agora, precisamos enviar estes dados para a nuvem. Eu escolhi o ThingSpeak, or familiaridade com o mesmo. Primeiramente, é needário criar um novo canal, recebendo 4 parâmetros, referentes ao volume de cada lixeira.
Niektoré konektory a aplikácie ThingSpeak, ako aj všetky možnosti API do kanála môžu byť použité. Siga os passos descritos žiadna oficiálna stránka.
Používajú sa rôzne aplikácie a sú dostupné v zozname biblioteca ESP8266WiFi.h pre efektívne prepojenie s programom ThingSpeak a prenos dát.
Hlavné funkcie, ako sú uvedené nižšie, (ako definovať predchádzajúce variáveis, ssid e pass , contendo o identificador e a senha de sua rede).
void connectWifi () {
Serial.print ("Pripojenie k"+ *ssid);
WiFi.begin (ssid, pass);
while (WiFi.status ()! = WL_CONNECTED) {
oneskorenie (500);
Serial.print (".");
}
Serial.println ("");
Serial.print ("Conectado na rede");
Serial.println (ssid);
Serial.print ("IP:");
Serial.println (WiFi.localIP ());
}
Vykonajte nastavenie, vykonajte nasledujúce kroky a pripojte sa.
neplatné nastavenie () {
Serial.begin (9600);
Serial.println („Lendo dados do sensor …“);
// Pripojenie k sieti 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 e os parâmetros.
neplatné sendDataTS (float cmMsec, dlhé ID) {
if (client.connect (server, 80)) {
Serial.println ("Enviando dados para o ThingSpeak");
Reťazec postStr = apiKey;
postStr += "& pole";
postStr += id;
postStr += "=";
postStr += reťazec (cmMsec);
postStr += "\ r / n / r / n";
Serial.println (postStr);
client.print ("POST /aktualizácia HTTP /1.1 / n");
client.print ("Hostiteľ: api.thingspeak.com / n");
client.print ("Pripojenie: zavrieť / n");
client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n");
client.print ("Content-Type: application/x-www-form-urlencoded / n");
client.print („Dĺžka obsahu:“);
client.print (postStr.length ());
client.print ("\ n / n");
client.print (postStr);
oneskorenie (1000);
}
client.stop ();
}
Najvyššia možná úroveň zodpovedajúcej vzdialenosti medzi snímačmi a ultrassônico. O sagundo parâmetro é o ID da lixeira que foi lida (que foi gerado randomicamente, um número de 1 a 4).
O ID da lixeira serve também para identificar para qual campo será feito o upload do valor lido.
Krok 4: Recuperando Dados Do ThingSpeak
O ThingSpeak bude trvať dlho, kým sa do kanála nedostanete, ale môžete to urobiť znova JSON. Odlišné od toho, čo sa týka krmiva, sú nasledujúce kanály:
www.mathworks.com/help/thingspeak/get-a-ch…
Najbližšie by ste to mohli urobiť, aby ste to urobili. Informácie o adrese URL nájdete v cenníku:
api.thingspeak.com/channels/CHANNEL_ID/fields/FIELD_NUMBER/last.json?api_key=API_KEY&status=true
Cada campo está descrito no link informado previamente. Najdôležitejšie aspekty týkajúce sa projektu:
- CHANNEL_ID: kanál número do seu
- FIELD_NUMBER: o número do campo
- API_KEY: kanál API do seu
Viac a viac adries URL môžete používať v systéme Android, alebo si môžete stiahnuť súbory z ThingSpeak.
Krok 5: Criando a Aplicação Android
Žiadne Android Studio, kliknite na nové riešenie pre Android. Väčšina funkcií aplikácie a konfigurácia je povolená iba pre AndroidManifest.
Používajú sa hlavne služby Mapy Google a mnoho ďalších nájdete na stránkach Google. Siga os passcritos no link Obter chave de API.
Uma vez com a chave, você deve também configurá-la na aplicação.
Kľúč API pre rozhrania API založené na Mapách Google je definovaný ako reťazcový zdroj.
(Pozrite si súbor „res/values/google_maps_api.xml“).
Kľúč API je prepojený so šifrovacím kľúčom použitým na podpísanie súboru APK. Pre každý šifrovací kľúč potrebujete iný kľúč API vrátane uvoľňovacieho kľúča, ktorý sa používa na podpísanie súboru APK na publikovanie. Kľúče pre ciele ladenia a uvoľnenia môžete definovať v src/debug/a src/release/.
<metaúdaje
android: name = "com.google.android.geo. API_KEY"
android: value = "@string /google_maps_key" />
Konfigurácia je kompatibilná s ďalšími verziami systému AndroidManifest, ako aj ďalšími projektmi.
n
Krok 6: Recuperando O Feed Žiadny Android
Na hlavnom princípe nie je Android, MainActivity, crie 4 rôzne identifikačné údaje, ktoré robia veci, hovorte o seriáloch:
private String url_a = "https://api.thingspeak.com/channels/429823/fields/1/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; private String url_b = "https://api.thingspeak.com/channels/429823/fields/2/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; private String url_c = "https://api.thingspeak.com/channels/429823/fields/3/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; private String url_d = "https://api.thingspeak.com/channels/429823/fields/4/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true";
Niektoré z najlepších a najpopulárnejších aplikácií pre Android, konkrétny JSONObject. Väčšinu z nich môžete vybrať z adresy URL adresy:
Odpoveď JSONObjectLixeiraA; Odpoveď JSONObjectLixeiraB; Odpoveď JSONObjectLixeiraC; JSONObject responseLixeiraD;
Vyberte jednu z nasledujúcich adries URL, kliknite na položku Classe auxiliar, chamada HttpJsonParser. Štandardné triedy odpovedí na viac adries URL, ako aj adresy URL, ako aj veľkosť súboru JSON montado.
public JSONObject makeHttpRequest (URL reťazca, metóda reťazca, parametre mapy) {
skúsiť {
Uri. Builder builder = nový Uri. Builder (); URL urlObj; Reťazec encodedParams = ""; 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".equals (metóda)) {url = url + "?" + kódované Params; urlObj = nová URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (metóda);
} else {
urlObj = nová URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (metóda); urlConnection.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded"); urlConnection.setRequestProperty ("Content-Length", String.valueOf (encodedParams.getBytes (). length)); urlConnection.getOutputStream (). write (encodedParams.getBytes ()); } // Pripojenie k serveru urlConnection.connect (); // Prečítajte si odpoveď = urlConnection.getInputStream (); Čítačka BufferedReader = nový BufferedReader (nový InputStreamReader (je)); StringBuilder sb = nový StringBuilder (); Reťazec;
// Analyzujte odpoveď
while ((line = reader.readLine ())! = null) {sb.append (riadok + "\ n"); } je blízko(); json = sb.toString (); // Previesť odpoveď na JSON Object jObj = new JSONObject (json);
} catch (UnsupportedEncodingException e) {
e.printStackTrace (); } catch (ProtocolException e) {e.printStackTrace (); } catch (IOException e) {e.printStackTrace (); } catch (JSONException e) {Log.e ("JSON Parser", "Chyba pri analýze údajov" + e.toString ()); } catch (Exception e) {Log.e („Exception“, „Error parsing data“+ e.toString ()); }
// návrat objektu JSON
vrátiť jObj;
}
}
Zásady ochrany osobných údajov, ako je to možné, môžu mať vplyv na vašu bezpečnosť, najmä na to, aby ste čo najviac využili svoju základňu.
@Override chránený reťazec doInBackground (reťazec… parametre) {HttpJsonParser jsonParser = nový 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);
vrátiť null;}
Quando o método doInBackgroundé encerrado, or controle de execução to Android passa para o método onPostExecute. Teraz si môžete vybrať jednu z nasledujúcich hier:
protected void onPostExecute (Výsledok reťazca) {pDialog.dismiss (); runOnUiThread (new Runnable () {public void run () {
// ListView listView = (ListView) findViewById (R.id.feedList);
Zobraziť mainView = (Zobraziť) findViewById (R.id.activity_main); if (success == 1) {try {// Cria feedDetail para cada lixeira Lixeira feedDetails1 = new Lixeira (); Feed LixeiraDetails2 = new Lixeira (); Feed LixeiraDetails3 = new Lixeira (); Feed LixeiraDetails4 = new 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 ('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);
// Calcula dados das lixeiras
Kalkulačka SmartBinService = nová SmartBinService (); kalkulačka.montaListaLixeiras (feedList);
// Recupera komponenty
TextView createDate = (TextView) mainView.findViewById (R.id.date); ListView listaDeLixeiras = (ListView) findViewById (R.id.lista); adapter.addAll (feedList);
// Dáta sú aktuálne
Dátum currentTime = Calendar.getInstance (). GetTime (); SimpleDateFormat simpleDate = nové SimpleDateFormat ("dd/MM/rrrr"); Reťazec currentDate = simpleDate.format (currentTime); createDate.setText (KEY_DATE + currentDate + ""); listaDeLixeiras.setAdapter (adaptér);
} catch (JSONException e) {
e.printStackTrace (); }
} else {
Toast.makeText (MainActivity.this, „Pri načítaní údajov sa vyskytla chyba“, Toast. LENGTH_LONG).show ();
}
} }); }
Agora, na telo inicial do aplicativo, serão listados os dados de cada lixeira.
Krok 7: Mostrando bez mapy
Ainda with atividade principal, acaoscac adicionar uma ação and ser relacionada ao Botão Map, at tela inicial.
/ ** Volá sa, keď používateľ klepne na tlačidlo Mapa*/ public void openMaps (Zobraziť zobrazenie) {Intent Intent = new Intent (this, LixeiraMapsActivity.class);
// Passa a lista de lixeiras
Balík balíka = nový balík (); bundle.putParcelableArrayList ("lixeiras", feedList); intent.putExtras (balík);
startActivity (zámer);
}
Žiadna mapa, tems três atividades a executar:
- marcar a posição atual do caminha de lixo
- marcar os pontos korespondenti a cada lixeira žiadna mapa
- traçar a rota entre os pontos
Vykonajú sa buď spoločne, alebo používajú rozhranie API spoločnosti Google. Nasledujú pokyny, ako si vytvoriť príručku a nakresliť smer trasy trasy medzi dvoma miestami pomocou služby Google Directions v aplikácii Google Map Android API V2
Primeiro, vamos criar localidades para cada um dos pontos que desejamos marcar:
// Miesta
súkromný LatLng prúd;
súkromná LatLng lixeiraA; súkromné LatLng lixeiraB; súkromné LatLng lixeiraC; súkromné LatLng lixeiraD;.
Viac informácií a žiadna mapa, napríklad:
private void checkLocationandAddToMap () {// Kontrola, či používateľ udelil povolenie if (ActivityCompat.checkSelfPermission (this, android. Manifest.permission. ACCESS_FINE_LOCATION)! = PackageManager. PERMISSION_GRANTED && ActivityCompat.checkSelfPermission ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// Žiadosť o povolenie polohy ActivityCompat.requestPermissions (this, new String {android. Manifest.permission. ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); návrat; }
// Načítavanie posledného známeho miesta pomocou Fus
Location location = LocationServices. FusedLocationApi.getLastLocation (googleApiClient);
// MarkerOptions sa používajú na vytvorenie nového Marker. Pomocou MarkerOptions môžete určiť umiestnenie, názov atď
this.current = new LatLng (location.getLatitude (), location.getLongitude ()); MarkerOptions markerOptions = new MarkerOptions (). Position (current).title ("Posição atual");
// Pridanie vytvorenej značky na mapu, presunutie kamery na miesto
markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_GREEN)); System.out.println ("+++++++++++++++ Passei aqui! +++++++++++++++"); mMap.addMarker (markerOptions);
// Fotoaparát okamžite presuňte na miesto so priblížením 15.
mMap.moveCamera (CameraUpdateFactory.newLatLngZoom (aktuálna, 15));
// Priblíženie, animácia fotoaparátu.
mMap.animateCamera (CameraUpdateFactory.zoomTo (14), 2000, null);
}
Em seguida, para cada lixeira, foram criados métodosilila aoo abaixo:
private void addBinALocation () {// Kontrola, či používateľ udelil povolenie, ak (ActivityCompat.checkSelfPermission (this, android. Manifest.permission. ACCESS_FINE_LOCATION)! = PackageManager. PERMISSION_GRANTED && ActivityCompat.checkSelfPermission (this, android. Man. ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// Žiadosť o povolenie polohy ActivityCompat.requestPermissions (this, new String {android. Manifest.permission. ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); návrat; }
// Praça da Estação
dvojitá zemepisná šírka = -19,9159578; dvojnásobná dĺžka = -43,9387856; this.lixeiraA = new LatLng (latitude, longitude);
MarkerOptions markerOptions = new MarkerOptions (). Position (lixeiraA).title ("Lixeira A");
markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_RED)); mMap.addMarker (markerOptions); }
Vzhľadom na to, že geografické šírky a dĺžky sú k dispozícii, môžete si stiahnuť Mapy Google, a preto nie sú k dispozícii žiadne mapy. Idealmente, estes valores ficariam salvos em um banco de dados (por exampleplo Firebase). Skončite s vývojom hlavného projektu!
O último passo agora é traçar as rotas entre os pontos. Niektoré z najdôležitejších vecí, ktoré môžete využiť, ako jeden z vašich obľúbených bodov, ako aj body na trase!
Naše hlavné ciele sú:
private String getDirectionsUrl (LatLng origin, LatLng dest, List waypointsList) {
// Pôvod trasy
Reťazec str_origin = "origin ="+origin.latitude+","+origin.longitude;
// Cieľ trasy
Reťazec str_dest = "destinácia ="+destin.latitude+","+dest.longitude;
// Trasové body na trase
//waypoints=optimize:true|-19.9227365, -43.9473546 | -19.9168006, -43.9361124 String waypoints = "waypoints = optimize: true"; pre (LatLng point: waypointsList) {waypoints += "|" + point.latitude + "," + point.longitude; }
// Senzor zapnutý
String sensor = "senzor = false";
// Vytváranie parametrov pre webovú službu
Parametre reťazca = str_origin+"&"+str_dest+"&"+senzor+"&"+body na trase;
// Výstupný formát
Výstup reťazca = "json";
// Vytvorenie adresy URL webovej služby
Adresa URL reťazca = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; System.out.println ("+++++++++++++++++"+URL);
návratová adresa URL;
}
E, por fim, juntando tudo no método principál da classe, onMapReady:
@Override public neplatné 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 (); }
// Nakreslite trasy
// Získanie adresy URL do rozhrania Google Directions API
Zoznam bodov = nový ArrayList (); points.add (lixeiraB); points.add (lixeiraC); points.add (lixeiraD);
Adresa URL reťazca = getDirectionsUrl (aktuálna, lixeiraA, body);
DownloadTask downloadTask = nový DownloadTask (); // Začnite sťahovať údaje json z rozhrania Google Directions API downloadTask.execute (url); }
Aqui passamos apenas pelos pontos principais. O všetkom, čo môžete urobiť, máte k dispozícii konzultácie.
Krok 8: Conclusão
Väčšina projektov spojených s IoT, väčšina z toho, čo má k dispozícii, má jednu z najdôležitejších možností, ako aj zasahovať do rôznych oblastí. Medzi ďalšie možnosti patrí prehrávanie videa, ilustrácie a písma rôznych typov, ktoré nie sú k dispozícii pre Android.
Odporúča:
Počítadlo krokov - mikro: bit: 12 krokov (s obrázkami)
Počítadlo krokov - mikro: bit: Tento projekt bude počítadlom krokov. Na meranie našich krokov použijeme senzor akcelerometra, ktorý je vstavaný v Micro: Bit. Zakaždým, keď sa Micro: Bit zatrasie, pridáme k počtu 2 a zobrazíme ho na obrazovke
Akustická levitácia s Arduino Uno krok za krokom (8 krokov): 8 krokov
Akustická levitácia s Arduino Uno krok za krokom (8 krokov): Ultrazvukové meniče zvuku L298N Dc napájací adaptér ženského adaptéra s mužským DC kolíkom Arduino UNOBreadboard Ako to funguje: Najprv nahráte kód do Arduino Uno (je to mikrokontrolér vybavený digitálnym a analógové porty na prevod kódu (C ++)
Bolt - Nočné hodiny pre bezdrôtové nabíjanie DIY (6 krokov): 6 krokov (s obrázkami)
Bolt - Nočné hodiny bezdrôtového nabíjania DIY (6 krokov): Indukčné nabíjanie (tiež známe ako bezdrôtové nabíjanie alebo bezdrôtové nabíjanie) je typ bezdrôtového prenosu energie. Na prenos elektriny do prenosných zariadení používa elektromagnetickú indukciu. Najbežnejšou aplikáciou je bezdrôtové nabíjanie Qi
SmartBin: 4 kroky
SmartBin: Hlavným účelom tohto projektu je vytvoriť elektronické zariadenie, ktoré používa najmenej jeden Raspberry Pi. Tím je zložený z 5 budúcich strojných inžinierov a jedného automatizačného inžiniera. Náš projekt spočíva vo výrobe odpadkového koša, ktorý sa otvára a zatvára
Ako rozobrať počítač pomocou jednoduchých krokov a fotografií: 13 krokov (s obrázkami)
Ako rozobrať počítač jednoduchými krokmi a obrázkami: Toto je návod, ako rozobrať počítač. Väčšina základných komponentov je modulárna a dá sa ľahko odstrániť. Je však dôležité, aby ste o tom boli organizovaní. Pomôže to zabrániť strate súčiastok a tiež pri opätovnej montáži