제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
|
|
하이킹 트래커가 무엇인가요?
하이킹 트래커는 하이킹 중 등산객의 주변 환경 변화를 감지하는 장치입니다.
아이디어는 온도, 기압, 습도, 고도, 위치, 방향 등의 변화를 관찰하는 것입니다. 하이킹에 대한 흥미로운 통찰력을 제공합니다.
저지대에 비해 춥고 건조하며 밀도가 낮은 산에서는 많은 사람들이 숨을 쉬기 힘들어합니다. 일부는 건조한 피부 자극을 경험합니다. 이 장치를 사용하면 하이킹에 관심이 있는 사람들이 자신의 한계를 알 수 있습니다. 고지대에 가는 재미도 있다. 고도를 알 수 있다는 것은 재미있는 일입니다!
산뿐만 아니라 늪, 사막, 숲을 탐험하는 것도 각각 고유한 환경 프로필을 가지고 있기 때문에 이동 중에도 환경을 모니터링할 수 있어 자연을 더 잘 이해할 수 있습니다.
비디오 데모
1단계:하드웨어, 무엇을 위한 것입니까?
이 프로젝트와 관련하여 많은 센세이션이 일어나고 있습니다.
액세서리 실드는 일부 I2C 장치와 함께 제공됩니다.
<울>Arduino Uno:
<울>
2단계:하드웨어 수정 및 연결
Arduino Uno에서 약간의 수정이 이루어졌습니다. 나사 스탠드오프와 핫 글루가 있는 4 AA 배터리 홀더에 장착됩니다.
그림>4 AA 및 CR1220(RTC용)은 배터리 홀더에 설치됩니다.
그림>배터리 홀더와 Arduino Uno 보드 사이에 압력, 습도, 자기 및 GPS 센서를 배치할 수 있는 공간이 있습니다.
그림>I2C 센서는 Pref 보드에 함께 납땜되어 이 공간에 배치됩니다.
그림>이 센서는 아래쪽에서 Arduino Uno에 연결됩니다.
AA 배터리 4개의 배터리 전압을 측정하기 위해 전압 분배기가 추가되었습니다.
AA 배터리 팩 전압 감지 라인은 ADC A1에 연결됩니다.
실드의 조이스틱은 ACD 핀 A1에서 A5까지 매핑됩니다. 그래서 조이스틱을 납땜 제거하고 제거합니다.
액세서리 실드의 일부 패드(개략도 참조 참조)를 솔더 브리지 D2(소프트 리셋용)와 연결하면 Arduino의 D3, D9, D10 핀을 Xbee 인터페이스에서 사용할 수 있습니다.
그림>구성 요소 스택은 다음과 같습니다.
<울>연결은 다음과 같습니다.
3단계:장치 프로그래밍
아두이노 IDEBuild 1.8.5
장치를 프로그래밍하는 데 사용됩니다. 먼저 라이브러리 관리자를 사용하여 다음 라이브러리를 모두 포함하거나 다운로드합니다.
라이브러리 매니저의 검색창에 센서 이름을 입력하면 해당 라이브러리가 나타납니다.
일부 액세서리 실드 라이브러리(참조 참조)는 zip.file 옵션을 통해 추가됩니다.
필요한 라이브러리를 추가한 후 각 센서에 대한 예제 코드를 검토하여 관련 센서에 대한 API를 찾습니다.
다음으로 모든 라이브러리 헤더는 하나의 빈 Arduino 스케치에 포함됩니다.
헤더 파일 목록 <사전><코드>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
여러 번 편집한 후 컴파일 및 디버그(느슨한 연결 포함, I2C 핀의 누설 전력으로 인해 BMP180이 Vcc 없이 작동한다는 것을 발견) 및 업로드 - 마침내 코드가 준비되었습니다.
주의 사항 <울>
해당 지역의 적위 찾기 :http://www.magnetic-declination.com
<울>
개선 범위
몇 가지 추가 기능에 대해 펌웨어 측면에서 개선할 수 있습니다.
<울>하드웨어 부분은 개선:
<울>
결론
여행&산책은 쿨하고 주변 환경의 변화를 확인할 수 있어 더욱 흥미롭다. 특히 하이킹 중 고도, 습도, 기압 및 온도 변화를 몇 시간 이내에 확인하십시오. 이 장치는 당신이 고산병을 느끼는 높이, 피부를 건조하게 만드는 습도 수준 등을 알려줍니다. 주의 사항을 처리하기 위해 회로 레이아웃과 코드 모두에서 개선의 여지가 있지만, 광야에 가는 동안 이와 같은 장치가 있다는 것은 여전히 멋진 일입니다!
외부 리소스
https://www.waveshare.com/wiki/Accessory_Shield
이 프로젝트의 더 나은 버전을 위한 권장 하드웨어
신속한 프로토타이핑 키트
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">/*//////////// 참고 //////////D2는 codeD3,D9,D10에서 주장 가능한 소프트 리셋을 허용합니다. xbee interfaceD4, D13은 액세스할 수 없습니다.///////////////////////////*///// 라이브러리용 헤더 파일 /////# include#include #include #include #include #include #include "U8glib.h#include "ds3231.h#include "Adafruit_Sensor.h#include "Adafruit_AM2320.h#include #include #include /////////// /////////////RTC 변수//////////////////uint8_t time[8];struct ts t;int s;int m; int h;int dy;int mo;int yr;//////////////// 가속도계 변수/////////////float X=0.0;float Y=0.0, float Z=0.0, float 중력 =0.0;///////////////// 가속도계 변수/////////////float Xm=0.0;부동 Ym=0.0;부동 Zm=0.0; /////////////////////// RGB LED 변수///////////////const int rgb_pwr =12; const int clk_pin =6; const int data_pin =5; 플로트 색조 =0.0; 부울 업 =true;///////////////////// 전위차계///////////////// // 정수 포트 =0; //////////////////// Batt/Supply Vin /////////////////float Vbatt =0.0;//// //////////////////온도계///////////////////부동 온도 =0.0;////// /////////////// 습도///////////////////////부유 습도 =0.0;////// //////////////기압////////////////////이중 prsr =0.0;///////// ///////////고도 ////////////////////float alt =0.0;///////////// ////// 위도, 경도////////////////////float 위도 =0.0; float lon =0.0;/////////////////나침반 방향/////////////////float 표제 =0.0;/// ////////////////// 기타 변수 ///////////////int mstime =0;int sensor_selector =1;///// /////// ENUM //I2C 장치 유형 개체 ////////////////U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C OLED 디스플레이TempI2C_LM75 termo =TempI2C_LM75(0x48,TempI2C_LM75::nine_bits); // I2C 온도 센서ADXL345 가속도계; // I2C Acce SensorChainableLED leds(clk_pin, data_pin, rgb_pwr, 1); // I2C RGB LEDAdafruit_AM2320 am2320 =Adafruit_AM2320(); // I2C 습도 센서Adafruit_BMP085_Unified bmp180 =Adafruit_BMP085_Unified(10085); // I2C 프레스 센서Adafruit_HMC5883_Unified mag =Adafruit_HMC5883_Unified(12345); // I2C Compa Sensor // GPS를 활성화하려면 다음 2줄의 주석 처리를 제거합니다. // 직렬 디버깅을 사용할 수 없습니다.//HardwareSerial mySerial =Serial;//Adafruit_GPS GPS(&mySerial); void setup(void) {// 1.1V 내부 아날로그 참조 //analogReference(INTERNAL);///////////// 액세서리 실드의 OLED 신호 /////////// //// D2,D3,D9,D10에 필요한 쉴드에 브리지된 솔더// pinMode(2,1); // D2를 RST로 자체 리셋 pinMode(3,1); // xbee에서 출력 int 12, pinMode(9,1); // xbee int 13에서 출력 pinMode(10,1);// xbee에서 출력 int 16// digitalWrite(2,HIGH); 디지털 쓰기(3, 높음); 디지털 쓰기(9,LOW); 디지털 쓰기(10, 높음); 핀모드(7,1); 핀모드(8,1); 디지털 쓰기(7, 높음); 디지털 쓰기(8,LOW); // A0의 10k POT // Vin Batt/A1의 공급(3.91k/21.76k)///////////////////////////// ///////////////////////// 디버깅을 위한 직렬 통신(선택 사항)////////// Serial.begin(9600);// //////////// 가속 초기화 대기 ///////// if (!accelerometer.begin()) { delay(50); }/////////////// RTC 인터럽트 활성화 /////////DS3231_init(DS3231_INTCN); //////////////// 부저 초기화 ////////////////pinMode(11,1);digitalWrite(11,LOW); }void loop(void) { // 그림 루프 u8g.firstPage(); { 무승부(); } while( u8g.nextPage() );// I2C 센서 간 전환 sensor_selector++; if (sensor_selector>=3) {sensor_selector=0;}////// 온도 가져오기 API ////// temp=termo.getTemp(); delay(5);// "C/////// 압력 가져오기 API ////////if(sensor_selector ==0){ ///////////// 압력 센서 초기화 ///////// if(!bmp180.begin()) 지연(11); sensor_event_t 이벤트; bmp180.getEvent(&event); if(event.pressure) { prsr =event.pressure/10; / /hP에서 kP로의 지연(50); } }////////////// GPS 초기화 ////////////GPS.begin(9600);//// /// 고도 가져오기 API ////////if(sensor_selector ==0){ sensor_event_t event; bmp180.getEvent(&event); alt =bmp180.pressureToAltitude(1013.25,event.pressure); delay(50); // bmp180.end();}// 미터 단위 ////////////// 습도 센서 초기화 ///////if(sensor_selector ==1){ am2320.begin(); delay(50);////// 습도 가져오기 API ///////// wet=am2320.readHumidity(); delay(50);// am2320.end(); // % RH}// in kPa////// Acceleration Fetch API ////// Vector norm =accelerometer.readNormalize(), X =norm.XAxis, Y =norm.YAxis, Z =norm.ZAxis, 중력 =sqrt(X*X + Y*Y+ Z*Z)-(0.3);// offset// in m/s^2///// 시간 가져오기 API //////// DS3231_get(&t); s=t.sec, m=t.min, h=t. 시; dy=t.mday; mo=t.mon; 년 =t.년; ///// 포트 위치 가져오기 /////// pot=analogRead(A0)*5/(10*3); delay(2);///// VBatt/Supply Fetch ////// // 이 칩의 경우 1.1은 1.08입니다. Vbatt=(1.08*analogRead(A1)/1023)/3.91*((3.91+21.76) ); delay(2);///////// 나침반 방향 ////////if(sensor_selector ==2){ if(!mag.begin()) { while(1); } // 지연(70); sensor_t sensor2; mag.getSensor(&sensor2); 지연(70); // 편각은 지리적 위치에 따라 다릅니다. // GPS의 위도를 사용하여 sensor_event_t를 계산합니다. event2; mag.getEvent(&event2); // Xm =event2.magnetic.x; // Ym =event2.magnetic.y; 지연(70); 부동 소수점 편차 =0.0; 표제 =atan2(event2.magnetic.y, event2.magnetic.x); 표제 +=적위; // 부호 수정 if(heading <0) header +=2*PI; if(제목> 2*PI) 제목 -=2*PI; // 가독성을 위해 라디안을 각도로 변환합니다. 표제 =표제 * 180/M_PI; // mag.end();} ///// 부저 제어 ///////// if (pot>80) {digitalWrite(11,1);} else {digitalWrite(11,0); }///// RGB 주소 지정 가능 LED 제어 ///////////// if(pot>40) { leds.pwr_set(PWR_ENABLE); (바이트 i=0; i<1; i++) leds.setColorHSB(i, 색조, 1.0, 0.5); if(위쪽) 색조+=0.025; 그렇지 않으면 색조-=0.025; if (색조>=1.0 &&up) up =false; else if (색조<=0.0 &&!up) up =true; }////////////////////////////////////////////// 자가 재설정 //// /////// // digitalWrite(2,LOW);////////////////////////////////// } ///////// Void Loop는 여기서 끝 //////////////////////// Oled Picture Loop Draw Fn///////// ////////// 무효 그리기(무효) { 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(년); 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(원형(온도));u8g.drawStr(55,25, "'C");// u8g.print(원형(온도)); u8g.setFont(u8g_font_5x8);// u8g.drawStr(5,40, "x"); u8g.setPrintPos(15, 40); u8g.print(라운드(X));// u8g.drawStr( 50,40,"y "); u8g.setPrintPos(60, 40); u8g.print(라운드(Y));// u8g.drawStr( 90,40,"z "); u8g.setPrintPos(100, 40); u8g.print(round(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,"공기 온도:"); u8g.setPrintPos(85, 24); u8g.print(temp);u8g.drawStr(118,24,"C"); u8g.drawStr( 39,34,"습도:"); u8g.setPrintPos(85, 34); u8g.print(습도);u8g.drawStr(118,34,"%"); u8g.drawStr( 39,44,"압력:"); u8g.setPrintPos(85, 44); u8g.print(prsr);u8g.drawStr(118,44,"hP"); u8g.drawStr( 39,54,"고도:"); u8g.setPrintPos(85, 54); u8g.print(둥근(알트));u8g.drawStr(118,54,"m"); u8g.drawHLine(0, 56, 128); u8g.drawStr(19,64,"LAT:");u8g.setPrintPos(39, 64); u8g.print(23.57); // 데모, GPS 추가 시 LAT로 대체 u8g.drawStr( 69,64,"LONG:");u8g.setPrintPos(94, 64); u8g.print(90.36);// 데모, GPS 추가 시 LON으로 대체 // u8g.setPrintPos(40, 25); u8g.print(라운드(온도));u8g.drawStr(55,25, "'C"); 정수 r =라운드(제곱(X*X + Y*Y)); // float tid =atan(Y/X)*180/3.1415;// 여기에 수학적 문제 // int radius =round(tid); u8g.drawStr(0,22,"제목"); u8g.drawCircle(18, 34,r, U8G_DRAW_ALL);// 내부 수평 원 u8g.drawCircle(18, 34,10, U8G_DRAW_ALL);// 외부 고정 원 // 내부 원은 x에 기울기가 없을 때 점이 됩니다. y 축 // 나침반 방향이 더 정확할 때입니다. //u8g.drawLine(18, 34,(18+round(Y*2)),(34+round(X*2))); //2배 확대 u8g.setPrintPos(0, 53); u8g.print(제목); // 0 또는 360은 N // 90은 E // 180은 S // 270은 W // u8g.setFont(u8g_font_5x8); if ((제목>315)|(제목<=45)) {u8g.drawLine(18,34,8,34); }if ((제목>45)&(제목<=135)){u8g.drawLine(18,34,18,24);}if ((제목>135)&(제목<=225)){u8g.drawLine (18,34,28,34);}if ((제목>225)&(제목<315)){u8g.drawLine(18,34,18,44);}// u8g.drawLine(18, 34, (18+라운드(Y*2)),(34+라운드(X*2))); // 2x BASED ON ACCELAROMETER // 루프는 여기에서 끝납니다. }
미리보기 없음(다운로드만 가능).섹션>
제조공정
구성품 및 소모품 Arduino Mega 2560 × 1 NEO 6 GPS × 1 Adafruit SD 카드 실드 × 1 Adafruit SD 카드 실드 × 1 Seeedstudio gprs 방패 V2.0 × 1 시드 GPRS Shield V2.0 × 1 점퍼 와이어(일반) × 1 9V 배터리(일반) × 1 상자 × 1 상자 × 1 이 프로젝트 정
구성품 및 소모품 Arduino 윤 원래 Yun과 함께 개발되었지만 Yun2, ESP8266, ESP32 또는 모든 Arduino와도 작동합니다. × 1 Arduino Yun Rev 2 × 1 Espressif ESP8266 ESP-12E × 1 Adafruit 서미스터 센서:아날로그 포트에서 작동하며 아래 Thermowell과 함께 사용할 수 있습니다. × 1 DS18B20 센서:4.7K 옴 저항이 있는 디지털 포트에서 작동 × 1 PT