Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

“Ini Untuk Burung!”

Komponen dan persediaan

Arduino 101
× 1
Intel Edison
× 1
Logitech c270 HD Webcam
× 1
Pololu Carrier dengan Sensor Jarak Digital Sharp GP2Y0D815Z0F 15cm
× 2
Adafruit Square Force-Sensitive Resistor (FSR) - Interlink 406
× 1
Adafruit Si7021 Sensor Suhu &Kelembaban Breakout Board
× 1
Seeed Grove Start Kit Plus, Intel IoT Edition
× 1
Kapasitor 47 F
× 2
Resistor 1k ohm
× 1
Blok Terminal Adafruit - 2-pin 3,5mm - paket 5 !
× 1
Adafruit Compact Switching Power Supply - Output yang Dapat Dipilih 3-12VDC
× 1
Adafruit Perma-Proto PCB papan tempat memotong roti ukuran seperempat - Tunggal
× 1
Kabel jumper (generik)
× 1

Alat dan mesin yang diperlukan

Printer 3D (generik)
Besi solder (generik)

Aplikasi dan layanan online

Intel XDK untuk IoT
Autodesk Fusion 360
PubNub Publish/Subscribe API
Cloudinary
noble.js

Tentang proyek ini

“Ini Untuk Burung!” Menciptakan Kembali Masa Depan Pemantauan Lingkungan dengan Arduino 101

Perkenalan dan Motivasi:

Salah satu cara untuk mengukur kesehatan iklim dan ekosistem tempat kita tinggal adalah dengan mengukur ukuran dan keragaman populasi fauna atau hewannya. Setiap musim dingin, sejak 1987, Cornell Lab of Ornithology melakukan upaya sains warga besar-besaran yang disebut Project FeederWatch:

“Project FeederWatch adalah survei burung selama musim dingin yang mengunjungi pengumpan di halaman belakang, pusat alam, area komunitas, dan lokasi lain di Amerika Utara…Data FeederWatch menunjukkan spesies burung mana yang mengunjungi pengumpan di ribuan lokasi di seluruh benua setiap musim dingin . Data tersebut juga menunjukkan berapa banyak individu dari setiap spesies yang terlihat. Informasi ini dapat digunakan untuk mengukur perubahan dalam rentang musim dingin dan kelimpahan spesies burung dari waktu ke waktu. ”

Ini adalah tahun pertama kami berpartisipasi dan kami ingin menggabungkan minat kami dalam membuat dan meretas, dengan minat kami pada alam dan partisipasi kami dalam Project FeederWatch. Jadi, kami memutuskan untuk menemukan kembali masa depan pengamatan burung dan pemantauan lingkungan dengan Arduino 101!

Arduino 101 sangat ideal untuk proyek ini karena menggabungkan kesederhanaan Arduino IDE untuk memudahkan pemrograman tertanam kami, kemampuan onboard seperti Bluetooth LE dengan banyak sensor dan papan breakout tersedia. Dengan menyematkan Arduino 101 di pengumpan burung buatan sendiri, kami mengembangkan platform eksperimental untuk mengukur parameter cuaca dan memantau aktivitas burung di pengumpan kami. Menambahkan beberapa teknologi IoT yang menarik dari Cloudinary dan PubNub membantu kami menemukan kembali masa depan pemantauan kesehatan lingkungan dan ekosistem!

Ikhtisar Proyek:

Inti dari proyek kami adalah Arduino 101 yang tertanam dalam pengumpan burung buatan sendiri. Kami menggunakan 2 sensor jarak inframerah Sharp untuk mendeteksi burung yang hinggap di batang kayu yang melewati kedua sisi pengumpan. Resistor peka gaya (FSR) digunakan untuk merasakan jumlah benih yang ada di pengumpan. Papan breakout sensor suhu dan kelembaban Adafruit Si7021 terpasang ke pin i2c dan digunakan untuk menyediakan data cuaca fisik kami. Arduino 101 diatur untuk bertindak sebagai perangkat periferal BLE dan mengirim data dari sensor ini melalui BLE ke pusat BLE perangkat. Power disediakan oleh 4 baterai AA. Semua komponen ini disimpan dalam enklosur cetak 3D khusus.

Kami menggunakan Intel Edison pada Arduino Breakout Board baik sebagai pusat BLE dan sebagai gateway internet. Webcam usb logitech c270 terhubung ke port usb di papan dan digunakan untuk mengambil gambar ketika menerima pemberitahuan BLE yang menunjukkan aktivitas di salah satu tempat bertengger. Gambar-gambar ini disimpan secara lokal pada kartu SD yang dimasukkan ke dalam slot kartu SD pada papan breakout.

Kami memanfaatkan kemampuan WiFi Intel Edison untuk menggunakannya sebagai gateway internet. Hal ini memungkinkan kami menggunakan teknologi super seperti PubNub untuk streaming data waktu nyata dan Cloudinary untuk penyimpanan dan manipulasi gambar di cloud.

Tempat makan burung dibuat dari botol soda kosong dan pasak kayu dan digantung di tiang di halaman kami.

Membangun Proyek:

Arduino 101 pengumpan burung tertanam.

Dasar dari proyek ini adalah Arduino 101 yang tertanam di pengumpan burung kami. Pengumpan burung akan berada di luar ruangan dan harus mampu menahan kerasnya fisik berada di luar ruangan. Ini akan membutuhkan cara untuk mengirimkan data secara real time dan nirkabel. Jarak antara Arduino 101 pengirim dan penerima Edison hanya beberapa meter dan karena Arduino 101 sudah memiliki BLE onboard, kami akan menggunakan BLE!

Sebagian besar sirkuit dapat dibangun dengan mengikuti diagram fritzing , tetapi ada beberapa tantangan yang kami hadapi saat membuat dan menguji sirkuit ini. Inilah yang akan kita fokuskan di sini:

  • Tantangan pertama:Mendeteksi burung di feeder, di luar ruangan! Untuk proyek ini kami membutuhkan sensor yang dapat berfungsi di luar ruangan, tertutup rapat terhadap elemen. Kami tidak ingin itu mengganggu atau menakut-nakuti subjek. Seharusnya hanya mendeteksi apa yang ada di tempat bertengger. Setelah mengevaluasi karakteristik berbagai sensor, kami memutuskan untuk menggunakan Pololu Carrier dengan Sensor Jarak Digital Sharp GP2Y0D815Z0F. Sensor ini, tidak seperti sensor PIR biasa, memiliki jangkauan deteksi yang sangat pendek. Kami hanya ingin tahu apakah seekor burung bertengger beberapa sentimeter dari sensor. Sensor PIR memiliki jangkauan deteksi yang sangat panjang dan luas. Ini bagus untuk merasakan segala jenis gerakan di jalan masuk rumah Anda, tetapi kami tidak ingin mendeteksi cabang pohon atau "suara" lainnya setiap kali burung bergoyang tertiup angin. Juga evaluasi cepat atas meja menunjukkan bahwa sensor IR Sharp bekerja ketika ditempatkan di dalam botol soda plastik. Ini penting karena kita perlu melindungi elektronik dari elemen dan dapat “melihat” bagian enklosur ini.
  • Tantangan kedua:Setelah memasang salah satu sensor dan mengujinya, kami siap beraksi! Jadi kami menghubungkan dan sensor IR Sharp kedua ke Arduino 101 dan . . .mereka tidak berhasil! Setelah memeriksa kode, berkali-kali. Setelah memeriksa beberapa papan dan sensor yang berbeda, tidak ada yang akan membuat kedua sensor ini bekerja bersama. Jadi kami dihadapkan dengan tantangan besar pertama kami. Haruskah kita mencoba jenis sensor yang berbeda? Haruskah kita membuat satu tempat makan burung (lumpuh!), Apa yang harus dilakukan? Dalam keputusasaan kami melakukan apa yang seharusnya kami lakukan pertama kali, periksa situs web, dan pada FAQ produk kami menemukan ini:Sensor ini tidak berfungsi seperti yang saya harapkan:Saya sering mendapatkan deteksi intermiten lebih jauh dari jangkauan maksimum sensor dan tidak mendeteksi objek dalam jangkauan deteksi yang diiklankan. Ada apa? Masalah seperti ini dapat disebabkan oleh masalah catu daya, terutama karena sensor ini menarik daya dalam waktu singkat, ledakan besar, jadi pastikan catu daya Anda mampu mengalirkan arus yang diperlukan. Jika Anda mengalami masalah ini, coba tambahkan kapasitor 10 F atau lebih di seluruh daya sensor dan ground di dekat sensor; ini mengkompensasi catu daya yang tidak memadai dan biasanya mengembalikan fungsi normal. Masalah terpecahkan! Kami menambahkan kapasitor elektrolitik 47uF ke masing-masing sensor dan mereka bekerja, dengan hanya satu peringatan lagi, keduanya perlu diberi makan langsung dari pin +5V di papan tulis. Anda akan melihat ini pada diagram fritzing sebagai jumper dari Garis +5V dari satu sensor ke suplai +5V ke sensor lainnya. Kami bukan EE, jadi saya tidak bisa menjelaskan ini, ini hanya apa yang kami temukan untuk bekerja baik di dalam maupun di luar!
  • Tantangan ketiga:Di bagian Aktivitas dan Pembelajaran Terkait di situs web The Project FeederWatch, salah satu aktivitas yang disarankan adalah menimbang benih burung di pengumpan Anda sebelum dan sesudah setiap penghitungan dan menghitung berapa banyak benih yang dimakan. Setelah beberapa hitungan, hitung tingkat konsumsi rata-rata. Daripada melakukan penimbangan manual, mengapa tidak mencatat konsumsi benih secara otomatis? Solusi kami adalah menggunakan resistor sensitif gaya (FSR). Ini adalah resistor dengan resistansi yang bervariasi dengan gaya yang diterapkan padanya. Itu dapat dihubungkan ke pin input analog. Tapi apakah itu cukup sensitif untuk mendeteksi perubahan jumlah benih? Upaya pertama kami untuk mengukur tingkat benih dalam wadah plastik kecil tidak terlalu berhasil. Sensor merespon dengan baik terhadap berbagai tekanan jari, tetapi tidak pada tingkat benih. Jadi kami membuat dua perubahan untuk menyelesaikan masalah. Pertama, sinyal analog dikirimkan ke pin analog Arduino 101 melalui 2 resistor pembagi tegangan, yang satu FSR dan yang kedua resistor konvensional. Kami menurunkan nilai resistor kedua ini dan sensor tampaknya lebih sensitif terhadap sentuhan, tetapi masih tidak begitu responsif terhadap perubahan awal seperti yang kami inginkan. Jadi ditambahkan dalam perubahan perangkat keras untuk semua ini. Agak analogi dengan prinsip Pascal, bahwa jika alih-alih menerapkan berat benih di seluruh permukaan FSR, kami membuat platform dengan titik kontak kecil di tengahnya, kami akan sangat meningkatkan kekuatan dari benih pada FSR. Kebalikan dari sepatu salju dan itu berhasil!

Satu tantangan kecil lainnya adalah menghubungkan FSR ke Arduino 101 dengan cara yang aman dan dapat diandalkan. Ini mudah diselesaikan dengan menggunakan blok terminal 3,5 mm 2-pin. Pastikan jarak blok terminal cocok dengan papan Anda.

Perangkat keras Arduino 101 lainnya sederhana. Kami menghubungkan papan breakout Adafruit Si702 ke pin bus I2C() dan menggunakan +3.3V kosong untuk daya. Daya seluruh paket disediakan melalui paket baterai 4XAA yang dapat diganti yang ditempatkan di bawah penutup utama.

Kami menyolder sensor IR dan FSR ke PCB papan tempat memotong roti berukuran Adafruit Perma-Proto Quarter dan menempelkannya ke bagian bawah Arduino 101 dengan pita dua sisi. Seluruh paket ditempatkan di dalam pengumpan burung botol soda dan telah bertahan dari suhu beku di bawah nol, kabut dan hujan ringan dan salju (badai salju palsu 'Stella'!).

Sketsa Arduino 101:

Tugas utama sketsa adalah memantau sensor yang terpasang dan melaporkan nilai sensor melalui BLE. Semua data dalam BLE ditransmisikan sebagai paket byte. Apakah data asli Anda adalah int float array of char, Anda harus memecahnya menjadi representasi byte untuk dikirimkan melalui BLE. Cara termudah yang saya tahu untuk melakukan ini, adalah membuat gabungan tipe data. Union memungkinkan kita untuk berbagi lokasi memori yang sama antara dua tipe data yang berbeda. Dalam kasus kami, sensor suhu dan kelembaban SI7021 menyediakan data sebagai angka floating point. Bahasa Arduino C mewakili float sebagai 4 byte, jadi kami membuat gabungan antara float suhu dan kelembaban kami dan array 4 byte.

/** * Union directive memungkinkan variabel-variabel ini berbagi lokasi memori yang sama. Silakan lihat * tutorial saya Imu to You!(https://www.hackster.io/gov/imu-to-you-ae53e1?team=18045) tutorial untuk * diskusi lebih lanjut tentang penggunaan direktif serikat pekerja di C. */ serikat { float t; byte char yang tidak ditandatangani[4]; } data suhu; serikat { float h; byte char yang tidak ditandatangani[4]; } data kelembaban; serikat { int f; byte char yang tidak ditandatangani [2]; } data umpan;  

Saat kita menyimpan nilai floating point dalam union, array byte juga akan terisi. Untuk mengirimkan data, kami meneruskan array byte ke fungsi setValue() dari karakteristik ini.

Untuk aplikasi yang disematkan, penggunaan fungsi delay() dapat menyebabkan masalah. Pertama, saat fungsi penundaan dipanggil, semua aktivitas prosesor berhenti selama periode penundaan. Ini tidak ideal ketika burung bisa datang untuk hinggap kapan saja. Masalah kedua adalah bahwa fungsi delay() dapat menyebabkan masalah dengan mekanisme pemberitahuan BLE. Cara untuk menghindari ini adalah dengan tidak menggunakan delay() dalam sketsa kita. Namun demikian, sering kali diperlukan penundaan dalam program kode. Untuk mengatasinya, kita akan menggunakan metode garis besar dalam kumpulan 3 tutorial super ini oleh Bill Earl dari Adafruit.

Secara garis besar, kami membuat objek yang mewakili perangkat tertanam kami. Kami memutuskan interval atau set interval untuk polling sensor kami yang terhubung ke perangkat ini. Kami kemudian membuat fungsi Update().

void Update() { // Serial.print("Sensor Umpan:");Serial.println(analogRead(A0)); // Pembaruan/pemberitahuan Aktivitas Perch bergantung pada sensor waktu dan jarak currentPerchMillis =milis(); if ((currentPerchMillis - sebelumnyaPerchMillis)> perchInterval ) { PreviousPerchMillis =currentPerchMillis; currentLeftPerch =digitalRead(LEFT_PERCH); currentRightPerch =digitalRead(RIGHT_PERCH); if ((currentLeftPerch ==0) &&(previousLeftPerch ==1)) { // aktivitas baru di leftperch // BLE beri tahu perchCharacteristic.setValue(1); Serial.println("AKTIVITAS PERCH KIRI"); sebelumnyaLeftPerch =0; } ...}  

Fungsi ini berfungsi untuk memeriksa apakah interval waktu untuk sensor kami telah berlalu, jika demikian, perbarui sensor, jika tidak abaikan saja. Fungsi Update() dipanggil berulang kali di bagian loop() sketsa kita.

void loop() { // letakkan kode utama Anda di sini, untuk dijalankan berulang kali:blePeripheral.poll(); birdFeeder.Update(); }  

Dengan demikian, kami meniru efek multitasking waktu nyata dengan sensor kami.

Intel Edison dan Papan Breakout Arduino:

Bagian paling menantang dari bekerja dengan Intel Edison adalah menyiapkannya. Tutorial terbaik yang saya temukan dalam hal ini adalah Intel Edison dan Intel XDK IoT Edition 101 karya Vincent Wong. Saya dapat menjamin Anda bahwa melalui proses ini dan mencoba beberapa contoh JavaScript sangat berharga!

Bekerja dengan Edison Anda menggunakan edisi Intel XDK IoT akan memungkinkan Anda untuk berinteraksi dan mengonfigurasinya di baris perintah. Anda juga dapat memanfaatkan banyak contoh program dan template JavaScript/Node. Mempelajari dan menggunakan JavaScript/Node untuk memprogram akan membuka sejumlah besar API yang mudah digunakan dan kuat, seperti PubNub, Noble.js, dan Cloudinary.

Setelah Anda menyiapkan Edison dan mengonfirmasi koneksi aktif ke jaringan WiFi Anda, Anda dapat menginstal pustaka yang diperlukan untuk proyek ini:

npm install bangsawan

npm instal pubnub

npm instal cloudinary

Kamera Web USB

Pencarian google tentang "intel edison webcam" akan menghasilkan beberapa contoh dan tutorial yang bagus. Tetapi ada beberapa materi yang membingungkan di luar sana, yang saya yakini terutama disebabkan oleh beberapa perubahan pada modul yang tersedia di Yocto OS. Yocto adalah versi tertanam dari linux yang menjalankan Intel edison. Logitech c270 adalah webcam yang kompatibel dengan uvcvideo. Ada banyak tutorial untuk memastikan bahwa Edison Anda telah menginstal driver/modul uvcvideo. Tanpa ini, Anda tidak akan dapat berinteraksi dan mengambil gambar dengan kamera.

Saya menggunakan langkah-langkah berikut dari kamera Web di Intel Edison dengan mengunggah ke s3 agar webcam berfungsi di Edison saya. Saya telah memposting instruksi dari posting blog ini di bawah untuk berjaga-jaga jika itu terjadi.

Dengan Edison Anda, instruksi berikut akan dijalankan pada baris perintah di tab terminal serial XDK.

"Kami akan menggunakan beberapa paket tambahan, yang dapat diinstal menggunakan opkg manajer paket. Untuk daftar awal edit repo dengan vi:

vi /etc/opkg/base-feeds.conf

dan pastikan Anda memiliki semua baris ini dalam file:

src/gz semua http://repo.opkg.net/edison/repo/all src/gz edison http://repo.opkg.net/edison/repo/edison src/gz core2–32 http://repo. opkg.net/edison/repo/core2-32 src intel-iotdk http://iotdk.intel.com/repos/3.0/intelgalactic/opkg/i586

Sekarang, perbarui cache paket:

pembaruan opkg

Dan instal modul kernel untuk mendukung kamera usb uvc.

opkg install kernel-module-uvcvideo

Sekarang hubungkan webcam Anda ke port usb dan jalankan perintah ini.

ls -l /dev/video*

Jika kamera Anda berhasil dideteksi, output akan seperti:

crw-rw---- 1 root video 81, 0 25 Jul 09:35 /dev/video0

Untuk bekerja dengan webcam dan membuat foto sesuai jadwal, kami harus menginstal 2 paket tambahan:

opkg instal fswebcam kroni

*** perhatikan kami tidak menginstal cronie untuk proyek ini, kami hanya melakukan opkg instal fswebcam. cronie tidak diperlukan seperti yang kami sebut fswebcam setiap kali sensor IR tersandung oleh burung yang sedang bertengger, bukan pada jadwal yang ditentukan ***

Bekerja dengan kamera

Untuk menguji kamera Anda, jalankan perintah ini:

fswebcam -r 1280x720 --jpeg 100 -D 3 -S 13 "test.jpg"

  • -r 1280x720 atur resolusi gambar, lebih baik gunakan maksimum yang tersedia untuk kamera Anda (opsional)
  • — jpeg 100 atur kualitas JPEG ke maksimum. Ini berguna jika nanti Anda akan melakukan sesuatu dengan gambar ini (opsional)
  • -H 3 -S 13 menambahkan penundaan 3 detik dan melewatkan 13 bingkai pertama. Itu perlu, karena beberapa webcam membutuhkan waktu untuk mendapatkan foto terbaik (disarankan)
  • test.jpg adalah nama file keluaran "

Informasi tambahan tentang menggunakan webcam dengan Edison, dan proyek lain yang sangat rapi, dapat ditemukan di halaman github Dr. Kim. Dia juga memposting proyek keren ke Hackster.io!

Selain memastikan bahwa modul yang tepat ada, saya juga perlu membalik sakelar antara kabel microusb dan port USB ke arah port USB dan memasang pelindung Arduino ke catu daya. Saya menggunakan Catu Daya Pengalihan Ringkas - Output yang Dapat Dipilih 3-12VDC (ID produk Adafruit:1448).

Sekarang tempatkan kartu SD Anda di slot kartu SD. Menggunakan Terminal Serial di Intel XDK, gunakan baris perintah untuk memeriksa kartu dengan memasukkan perintah berikut:

cd /media/sdcard

ls

Ini akan menampilkan file apa pun yang ada di kartu, atau tidak sama sekali jika tidak ada file. Anda seharusnya tidak melihat pesan kesalahan apa pun. Jika Anda melihat pesan kesalahan, saya sarankan untuk me-reboot papan Edison tanpa melepas kartu SD dengan memasukkan perintah ini:

boot ulang

Kemudian ulangi perintah di atas setelah masuk kembali ke Edison Anda.

Sekarang, untuk mengizinkan Edison kami mengakses Bluetooth, masukkan perintah berikut:

rfkill buka blokir bluetooth

Untuk mengonfirmasi bahwa bluetooth aktif dan berfungsi, masukkan:

bluetoothctl

Kemudian ketik

pindai aktif

Ini harus ditampilkan di perangkat BLE seperti:

Sekarang keluar dari bluetoothctl, dan klik pada tab Intel XDK IoT lalu sambungkan ke papan Anda. Pilih proyek dari menu sebelah kiri, seperti BLSCAN. Hapus konten index.js dan hapus dependensi dari file package.json.

Ganti konten index.js dengan program dari repositori github kami di sini. Unggah kode ini ke Edison Anda. Pastikan Arduino 101 dalam keadaan hidup dan jalankan kode Edison. Setelah Edison mendeteksi Arduino 101 Anda, Anda akan melihat sesuatu seperti ini:

Kode:

Kode yang berjalan di Edison ditulis dalam JavaScript atau lebih tepatnya Node.js. Setelah membuat objek yang diperlukan dari perpustakaan yang diimpor, kami akan membuat variabel untuk mewakili layanan BLE yang berjalan di Arduino 101.

noble.js

 // Layanan dan Karakteristik BLE untuk bangsawan // Ini harus sesuai dengan layanan periferal dan karakteristik UUID // ( pada Arduino 101 dalam kasus ini) var LOCAL_NAME ='bird'; var SERVICE_UUID ='917649a0d98e11e59eec0002a5d5c51b'; //tanpa tanda hubung!!!! var PERCH_UUID ='917649a1d98e11e59eec0002a5d5c51b'; var TEMPERATURE_UUID ='917649a2d98e11e59eec0002a5d5c51b'; var HUMIDITY_UUID ='917649a3d98e11e59eec0002a5d5c51b'; var FEED_UUID ='917649a4d98e11e59eec0002a5d5c51b';  

UUID ini akan digunakan oleh mulia.js. Jika Anda mengubah UUID di Arduino Anda, mereka juga harus diubah di sini. Penting untuk memastikan Anda tidak memiliki tanda hubung agar mulia.js berfungsi dengan baik.

Untuk bekerja dengan mulia.js kita harus memindai perangkat BLE periferal dan kemudian menemukannya dan kemudian menghubungkannya. Setelah terhubung, kami akan menjalankan karakteristik yang tersedia untuk digunakan, menggunakan definisi UUID di atas. Karakteristiknya adalah karakteristik read/notify.

noble.on('discover', function(peripheral){ console.log('Ditemukan Perangkat BLE:[' + peripheral.id + '] ' + peripheral.advertisement.localName); if(peripheral. ads.localName ==LOCAL_NAME){ console.log('Ditemukan:' + peripheral.advertisement.localName); } peripheral.connect(function(error) { console.log('Tersambung ke periferal:' + peripheral.uuid); mulia.stopScanning(); // mencegah kami mengambil layanan "nyasar" peripheral.discoverServices([SERVICE_UUID], function(error, services) { console.log('services:' + services.length); var feederService =services [0]; console.log('Bird Feeder Service!'); feederService.discoverCharacteristics([], function(error, karakteristik) { karakteristik.forEach(fungsi(karakteristik) { console.log('karakteristik UUID:' + karakteristik .uuid); character.on('data', function(data, isNotification) { transformRawData(characteristic.uuid,data); }); character.notify('true', function(error) { if (error) throw e kesalahan; }); }); }); }); }); });  

Ada 2 elemen kunci untuk ditunjukkan dari bagian kode di atas. Pertama, ada perubahan dalam cara Anda memberi tahu Noble.js bahwa ini adalah karakteristik baca/pemberitahuan. Dari halaman github Sandeep Mistry:

Data

Dipancarkan saat pembacaan karakteristik selesai, hasil dari characteristic.read(...) atau nilai karakteristik telah diperbarui oleh perangkat melalui pemberitahuan atau indikasi - setelah diaktifkan dengan notify(true[, callback(error)]) .

character.on('data', callback(data, isNotification));

character.once('read', callback(data, isNotification)); // warisan

Perubahannya dari 'baca' menjadi 'data'. Kami mengalami beberapa masalah di sini secara tidak sengaja menggunakan versi lama dari bangsawan dan kemudian mengubah versi terbaru. Butuh waktu berjam-jam untuk mencari tahu apa yang terjadi, jadi kami ingin membantu Anda menghindari hal ini

Kunci lainnya di sini adalah fungsi transformRawData(characteristic.uuid,data). Fungsi ini mengambil uuid dan data yang dikirimkan dari pembacaan dan meneruskannya ke fungsi besar dan berat. Setiap kali mekanisme notifikasi BLE diaktifkan oleh perubahan karakteristik, fungsi ini dipanggil dan menangani data yang diterima. Di sinilah semua kegembiraan terjadi.

tranformRawData memeriksa untuk melihat karakteristik apa yang diterima.

Jika Arduino memberi tahu kami bahwa ada aktivitas di tempat bertengger, kami ingin mengambil gambar. Dalam hal ini, kami menggunakan pustaka child_process untuk membuat panggilan ke program fswebcam yang berada di luar sistem Yocto(linux). Pustaka child_process memungkinkan kita untuk menjalankan fungsi baris perintah dari dalam kode node.js kita. Ini adalah fitur yang sangat kuat.

childProcess.execFile('fswebcam',['-r 1280x720',fileName],function(error,stdout,stderr) { console.log(stdout); );  

PubNub dan Cloudinary:

Fungsi ini juga tempat PubNub dan Cloudinary ikut bermain! PubNub menyediakan jaringan streaming data waktu nyata ke aplikasi Anda. Artinya, dengan koneksi internet, aplikasi Anda dapat melakukan streaming data langsung di mana saja di dunia. Aplikasi atau program lain apa pun yang memiliki kunci langganan untuk streaming yang Anda publikasikan akan memiliki akses ke payload JSON yang mewakili data Anda. Dalam kasus kami, kami mengirimkan jumlah benih, suhu, kelembaban, dan jumlah kunjungan tempat bertengger saat ini. Selain itu, kami mengirimkan tautan ke 3 gambar pengumpan terbaru! Ini adalah jpeg yang telah diunggah ke Cloudinary dengan program kami. Tidak perlu menjalankan server! File HTML sederhana dengan JavaScript yang disematkan berfungsi sebagai antarmuka waktu nyata ke pengumpan burung kami atas izin PubNub!

Pada gambar di atas, saya cukup mengirim email ke diri saya sendiri file HTML yang berisi kode untuk berinteraksi dengan pengumpan burung melalui PubNub dan memuat masing-masing dari direktori lokal ke browser Chrome. Anda tidak perlu membuat kode server untuk menyajikan halaman ini di Edison Anda.

Cloudinary adalah layanan pengunggahan, penyimpanan, dan transformasi gambar. Ini memiliki api yang sangat sederhana untuk digunakan. Dalam mengembangkan proyek ini, saya tidak dapat menemukan api yang lebih mudah dan langsung untuk digunakan. Tidak ada yang sebanding di luar sana. Meja bantuan mereka juga fantastis. Ini pasti sesuatu yang ingin Anda periksa untuk proyek Anda!

Dalam kode di bawah ini kami menggunakan api cloudinary untuk mengunggah 3 gambar terbaru dari kartu SD lokal. URL yang dikembalikan dari unggahan ini kemudian disimpan dalam larik. URL ini kemudian dikirim sebagai bagian dari muatan JSON kami ke PubNub sehingga dapat diakses oleh halaman HTML kami untuk ditampilkan. Cantik, ya?!

index.html

Tentang apa file index.html ini? File index.html adalah UI kami. Karena kami mengalirkan data kami menggunakan PubNub dan menempatkan gambar kami di URL yang dapat diakses publik dengan Cloudinary, kami dapat memanfaatkan kekuatan trio Javascript/HTML/CSS untuk membuat UI portabel. PubNub dan Cloudinary keduanya sangat mudah digunakan dan kuat API Javascript. Kami cukup mengimpornya ke file html kami untuk menggunakannya:

     

Saat membuat objek PubNub, kami memberikannya kunci berlangganan ke aliran data kami dan itu dapat mengakses aliran data secara real time setiap kali kami memublikasikan aliran ini.

 

Proses manufaktur

  1. DHT Tiny Breakout untuk Raspberry Pi
  2. HC-SR04 Ultrasonic Range Sensor pada Raspberry Pi
  3. Aksesori terbaik untuk Raspberry Pi Anda
  4. SIGHT:Untuk Tunanetra
  5. Intel Meminta Udacity untuk Memberikan Gelar untuk AI di Edge
  6. Cara Memilih Sensor yang Tepat untuk Mengisi Aplikasi
  7. Sensor Film untuk Dirgantara
  8. WiFi RSSI Sensor Tracker untuk ISS
  9. Alat Matematika Baru Dapat Memilih Sensor Terbaik untuk Pekerjaan
  10. Tantangan metode 5S untuk industri 4.0