제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
| ||||
|
소개
저는 에어로모델링을 연습하고 있으며 제 비행기의 속도와 고도를 알고 싶습니다. 불행히도 상업용 GPS 데이터 로거는 매우 비쌉니다.
그래서 50유로 미만의 비용으로 Arduino 기반의 GPS 데이터 로거를 만들기로 결정했습니다.
내 첫 번째 프로토타입은 통합 SD 카드와 NEO 6M V2 GPS 모듈이 있는 Sainsmart ST7735 화면이 있는 Arduino Uno R3를 기반으로 합니다.
두 번째 프로젝트에서는 SSD1306 OLED 화면, 동일한 GPS 모듈 및 마이크로 SD 카드가 있는 Arduino Nano를 사용합니다. 케이스를 포함한 무게는 약 40g이어야 하며 중형 항공기(크기 L 50mm X l 30mm X H 22mm)에 쉽게 통합될 수 있습니다.
차기작입니다(자료 기다리고 있습니다.)
테스트
아두이노 화면을 차에서 찍는다는게 쉽지 않은데 제가 해봤는데 그 결과를 영상으로 보실 수 있어요.
다음 테스트는 무선 조종 항공기에서 더 작고 더 가벼운 프로토타입을 사용하는 것입니다. 계속됩니다!
#include#include #include #define cs 10#define dc 9#define rst 8 #include #include Adafruit_ST7735 tft =Adafruit_ST7735(cs, dc, rst); 정적 const int RXPin =4, TXPin =3; //GPS 통신 정적 const uint32_t GPSBaud =9600;#define OLED_RESET 5TinyGPSPlus gps;SoftwareSerial ss(RXPin, TXPin);int x=80;int xh=80;int maxhigh=0;int maxspeed =0, speed1 =0;int high1 =0;; 무효 setup(){ Serial.begin(9600); ss.begin(GPSBaud); tft.initR(INITR_GREENTAB); tft.fillScreen(ST7735_BLACK); tft.setCursor(5, 58); tft.setTextSize(1); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("초기화"); } 무효 루프(){ tft.setTextSize(1); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); // chaque bonne 수신 위성에 정보를 첨부합니다. while (ss.available()> 0){ gps.encode(ss.read()); if (gps.location.isUpdated()){ 간부(); tft.setCursor(5, 44); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("위도 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.location.lat(), 6); tft.setCursor(5, 58); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("경도 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.location.lng(), 6); //에크란 날짜 부착 tft.setCursor(5, 7); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("날짜 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.date.day()); tft.print(" "); tft.print(gps.date.month()); tft.print(" "); tft.print(gps.date.year()); // ecran heure affichage tft.setCursor(5, 20); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("heure :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.time.hour()+1); tft.print(" "); tft.print(gps.time.min()); tft.print(" "); tft.print(gps.time.second()); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.setCursor(3, 30); //에크란 고도 부착 tft.setCursor(5, 80); tft.print("Hm :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.altitude.meters(),0); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.setCursor(5, 95); hmax(); tft.print("최대값 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(최대고); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); 쿠르베(); // 에크란 비테세 affichage tft.setCursor(5, 115); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("V액트:"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.speed.kmph(),0); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setCursor(5, 130); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); vmax(); tft.print("vmax:"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(최대속도); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); 쿠르베(); //위성 이름 지정 tft.setCursor(5, 147); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("토성명칭 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.satellites.value()); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); // 수평 치수. of Precision (100ths-i32) Serial.print("HDOP ="); Serial.println(gps.hdop.value()); 스마트 지연(400); } }}// 수신 거부 스마트 지연(unsigned long ms){ unsigned long start =millis(); do { 동안 (ss.available()) gps.encode(ss.read()); } while (millis() - 시작 123) { x=80; tft.fillRect(82,110,43,30,ST7735_BLACK); }} 무효 courbeh() { int nouvelleValeurh; // 최대 변환(350km/h) en 픽셀 nouvelleValeurh =map((gps.altitude.meters()), 0, 1000, 104, 72); // car l'cran a 64픽셀 de haut xh++; tft.drawPixel(xh,nouvelleValeurh,ST7735_CYAN); if (xh>123) { xh=80; tft.fillRect(82,72,43,35,ST7735_BLACK); }}vmax() 무효 {// 최대 속도 계산1 =(gps.speed.kmph()); if ( 속도1> 최대 속도) { 최대 속도 =속도1; } } void hmax() {// 최대 고도 계산 high1 =(gps.altitude.meters()); if ( high1> maxhigh ) { maxhigh =high1; } }
#include섹션>#include #include #include #define cs 10#define dc 9#define rst 8 #include #include Adafruit_ST7735 tft =Adafruit_ST7735(cs, dc, rst); 정적 const int RXPin =4, TXPin =3; //GPS 통신 정적 const uint32_t GPSBaud =9600;const int cs_sd=4;#define OLED_RESET 5TinyGPSPlus gps;SoftwareSerial ss(RXPin, TXPin);int x=80;int xh=80;int maxhigh=0;int maxspeed =0, speed1 =0;int high1 =0; 무효 setup(){ Serial.begin(9600); ss.begin(GPSBaud); tft.initR(INITR_GREENTAB); tft.fillScreen(ST7735_BLACK); tft.setCursor(5, 58); tft.setTextSize(1); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("초기화"); tft.setCursor(5, 70); tft.print("SD 초기화"); 지연(1000); if(!SD.begin(cs_sd)) //조건에 따라 다름 SD est prsente dans l'appareil { tft.setCursor(5, 82); tft.print("기본 SD"); 반품; } tft.setCursor(5, 82); tft.print("SD 카드 주문 가능"); 지연(1000); tft.fillScreen(ST7735_BLACK); 파일 데이터 =SD.open("donnees.txt",FILE_WRITE); // 영화 "donnees.txt" data.println(""); data.println("Dmarrage 획득"); // Ecrit dans ce fichier data.close(); } 무효 루프(){ tft.setTextSize(1); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); // chaque bonne 수신 위성에 정보를 첨부합니다. while (ss.available()> 0){ gps.encode(ss.read()); if (gps.location.isUpdated()){ 간부(); tft.setCursor(5, 44); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("위도 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.location.lat(), 6); tft.setCursor(5, 58); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("경도 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.location.lng(), 6); //에크란 날짜 부착 tft.setCursor(5, 7); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("날짜 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.date.day()); tft.print(" "); tft.print(gps.date.month()); tft.print(" "); tft.print(gps.date.year()); 문자열 날짜=문자열(gps.date.day())+(" ")+(gps.date.month())+(" ")+(gps.date.year()); // ecran heure affichage tft.setCursor(5, 20); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("heure :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.time.hour()+1); tft.print(" "); tft.print(gps.time.min()); tft.print(" "); tft.print(gps.time.second()); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.setCursor(3, 30); 문자열 Temps=문자열(gps.time.hour()+1)+(" ")+(gps.time.minute())+(" ")+(gps.time.second()); //에크란 고도 부착 tft.setCursor(5, 80); tft.print("Hm :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.altitude.meters(),0); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.setCursor(5, 95); hmax(); tft.print("최대값 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(최대고); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); 쿠르베(); // 에크란 비테세 affichage tft.setCursor(5, 115); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("V액트:"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.speed.kmph(),0); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setCursor(5, 130); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); vmax(); tft.print("vmax:"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(최대속도); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); 쿠르베(); //위성 이름 지정 tft.setCursor(5, 147); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("토성명칭 :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.satellites.value()); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); // 수평 치수. of Precision (100ths-i32) Serial.print("HDOP ="); Serial.println(gps.hdop.value()); 스마트 지연(400); // Ecriture des donnes dans le fichier texte File data=SD.open("donnees.txt",FILE_WRITE); data.println(날짜 + " " + Temps + " " + String(gps.location.lat(), 6)+" "+String(gps.location.lng(), 6)+(" ")+String( gps.altitude.meters(),0)+(" ")+문자열(최대고)+(" ")+문자열(gps.speed.kmph(),0)+(" ")+문자열(최대 속도)); data.close(); } }}// 수신 거부 스마트 지연(unsigned long ms){ unsigned long start =millis(); do { 동안 (ss.available()) gps.encode(ss.read()); } while (millis() - 시작 123) { x=80; tft.fillRect(82,110,43,30,ST7735_BLACK); }} 무효 courbeh() { int nouvelleValeurh; // 최대 변환(350km/h) en 픽셀 nouvelleValeurh =map((gps.altitude.meters()), 0, 1000, 104, 72); // car l'cran a 64픽셀 de haut xh++; tft.drawPixel(xh,nouvelleValeurh,ST7735_CYAN); if (xh>123) { xh=80; tft.fillRect(82,72,43,35,ST7735_BLACK); }}void vmax() {// 계산 최대 속도1 =(gps.speed.kmph()); if ( 속도1> 최대 속도) { 최대 속도 =속도1; } } void hmax() {// 최대 고도 계산 high1 =(gps.altitude.meters()); if ( high1> maxhigh ) { maxhigh =high1; } }
제조공정
이 Arduino Tutorial에서는 Arduino 보드와 함께 SD 카드 모듈을 사용하는 방법을 배웁니다. 또한 DS3231 실시간 클록 모듈과 함께 온도 센서의 데이터를 SD 카드에 저장하고 Excel로 가져와 차트를 만드는 데이터 로깅 예제를 만들 것입니다. 다음 비디오를 보거나 아래에 작성된 튜토리얼을 읽을 수 있습니다. 작동 방식 먼저 SD 카드 모듈을 살펴보겠습니다. 작동 전압이 3.3V인 표준 MicroSD 카드와 함께 작동합니다. 따라서 모듈에는 전압 조정기와 레벨 시프터가 있어 Arduino 보드의 5V 핀과
이 튜토리얼에서는 I2C 통신 프로토콜이 어떻게 작동하는지 배우고 Arduino 보드와 이 프로토콜을 사용하는 센서를 사용하여 실용적인 예를 만들 것입니다. 다음 비디오를 보거나 아래에 작성된 튜토리얼을 읽을 수 있습니다. 개요 I2C 통신 버스는 마스터와 여러 슬레이브 장치 또는 여러 마스터 장치 간의 통신이 필요한 많은 전자 설계에서 쉽게 구현할 수 있기 때문에 매우 대중적이고 많은 전자 장치에서 널리 사용됩니다. 7비트 주소 지정을 사용할 때 최대 거의 128(112) 장치와 10비트 주소 지정을 사용할 때 최대 거의 10