산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

하이킹 트래커

구성품 및 소모품

아두이노 101
× 1
AA 배터리
× 1
4xAA 배터리 홀더
× 1
실드 액세서리
× 1
Adafruit BMP180 압력 센서
× 1
Adafruit Ultimate GPS 브레이크아웃
× 1
Adafruit - 3축 마그네틱
× 1
Adafruit AM2320 습도 센서
× 1
Adafruit 코인 셀 CR2012
× 2
저항 10k 옴
× 1
저항 3.9k
× 1

필요한 도구 및 기계

뜨거운 글루건(일반)
납땜 인두(일반)

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

하이킹 트래커가 무엇인가요?

하이킹 트래커는 하이킹 중 등산객의 주변 환경 변화를 감지하는 장치입니다.

아이디어는 온도, 기압, 습도, 고도, 위치, 방향 등의 변화를 관찰하는 것입니다. 하이킹에 대한 흥미로운 통찰력을 제공합니다.

저지대에 비해 춥고 건조하며 밀도가 낮은 산에서는 많은 사람들이 숨을 쉬기 힘들어합니다. 일부는 건조한 피부 자극을 경험합니다. 이 장치를 사용하면 하이킹에 관심이 있는 사람들이 자신의 한계를 알 수 있습니다. 고지대에 가는 재미도 있다. 고도를 알 수 있다는 것은 재미있는 일입니다!

산뿐만 아니라 늪, 사막, 숲을 탐험하는 것도 각각 고유한 환경 프로필을 가지고 있기 때문에 이동 중에도 환경을 모니터링할 수 있어 자연을 더 잘 이해할 수 있습니다.

비디오 데모

1단계:하드웨어, 무엇을 위한 것입니까?

이 프로젝트와 관련하여 많은 센세이션이 일어나고 있습니다.

액세서리 실드는 일부 I2C 장치와 함께 제공됩니다.

<울>
  • 주변 온도 감지용 LM 75B 온도 센서
  • ADXL345 3축 가속도계 기울기 및 중력 감지용
  • DS3231 감지 시간용 고정밀 RTC
  • HMC5883 나침반 방향 감지용 3축 자기 센서
  • 공기의 %RH 감지용 AM2320 습도 센서
  • 대기압 및 고도 감지용 BMP180 압력 센서
  • MTK3339 위치 및 도보 거리 감지용 GPS 센서
  • Arduino Uno:

    <울>
  • 감지 4용 3.9k + 22k 전압 분배기 AA 배터리 전압
  • 데이터 보기용 1306 OLED
  • 경보를 위한 부저
  • 이 프로젝트에는 RGB LED가 필요하지 않습니다.
  • XBee 인터페이스는 사용되지 않지만 Arduino D2, D3, D9, D10은 다른 프로젝트를 위해 이 인터페이스에서 가져올 수 있습니다. D2는 재설정에 연결되어 코드에서 Arduino를 재설정할 수 있습니다!
  • 5방향 조이스틱을 사용하지 않음
  • 101 냄비는 사용되지 않습니다.
  • 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 인터페이스에서 사용할 수 있습니다.

    구성 요소 스택은 다음과 같습니다.

    <울>
  • 상위 레이어:Arduino의 액세서리 실드
  • 중간 레이어:Uno와 배터리 케이스 사이에 다른 센서와 GPS가 연결됩니다.
  • 하단:배터리가 포함된 AA 배터리 홀더 4개
  • 연결은 다음과 같습니다.

    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 없이 작동한다는 것을 발견) 및 업로드 - 마침내 코드가 준비되었습니다.

    주의 사항

    <울>
  • 고도 계산은 기압 강하를 기반으로 하며 정상 기상 조건에서만 적용됩니다.
  • <울>
  • 나침반 코드는 소프트웨어에서 기울기 보정이 되지 않으므로 기기를 수평면에 고정해야 합니다. 다른 가변 반경 원이 있는 고정된 나침반 원이 있습니다. 장치를 기울이면 내부 원이 증가합니다. 수평 위치에 있을 때(즉, 가속도체의 x 및 y 구성 요소가 거의 0임) 내부 원이 한 점으로 줄어듭니다. 나침반 방향이 더 정확할 때입니다.
  • 나침반 포인터의 편각은 지구 자기장의 위치와 변화에 따라 달라집니다. 태양 폭풍의 영향을 받을 수 있습니다. 편각이 포함되지 않으면 나침반 방향이 몇 도 벗어나게 됩니다.
  • 해당 지역의 적위 ​​찾기 :http://www.magnetic-declination.com

    <울>
  • 나침반 방향은 산에 강한 자성 광물이 있는 것과 같이 근처에 있는 자성 물체에 쉽게 노출됩니다.
  • 장치의 최소 작동 전압은 약 4.5볼트입니다. 이때 AA 배터리를 교체해야 합니다.
  • 시간과 날짜는 코드에서 프로그래밍되며, 코인 셀 배터리를 교체하는 데 시간이 필요한 경우 플러그를 뽑았다가 다시 꽂아야 합니다. 코드에 새로운 시간이 포함된 새로운 프로그램 업로드는 시간을 변경합니다.
  • 개발 중 GPS 모듈을 사용할 수 없었습니다. 따라서 데모 좌표는 Lat-Long에 배치됩니다. 누군가 이 프로젝트를 복제하려면 GPS 라이브러리 및 관련 코드를 포함해야 합니다.
  • 가속도계 및 자력계의 XY 평면은 PCB에 배치될 수 있습니다. 그에 따라 코드를 조정해야 합니다.
  • 가속도계 판독 정확도는 진동하기 쉽습니다. 정지된 상태에서 기기를 사용하는 것이 좋습니다.
  • 개선 범위

    몇 가지 추가 기능에 대해 펌웨어 측면에서 개선할 수 있습니다.

    <울>
  • EEPROM의 정기적인 매개변수 로깅
  • 고도/위치 이정표 도달 시 부저 경보음
  • 물 마시기 알림
  • 휴식 알림
  • 배터리 부족 알람
  • 저온,습도 경고
  • 기울기 보정을 위한 나침반 소프트웨어 보정(많은 삼각법 항목)
  • Gateway 앱을 통한 GPS 및 IoT 연결을 사용한 자동 페치 감소
  • 하드웨어 부분은 개선:

    <울>
  • 시간, 적위 등을 설정하기 위한 사용자 입력 스위치
  • 기기용 맞춤형 3D 케이스
  • 충전식 LiPo 배터리 사용
  • 단일 보드 소형 PCB 설계로 휴대성 향상
  • 결론

    여행&산책은 쿨하고 주변 환경의 변화를 확인할 수 있어 더욱 흥미롭다. 특히 하이킹 중 고도, 습도, 기압 및 온도 변화를 몇 시간 이내에 확인하십시오. 이 장치는 당신이 고산병을 느끼는 높이, 피부를 건조하게 만드는 습도 수준 등을 알려줍니다. 주의 사항을 처리하기 위해 회로 레이아웃과 코드 모두에서 개선의 여지가 있지만, 광야에 가는 동안 이와 같은 장치가 있다는 것은 여전히 ​​멋진 일입니다!

    외부 리소스

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

    신속한 프로토타이핑 키트

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Hiking_Tracker.ino
  • 도서관
  • Hiking_Tracker.inoC/C++
    main.c
    /*//////////// 참고 //////////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 // 루프는 여기에서 끝납니다. }
    라이브러리C/C++
    압축을 풀고 개별 라이브러리 zip을 Arduino 라이브러리 관리자에 추가합니다.
    미리보기 없음(다운로드만 가능).

    회로도


    제조공정

    1. O2 센서란 무엇입니까?
    2. Raspberry Pi를 사용한 모션 센서
    3. 라즈베리 파이 토양 수분 센서
    4. Raspberry Pi를 햄스터 피트니스 트래커로 전환
    5. DS18B20 센서 테스트
    6. 라즈베리 파이 온도 센서
    7. 화장실 추적기(Walabot 제공)
    8. 감정 센서 / EEG
    9. Raspberry Pi 2의 Windows 10 IoT Core – Adafruit 센서 데이터
    10. ISS용 WiFi RSSI 센서 추적기