Thiết kế và thi công hệ thống xe tự cân bằng

77 206 0
  • Loading ...
Loading...
1/77 trang

Thông tin tài liệu

Ngày đăng: 23/04/2017, 17:34

NỘI DUNG ĐỒ ÁN Đề tài “Thiết kế thi công hệ thống xe tự cân bằng“ tập trung vào nội dung sau: - Tìm hiểu ngôn ngữ lập trình C cho Arduino Arduino IDE - Tìm hiểu Module Cảm Biến Góc Gia Tốc MPU6050 GY-521, Arduino Uno R3, động giảm tốc GA25 200rpm, Module GPS NEO-7M, LCD 16x2 - Ứng dụng Module Cảm Biến Góc Gia Tốc MPU6050 GY-521, động GA25 200rpm, Arduino Uno R3, Module GPS NEO-7M, LCD 16x2 vào thiết kế, thi công hệ thống xe tự cân cho phép định vị GPS hiển thị tọa độ lên LCD LỜI CẢM ƠN Em xin gửi lời cảm ơn sâu sắc tới thầy cô giáo trường Đại Học Công Nghệ Thông tin Truyền thông thầy cô môn Công nghệ Điện tử truyền thông khoa công nghệ điện tử truyền thông tận tình giảng dạy, truyền đạt cho em kiến thức thời gian qua Đặc biệt em xin chân thành cảm ơn ThS.Nguyễn Thùy Dung tận tình giúp đỡ, trực tiếp bảo, hướng dẫn giúp đỡ em hoàn thành đề tài Cuối cùng, em xin chân thành cảm ơn gia đình, bạn bè, thầy cô tạo điều kiện thuận lợi sở vật chất động viên tinh thần, giúp đỡ em trình nghiên cứu thực đề tài Em xin chân thành cảm ơn ! Thái Nguyên, Tháng Năm 2016 Sinh viên thực Trần Thanh Phúc LỜI CAM ĐOAN Em xin cam đoan toàn nội dung báo cáo em tự tìm hiểu nghiên cứu hướng dẫn định hướng cô giáo Thạc sỹ Nguyễn Thùy Dung Nội dung báo cáo không chép vi phạm quyền từ công trình nghiên cứu Nếu lời cam đoan không đúng, em xin chịu hoàn toàn trách nhiệm trước pháp luật Thái Nguyên, Tháng Năm 2016 Sinh viên thực Trần Thanh Phúc MỤC LỤC NỘI DUNG ĐỒ ÁN LỜI CẢM ƠN .2 LỜI CAM ĐOAN MỤC LỤC DANH MỤC HÌNH ẢNH LỜI MỞ ĐẦU .8 CHƯƠNG TỔNG QUAN 1.1 Tình hình nghiên cứu thuộc lĩnh vực đề tài nước 1.1.1 Giới thiệu hệ thống xe tự cân 1.1.2 Tình hình nghiên cứu nước 1.1.3 Tình hình nghiên cứu nước 15 1.2 Tính cấp thiết phạm vi nghiên cứu, mục tiêu đề tài 16 1.2.1 Tính cấp thiết đề tài 16 1.2.2 Phạm vi nghiên cứu đề tài 17 1.2.3 Mục tiêu đề tài .17 2.1 Yêu cầu toán 18 2.2 Giải pháp thiết kế 18 2.2.1 Sơ đồ khối 18 2.2.2 Phân tích chức khối 18 2.3 Nguyên lý hoạt động toàn hệ thống .19 2.4 Lựa chọn linh kiện .19 2.4.1 Bộ vi điều khiển Arduino Uno R3 19 2.4.2 GY-521 MPU 6050 24 2.4.3 IC L298N 29 2.4.4 Bánh xe V2 65mm khớp lục giác 12mm .31 2.4.5 Động giảm tốc GA25 200rpm 32 2.4.6 Nguồn Pin 33 2.4.7 Module GPS NEO-7M .34 2.4.8 LCD 16x2 40 CHƯƠNG NGÔN NGỮ LẬP TRÌNH PHẦN MỀM PHỤ TRỢ .42 3.1 Giới thiệu môi trường lập trình .42 3.2 Khởi tạo dự án 43 3.3 Cấu trúc chương trình lập trình Arduino .44 3.4 Một số ví dụ lập trình ứng dụng 49 3.4.1 Lập trình Điều khiển led .49 3.4.2 Chương trình điều khiển led đơn theo tín hiệu đèn giao thông 49 3.4.3 Lập trình gửi liệu cổng truyền thông nối tiếp .53 3.5 Ứng dụng Arduino 54 CHƯƠNG THIẾT KẾ THỰC THI 57 4.1 Thiết kế phần cứng 57 4.2.Thiết kế phần mền 61 4.3 Hình ảnh thực tế sản phẩm 62 KẾT LUẬN HƯỚNG PHÁT TRIỂN 63 PHỤ LỤC 65 DANH MỤC HÌNH ẢNH Hình 1.1 Hình ảnh robot Balibot .11 Hình 1.2 Hình ảnh loại robot kiểu rolling toyota .12 Hình 1.3 Hình ảnh Segway 13 Hình 2.1 Sơ đồ khối hệ thống 18 Hình 2.2 Sơ đồ chân Arduino Uno .19 Hình 2.3 Board Arduino Uno .21 Hình 2.4.Hình mặt Arduino Uno .21 Hình 2.5.Sơ đồ nguyên lý Arduino Uno 22 Hình 2.6 Module Cảm Biến Góc Gia Tốc MPU6050 GY-521 24 Hình 2.7 Hình ảnh sơ đồ khối MPU6050 GY-521 26 Hình 2.8 Chân giao tiếp MPU6050 GY-521 27 Hình 2.9 Hình ảnh sơ đồ khối IC L298N 29 Hình 2.10 Hình ảnh chân IC L298N 30 Hình 2.11 Hình ảnh bánh xe .31 Hình 2.12 Hình ảnh động 32 Hình 2.13 Hình ảnh pin LI-Ion 33 Hình 2.14 Module GPS NEO-7M 34 Hình 2.15 Màn hình LCD 16x2 40 Hình 2.16 Chức chân .41 Hình 2.17 Kết nối Text LCD 41 Hình 3.1 Link download phần mềm Arduino .42 Hình 3.2 Cài đặt Arduino IDE .42 Hình 3.3 Giao diện lập trình Arduino 43 Hình 3.4 Chức Menu 43 Hình 3.5 Mở ứng dụng mẫu Arduino 44 Hình 3.6 Lưu đồ thuật toán .45 Hình 3.7 Ví dụ điều khiển led 49 Hình 3.8 Dịch chạy chương trình điều khiển led đơn .51 Hình 3.9 Mạch led giao thông sử dụng Arduino 53 Hình 3.10 Kết thu hình Serial 54 Hình 3.11 Máy in 3D 54 Hình 3.12 Robot 55 Hình 3.13 Máy bay không người lái 55 Hình 3.14 Lập tình game tương tác 56 Hình 2.15 Điều khiển hiệu ứng ánh sáng 56 Hình 4.1 Mô tả nguyên lý giữ thăng 57 Hình 4.2 Mô tả cách bắt đầu di chuyển 57 Hình 4.3 Trạng thái xe di chuyển bề mặt nghiêng 57 Hình 4.4 Biểu diễn lực tác động lên xe 58 Hình 4.5 Hình ảnh Arduino kết nối với động IC L298 59 Hình 4.6 Hình ảnh Arduino kết nối với MPU6050 GY-521 60 Hình 4.7 Hình ảnh Arduino kết nối với GPS NEO-7M LCD 60 Hình 4.8 Hình ảnh lưu đồ thuật toán hệ thống .61 Hình 4.9 Hình ảnh toàn cảnh sản phẩm 62 Hình 4.10 Hình ảnh sản phẩm nhìn từ cao xuống .62 LỜI MỞ ĐẦU Trong công công nghiệp hóa đại hóa đất nước kinh tế việt nam có tăng trưởng vượt trội, với tăng trưởng kinh tế mạnh mẽ thúc đẩy việc gia tăng phát triển ngành điện tử truyền thông Nhu cầu cần thiết bị thay người ngày nhiều để thay người làm việc thiết bị phải cần có làm việc ổn định xác Ngoài thiết bị cần có ổn định di chuyển Để đáp ứng nhu cầu ngày cần tự động hóa mà không cần đến làm việc người thiết bị di chuyển cần cân ngày quan trọng Đặc biệt thiết bị tự cân ngày ứng dụng nhiều vào thực tế cần cho sống Từ vấn đề em nghiên cứu, tìm hiểu đề tài “ Thiết kế thi công hệ thống xe tự cân ” với mục đích nhằm giúp người sử dụng kiểm tra, giám sát hoạt động thiết bị nhằm giữ cân cho thiết bị Mặc dù em cố gắng nhiều để hoàn thành đề tài này, song giới hạn thời gian kiến thức nên nội dung nhiều thiếu sót Rất mong đóng góp ý kiến thầy cô để báo cáo em hoàn thiện Em xin chân thành cảm ơn ! CHƯƠNG TỔNG QUAN 1.1 Tình hình nghiên cứu thuộc lĩnh vực đề tài nước Nội dung chương khái quát chung thực trạng sử dụng hệ thống xe tự cân ngành công nghiệp, lượng, khí, y tế, vận tải… Việt Nam hệ thống xe tự cân ứng dụng vào đời sống người Thống dự đoán việc sử dụng hệ thống xe tự cân tương lai chương sở hình thành nên ý tưởng đề tài em, thiết kế thi công hệ thống xe tự cân 1.1.1 Giới thiệu hệ thống xe tự cân Xe hai bánh tự cân xe mà có hai bánh mà để mặt phẳng chúng không đổ giữ thăng có lực tác dụng lên xe để làm xe ngã Đối với xe ba hay bốn bánh, việc thăng ổn định chúng nhờ trọng tâm chúng nằm bề mặt chân đế bánh xe tạo Đối với xe hai bánh có cấu trúc xe đạp, việc thăng không di chuyển hoàn toàn khác với xe ba bốn bánh Vì việc thăng xe ba bốn bánh dựa tính chất quay hồi chuyển bánh xe trục Còn xe hai bánh tự cân bằng, loại xe có hai bánh trục hai bánh xe trùng nhau, xe cân trọng tâm xe phải giữ hai bánh xe Để xe hai bánh tự cân hệ thống khí xe tương đối chuẩn xác yếu tố quan trọng hệ thống tự cân xe Hệ thống tự cân xe sử dụng với yếu tố Arduino với chức trung tâm xử lý liệu, liệu lấy từ cảm biến MPU 6050 xử lý để giữ xe cân 1.1.2 Tình hình nghiên cứu nước Ở nước việc nghiên cứu ứng dụng hệ thống xe tự cân vào ngành kĩ thuật không xa lạ Nó ứng dụng nhiều hiệu qủa giao thông lại, vận chuyển hàng hóa Hệ thống xe tự cân nhiều ngành công nghiệp sử dụng ngày nhiều vận chuyển nơi người trực tiếp vận hành Đặc biệt ngành y tế ứng dụng giường bệnh tự cân bằng, lúc vận chuyển bệnh nhân tránh sai sót di chuyển mà xe không giữ cân làm cho bệnh nhân bị di chuyển gây hậu không mong muốn giới có nhiều công ty tập đoàn đầu nghiên cứu hệ thống xe tự cân để ứng dụng vào thực tế ngày chế tạo thiết bị thông minh linh hoạt cho người sử dụng ngày tiện lợi sống Vào năm 2003, Jack Wu Jim Bai sinh viên trường đại học Camegie Mellon trợ giúp GS Chris Atkeson thực đề tài robot hai bánh tự cân Robot xác định vị trí hướng môi trường lái động theo hướng Để đo góc nghiêng robot, sinh viên sử dụng hệ thống đo lường góc 2DOF tích hợp sẵn hãng Rotomotion Hệ thống gồm gia tốc kế ADXL202 mạch quay hồi chuyển Vi mạch điều khiển dùng robot BasicX24, có nhiều tính khác Nó dùng điều khiển động com1 nối với pocket PC com3 nối với điều khiển servo Mini SSC12 Nó sử dụng CPU cho việc điều khiển thăng cho robot Phòng thí nghiệm điện tử công nghiệp viện công nghệ Federal, Lausanme Thụy sỹ, tạo cách mạng xây dựng mô hình xe hai bánh Robot JOE cao 65cm, nặng 12kg, tốc độ tối đa khoảng 1,5m/s, có khả leo dốc nghiêng đến 30 độ Nguồn điện cấp nguồn pin 32v khả 1,8Ah Hình dạng gồm hai bánh xe, mối bánh gắn với động DC, xe chuyển động xoay theo hình chữ U Hệ thống điều khiển lắp từ hai điều khiển state-space tách rời nhau, kiểm soát động để giữ cân cho hệ thống Những thông tin JOE cung cấp hai encoder quang vận tốc quay hồi chuyển JOE điều khiển điều khiển từ xa R/C thường sử dụng để điều khiển máy bay mô hình Bộ điều khiển trung tâm xử lý tín hiệu board xử lý tín hiệu số ( DSP ) phát triển nhóm viện nghiên cứu Có khả xử lý dấu chấm động, 12 biến đổi A/D 12 bit biến đổi D/A 10 bit Equibot robot cân Dan Piponi thực Cơ dựa vào vi điều khiển ATMega23 RISC Cả hai servo Hitec-311 chuẩn sửa đổi cho xoay vòng 360 độ nguồn điện nối trực tiếp với động để PWM kiểm soát chúng Một hai servo gắn với điều khiển tứ cực LQR Đó phần phức tập cấu trúc robot, bánh lại bắt chước tốc độ bánh thứ Equibot có 10 KẾT LUẬN HƯỚNG PHÁT TRIỂN Báo cáo giải vấn đề đặt Thiết kế thi công hệ thống xe tự cân có khả định vị GPS hiển thị tọa độ lên LCD với kết tóm tắt sau: - Tìm hiểu Module Cảm Biến Góc Gia Tốc MPU6050 GY-521 Module GPS NEO-7M - Ứng dụng Module Cảm Biến Góc Gia Tốc MPU6050 GY-521 vào thiết kế xe bánh tự cân có khả di chuyển - Ứng dụng Module GPS NEO-7M vào thiết kế hệ thống định vị gắn xe Sản phẩm nhiều hạn chế như: xe rung, thời gian lấy tọa độ lâu, công suất động nhỏ… Tuy nhiên sản phẩm sở, mô hình, tài liệu tham khảo để phát triển thành sản phẩm phổ biến, có tính ứng dụng, đại cao Với khả tự cân hệ thống, sản phẩm áp dụng vào hệ thống cần ổn định, cân camera máy bay fly cam, tránh xóc di chuyển bệnh nhân …hay phương tiện di chuyển động, gọn nhẹ sử dụng lượng Sản phẩm phát triển để đưa vào thực tế phục vụ cho người giao thông lại, vận chuyển hàng hóa, hệ thống điều khiển cho robot tự hành di chuyển thích nghi địa hình… 63 TÀI LIỆU THAM KHẢO [1] http://arduino.cc/ [2] http://openenergymonitor.org/emon/buildingblocks [3] http://playground.arduino.cc/Main/MPU-6050 [4] Alwafi Husein, Attitude and altitude control of two wheel trirotorhybrid robot, Master’s thesis, 2013 [5] Ayça GÖÇMEN, Design of two wheeled electric vehicle, Master’s thesis, 2011 [6] Christian sundin, Filip thorstensson, Autonomous balancing robot, Master’s thesis, 2012 [7] Maria R Bageant, Balancing a two- wheeled Segway robot, Bachelor’s thesis, 2006 [8] Văn Thế Minh, Kỹ thuật vi xử lý, NXB Giáo dục, 1997 [9] Ngô Diên Tập, Kỹ thuật vi điều khiển, NXB KHKT [10] Hoàng Minh Công, Giáo trình cảm biến công nghiệp, NXB ĐHBK 64 PHỤ LỤC Mã nguồn chương trình // Mã nguồn chương trình giao tiếp Arduino với MPU6050 động #include #include #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #define LOG_INPUT #define MANUAL_TUNING #define LOG_PID_CONSTANTS //MANUAL_TUNING must be #define MOVE_BACK_FORTH #define MIN_ABS_SPEED 30 //MPU MPU6050 mpu; // MPU control/status vars bool dmpReady = false; // set true if DMP init was successful uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU uint8_t devStatus; // return status after each device operation (0 = success, !0 = error) uint16_t packetSize; // expected DMP packet size (default is 42 bytes) uint16_t fifoCount; // count of all bytes currently in FIFO uint8_t fifoBuffer[64]; // FIFO storage buffer // orientation/motion vars Quaternion q; // [w, x, y, z] VectorFloat gravity; float ypr[3]; // [x, y, z] quaternion container gravity vector // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector //PID 65 #if MANUAL_TUNING double kp , ki, kd; double prevKp, prevKi, prevKd; #endif double originalSetpoint = 174.29; double setpoint = originalSetpoint; double movingAngleOffset = 0.3; double input, output; int moveState=0; //0 = balance; = back; = forth #if MANUAL_TUNING PID pid(&input, &output, &setpoint, 0, 0, 0, DIRECT); #else PID pid(&input, &output, &setpoint, 70, 240, 1.9, DIRECT); #endif //MOTOR CONTROLLER int ENA = 3; int IN1 = 4; int IN2 = 8; int IN3 = 5; int IN4 = 7; int ENB = 6; LMotorController motorController(ENA, IN1, IN2, ENB, IN3, IN4, 0.6, 1); //timers long time1Hz = 0; long time5Hz = 0; volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high void dmpDataReady() { mpuInterrupt = true; } void setup() 66 { // join I2C bus (I2Cdev library doesn't this automatically) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif // initialize serial communication // (115200 chosen because it is required for Teapot Demo output, but it's // really up to you depending on your project) Serial.begin(115200); while (!Serial); // wait for Leonardo enumeration, others continue immediately // initialize device Serial.println(F("Initializing I2C devices ")); mpu.initialize(); // verify connection Serial.println(F("Testing device connections ")); Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed")); // load and configure the DMP Serial.println(F("Initializing DMP ")); devStatus = mpu.dmpInitialize(); // supply your own gyro offsets here, scaled for sensitivity mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); // 1688 factory default for my test chip // make sure it worked (returns if so) if (devStatus == 0) { // turn on the DMP, now that it's ready 67 Serial.println(F("Enabling DMP ")); mpu.setDMPEnabled(true); // enable Arduino interrupt detection Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0) ")); attachInterrupt(0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // set our DMP Ready flag so the main loop() function knows it's okay to use it Serial.println(F("DMP ready! Waiting for first interrupt ")); dmpReady = true; // get expected DMP packet size for later comparison packetSize = mpu.dmpGetFIFOPacketSize(); //setup PID pid.SetMode(AUTOMATIC); pid.SetSampleTime(10); pid.SetOutputLimits(-255, 255); } else { // ERROR! // = initial memory load failed // = DMP configuration updates failed // (if it's going to break, usually the code will be 1) Serial.print(F("DMP Initialization failed (code ")); Serial.print(devStatus); Serial.println(F(")")); } } void loop() { 68 // if programming failed, don't try to anything if (!dmpReady) return; // wait for MPU interrupt or extra packet(s) available while (!mpuInterrupt && fifoCount < packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); motorController.move(output, MIN_ABS_SPEED); unsigned long currentMillis = millis(); if (currentMillis - time1Hz >= 1000) { loopAt1Hz(); time1Hz = currentMillis; } if (currentMillis - time5Hz >= 5000) { loopAt5Hz(); time5Hz = currentMillis; } } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); 69 // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is > packet available // (this lets us immediately read more without waiting for an interrupt) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); #if LOG_INPUT Serial.print("ypr\t"); Serial.print(ypr[0] * 180/M_PI); Serial.print("\t"); Serial.print(ypr[1] * 180/M_PI); Serial.print("\t"); Serial.println(ypr[2] * 180/M_PI); #endif input = ypr[1] * 180/M_PI + 180; } } void loopAt1Hz() { #if MANUAL_TUNING setPIDTuningValues(); #endif } 70 void loopAt5Hz() { #if MOVE_BACK_FORTH moveBackForth(); #endif } //move back and forth void moveBackForth() { moveState++; if (moveState > 2) moveState = 0; if (moveState == 0) setpoint = originalSetpoint; else if (moveState == 1) setpoint = originalSetpoint - movingAngleOffset; else setpoint = originalSetpoint + movingAngleOffset; } //PID Tuning (3 potentiometers) #if MANUAL_TUNING void setPIDTuningValues() { readPIDTuningValues(); if (kp != prevKp || ki != prevKi || kd != prevKd) { #if LOG_PID_CONSTANTS Serial.print(kp);Serial.print(","); Serial.print(ki); Serial.print(", "); Serial.println(kd); #endif pid.SetTunings(kp, ki, kd); 71 prevKp = kp; prevKi = ki; prevKd = kd; } } void readPIDTuningValues() { int potKp = analogRead(A0); int potKi = analogRead(A1); int potKd = analogRead(A2); kp = map(potKp, 0, 1023, 0, 25000) / 100.0; //0 - 250 ki = map(potKi, 0, 1023, 0, 100000) / 100.0; //0 - 1000 kd = map(potKd, 0, 1023, 0, 500) / 100.0; //0 - } #endif // Mã nguồn chương trình giao tiếp Arduino với Neo-&m LCD1602 #include #include #include void Encoder_san(); const int Encoder_A = 3; // Incremental Encoder singal A is PD3 const int Encoder_B = 2; // Incremental Encoder singal B is PD2 unsigned int Encoder_number=0; int state=0; LiquidCrystal lcd(8, 9, 4, 5, 6, 7); SoftwareSerial mySerial(11, 12); // RX, TX TinyGPS gps; void gpsdump(TinyGPS &gps); float printFloat(double f, int digits = 2); float mph; float alt; long lat, lon; float flat, flon; 72 unsigned long age, date, time, chars; byte month, day, hour, minute, second, hundredths; int level; int year; void setup() { Serial.begin(9600); lcd.begin(16, 2); // start the library pinMode(10,OUTPUT); digitalWrite(10, 1); mySerial.begin(9600); pinMode(Encoder_A, INPUT); pinMode(Encoder_B, INPUT); digitalWrite(Encoder_A, 1); digitalWrite(Encoder_B, 1); attachInterrupt(1, Encoder_san, FALLING); digital pin 2) and (on digital pin 3) } void loop() // run over and over { if (Encoder_number > 3) { Encoder_number = 0; } lcd.clear(); switch (Encoder_number) { case 1: lcd.setCursor(0,0); lcd.print("Speed (mph)"); lcd.setCursor(0,1); lcd.print(mph); break; case 2: 73 //interrupts: numbers (on lcd.setCursor(0,0); lcd.print("Date: "); lcd.print(static_cast(month)); lcd.print("/"); lcd.print(static_cast(day)); lcd.print("/"); lcd.print(year); lcd.setCursor(0,1); lcd.print("Time: "); lcd.print(static_cast(hour)); lcd.print(":"); lcd.print(static_cast(minute)); lcd.print(static_cast(second)); lcd.print("."); lcd.print(static_cast(hundredths)); break; case 3: lcd.setCursor(0,0); lcd.print("Altitude"); lcd.setCursor(0,1); lcd.print(alt); break; case 4: lcd.setCursor(0,0); lcd.print("Level"); lcd.setCursor(0,1); lcd.print(level); break; default: lcd.setCursor(0,0); lcd.print("Long "); lcd.print(flon); lcd.setCursor(0,1); lcd.print("Lat "); lcd.print(flat); }bool newdata = false; unsigned long start = millis(); while (millis() - start < 5000) { if (mySerial.available()) { 74 lcd.print(":"); char c = mySerial.read(); if (gps.encode(c)) { newdata = true; break; // uncomment to print new data immediately! }}} if (newdata) { Serial.println("Acquired Data"); Serial.println(" -"); gpsdump(gps); Serial.println(" -"); Serial.println(); }} void gpsdump(TinyGPS &gps) {unsigned short sentences, failed; gps.get_position(&lat, &lon, &age); Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon); Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms."); gps.f_get_position(&flat, &flon, &age); Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5); Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms."); gps.get_datetime(&date, &time, &age); Serial.print("Date(ddmmyy): "); Serial.print(date); Serial.print(" Time(hhmmsscc): "); Serial.print(time); Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms."); gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age); Serial.print("Date: "); Serial.print(static_cast(month)); Serial.print("/"); Serial.print(static_cast(day)); Serial.print("/"); Serial.print(year); Serial.print(" Time: "); Serial.print(static_cast(hour)); Serial.print(":"); 75 Serial.print(static_cast(minute)); Serial.print(":"); Serial.print(static_cast(second)); Serial.print("."); Serial.print(static_cast(hundredths)); Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms."); Serial.print("Alt(cm): "); Serial.print(gps.altitude()); Serial.print(" Course(10^-2 deg): "); Serial.print(gps.course()); Serial.print(" Speed(10^-2 knots): "); Serial.println(gps.speed()); Serial.print("Alt(float): "); printFloat(gps.f_altitude()); Serial.print(" Course(float): "); printFloat(gps.f_course()); Serial.println(); Serial.print("Speed(knots): "); printFloat(gps.f_speed_knots()); Serial.print(" (mph): "); printFloat(gps.f_speed_mph()); Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): "); printFloat(gps.f_speed_kmph()); Serial.println(); mph=printFloat(gps.f_speed_mph()); alt=printFloat(gps.f_altitude()); gps.stats(&chars, &sentences, &failed); Serial.print("Stats: characters: "); Serial.print(chars); Serial.print(" sentences: "); Serial.print(sentences); Serial.print(" Serial.println(failed); } float printFloat(double number, int digits) { if (number < 0.0) { Serial.print('-'); number = -number; } double rounding = 0.5; 76 failed checksum: "); for (uint8_t i=0; i 0) Serial.print("."); while (digits > 0) { remainder *= 10.0; int toPrint = int(remainder); Serial.print(toPrint); remainder -= toPrint; }} void Encoder_san() { if(digitalRead(Encoder_B)) {Encoder_number++; } else { Encoder_number ; } state=1; } 77 ... Nam Và hệ thống xe tự cân ứng dụng vào đời sống người Thống kê dự đoán việc sử dụng hệ thống xe tự cân tương lai Và chương sở hình thành nên ý tưởng đề tài em, thi t kế thi công hệ thống xe tự cân. .. cân cần thi t mong mỏi nhiều người sử dụng Hệ thống xe tự cân thi t bị cần thi t sống quan trọng ngành công nghiệp thi t bị thi u sống sau Hệ thống xe tự cân phần thi u ứng dụng công nghệ thông... hợp lý hiệu hệ thống xe tự cân ngành kĩ thuật toán khó kỹ sư, kỹ thuật viên Hệ thống xe tự cân hệ thống xe di chuyển đường mà chở nặng xe khác ngã với hệ thống tự cân xe giữ cho xe cân không gây
- Xem thêm -

Xem thêm: Thiết kế và thi công hệ thống xe tự cân bằng , Thiết kế và thi công hệ thống xe tự cân bằng , Thiết kế và thi công hệ thống xe tự cân bằng

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay
Nạp tiền Tải lên
Đăng ký
Đăng nhập