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

Pelacak Pendakian

Komponen dan persediaan

Arduino 101
× 1
Baterai AA
× 1
tempat baterai 4xAA
× 1
Aksesori Dilindungi
× 1
Sensor Tekanan Adafruit BMP180
× 1
Adafruit Ultimate GPS Breakout
× 1
Adafruit - Magnetik 3 Sumbu
× 1
Sensor Kelembaban Adafruit AM2320
× 1
Adafruit Coin Cell CR2012
× 2
Resistor 10k ohm
× 1
Resistor 3.9 k
× 1

Alat dan mesin yang diperlukan

Pistol lem panas (generik)
Besi solder (generik)

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Apa itu Pelacak Pendakian ?

Hiking Tracker adalah perangkat untuk merasakan perubahan lingkungan sekitar pejalan kaki selama hiking.

Idenya adalah untuk mengamati perubahan suhu, tekanan, kelembaban, ketinggian, lokasi, arah, dll. Ini memberikan beberapa wawasan menarik tentang hiking.

Di pegunungan di mana udaranya dingin, kering, kepadatan rendah dibandingkan dengan dataran rendah, banyak orang merasa sulit untuk bernapas. Beberapa mengalami iritasi kulit kering. Perangkat ini memungkinkan orang yang tertarik mendaki untuk mengetahui batasannya. Ada juga kesenangan pergi ke tempat-tempat ketinggian. Bisa mengetahui ketinggian adalah hal yang menyenangkan!

Tidak hanya pegunungan tetapi juga menjelajahi rawa, gurun, hutan - dengan masing-masing memiliki profil lingkungan yang unik, dapat memantau lingkungan saat bepergian adalah cara yang lebih baik untuk memahami alam.

Peragaan Video

Langkah 1 :Perangkat keras, untuk apa ?

Ada banyak perasaan yang terjadi dengan proyek ini

Perisai aksesori dilengkapi dengan beberapa perangkat I2C di dalamnya :

  • Sensor suhu LM 75B untuk mendeteksi suhu sekitar
  • ADXL345 3-sumbu akselerometer untuk merasakan kemiringan dan gravitasi
  • DS3231 RTC presisi tinggi untuk waktu penginderaan
  • Sensor magnetik 3-sumbu HMC5883 untuk mengindra arah kompas
  • Sensor kelembaban AM2320 untuk mendeteksi % RH udara
  • Sensor tekanan BMP180 untuk mendeteksi tekanan atmosfer dan ketinggian
  • Sensor GPS MTK3339 untuk mendeteksi lokasi dan jarak berjalan kaki

Di Arduino Uno:

  • Pembagi tegangan 3,9k + 22k untuk sensing 4 AA tegangan baterai
  • 1306 OLED untuk melihat data
  • Buzzer untuk bunyi alarm
  • LED RGB tidak diperlukan untuk proyek ini
  • Antarmuka XBee tidak digunakan tetapi Arduino D2, D3, D9, D10 dapat dibawa keluar dari antarmuka ini untuk proyek lain, D2 terhubung untuk mengatur ulang, yang memungkinkan pengaturan ulang Arduino dari kode!
  • Joystick 5 arah tidak digunakan
  • 101 pot tidak digunakan

Langkah 2:Memodifikasi &Menghubungkan Perangkat Keras

Beberapa modifikasi dilakukan pada Arduino Uno. Itu dipasang pada dudukan Baterai 4 AA dengan sekrup dan lem panas.

4 AA dan CR1220 (untuk RTC) dipasang pada dudukan baterai.

Terdapat ruang antara dudukan baterai dan papan Arduino Uno tempat sensor tekanan, kelembapan, magnet, dan GPS dapat ditempatkan.

Sensor I2C disolder bersama pada selembar papan pilihan dan ditempatkan di ruang ini

Sensor ini terhubung ke Arduino Uno dari sisi bawah :

Pembagi tegangan ditambahkan untuk mengukur tegangan baterai dari 4 baterai AA.

Jalur sensor tegangan paket baterai AA menuju ke ADC A1 :

Joystick pelindung dipetakan ke pin ACD A1 melalui pin A5. Itulah sebabnya joy stick disolder dan dilepas.

Dengan menghubungkan beberapa pad pada Accessory Shield (untuk referensi lihat skema) dengan jembatan solder D2 (untuk soft reset), pin Arduino D3, D9, D10 tersedia pada antarmuka Xbee.

Komponen menumpuk seperti ini:

  • Lapisan Atas :Perisai Aksesori di Arduino
  • Lapisan Tengah:Sensor dan GPS lain akan berada di antara Uno dan Casing Baterai
  • Lapisan Bawah:4 Tempat Baterai AA dengan baterai

Dan koneksinya terlihat seperti ini:

Langkah 3:Memprogram Perangkat

Arduino IDEBuild 1.8.5 digunakan untuk memprogram perangkat. Pertama, semua library berikut disertakan atau diunduh menggunakan pengelola perpustakaan.

Dengan mengetikkan nama sensor pada kotak pencarian pengelola perpustakaan, perpustakaan yang sesuai akan muncul.

Beberapa perpustakaan Accessory Shield (lihat referensi) ditambahkan melalui opsi zip.file

Setelah menambahkan library yang diperlukan, kode contoh untuk setiap sensor ditinjau untuk mengetahui API untuk sensor terkait.

Selanjutnya, semua header perpustakaan disertakan dalam satu sketsa Arduino kosong.

Daftar file Header

math.h,inttypes.h,Wire.h,lm75.h,ADXL345.h,ChainableLED.h,U8glib.h,ds3231.h,Adafruit_Sensor.h,Adafruit_AM2320.h,Adafruit_BMP085_U.h, Adafruit_HMC5883_U.h,Adafruit_GPS.h 

Setelah beberapa kali diedit, dikompilasi, dan di-debug (termasuk koneksi longgar, di mana saya menemukan BMP180 berfungsi tanpa Vcc karena kebocoran daya untuk pin I2C mungkin) dan mengunggah - akhirnya kodenya siap.

Peringatan

  • Penghitungan ketinggian didasarkan pada Penurunan Tekanan Udara, hanya berlaku selama kondisi cuaca normal.
  • Kode kompas tidak dikompensasi kemiringan dalam perangkat lunak, perangkat harus dipegang di bidang datar. Ada lingkaran kompas tetap, di mana ada lingkaran radius variabel lain. Saat perangkat dimiringkan, lingkaran dalam akan bertambah. Ketika berada dalam posisi datar (yaitu komponen x dan y dari akseleromer hampir 0 ) lingkaran dalam akan berkurang menjadi satu titik. Ini adalah saat arah kompas lebih akurat.
  • Sudut deklinasi penunjuk kompas bergantung pada lokasi dan variasi medan magnet bumi. Yang mungkin terpengaruh oleh badai Matahari. Jika sudut deklinasi tidak disertakan, arah kompas akan menyimpang beberapa derajat.

Temukan deklinasi untuk area Anda:http://www.magnetic-declination.com

  • Judul kompas rentan terhadap benda-benda magnetis di dekatnya, seperti keberadaan mineral magnetik yang kuat di pegunungan.
  • Tegangan pengoperasian minimum perangkat sekitar 4,5 volt. Inilah saatnya baterai AA harus diganti.
  • Waktu dan Tanggal diprogram dari kode, Jika waktu diperlukan untuk mengganti baterai sel berbentuk koin harus dicabut dan dicolokkan. Unggahan program baru dengan waktu baru dalam kode akan mengubah waktu.
  • Selama pengembangan, modul GPS tidak tersedia. Oleh karena itu, koordinat demo ditempatkan di Lat-Long. Jika seseorang ingin mereplikasi proyek ini, ia harus menyertakan pustaka GPS dan kode terkait.
  • Bidang XY Akselerometer dan Magnetometer dapat ditempatkan pada PCB. Kode diperlukan untuk penyesuaian yang sesuai.
  • Akurasi pembacaan akselerometer rentan terhadap getaran. Disarankan untuk menggunakan perangkat dalam kondisi diam.

Lingkup Peningkatan

Perbaikan dapat dilakukan dari sisi firmware untuk beberapa fitur lainnya:

  • Pencatatan parameter secara berkala di EEPROM
  • Buzzer alarm berbunyi saat mencapai ketinggian/pencapaian lokasi
  • Pengingat minum air
  • Pengingat istirahat
  • Alarm baterai lemah
  • Suhu rendah, peringatan kelembaban
  • Kalibrasi perangkat lunak kompas untuk kompensasi kemiringan (banyak hal trigonometri)
  • Penolakan pengambilan otomatis menggunakan konektivitas GPS dan IoT melalui aplikasi Gateway

Adapun bagian peningkatan perangkat keras :

  • Sakelar input pengguna untuk pengaturan waktu, deklinasi, dll.
  • Casing 3D khusus untuk perangkat
  • Menggunakan Baterai LiPo Isi Ulang
  • Desain PCB kompak papan tunggal untuk portabilitas lebih

Kesimpulan

Traveling &Hiking itu keren, ketika Anda dapat memeriksa perubahan di lingkungan sekitar, itu membuat segalanya lebih menarik. Khususnya, memeriksa ketinggian, kelembaban, tekanan, dan perubahan suhu dalam beberapa jam saat mendaki. Perangkat ini memberi tahu Anda pada ketinggian berapa Anda merasakan penyakit ketinggian, tingkat kelembaban apa yang membuat kulit Anda kering - hal-hal seperti itu. Meskipun ada ruang untuk perbaikan baik dalam tata letak sirkuit dan kode untuk menangani peringatan, itu masih keren untuk memiliki gadget seperti ini saat pergi ke hutan belantara!

Sumber Daya Eksternal

https://www.waveshare.com/wiki/Accessory_Shield

Perangkat Prototipe Cepat

Kode

  • Hiking_Tracker.ino
  • Perpustakaan
Hiking_Tracker.inoC/C++
main.c
/*/////////// CATATAN //////////D2 memungkinkan soft reset yang dapat ditegaskan dari codeD3,D9,D10 tersedia melalui 12,13,16 xbee interfaceD4, D13 tidak dapat diakses/////////////////////////*///// FILE HEADER UNTUK PERPUSTAKAAN /////# include #include #include #include #include #include #include "U8glib.h"#include "ds3231.h"#include "Adafruit_Sensor.h"#include "Adafruit_AM2320.h"#include #include #include ////////// /////////////Variabel RTC//////////////////uint8_t waktu[8];struct ts t;int s;int m; int h;int dy;int mo;int thn;//////////////// Variabel Akselerometer/////////////float X=0.0;float Y=0,0;mengambang Z=0,0;mengambang Gravitasi =0,0;//////////////// Variabel Akselerometer/////////////mengambang Xm=0,0;mengambang Ym=0,0;mengambang Zm=0,0; /////////////////////// Variabel LED RGB///////////////const int rgb_pwr =12; const int clk_pin =6; const int data_pin =5; float hue =0.0;boolean up =true;///////////////////// potensiometer///////////////// //int pot=0; //////////////////// Batt/Supply Vin ////////////////float Vbatt =0.0;//// //////////////////Termometer///////////////////suhu mengambang =0,0;////// /////////////// Kelembaban//////////////////////kelembaban mengambang =0,0;////// //////////////Tekanan udara///////////////////double prsr =0.0;///////// ///////////Ketinggian ///////////////////float alt =0,0;//////////// ////// Lintang, Panjang////////////////////float lat =0,0; Float lon =0.0;//////////////////Compass Heading////////////////Float heading =0.0;/// ////////////////// Variabel Ohter //////////////int mstime =0;int sensor_selector =1;///// /////// ENUM //I2C Jenis perangkat Objek ////////////////U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C OLED DisplayTempI2C_LM75 termo =TempI2C_LM75(0x48,TempI2C_LM75::nine_bits); // akselerometer Sensor Suhu I2CADXL345; // I2C Acce SensorChainableLED leds(clk_pin, data_pin, rgb_pwr, 1); // I2C RGB LEDAdafruit_AM2320 am2320 =Adafruit_AM2320(); // Sensor Kelembaban I2CAdafruit_BMP085_Unified bmp180 =Adafruit_BMP085_Unified(10085); // Sensor Tekan I2CAdafruit_HMC5883_Unified mag =Adafruit_HMC5883_Unified(12345); // I2C Compa Sensor// batalkan komentar pada 2 baris berikut untuk mengaktifkan GPS// Serial Debugging tidak akan tersedia//HardwareSerial mySerial =Serial;//Adafruit_GPS GPS(&mySerial); void setup(void) {// 1.1V Internal Analog Ref //analogReference(INTERNAL);//////////// Sinyal untuk OLED pada Accessory Shield /////////// //// dijembatani solder pada pelindung yang dibutuhkan untuk D2,D3,D9,D10// pinMode(2,1); // reset sendiri D2 ke RST pinMode(3,1); // keluar di xbee int 12, pinMode(9,1); // out di xbee int 13 pinMode(10,1);// out di xbee int 16// digitalWrite(2,HIGH); digitalWrite(3,TINGGI); digitalWrite(9,RENDAH); digitalWrite(10,TINGGI); pinMode(7,1); pinMode(8,1); digitalWrite(7,TINGGI); digitalWrite(8,RENDAH); // 10rb POT di A0 // Vin Batt/Supply di A1 (3.91k/21.76k)/////////////////////////////////////// //////////////////////// Serial Comm untuk Debugging (opsional)////////// Serial.begin(9600);// //////////// Accel Init Menunggu ///////// if (!accelerometer.begin()) { delay(50); }/////////////// Interupsi RTC mengaktifkan /////////DS3231_init(DS3231_INTCN); //////////////// Buzzer Init ///////////////pinMode(11,1);digitalWrite(11,LOW); }void loop(void) { // gambar loop u8g.firstPage(); melakukan { menggambar(); } while( u8g.nextPage() );// beralih di antara sensor I2C sensor_selector++; if (sensor_selector>=3) {sensor_selector=0;}////// Temperatur Ambil API ////// temp=termo.getTemp(); delay(5);// "C/////// Pressure Fetch API ////////if(sensor_selector ==0){ ///////////// Sensor Tekanan Init ///////// if(!bmp180.begin()) delay(11); sensor_event_t event; bmp180.getEvent(&event); if (event.pressure) { prsr =event.pressure/10; / /hP ke kP delay(50); } }////////////// GPS Init ///////////GPS.begin(9600);//// /// Altitude Fetch API ////////if(sensor_selector ==0){ sensor_event_t event; bmp180.getEvent(&event); alt =bmp180.pressureToAltitude(1013.25,event.pressure); delay(50); // bmp180.end();}// dalam meter ////////////// Sensor Kelembaban Init ///////if(sensor_selector ==1){ am2320.begin(); delay(50);////// Humidity Fetch API ///////// lembab=am2320.readHumidity(); delay(50);// am2320.end(); // dalam % dari RH}// dalam kPa////// Acceleration Fetch API ////// Norma vektor =accelerometer.readNormalize(); X =norma.XAxis; Y =norma.YAxis; Z =norma.ZAxis; Gravitasi =sqrt(X*X + Y*Y+ Z*Z)-(0.3);// offset// dalam m/s^2///// Time Fetch API //////// DS3231_get(&t); s=t.detik; m=t.min; t=t. jam; hari=t.mhari; bulan=t.mon; tahun=t.tahun; ///// Posisi Pot Ambil /////// pot=analogRead(A0)*5/(10*3); delay(2);///// VBatt/Supply Fetch /////// // 1.1 adalah 1.08 untuk chip ini Vbatt=(1.08*analogRead(A1)/1023)/3.91*((3.91+21.76) ); delay(2);///////// Judul Kompas ////////if(sensor_selector ==2){ if(!mag.begin()) { while(1); } // tunda(70); sensor_t sensor2; mag.getSensor(&sensor2); penundaan (70); // sudut deklinasi bergantung pada Lokasi Geografis // gunakan Panjang Lintang dari GPS untuk menghitung sensor_event_t event2; mag.getEvent(&event2); // Xm =event2.magnetic.x; // Ym =event2.magnetic.y; penundaan (70); deklinasi float =0,0; heading =atan2(event2.magnetic.y, event2.magnetic.x); pos +=deklinasi; // tanda koreksi if(heading <0) heading +=2*PI; if(heading> 2*PI) heading -=2*PI; // Konversi radian ke derajat agar mudah dibaca. heading =heading * 180/M_PI; // mag.end();} ///// Kontrol Buzzer ////////// if (pot>80) {digitalWrite(11,1);} else {digitalWrite(11,0); }///// Kontrol LED Beralamat RGB //////////// if(pot>40) { leds.pwr_set(PWR_ENABLE); for (byte i=0; i<1; i++) leds.setColorHSB(i, hue, 1.0, 0.5); jika (naik) rona+=0,025; warna lain-=0,025; if (hue>=1.0 &&up) up =false; else if (hue<=0.0 &&!up) up =true; }//////////////////////////////////////// Self Reset //// /////// // digitalWrite(2,LOW);/////////////////////////////// } ///////// Void Loop berakhir Disini ////////////////////// Oled Gambar Loop Draw Fn///////// //////////void draw(void) { u8g.setFont(u8g_font_7x13); u8g.drawHline(37, 0, 62); u8g.setPrintPos(41, 12);if(h<10) u8g.print(0);u8g.print(h);u8g.drawStr( 54,12, ":"); u8g.setPrintPos(62, 12);if(m<10) u8g.print(0);u8g.print(m);u8g.drawStr( 75,12,":"); u8g.setPrintPos(83, 12);if(s<10) u8g.print(0);u8g.print(s); u8g.drawHline(37, 14, 62); u8g.setFont(u8g_font_5x8); u8g.drawVLine(37, 0, 14); u8g.setPrintPos(0, 7);if(dy<10) u8g.print(0);u8g.print(dy);u8g.drawStr( 11,7, "/"); u8g.setPrintPos(17, 7);if(mo<10) u8g.print(0);u8g.print(mo);u8g.drawStr( 0,16,"/"); u8g.setPrintPos(6, 16);u8g.print(thn); u8g.drawVLine(99, 0, 14); u8g.drawStr( 104,7,"BATT"); u8g.setPrintPos(102, 15); u8g.print(Vbatt);u8g.drawStr( 123,15,"V");// u8g.setFont(u8g_font_7x13);// u8g.setPrintPos(40, 25); u8g.print(round(temp));u8g.drawStr( 55,25, "'C");// u8g.print(round(temp)); u8g.setFont(u8g_font_5x8);// u8g.drawStr( 5,40, "x "); u8g.setPrintPos(15, 40); u8g.print(bulat(X));// u8g.drawStr( 50,40,"y "); u8g.setPrintPos(60, 40); u8g.print(bulat(Y));// u8g.drawStr( 90,40,"z "); u8g.setPrintPos(100, 40); u8g.print(bulat(Z));// u8g.drawStr( 68,22,"BATT:"); u8g.setPrintPos(95, 22); u8g.print(Vbatt);u8g.drawStr( 123,22,"V"); u8g.drawVLine(37, 18, 36); u8g.drawStr( 39,24,"SUHU UDARA:"); u8g.setPrintPos(85, 24); u8g.print(temp);u8g.drawStr( 118,24,"C"); u8g.drawStr( 39,34,"KELEMBABAN:"); u8g.setPrintPos(85, 34); u8g.print(lembab);u8g.drawStr( 118,34,"%"); u8g.drawStr( 39,44,"TEKANAN:"); u8g.setPrintPos(85, 44); u8g.print(prsr);u8g.drawStr( 118,44,"hP"); u8g.drawStr( 39,54,"ALTITUDE:"); u8g.setPrintPos(85, 54); u8g.print(bulat(alt));u8g.drawStr( 118,54,"m"); u8g.drawHline(0, 56, 128); u8g.drawStr( 19,64,"LAT:");u8g.setPrintPos(39, 64); u8g.print(23.57); // Demo, ganti dengan LAT saat GPS menambahkan u8g.drawStr( 69,64,"LONG:");u8g.setPrintPos(94, 64); u8g.print(90.36);// demo, ganti dengan LON saat GPS ditambahkan // u8g.setPrintPos(40, 25); u8g.print(round(temp));u8g.drawStr( 55,25, "'C"); int r =bulat(kuadrat(X*X + Y*Y)); // float tid =atan(Y/X)*180/3.1415;// soal matematika di sini // int radius =round(tid); u8g.drawStr( 0,22,"judul"); u8g.drawCircle(18, 34,r, U8G_DRAW_ALL);// lingkaran leveling bagian dalam u8g.drawCircle(18, 34,10, U8G_DRAW_ALL);// lingkaran tetap luar // lingkaran dalam akan menjadi titik ketika tidak ada kemiringan di x dan sumbu y // ini adalah saat arah kompas lebih akurat //u8g.drawLine(18, 34,(18+round(Y*2)),(34+round(X*2))); //meningkatkan 2x u8g.setPrintPos(0, 53); u8g.print(judul); // 0 atau 360 adalah N // 90 adalah E // 180 adalah S // 270 adalah W // u8g.setFont(u8g_font_5x8); if ((pos>315)|(pos<=45)) {u8g.drawLine(18,34,8,34); }if ((heading>45)&(heading<=135)){u8g.drawLine(18,34,18,24);}if ((heading>135)&(heading<=225)){u8g.drawLine (18,34,28,34);}if ((pos>225)&(pos<315)){u8g.drawLine(18,34,18,44);}// u8g.drawLine(18, 34, (18+putaran(Y*2)),(34+putaran(X*2))); //ditingkatkan 2x BERDASARKAN ACCELAROMETER // loop berakhir di sini }
PerpustakaanC/C++
Buka ritsletingnya dan tambahkan ritsleting perpustakaan individual ke Arduino Library Manager
Tanpa pratinjau (hanya unduh).

Skema


Proses manufaktur

  1. Apa itu Sensor O2?
  2. Sensor Gerak menggunakan Raspberry Pi
  3. Sensor Kelembaban Tanah Raspberry Pi
  4. Ubah Raspberry Pi Anda menjadi Pelacak Kebugaran Hamster
  5. Uji sensor DS18B20
  6. Sensor Suhu Raspberry Pi
  7. Pelacak Toilet (Diberdayakan oleh Walabot)
  8. Sensor Emosi / EEG
  9. Windows 10 IoT Core pada Raspberry Pi 2 – Data Adafruit Sensor
  10. WiFi RSSI Sensor Tracker untuk ISS