- యాక్సిలెరోమీటర్ మరియు గైరోస్కోపిక్ సెన్సార్ అంటే ఏమిటి?
- MPU6050 యాక్సిలెరోమీటర్ మరియు గైరోస్కోపిక్ సెన్సార్ మాడ్యూల్
- భాగాలు అవసరం
- సర్క్యూట్ రేఖాచిత్రం
- ప్రోగ్రామింగ్ వివరణ
MPU6050 ఒక IC ఉంది 3-అక్షాల యాక్సిలెరోమీటర్ మరియు కలిపి ఒక 3-అక్షం గైరోస్కోప్ ఒక యూనిట్ లోకి. ఇది సంక్లిష్ట పనిని చేయడానికి ఉష్ణోగ్రత సెన్సార్ మరియు DCM ను కలిగి ఉంది. MPU6050 సాధారణంగా డ్రోన్ మరియు ఇతర రిమోట్ రోబోట్లను స్వీయ-బ్యాలెన్సింగ్ రోబోట్ వంటి నిర్మాణంలో ఉపయోగిస్తారు. ఈ ప్రాజెక్ట్లో మేము MPU6050 మరియు Arduino ఉపయోగించి డిజిటల్ ప్రొట్రాక్టర్ను నిర్మిస్తాము . ఇక్కడ ప్రొట్రాక్టర్ చిత్రంపై కోణాన్ని ప్రదర్శించడానికి సర్వో మోటర్ ఉపయోగించబడుతుంది. సర్వో మోటార్ షాఫ్ట్ ఒక సూదితో జతచేయబడింది, ఇది 16xLCD డిస్ప్లేలో ప్రదర్శించబడే కోణాన్ని సూచించడానికి ప్రొట్రాక్టర్ చిత్రంపై తిరుగుతుంది. వివరాల్లోకి వెళ్లేముందు గైరోస్కోప్ సెన్సార్ గురించి తెలుసుకుందాం.
యాక్సిలెరోమీటర్ మరియు గైరోస్కోపిక్ సెన్సార్ అంటే ఏమిటి?
త్వరణాన్ని కొలవడానికి యాక్సిలెరోమీటర్ ఉపయోగించబడుతుంది. ఇది వాస్తవానికి స్టాటిక్ మరియు డైనమిక్ త్వరణం రెండింటినీ గ్రహిస్తుంది. ఉదాహరణకు, మొబైల్ ల్యాండ్స్కేప్ మోడ్ లేదా పోర్ట్రెయిట్ మోడ్లో ఉందని గ్రహించడానికి మొబైల్ ఫోన్లు యాక్సిలెరోమీటర్ సెన్సార్ను ఉపయోగిస్తాయి. మేము ఇంతకుముందు అనేక ప్రాజెక్టులను నిర్మించడానికి ఆర్డునోతో యాక్సిలెరోమీటర్ను ఉపయోగించాము:
కదలికలో ఉన్న వస్తువు యొక్క ధోరణిని నిర్ణయించడానికి భూమి యొక్క గురుత్వాకర్షణను ఉపయోగించే కోణీయ వేగాన్ని కొలవడానికి గైరోస్కోప్ ఉపయోగించబడుతుంది. కోణీయ వేగం అంటే తిరిగే శరీరం యొక్క కోణీయ స్థానం యొక్క మార్పు రేటు.
ఉదాహరణకు, నేటి మొబైల్స్ మొబైల్ ఫోన్ యొక్క ధోరణి ప్రకారం మొబైల్ ఆటలను ఆడటానికి గైరోస్కోపిక్ సెన్సార్లను ఉపయోగిస్తాయి. అలాగే, VR హెడ్సెట్ 360 ధోరణిలో వీక్షణలు కలిగి ఉండటానికి గైరోస్కోప్ సెన్సార్ను ఉపయోగిస్తుంది
కాబట్టి యాక్సిలెరోమీటర్ సరళ త్వరణాన్ని కొలవగలదు, గైరోస్కోప్ భ్రమణ త్వరణాన్ని కనుగొనడంలో సహాయపడుతుంది. రెండు సెన్సార్లను ప్రత్యేక గుణకాలుగా ఉపయోగించినప్పుడు ధోరణి, స్థానం మరియు వేగాన్ని కనుగొనడం కష్టం అవుతుంది. కానీ రెండు సెన్సార్లను కలపడం ద్వారా ఇది జడత్వ కొలత యూనిట్ (IMU) గా పనిచేస్తుంది. కాబట్టి MPU6050 మాడ్యూల్లో, ధోరణి, స్థానం మరియు వేగాన్ని కనుగొనడానికి ఒకే పిసిబిలో యాక్సిలెరోమీటర్ మరియు గైరోస్కోప్ ఉన్నాయి.
అప్లికేషన్స్:
- దిశ నియంత్రణ కోసం డ్రోన్స్లో ఉపయోగిస్తారు
- స్వీయ బ్యాలెన్సింగ్ రోబోట్లు
- రోబోటిక్ చేయి నియంత్రణ
- టిల్ట్ సెన్సార్
- మొబైల్ ఫోన్లు, వీడియో గేమ్ కన్సోల్లలో వాడతారు
- హ్యూమనాయిడ్ రోబోట్లు
- విమానం, ఆటోమోటివ్ మొదలైన వాటిలో వాడతారు.
MPU6050 యాక్సిలెరోమీటర్ మరియు గైరోస్కోపిక్ సెన్సార్ మాడ్యూల్
MPU6050 అనేది మైక్రో ఎలక్ట్రో-మెకానికల్ సిస్టమ్స్ (MEMS), దీనిలో 3-యాక్సిస్ యాక్సిలెరోమీటర్ మరియు 3-యాక్సిస్ గైరోస్కోప్ ఉంటాయి. దీనికి ఉష్ణోగ్రత సెన్సార్ కూడా ఉంది.
ఇది కొలవగలదు:
- త్వరణం
- వేగం
- ఓరియంటేషన్
- స్థానభ్రంశం
- ఉష్ణోగ్రత
ఈ మాడ్యూల్ దానిలో (DMP) డిజిటల్ మోషన్ ప్రాసెసర్ను కలిగి ఉంది, ఇది సంక్లిష్ట గణనను చేయగల శక్తివంతమైనది మరియు మైక్రోకంట్రోలర్ కోసం పనిని విముక్తి చేస్తుంది.
మాడ్యూల్ రెండు సహాయక పిన్లను కలిగి ఉంది, ఇది మాగ్నెటోమీటర్ వంటి బాహ్య IIC మాడ్యూళ్ళను ఇంటర్ఫేస్ చేయడానికి ఉపయోగపడుతుంది. మాడ్యూల్ యొక్క IIC చిరునామా కాన్ఫిగర్ చేయబడినందున, ఒకటి కంటే ఎక్కువ MPU6050 సెన్సార్లను AD0 పిన్ను ఉపయోగించి మైక్రోకంట్రోలర్కు ఇంటర్ఫేస్ చేయవచ్చు.
లక్షణాలు & లక్షణాలు:
- విద్యుత్ సరఫరా: 3-5 వి
- కమ్యూనికేషన్: I2C ప్రోటోకాల్
- అంతర్నిర్మిత 16-బిట్ ADC అధిక ఖచ్చితత్వాన్ని అందిస్తుంది
- అంతర్నిర్మిత DMP అధిక గణన శక్తిని అందిస్తుంది
- మాగ్నెటోమీటర్ వంటి ఇతర IIC పరికరాలతో ఇంటర్ఫేస్ చేయడానికి ఉపయోగించవచ్చు
- కాన్ఫిగర్ ఐఐసి చిరునామా
- అంతర్నిర్మిత ఉష్ణోగ్రత సెన్సార్
MPU6050 యొక్క పిన్అవుట్:
పిన్ నెంబర్ | పిన్ పేరు | వా డు |
1 | విసిసి | మాడ్యూల్ కోసం శక్తిని అందిస్తుంది, + 3V నుండి + 5V వరకు ఉంటుంది. సాధారణంగా + 5 వి ఉపయోగించబడుతుంది |
2 | గ్రౌండ్ | గ్రౌండ్ ఆఫ్ సిస్టమ్కు కనెక్ట్ చేయబడింది |
3 | సీరియల్ క్లాక్ (SCL) | I2C కమ్యూనికేషన్ కోసం క్లాక్ పల్స్ అందించడానికి ఉపయోగిస్తారు |
4 | సీరియల్ డేటా (SDA) | I2C కమ్యూనికేషన్ ద్వారా డేటాను బదిలీ చేయడానికి ఉపయోగిస్తారు |
5 | సహాయక సీరియల్ డేటా (XDA) | MPU6050 తో ఇతర I2C మాడ్యూళ్ళను ఇంటర్ఫేస్ చేయడానికి ఉపయోగించవచ్చు. ఇది ఐచ్ఛికం |
6 | సహాయక సీరియల్ క్లాక్ (XCL) | MPU6050 తో ఇతర I2C మాడ్యూళ్ళను ఇంటర్ఫేస్ చేయడానికి ఉపయోగించవచ్చు. ఇది ఐచ్ఛికం |
7 | AD0 | ఒకటి కంటే ఎక్కువ MPU6050 ను ఒకే MCU ఉపయోగిస్తే, అప్పుడు ఈ పిన్ను చిరునామాను మార్చడానికి ఉపయోగించవచ్చు |
8 | అంతరాయం (INT) | MCU చదవడానికి డేటా అందుబాటులో ఉందని సూచించడానికి అంతరాయ పిన్. |
సెల్ఫ్ బ్యాలెన్సింగ్ రోబోట్ మరియు ఇంక్లినోమీటర్లను నిర్మించడానికి మేము గతంలో ఆర్డునోతో MPU6050 ను ఉపయోగించాము.
భాగాలు అవసరం
- ఆర్డునో UNO
- MPU6050 గైరోస్కోప్ మాడ్యూల్
- 16x2 LCD డిస్ప్లే
- పొటెన్టోమీటర్ 10 కె
- ఎస్జీ 90-సర్వో మోటార్
- ప్రొట్రాక్టర్ చిత్రం
సర్క్యూట్ రేఖాచిత్రం
ఈ DIY Arduino Protractor కోసం సర్క్యూట్ రేఖాచిత్రం క్రింద ఇవ్వబడింది:
Arduino UNO మరియు MPU6050 మధ్య సర్క్యూట్ కనెక్షన్లు:
MPU6050 |
ఆర్డునో UNO |
వీసీసీ |
+ 5 వి |
GND |
GND |
ఎస్సీఎల్ |
A5 |
SDA |
ఎ 4 |
Arduino UNO మరియు Servo Motor మధ్య సర్క్యూట్ కనెక్షన్లు:
సర్వో మోటార్ |
ఆర్డునో UNO |
RED (VCC) |
+ 5 వి |
ఆరెంజ్ (పిడబ్ల్యుఎం) |
9 |
BROWN (GND) |
GND |
Arduino UNO మరియు 16x2 LCD మధ్య సర్క్యూట్ కనెక్షన్లు:
ఎల్సిడి |
ఆర్డునో నానో |
వి.ఎస్.ఎస్ |
GND |
VDD |
+ 5 వి |
వి 0 |
పొటెన్టోమీటర్ సెంటర్ పిన్కు LCD యొక్క కాంట్రాస్ట్ను నియంత్రించడానికి |
ఆర్ఎస్ |
2 |
ఆర్డబ్ల్యూ |
GND |
ఇ |
3 |
డి 4 |
4 |
డి 5 |
5 |
డి 6 |
6 |
డి 7 |
7 |
జ |
+ 5 వి |
కె |
GND |
ప్రోగ్రామింగ్ వివరణ
ఎప్పటిలాగే ఈ ట్యుటోరియల్ చివరిలో ప్రదర్శన వీడియోతో పూర్తి ప్రోగ్రామ్ ఇవ్వబడుతుంది.
ఇక్కడ సర్వో మోటారు Arduino తో అనుసంధానించబడి ఉంది మరియు దాని షాఫ్ట్ వంపుతిరిగిన MPU6050 యొక్క కోణాన్ని సూచించే ప్రొట్రాక్టర్ చిత్రంపై అంచనా వేయబడుతుంది. ఈ ట్యుటోరియల్ కోసం ప్రోగ్రామింగ్ చాలా సులభం. దానిని వివరంగా చూద్దాం.
మొదట అవసరమైన అన్ని లైబ్రరీలను చేర్చండి - సర్వోను ఉపయోగించటానికి సర్వో మోటార్ లైబ్రరీ, ఎల్సిడిని ఉపయోగించటానికి ఎల్సిడి లైబ్రరీ మరియు ఐ 2 సి కమ్యూనికేషన్ను ఉపయోగించడానికి వైర్ లైబ్రరీ.
MPU6050 I2C కమ్యూనికేషన్ను ఉపయోగిస్తుంది మరియు అందువల్ల, ఇది Arduino యొక్క I2C పిన్లకు మాత్రమే అనుసంధానించబడి ఉండాలి. కాబట్టి, Arduino UNO మరియు MPU6050 మధ్య కమ్యూనికేషన్ను స్థాపించడానికి Wire.h లైబ్రరీ ఉపయోగించబడుతుంది. మేము ఇంతకుముందు MPU6050 ను Arduino తో ఇంటర్ఫేస్ చేసాము మరియు x, y, z కోఆర్డినేట్ విలువలను 16x2 LCD లో ప్రదర్శించాము.
# చేర్చండి
ఆర్డ్యునో యుఎన్ఓతో అనుసంధానించబడిన ఎల్సిడి డిస్ప్లే పిన్లు ఆర్ఎస్, ఇ, డి 4, డి 5, డి 6, డి 7 ని తరువాత నిర్వచించండి.
లిక్విడ్ క్రిస్టల్ ఎల్సిడి (2,3,4,5,6,7);
తరువాత MPU6050 యొక్క I2C చిరునామా నిర్వచించబడింది.
const int MPU_addr = 0x68;
X, Y మరియు Z అక్షం విలువలను నిల్వ చేయడానికి సర్వో క్లాస్ మరియు మూడు వేరియబుల్స్ ఉపయోగించడం కోసం మైసర్వో ఆబ్జెక్ట్ను ప్రారంభించండి.
సర్వో మైసర్వో; int16_t అక్షం_ఎక్స్, అక్షం_వై, అక్షం_జెడ్;
0 నుండి 360 వరకు కోణాన్ని కొలవడానికి తదుపరి కనిష్ట మరియు గరిష్ట విలువ 265 మరియు 402 గా సెట్ చేయబడింది.
int minVal = 265; int maxVal = 402;
శూన్య సెటప్ ():
లో గర్జన సెటప్ ఫంక్షన్ మొదటి I2C కమ్యూనికేషన్ మొదలుపెట్టబడును మరియు ప్రసార 0x68 యొక్క చిరునామాతో MPU6050 తో ప్రారంభించింది.
వైర్.బెగిన్ (); వైర్.బెగిన్ ట్రాన్స్మిషన్ (MPU_addr);
0x6B వ్రాయడం ద్వారా MPU6050 ని స్లీప్ మోడ్లో ఉంచండి, ఆపై 0 వ్రాయడం ద్వారా మేల్కొలపండి
వైర్.రైట్ (0x6B); వైర్.రైట్ (0);
MPU6050 యాక్టివ్ చేసిన తరువాత, ప్రసారాన్ని ముగించండి
వైర్.ఎండ్ ట్రాన్స్మిషన్ (నిజం);
ఇక్కడ సర్వో మోటార్ యొక్క PWM పిన్ Arduino UNO పిన్ 9 తో అనుసంధానించబడి ఉంది.
myservo.attach (9);
మేము సర్క్యూట్ను శక్తివంతం చేసిన వెంటనే ఎల్సిడి స్వాగత సందేశాన్ని ప్రదర్శిస్తుంది మరియు 3 సెకన్ల తర్వాత దాన్ని క్లియర్ చేస్తుంది
lcd.begin (16,2); // 16X2 మోడ్లో LCD ని సెట్ చేస్తుంది lcd.print ("CIRCUIT DIGEST"); ఆలస్యం (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("MPU6050"); ఆలస్యం (3000); lcd.clear ();
శూన్య లూప్ ():
మళ్ళీ, I2C కమ్యూనికేషన్ MPU6050 తో ప్రారంభమైంది.
వైర్.బెగిన్ ట్రాన్స్మిషన్ (MPU_addr);
అప్పుడు రిజిస్టర్ 0x3B (ACCEL_XOUT_H) తో ప్రారంభించండి
వైర్.రైట్ (0x3B);
ఇప్పుడు సెట్ ఎండ్ ట్రాన్స్మిషన్ ద్వారా ఈ ప్రక్రియ పున ar ప్రారంభించబడింది, కాని కనెక్షన్ సక్రియంగా ఉంది.
వైర్.ఎండ్ ట్రాన్స్మిషన్ (తప్పుడు);
ఆ తరువాత ఇప్పుడు 14 రిజిస్టర్ల నుండి డేటాను అభ్యర్థించండి.
Wire.requestFrom (MPU_addr, 14, true);
ఇప్పుడు గౌరవనీయమైన అక్షం రిజిస్టర్ విలువలు (x, y, z) పొందబడతాయి మరియు వేరియబుల్స్ యాక్సిస్_ఎక్స్, యాక్సిస్_వై, యాక్సిస్_జెడ్లో నిల్వ చేయబడతాయి.
అక్షం_ఎక్స్ = వైర్.రెడ్ () << 8- వైర్.రెడ్ (); అక్షం_వై = వైర్.రెడ్ () << 8- వైర్.రెడ్ (); అక్షం_జెడ్ = వైర్.రెడ్ () << 8- వైర్.రెడ్ ();
అప్పుడు ఆ విలువలను 265 నుండి 402 వరకు -90 నుండి 90 వరకు మ్యాప్ చేయండి. ఇది మూడు అక్షాలకు జరుగుతుంది.
int xAng = పటం (అక్షం_ఎక్స్, మిన్వాల్, మాక్స్వాల్, -90,90); int yAng = పటం (అక్షం_వై, మిన్వాల్, మాక్స్వాల్, -90,90); int zAng = పటం (అక్షం_జెడ్, మిన్వాల్, మాక్స్వాల్, -90,90);
డిగ్రీలో x విలువను లెక్కించడానికి ఫార్ములా (0 నుండి 360 వరకు) క్రింద ఇవ్వబడింది. ఇక్కడ మనం x ను మాత్రమే మారుస్తాము ఎందుకంటే సర్వో మోటార్ రొటేషన్ x విలువ కదలికపై ఆధారపడి ఉంటుంది.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
X కోణ విలువ, 0 నుండి 360 డిగ్రీల వరకు, 0 నుండి 180 గా మార్చబడుతుంది.
int pos = పటం (x, 0,180,0,180);
ప్రొట్రాక్టర్ ఇమేజ్పై సర్వోను తిప్పడానికి కోణ విలువను వ్రాసి, ఆ విలువలను 16x2 LCD డిస్ప్లేలో ప్రింట్ చేయండి.
myservo.write (pos); lcd.setCursor (0,0); lcd.print ("యాంగిల్"); lcd.setCursor (0,1); lcd.print (x); ఆలస్యం (500); lcd.clear ();
కాబట్టి కోణాన్ని కొలవడానికి Arduino తో MPU6050 ను ఈ విధంగా ఉపయోగించవచ్చు. ఈ ప్రాజెక్ట్ కోసం పూర్తి కోడ్ మరియు వీడియో క్రింద ఇవ్వబడ్డాయి.