Mündəricat:
- Addım 1: Conectando O Sensoru
- Addım 2: Montando a Lixeira
- Addım 3: Nuvem yükləyin
- Addım 4: Recuperando Dados ThingSpeak edin
- Addım 5: Criando və Android tətbiqləri
- Addım 6: Recuperando O Feed No Android
- Addım 7: Mostrando No Mapa
- Addım 8: Nəticə
Video: SmartBin: 8 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-31 10:16
Layihələr sistematik şəkildə qurulacaqsa, heç bir keyfiyyətə malik deyilsiniz, heç kimə lazım deyil, həm də bir neçə dəfə təqdim olunur, həm də bütün məlumatları əldə edə bilərsiniz.
Məşhur layihə, lazım olan:
- NodeMCU
- Ultrassônico de Distancia sensoru
- Caixa de papelão
- Protoboard
- Cabos
- İstifadəçi Android üçün
Addım 1: Conectando O Sensoru
Başlanğıcda, NODEMCU və ya ultrasəs sensoru ilə əlaqə qurun. NodeMCU üçün D4 və D3 port portlarının tetikleyicisi və yankı sensoru olaraq, vamos conectar:
// pin nömrələrini təyin edir #pino_trigger 2 təyin edin // D4
#define pino_echo 0 // D3
Sensorlar, təlimatlar və ya FilipeFlop ilə əlaqəli təlimatlar və ya təlimatlardan istifadə edə bilərsiniz.
float cmMsec, inMsec;
uzun mikrosaniya = ultrasəsli. zamanlama ();
cmMsec = ultrasonic.convert (microsec, Ultrasonik:: CM);
inMsec = ultrasonic.convert (microsec, Ultrasonic:: IN);
// Exibe informacoes serial monitoru yoxdur
Serial.print ("Distancia em cm:");
Serial. çap (cmMsec);
Serial.print (" - Distancia em polegadas:");
Serial.println (inMsec);
String məlumatları = String (cmMsec);
Serial.println (məlumatlar);
Addım 2: Montando a Lixeira
Agora, vamos montar və lixeira inteligente. Ultrasonik sensorlar heç bir "teto" da yoxdur. Məsələn, istifadə oluna bilər. Müvafiq olaraq, rəsmi məlumatların təhlili, qiymətli və ya dəyərli ola bilər. Ölçüsü 26, 3 sm. Əlbəttə ki, hər şeydən əvvəl hər şeyi nəzərə almaq lazımdır.
Simulyasiya, ultrasəs sensoru və ya fərqli sensorlar, bir -birindən fərqli olaraq, hər hansı bir məsafəni ölçmək üçün istifadə edilə bilər.
// Simulando 4 lixeyra
uzun lixeiraID;
boşluq döngəsi () {
lixeiraID = təsadüfi (1, 5);
}
Addım 3: Nuvem yükləyin
Əlavə olaraq, nuvemləri ən yaxşı şəkildə başa düşmək olar. ThingSpeak və ya tanış olmaq üçün tanış olun. Başlanğıc, yeni kanallar, 4 parametrlər və ya həcmdən asılı olmayaraq bütün kanalları açmaq lazımdır.
ThingSpeak və ya API -dən istifadə etməklə kanalları bağlaya bilərsiniz. Heç bir rəsmi sayt yoxdur.
Bu proqramlar ThingsSpeak və ESP8266WiFi.h biblioteca -dan istifadə edərək, ThingSpeak və ya digər proqramlar vasitəsilə istifadə edilə bilər.
Başlanğıc funksiyasını yerinə yetirmək üçün istifadə edin (əvvəlcədən yazılmış məlumatların dəyişdirilməsi, ötürülməsi , təyin edilməsi və ya təsdiqlənməsi).
etibarsız connectWifi () {
Serial.print ("Qoşulma"+ *ssid);
WiFi.begin (ssid, pass);
isə (WiFi.status ()! = WL_CONNECTED) {
gecikmə (500);
Serial.print (".");
}
Serial.println ("");
Serial.print ("Conectado na rede");
Serial.println (ssid);
Serial.print ("IP:");
Serial.println (WiFi.localIP ());
}
Quraşdırma, yoxlama və yoxlama əməliyyatlarını davam etdirin.
boş quraşdırma () {
Serial.begin (9600);
Serial.println ("Lendo dados sensor …");
// Conectando və ya Wi-Fi
əlaqəWifi ();
}
ThingSpeak və ya HTTP ilə əlaqəli məlumatların qorunması, API və ya digər parametrlərin istifadəsi.
void sendDataTS (float cmMsec, uzun id) {
if (client.connect (server, 80)) {
Serial.println ("ThingSpeak üçün" Enviando dados ");
String postStr = apiKey;
postStr += "və sahə";
postStr += id;
postStr += "=";
postStr += String (cmMsec);
postStr += "\ r / n / r / n";
Serial.println (postStr);
client.print ("POST /yeniləmə HTTP /1.1 / n");
client.print ("Host: api.thingspeak.com / n");
client.print ("Bağlantı: yaxın / n");
client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n");
client.print ("Content-Type: application/x-www-form-urlencoded / n");
client.print ("Məzmun-Uzunluq:");
client.print (postStr.length ());
client.print ("\ n / n");
client.print (postStr);
gecikmə (1000);
}
client.stop ();
}
Başlanğıc parametrləri, ultrasonik sensorlar üçün ən yüksək standartlara cavab verir. Şəxsiyyət vəsiqəsi kimə aiddirsə (təsadüfən, 1 ilə 4 arasında).
Şəxsiyyət vəsiqəsi, şəxsiyyət vəsiqəsi ilə yükləyə və ya yükləyə bilərsiniz.
Addım 4: Recuperando Dados ThingSpeak edin
O ThingSpeak proqramı, JSON -un bütün xidmətlərindən istifadə etməklə ən yaxşı nəticəni verir. Fərqli olaraq, kanalın necə qurulacağını müəyyən etmək üçün:
www.mathworks.com/help/thingspeak/get-a-ch…
Neste, bu proqramlar üçün ən yaxşı seçimdir. E -poçt üçün URL ünvanını seçin:
api.thingspeak.com/channels/CHANNEL_ID/fields/FIELD_NUMBER/last.json?api_key=API_KEY&status=true
Məlumat üçün heç bir əlaqə yoxdur. Layihə üçün vacib olan şeylər:
- CHANNEL_ID: kanalın açılması
- FIELD_NUMBER: kampusa nə qədər vaxt lazımdır
- API_KEY: API kanalını dəyişdirin
Android -dən istifadə etmək üçün bir URL və ThingSpeak -dən istifadə edin.
Addım 5: Criando və Android tətbiqləri
Android Studio yoxdur, Android üçün yeni bir layihə var. Bu funksiyanı yerinə yetirmək üçün AndroidManifest -dən istifadə etmək üçün konfiqurasiya edin.
Google Xəritə və ya Google Xəritələr üçün lazım olan bütün məlumatları əldə edin. Heç bir əlaqəsi yoxdur.
Bir şey etmək lazım deyilsə, konfiqurasiya edin.
Google Xəritə əsaslı API-lər üçün API açarı bir simli qaynaq olaraq təyin olunur.
("Res/values/google_maps_api.xml" faylına baxın).
API açarının APK imzalamaq üçün istifadə olunan şifrələmə açarı ilə əlaqəli olduğunu unutmayın. Çap etmək üçün APK -ı imzalamaq üçün istifadə olunan buraxılış açarı da daxil olmaqla hər bir şifrələmə açarı üçün fərqli bir API açarına ehtiyacınız var. Src/debug/və src/release/-də ayıklama və buraxma hədəflərinin açarlarını təyin edə bilərsiniz.
<meta məlumat
android: adı = "com.google.android.geo. API_KEY"
android: dəyər = "@string /google_maps_key" />
AndroidManifest və ya Android üçün bir konfiqurasiya tamamlandı.
n
Addım 6: Recuperando O Feed No Android
Heç bir Android, MainActivity, ThingSpeak proqramları ilə bağlı 4 fərqli məlumat yoxdur:
xüsusi String url_a = "https://api.thingspeak.com/channels/429823/fields/1/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; xüsusi String url_b = "https://api.thingspeak.com/channels/429823/fields/2/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; xüsusi String url_c = "https://api.thingspeak.com/channels/429823/fields/3/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; xüsusi String url_d = "https://api.thingspeak.com/channels/429823/fields/4/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true";
Bu proqramlar, Android əməliyyat sistemlərində və JSONObject -də istifadə edilə bilər. Məlumat üçün, URL -lərin siyahısı:
JSONObject cavabLixeiraA; JSONObject cavabLixeiraB; JSONObject cavabLixeiraC; JSONObject cavabLixeiraD;
URL -lərlə əlaqə qurduqdan sonra, köməkçi proqramlar HttpJsonParser -dən istifadə edə bilərsiniz. Əlaqə URL -lər, cavablar və cavablar, JSON -un quraşdırılması ilə əlaqədardır.
ictimai JSONObject makeHttpRequest (String url, String metodu, Map params) {
sınayın {
Uri. Builder qurucusu = yeni Uri. Builder (); URL urlObj; String encodedParams = ""; if (params! = null) {for (Map. Entry girişi: params.entrySet ()) {builder.appendQueryParameter (entry.getKey (), entry.getValue ()); }} if (builder.build (). getEncodedQuery ()! = null) {encodedParams = builder.build (). getEncodedQuery ();
}
if ("GET". bərabərdir (metod)) {url = url + "?" + kodlaşdırılmış Paramramlar; urlObj = yeni URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (metod);
} başqa {
urlObj = yeni URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (metod); urlConnection.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded"); urlConnection.setRequestProperty ("Məzmun-Uzunluq", String.valueOf (encodedParams.getBytes (). uzunluq)); urlConnection.getOutputStream (). yazmaq (encodedParams.getBytes ()); } // urlConnection.connect () serverinə qoşulun; // Cavabı oxuyun = urlConnection.getInputStream (); BufferedReader oxucu = yeni BufferedReader (yeni InputStreamReader (is)); StringBuilder sb = yeni StringBuilder (); String xətti;
// Cavabı təhlil edin
while ((line = reader.readLine ())! = null) {sb.append (line + "\ n"); } is.close (); json = sb.toString (); // Cavabı JSON Obyektinə çevirin jObj = yeni JSONObject (json);
} tutmaq (Dəstəklənməyən EncodingException e) {
e.printStackTrace (); } tutmaq (ProtocolException e) {e.printStackTrace (); } tutmaq (IOException e) {e.printStackTrace (); } catch (JSONException e) {Log.e ("JSON Parser", "Veriləri təhlil edərkən xəta" + e.toString ()); } tutmaq (İstisna e) {Log.e ("İstisna", "Veriləri təhlil edərkən xəta" + e.toString ()); }
// JSON Obyektini qaytarın
qayıt jObj;
}
}
Müəssisə müdiri, bütün sahələr və əlaqələr, həm də bir yerdə, həm də bir yerdə İnBackground -da məlumat əldə etmək imkanı verir.
@Orride qorunan String doInBackground (String… params) {HttpJsonParser jsonParser = yeni HttpJsonParser ();
cavabLixeiraA = jsonParser.makeHttpRequest (url_a, "GET", null);
cavabLixeiraB = jsonParser.makeHttpRequest (url_b, "GET", null); cavabLixeiraC = jsonParser.makeHttpRequest (url_c, "GET", null); cavabLixeiraD = jsonParser.makeHttpRequest (url_d, "GET", null);
qaytar sıfır;}
Daxili məlumatların arxa plana daxil edilməsi, Android -in aparılması və ya göndərilməsinin OnPostExecute -də yoxlanılması. Neste método, vixos criar os objetos Lixeira, ThingSpeak -in populyar tətbiqləri:
onPostExecute (String nəticəsində) qorunan boşluq {pDialog.dismiss (); runOnUiThread (yeni Runnable () {public void run () {
// ListView listView = (ListView) findViewById (R.id.feedList);
Bax mainView = (Bax) findViewById (R.id.activity_main); if (müvəffəqiyyət == 1) {cəhd edin {// Cria feedDetail para lixeira Lixeira feedDetails1 = yeni Lixeira (); Lixeira feedDetails2 = yeni Lixeira (); Lixeira feedDetails3 = yeni Lixeira (); Lixeira feedDetails4 = yeni Lixeira ();
feedDetails1.setId ('A');
feedDetails1.setPesoLixo (Double.parseDouble (answerLixeiraA.getString (KEY_FIELD1)))); feedDetails1.setVolumeLixo (Double.parseDouble (responseLixeiraA.getString (KEY_FIELD1))));
feedDetails2.setId ('B');
feedDetails2.setPesoLixo (Double.parseDouble (answerLixeiraB.getString (KEY_FIELD2)))); feedDetails2.setVolumeLixo (Double.parseDouble (answerLixeiraB.getString (KEY_FIELD2))));
feedDetails3.setId ('C');
feedDetails3.setPesoLixo (Double.parseDouble (responseLixeiraC.getString (KEY_FIELD3)))); feedDetails3.setVolumeLixo (Double.parseDouble (answerLixeiraC.getString (KEY_FIELD3))));
feedDetails4.setId ('D');
feedDetails4.setPesoLixo (Double.parseDouble (answerLixeiraD.getString (KEY_FIELD4)))); feedDetails4.setVolumeLixo (Double.parseDouble (responseLixeiraD.getString (KEY_FIELD4))));
feedList.add (feedDetails1);
feedList.add (feedDetails2); feedList.add (feedDetails3); feedList.add (feedDetails4);
// Hesablamalar dados das lixeiras
SmartBinService kalkulyatoru = yeni SmartBinService (); calculator.montaListaLixeiras (feedList);
// Recupera komponentləri
TextView createDate = (TextView) mainView.findViewById (R.id.date); ListView listaDeLixeiras = (ListView) findViewById (R.id.lista); adapter.addAll (feedList);
// Məlumat
Tarix currentTime = Calendar.getInstance (). GetTime (); SimpleDateFormat simpleDate = yeni SimpleDateFormat ("gg/aa/yyyy"); String currentDate = simpleDate.format (currentTime); createDate.setText (KEY_DATE + currentDate + ""); listaDeLixeiras.setAdapter (adapter);
} tutmaq (JSONException e) {
e.printStackTrace (); }
} başqa {
Toast.makeText (MainActivity.this, "Məlumat yüklənərkən bəzi səhvlər baş verdi", Toast. LENGTH_LONG).show ();
}
} }); }
Müvafiq olaraq, heç bir rəsmi məlumat yoxdur, bu siyahıdan ən çox istifadə edilə bilər.
Addım 7: Mostrando No Mapa
Müvafiq olaraq, hər hansı bir məlumat əldə etmək mümkün olmadıqda, hər hansı bir məlumat əldə edə bilərsiniz.
/ ** İstifadəçi Mapa düyməsinə toxunduqda çağırılır*/ public void openMaps (View view) {Niyyət niyyəti = yeni niyyət (bu, LixeiraMapsActivity.class);
// Keçmiş siyahı
Paket paketi = yeni Paket (); bundle.putParcelableArrayList ("lixeiras", feedList); aim.putExtras (paket);
startActivity (niyyət);
}
Xəritədə heç bir şey yoxdur:
- marin və ya lixo edin
- marc os pontos heç bir xəritədə müxbir yoxdur
- tracar a rota entre os pontos
Bu proqram Google API -dən istifadə etməklə icra olunur. Rotas, foram seguidos os passos do tutorial kimi Google Map Android API V2 -də Google İstiqamətlərindən istifadə edərək iki yer arasında sürücülük marşrutu çəkmək.
Başlanğıcda, hər hansı bir yerdən istifadə etmək mümkün deyil:
// Yerlər
özəl LatLng cərəyanı;
şəxsi LatLng lixeiraA; şəxsi LatLng lixeiraB; özəl LatLng lixeiraC; özəl LatLng lixeiraD;.
Xəritədə heç bir xəritəyə ehtiyac yoxdursa:
private void checkLocationandAddToMap () {// İstifadəçinin icazə verib -vermədiyini yoxlamaq (ActivityCompat.checkSelfPermission (bu, android. Manifest.permission. ACCESS_FINE_LOCATION)! = PackageManager. PERMISSION_GRANTED && ActivityCompat.checkSelfPerm. ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// Məkan icazəsi ActivityCompat.requestPermissions tələb olunur (bu, yeni String {android. Manifest.permission. ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); qayıtmaq; }
// Fus istifadə edərək bilinən son yeri əldə etmək
Məkan yeri = LocationServices. FusedLocationApi.getLastLocation (googleApiClient);
// MarkerOptions yeni Marker yaratmaq üçün istifadə olunur. MarkerOptions ilə yeri, adı və s. Təyin edə bilərsiniz.
this.current = yeni LatLng (location.getLatitude (), location.getLongitude ()); MarkerOptions markerOptions = yeni MarkerOptions (). Mövqe (cari). Başlıq ("Posição atual");
// Yaradılmış işarəni xəritəyə əlavə etmək, kameranı mövqeyinə keçirmək
markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_GREEN)); System.out.println ("+++++++++++++++++++++++++++"); mMap.addMarker (markerOptions);
// 15 yaxınlaşdırma ilə kameranı dərhal yerə köçürün.
mMap.moveCamera (CameraUpdateFactory.newLatLngZoom (cari, 15));
// Yaxınlaşdırın, kameranı canlandırın.
mMap.animateCamera (CameraUpdateFactory.zoomTo (14), 2000, null);
}
Emuida, para cada lixeira, foram criados métodos oxşar və ya abaixo:
private void addBinALocation () {// İstifadəçinin icazə verdiyini yoxlamaq (ActivityCompat.checkSelfPermission (bu, android. Manifest.permission. ACCESS_FINE_LOCATION)! = PackageManager. PERMISSION_GRANTED && ActivityCompat.checkSelfPermission (bu, ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// Məkan icazəsi ActivityCompat.requestPermissions tələb olunur (bu, yeni String {android. Manifest.permission. ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); qayıtmaq; }
// Praça da Estação
ikiqat enlik = -19.9159578; ikiqat uzunluq = -43.9387856; this.lixeiraA = yeni LatLng (Enlem, Boylam);
MarkerOptions markerOptions = yeni MarkerOptions (). Mövqe (lixeiraA).title ("Lixeira A");
markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_RED)); mMap.addMarker (markerOptions); }
Enlem və uzunluqlar Google Xəritələr vasitəsilə Google Xəritələr tərəfindən təqdim edildikdə, eixadas heç bir şəkildə düzəldilmir. Əlavə olaraq, Firebase -dən (məsələn, Firesase -dən) istifadə etmək olar. Başlanğıc proqramını hazırlayın!
Bu proqramlar bir -birindən daha çox məlumat əldə etmək üçün istifadə edilə bilər. Əlavə olaraq, bütün vacib və ən vacib şeylər, yol nöqtələrində!
Bu mövzuda bir çox məlumat əldə edə bilərsiniz:
xüsusi String getDirectionsUrl (LatLng mənşəli, LatLng dest, Yol nöqtələrinin siyahısı Siyahısı) {
// Marşrutun mənşəyi
String str_origin = "mənşə ="+mənşə.dövr+","+mənşə. Uzunluq;
// Marşrutun təyinatı
String str_dest = "hedef ="+dest.latitude+","+dest.longitude;
// Marşrut boyunca yol nöqtələri
//waypoints=optimize:true|-19.9227365, -43.9473546 | -19.9168006, -43.9361124 String yol nöqtələri = "yol nöqtələri = optimize: doğru"; for (LatLng point: waypointsList) {sened noktaları += "|" + nöqtə.yenilik + "," + nöqtə.uzunluq; }
// Sensor aktivdir
String sensoru = "sensor = yanlış";
// Veb xidmətinin parametrlərini qurmaq
String parametrləri = str_origin+"&"+str_dest+"&"+sensor+"&"+sened noktaları;
// Çıxış formatı
String çıxışı = "json";
// Veb xidmətinə url qurmaq
String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; System.out.println ("++++++++++++++"+url);
qaytar URL;
}
E, fim, juntando tudo no método main da classe, onMapReady:
@OnMapReady (GoogleMap googleMap) ictimai boşluğu ləğv edin {mMap = googleMap;
checkLocationandAddToMap ();
əgər (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 (); }
// Marşrutlar çəkin
// Google İstiqamətlər API -sinə URL alınır
Siyahı nöqtələri = yeni ArrayList (); ballar əlavə edin (lixeiraB); ballar əlavə edin (lixeiraC); ballar əlavə edin (lixeiraD);
String url = getDirectionsUrl (cari, lixeiraA, bal);
DownloadTask downloadTask = yeni DownloadTask (); // Google Directions API downloadTask.execute (url) -dən json məlumatlarını yükləməyə başlayın; }
Su keçirməyin əsas prinsipləri. Məsləhətləşmələr apardıqdan sonra bu işi tamamlayın.
Addım 8: Nəticə
IoT və ya İnternetdən istifadə etməklə, məlumatların ötürülməsi ilə əlaqəli məlumatları əldə etmək çox vacibdir. Əlavə etmək üçün, Android -də heç bir iş görmədiyiniz halda, hər hansı bir işin öhdəsindən gələ bilərsiniz.
Tövsiyə:
Arduino Avtomobil Ters Park Diqqət Sistemi - Addım -addım: 4 addım
Arduino Avtomobil Ters Park Diqqət Sistemi | Addım-addım: Bu layihədə, Arduino UNO və HC-SR04 Ultrasonik Sensoru istifadə edərək sadə bir Arduino Car Reverse Park Sensor Dövrü dizayn edəcəyəm. Bu Arduino əsaslı Avtomobil Ters siqnal sistemi Avtonom Naviqasiya, Robot Aralığı və digər diapazonlarda istifadə edilə bilər
Addım -addım PC qurulması: 9 addım
Addım -addım PC Bina: Təchizat: Təchizat: MotherboardCPU & CPU soyuducu PSU (Enerji təchizatı vahidi) Yaddaş (HDD/SSD) RAMGPU (tələb olunmur) Kassa Alətləri: Tornavida ESD bilərzik/mattermal pasta/aplikator
Üç Hoparlör Devresi -- Addım-addım təlimat: 3 addım
Üç Hoparlör Devresi || Addım-addım Təlimat: Dinamik Dövrə, ətraf mühitdən alınan səs siqnallarını MIC-ə gücləndirir və gücləndirilmiş səsin çıxarıldığı yerdən Dinamikə göndərir.Burada bu Hoparlör Devrini düzəltməyin üç fərqli yolunu göstərəcəyəm:
Arduino Uno ilə Akustik Levitasiya Addım-addım (8 addım): 8 addım
Arduino Uno ilə Akustik Levitasiya Adım Adım (8 addım): ultrasəs səs ötürücüləri L298N Dc dişi qadın adapteri kişi dc pinli Arduino UNOBreadboard Bu necə işləyir: Əvvəlcə Arduino Uno-ya kod yükləyirsiniz (rəqəmsal ilə təchiz edilmiş bir mikro nəzarətçidir) və kodu çevirmək üçün analog portlar (C ++)
SmartBin: 4 addım
SmartBin: Bu layihənin əsas məqsədi ən azı bir Raspberry Pi istifadə edən bir elektron cihaz yaratmaqdır. Komanda 5 gələcək mexanika mühəndisi və bir avtomatika mühəndisindən ibarətdir. Layihəmiz açılan və bağlanan bir zibil qutusu hazırlamaqdan ibarətdir