- ส่วนประกอบที่จำเป็น:
- MPU6050 Gyro เซนเซอร์:
- คำอธิบาย:
- แผนภาพวงจรและคำอธิบาย:
- การกำหนดค่า Raspberry Pi สำหรับ MPU6050 Gyro sensor:
- คำอธิบายการเขียนโปรแกรม:
เซ็นเซอร์MPU6050มีฟังก์ชันมากมายเหนือชิปตัวเดียว ประกอบด้วยมาตรวัดความเร่ง MEMS ไจโร MEMS และเซ็นเซอร์อุณหภูมิ โมดูลนี้มีความแม่นยำมากในขณะที่แปลงค่าอนาล็อกเป็นดิจิทัลเนื่องจากมีฮาร์ดแวร์ตัวแปลงอนาล็อกเป็นดิจิตอล 16 บิตสำหรับแต่ละช่องสัญญาณ โมดูลนี้สามารถจับช่อง x, y และ z ได้ในเวลาเดียวกัน มีอินเทอร์เฟซ I2C เพื่อสื่อสารกับโฮสต์คอนโทรลเลอร์ นี้ โมดูล MPU6050 เป็นชิปที่มีขนาดกะทัดรัดมีทั้ง accelerometer และไจโร นี่เป็นอุปกรณ์ที่มีประโยชน์มากสำหรับแอพพลิเคชั่นมากมายเช่นโดรนหุ่นยนต์เซ็นเซอร์การเคลื่อนไหว มันจะเรียกว่า หมุนหรือทริปเปิแกน accelerometer
วันนี้ในบทความนี้เราจะเชื่อมต่อ MPU6050 นี้กับ Raspberry Piและแสดงค่าบน LCD 16x2
ส่วนประกอบที่จำเป็น:
- ราสเบอร์รี่ Pi
- MPU-6050
- 10K พอต
- สายจัมเปอร์
- เขียงหั่นขนม
- แหล่งจ่ายไฟ
MPU6050 Gyro เซนเซอร์:
MPU-6050 เป็นไจโร 8 แกน 6 แกนและมาตรความเร่งในชิปตัวเดียว โมดูลนี้ทำงานบนการสื่อสารแบบอนุกรม I2C ตามค่าเริ่มต้น แต่สามารถกำหนดค่าสำหรับอินเทอร์เฟซ SPI ได้โดยกำหนดค่ารีจิสเตอร์ สำหรับ I2C สิ่งนี้มีเส้น SDA และ SCL พินเกือบทั้งหมดเป็นแบบมัลติฟังก์ชั่น แต่ที่นี่เรากำลังดำเนินการกับพินโหมด I2C เท่านั้น
การกำหนดค่าพิน:
Vcc: - พินนี้ใช้สำหรับเปิดโมดูล MPU6050 ที่เกี่ยวกับกราวด์
GND: - นี่คือพินกราวด์
SDA: -พิน SDA ใช้สำหรับข้อมูลระหว่างคอนโทรลเลอร์และโมดูล mpu6050
SCL: - ใช้ พิน SCL สำหรับอินพุตนาฬิกา
XDA: - นี่คือสายข้อมูลเซ็นเซอร์ I2C SDA สำหรับการกำหนดค่าและการอ่านจากเซ็นเซอร์ภายนอก ((อุปกรณ์เสริม) ไม่ได้ใช้ในกรณีของเรา)
XCL: - นี่คือสายนาฬิกาของเซ็นเซอร์ I2C SCL สำหรับการกำหนดค่าและการอ่านจากเซ็นเซอร์ภายนอก ((อุปกรณ์เสริม) ไม่ได้ใช้ในกรณีของเรา)
ADO: - I2C Slave Address LSB (ไม่สามารถใช้ได้ในกรณีของเรา)
INT: - พินขัดจังหวะสำหรับบ่งชี้ว่าข้อมูลพร้อม
ก่อนหน้านี้เราได้เชื่อมต่อ MPU6050 กับ Arduino
คำอธิบาย:
ในบทความนี้เรากำลังแสดง การอ่านค่าอุณหภูมิไจโรและมาตรความเร่งบน LCD โดยใช้ MPU6050 กับ Raspberry Pi หากคุณยังใหม่กับ Raspberry Pi ให้ไปที่ส่วนบทช่วยสอน Raspberry Pi ของเราและเรียนรู้การเริ่มต้นใช้งาน Raspberry Pi
ในโครงการนี้เราได้แสดงค่าอุณหภูมิ บน LCD เป็นครั้งแรกและหลังจากนั้นสักครู่เราก็แสดง ค่าไจโร จากนั้นหลังจากนั้นสักครู่เราก็มี การอ่านค่าความเร่ง ตามที่แสดงในภาพด้านล่าง:
แผนภาพวงจรและคำอธิบาย:
แผนภาพวงจร สำหรับการเชื่อมต่อ MPU6050 กับ Raspberry Piนั้นง่ายมากที่นี่เราใช้ LCD และ MPU6050 หม้อ 10k ใช้สำหรับควบคุมความสว่างของ LCD ในการเชื่อมต่อกับ MPU6050 เราได้ทำการเชื่อมต่อ 4 ครั้งซึ่งเราได้เชื่อมต่อแหล่งจ่ายไฟ 3.3v และกราวด์ของ MPU6050 กับ 3.3v และกราวด์ของ Raspberry Pi พิน SCL และ SDA ของ MPU6050 เชื่อมต่อกับพินทางกายภาพของ Raspberry 3 (GPIO2) และพิน 5 (GPIO3) RS, RW และ EN ของ LCD เชื่อมต่อโดยตรงกับ GPIO18 และ 23 ของราสเบอร์รี่ pi พินข้อมูลเชื่อมต่อโดยตรงกับหมายเลขพินดิจิทัล GPIO24, GPIO25, GPIO8 และ GPIO7 เรียนรู้เพิ่มเติมเกี่ยวกับการเชื่อมต่อ LCD กับ Raspberry Pi ที่นี่
การกำหนดค่า Raspberry Pi สำหรับ MPU6050 Gyro sensor:
ก่อนเริ่มการเขียนโปรแกรมเราต้องเปิดใช้งาน i2c ของ Raspberry Piโดยใช้วิธีการที่กำหนด:
ขั้นตอนที่ 1: เปิดใช้งานการสื่อสาร I2C
ก่อนที่จะติดตั้งไลบรารี Adafruit SSD1306 เราจำเป็นต้องเปิดใช้งานการสื่อสาร I2Cใน Raspberry Pi
ในการทำประเภทนี้ในคอนโซล Raspberry Pi:
sudo raspi -config
จากนั้นหน้าจอสีน้ำเงินจะปรากฏขึ้น ตอนนี้เลือกตัวเลือกอินเทอร์เฟซ
หลังจากนี้เราจำเป็นต้องเลือก I2C
หลังจากนี้เราต้องเลือกใช่แล้วกด Enter จากนั้นตกลง
หลังจากนี้เราต้องรีบูตราสเบอร์รี่ piโดยออกคำสั่งด้านล่าง:
รีบูตsodo
ขั้นตอนที่ 2: ติดตั้ง python-pip และ GPIO Library
sudo apt-get ติดตั้ง build-essential python-dev python-pip
หลังจากนี้เราต้องติดตั้งไลบรารี raspberry pi GPIO
sudo pip ติดตั้ง RPi.GPIO
ขั้นตอนที่ 3: ติดตั้งไลบรารี smbus
สุดท้ายเราต้องติดตั้งไลบรารี smbus ใน Raspberry Pi โดยใช้คำสั่งที่กำหนด:
sudo apt-get ติดตั้ง python-smbus
ขั้นตอนที่ 4: ติดตั้งไลบรารี MPU6050
หลังจากนี้เราต้องติดตั้งไลบรารี MPU6050 โดยใช้คำสั่งที่กำหนด
sudo pip ติดตั้ง mpu6050
ตอนนี้เราสามารถค้นหาโค้ดตัวอย่างได้ในตัวอย่าง ผู้ใช้สามารถทดสอบโค้ดนั้นได้โดยอัพโหลดไปยัง Raspberry Pi โดยตรงหรือปรับแต่งตามความต้องการ ที่นี่เราได้แสดงค่าแกน X, Y และ Z ของ MPU6050 บนจอ LCD 16x2 คุณสามารถค้นหารหัส Python ฉบับเต็มได้ที่ส่วนท้ายของบทช่วยสอน
คำอธิบายการเขียนโปรแกรม:
รหัส Python ที่สมบูรณ์จะได้รับในตอนท้ายที่นี่เรากำลังอธิบายส่วนสำคัญบางส่วนของโค้ด
ในโปรแกรม Python เราได้นำเข้าไลบรารีที่จำเป็นบางอย่างเช่นเวลา smbus และ GPIO
นำเข้า smbus เวลานำเข้านำเข้า RPi.GPIO เป็น gpio
หลังจากนี้เราต้องใช้ที่อยู่ลงทะเบียนเพื่อกำหนดค่า MPU6050 และรับค่าจากสิ่งเดียวกัน เราได้นำตัวแปรบางตัวมาทำการปรับเทียบและกำหนดค่าเริ่มต้นบัสสำหรับ I2C
PWR_M = 0x6B DIV = 0x19 CONFIG = 0x1A GYRO_CONFIG = 0x1B INT_EN = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO41 บัส = 0xMB อุปกรณ์ที่อยู่ TEMP AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
จากนั้นเราได้เขียนฟังก์ชั่นบางอย่างสำหรับการขับขี่เช่น 16x2LCD def เริ่มต้น () cmd def (CH) เขียน def (CH) def พิมพ์ (STR) def ชัดเจน () ฯลฯ คุณสามารถตรวจสอบการเชื่อมต่อของ LCD กับ Raspberry Pi เพิ่มเติมได้
หลังจากนี้เราต้องเริ่มต้นโมดูล MPU6050
def InitMPU (): bus.write_byte_data (Device_Address, DIV, 7) bus.write_byte_data (Device_Address, PWR_M, 1) bus.write_byte_data (Device_Address, CONFIG, 0) bus.write_byte_data (Device_Address, GYRObyte_data) bus.write, INT_EN, 1) เวลานอนหลับ (1)
หลังจากนี้เราต้องเขียนฟังก์ชันบางอย่างเพื่ออ่านค่าจาก MPU6050 และแสดงเป็น LCD ฟังก์ชัน Given ใช้เพื่ออ่านข้อมูลจาก MPU6050
def readMPU (addr): high = bus.read_byte_data (Device_Address, addr) low = bus.read_byte_data (Device_Address, addr + 1) value = ((สูง << 8) - ต่ำ) if (value> 32768): value = value - ค่าตอบแทน 65536
ฟังก์ชัน Given ใช้เพื่ออ่านข้อมูลมาตรความเร่งและไจโรมิเตอร์
def accel (): x = readMPU (ACCEL_X) y = readMPU (ACCEL_Y) z = readMPU (ACCEL_Z) Ax = (x / 16384.0-AxCal) Ay = (y / 16384.0-AyCal) Az = (z / 16384.0-AzCal) #print "X =" + str (Ax) display (Ax, Ay, Az) time.sleep (.01) def gyro (): global GxCal global GyCal global GzCal x = readMPU (GYRO_X) y = readMPU (GYRO_Y) z = readMPU (GYRO_Z) Gx = x / 131.0 - GxCal Gy = y / 131.0 - GyCal Gz = z / 131.0 - GzCal #print "X =" + str (Gx) display (Gx, Gy, Gz) time.sleep (. 01)
หลังจากนี้เราได้เขียนฟังก์ชันการอ่านอุณหภูมิ
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC พิมพ์ tempC setCursor (0,0) พิมพ์ ("Temp:") พิมพ์ (str (tempC)) เวลานอนหลับ (.2)
ฟังก์ชัน def calibrate () ใช้เพื่อปรับเทียบ MPU6050 และฟังก์ชัน def display () ใช้เพื่อแสดงค่าบน LCD ตรวจสอบฟังก์ชันเหล่านี้ในรหัสเต็มที่ระบุด้านล่าง
หลังจากนี้เราได้เริ่ม LCD เริ่มต้นและปรับเทียบ MPU6050 จากนั้นใน ขณะที่ วนซ้ำเราได้เรียกชุดค่าทั้งสามชุดจากอุณหภูมิ MPU , มาตรความเร่งและไจโรและแสดงผ่าน LCD
เริ่ม(); Print ("MPU6050 Interface") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate () ในขณะที่ 1: InitMPU () clear () สำหรับ i ในช่วง (20): temp () clear () Print ("Accel") time.sleep (1) for i in range (30): accel () clear () Print ("Gyro") time.sleep (1) for i in range (30): ไจโร ()
MPU6050 ไจโรและมาตรความเร่ง ใช้เพื่อตรวจจับตำแหน่งและการวางแนวของอุปกรณ์ใด ๆ Gyro ใช้แรงโน้มถ่วงของโลกเพื่อกำหนดตำแหน่งแกน x, y และ z และเครื่องวัดความเร่งจะตรวจจับตามอัตราการเปลี่ยนแปลงของการเคลื่อนที่ เราใช้ accelerometer กับ Arduino แล้วในหลายโครงการของเราเช่น:
- หุ่นยนต์ควบคุมด้วยท่าทางมือแบบ Accelerometer
- ระบบแจ้งเตือนอุบัติเหตุรถยนต์ที่ใช้ Arduino
- เครื่องตรวจจับแผ่นดินไหวโดยใช้ Arduino