- Vereiste materialen:
- Schakelschema:
- Uw installatie van stroom voorzien:
- Programmeren van uw Arduino:
- De Android-applicatie voorbereiden met Processing:
- Werking van Arduino Inclinometer:
De MPU6050 is een IC 3-assige accelerometer en een 3-assige gyroscoop gecombineerd in één eenheid. Het bevat ook een temperatuursensor en een DCM om een complexe taak uit te voeren. De MPU6050 wordt vaak gebruikt bij het bouwen van drones en andere robots op afstand, zoals een zelfbalancerende robot. In dit project zullen we leren hoe we de MPU6050 kunnen gebruiken in een Inclinometer of Spirit Leveler. Zoals we weten wordt een inclinometer gebruikt om te controleren of een oppervlak perfect waterpas is of niet, ze zijn verkrijgbaar als spritbellen of als digitale meters. In dit project gaan we een digitale inclinometer bouwen die kan worden gemonitord met een Android-applicatie. De reden voor het gebruik van een remote display zoals een mobiele telefoon is dat we de waarden van MPU6050 kunnen monitoren zonder naar de hardware te hoeven kijken, dit zou erg handig zijn als de MPU6050 op een drone of op een andere ontoegankelijke locatie wordt geplaatst.
Vereiste materialen:
- Arduino Pro-mini (5V)
- MPU6050 Gyrosensor
- HC-05 of HC-06 Bluetooth-module
- FTDI-bord
- Breadboard
- Draden aansluiten
- Slimme telefoon
Schakelschema:
Het volledige schakelschema voor dit Arduino Tilt Sensor Project wordt hieronder weergegeven. Het heeft slechts drie componenten en kan eenvoudig over het breadboard worden gebouwd.
De MPU6050 communiceert met behulp van I2C en daarom is de SDA-pin verbonden met de A4-pin van Arduino, wat de SDA-pin is, en de SCL-pin is verbonden met de A5-pin van Arduino. De HC-06 Bluetooth-module werkt met behulp van seriële communicatie, vandaar dat de Rx-pin van Bluetooth is verbonden met pin D11 en de Tx-pin van Bluetooth is verbonden met pin D10 van de Arduino. Deze pin D10 en D11 worden geconfigureerd als seriële pin door de Arduino te programmeren. De HC-05-module en de MSP6050-module werken op + 5V en daarom worden ze gevoed door de Vcc-pin van de Arduino, zoals hierboven weergegeven.
Ik heb een paar breadboard-verbindingsdraden gebruikt en de opstelling over een klein breadboard gebouwd. Zodra de verbindingen zijn gemaakt, ziet mijn bord er als volgt uit.
Uw installatie van stroom voorzien:
Je kunt je circuit van stroom voorzien via het FTDI-programmeerbord zoals ik heb gedaan, of je kunt een 9V-batterij of 12V-adapter gebruiken en deze aansluiten op de Raw-pin van de Arduino pro mini. De Arduino Pro-mini heeft een ingebouwde spanningsregelaar die deze externe spanningsgeregelde + 5V omzet.
Programmeren van uw Arduino:
Zodra de hardware klaar is, kunnen we beginnen met het programmeren van onze Arduino. Zoals altijd staat de volledige code voor dit project onderaan deze pagina. Maar om het project beter te begrijpen, heb ik de code in kleine kieren gebroken en uitgelegd als onderstaande stappen.
De eerste stap zou zijn om de MPU6050 met Arduino te verbinden. Voor dit project gaan we de door Korneliusz ontwikkelde bibliotheek gebruiken die via onderstaande link gedownload kan worden
MPU6050 Liberty - Korneliusz Jarzebski
Download het ZIP-bestand en voeg het toe aan uw Arduino IDE. Ga dan naar Bestand-> Voorbeelden-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Hiermee wordt het voorbeeldprogramma geopend dat de bibliotheek gebruikt die we zojuist hebben gedownload. Dus klik op uploaden en wacht tot het programma is geüpload naar je Arduino Pro mini. Zodra dat is gebeurd, opent u uw seriële monitor en stelt u uw baudrate in op 115200 en controleert u of u het volgende krijgt.
In eerste instantie zullen alle drie de waarden nul zijn, maar als u uw breadboard verplaatst, kunt u zien dat deze waarden veranderen. Als ze veranderen, betekent dit dat uw verbinding correct is, controleer anders uw verbindingen. Neem hier even de tijd om op te merken hoe de drie waarden Pitch Roll en Yaw variëren afhankelijk van de manier waarop u uw sensor kantelt. Als je in de war raakt, druk dan op de resetknop op de Arduino en de waarden worden opnieuw op nul geïnitialiseerd, kantel de sensor vervolgens in één richting en controleer welke waarden variëren. De onderstaande afbeelding zal u helpen om het beter te begrijpen.
Van deze drie parameters zijn we alleen geïnteresseerd in Roll en Pitch. De Roll-waarde vertelt ons over de helling in de X-as en de Pitch-waarde vertelt ons over de helling in de Y-as. Nu we de basis hebben begrepen, kunnen we beginnen met het programmeren van de Arduino om deze waarden te lezen en deze via Bluetooth naar Arduino sturen. Laten we zoals altijd beginnen met alle bibliotheken die nodig zijn voor dit project
# omvatten
Vervolgens initialiseren we de seriële software voor de Bluetooth-module. Dit is mogelijk vanwege de Software Serial-bibliotheek in Arduino, de IO-pinnen kunnen worden geprogrammeerd om te werken als seriële pinnen. Hier gebruiken we de digitale pinnen D10 en D11, waarbij D10 id Rx en D11 Tx is.
SoftwareSerial BT (10, 11); // RX, TX
Vervolgens initialiseren we de variabelen en objecten die nodig zijn voor het programma en gaan we verder met de functie setup () waar we de baudrate specificeren voor seriële monitor en Bluetooth. Voor HC-05 en HC-06 is de baudrate 9600, dus het is verplicht om dezelfde te gebruiken. Vervolgens controleren we of de IIC-bus van Arduino is aangesloten op MPU6050, anders printen we een waarschuwingsbericht en blijven daar zolang het apparaat is aangesloten. Daarna kalibreren we de Gyro en stellen we de drempelwaarden in met behulp van de respectievelijke functies, zoals hieronder weergegeven.
leegte setup () {Serial.begin (115200); BT.begin (9600); // start de Bluetooth-communicatie met 9600 baudrate // Initialiseer MPU6050 terwijl (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Kon geen geldige MPU6050-sensor vinden, controleer bedrading!"); vertraging (500); } mpu.calibrateGyro (); // Kalibreer gyroscoop tijdens start mpu.setThreshold (3); // Beheert de gevoeligheid}
De regel " mpu.calibrateGyro ();" kalibreer de MPU6050 voor de positie waarop deze zich momenteel bevindt. Deze regel kan meerdere keren binnen het programma worden opgeroepen wanneer de MPU6050 moet worden gekalibreerd en alle waarden op nul moeten worden gezet. "Mpu.setThreshold (3);" deze functie bepaalt hoeveel de waarde varieert voor de beweging op de sensor. Een te lage waarde zal het geluid verhogen, dus wees voorzichtig als je hiermee speelt.
Binnen de lege lus () lezen we herhaaldelijk de waarden van de gyroscoop en de temperatuursensor berekenen de waarde van pitch, roll en yaw, en sturen deze naar de Bluetooth-module. De volgende twee regels zullen de ruwe Gyro-waarden en de temperatuurwaarde lezen
Vector norm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Vervolgens berekenen we de pitch, roll en yaw door te vermenigvuldigen met de tijdstap en deze bij de vorige waarden op te tellen. Een timeStep is niets anders dan het interval tussen opeenvolgende metingen.
toonhoogte = toonhoogte + norm.YAxis * timeStep; rol = rol + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Laten we de onderstaande regel eens bekijken om de tijdstap beter te begrijpen. Deze regel is geplaatst om de waarden van MPU6050 exact af te lezen met een interval van 10mS of 0,01 seconde. Dus we declareren de waarde van timeStep als 0,01. En gebruik de onderstaande regel om het programma vast te houden als er meer tijd over is. (millis () - timer ()) geeft de tijd aan die het programma tot dusver heeft geduurd om uit te voeren. We trekken het gewoon af met 0,01 seconden en voor de resterende tijd houden we ons programma daar gewoon met behulp van de vertragingsfunctie.
vertraging ((timeStep * 1000) - (millis () - timer));
Als we klaar zijn met het lezen en berekenen van de waarden, kunnen we ze via Bluetooth naar onze telefoon sturen. Maar hier zit een addertje onder het gras. De Bluetooth-module die we gebruiken, kan slechts 1 byte (8 bits) verzenden, waardoor we alleen getallen van 0 tot 255 kunnen verzenden. We moeten dus onze waarden splitsen en binnen dit bereik in kaart brengen. Dit wordt gedaan door de volgende regels
if (rol> -100 && rol <100) x = kaart (rol, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = map (pitch, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
Zoals je kunt zien, wordt de waarde van de rol toegewezen aan 0 tot 100 in de variabele x en de toonhoogte wordt toegewezen aan 100 tot 200 in de variabele y en temp wordt toegewezen aan 200 en hoger in de variabele t. We kunnen dezelfde informatie gebruiken om de gegevens op te halen van wat we hebben verzonden. Ten slotte schrijven we deze waarden via Bluetooth met behulp van de volgende regels.
BT.write (x); BT.write (y); BT.write (t);
Als je het volledige programma hebt begrepen, scroll dan naar beneden om het programma te bekijken en upload het naar het Arduino-bord.
De Android-applicatie voorbereiden met Processing:
De Android-applicatie voor deze Arduino Inclinometer is ontwikkeld met behulp van de Processing IDE. Dit lijkt sterk op Arduino en kan worden gebruikt om systeemtoepassingen, Android-toepassingen, webontwerpen en nog veel meer te maken. We hebben de verwerking al gebruikt om enkele van onze andere coole projecten te ontwikkelen die hieronder worden vermeld
- Pingpongspel met Arduino
- Slimme telefoongestuurde FM-radio met behulp van verwerking.
- Arduino-radarsysteem met behulp van verwerking en ultrasone sensor
Het is echter niet mogelijk om de volledige code uit te leggen voor het maken van deze applicatie. Er zijn dus twee manieren om dit te bespreken. Of u kunt het APK-bestand downloaden via de onderstaande link en de Android-applicatie rechtstreeks op uw telefoon installeren. Of scroll hieronder om de volledige verwerkingscode te vinden en leer zelf hoe het werkt
In het ZIP-bestand vindt u een map met de naam data die bestaat uit alle afbeeldingen en andere bronnen die in de Android-applicatie moeten worden geladen. De onderstaande regel bepaalt met welke naam de Bluetooth automatisch verbinding moet maken
bt.connectToDeviceByName ("HC-06");
Binnen de functie draw () worden de dingen herhaaldelijk uitgevoerd, we tekenen de afbeeldingen, geven de tekst weer en animeren de balken op basis van de waarden van de Bluetooth-module. U kunt controleren wat er binnen elke functie gebeurt door het programma te lezen.
void draw () // De oneindige lus {background (0); imageMode (CENTER); afbeelding (logo, breedte / 2, hoogte / 1.04, breedte, hoogte / 12); laad afbeeldingen(); textfun (); getval (); }
Ten slotte is er nog een belangrijk ding om uit te leggen, onthoud dat we de waarde van pitch, roll en temp splitsen van 0 tot 255. Dus hier brengen we het weer terug naar normale waarden door het om te keren naar normale waarden.
if (info <100 && info> 0) x = map (info, 0, 100, - (breedte / 1.5) / 3, + (breedte / 1.5) / 3); // x = info; anders if (info <200 && info> 100) y = map (info, 100, 200, - (breedte / 4.5) /0.8, + (breedte / 4.5) /0.8); // y = info; anders if (info> 200) temp = info -200; println (temp, x, y);
Er zijn veel betere manieren om gegevens van een Bluetooth-module naar een telefoon te halen, maar aangezien dit slechts een hobbyproject is, hebben we ze genegeerd, dus je kunt diep graven als je geïnteresseerd bent.
Werking van Arduino Inclinometer:
Nadat je klaar bent met de hardware en applicatie, is het tijd om plezier te hebben met wat we hebben gebouwd. Upload de Arduino-code naar het bord, je kunt ook de opmerkingen op Serial.println- regels verwijderen en controleren of de hardware werkt zoals verwacht met behulp van de seriële monitor. Hoe dan ook, dat is volledig optioneel.
Zodra de code is geüpload, start u de Android-applicatie op uw mobiele telefoon. De applicatie zou automatisch verbinding moeten maken met uw HC-06 module en het zal "Connect to: HC-06" weergeven bovenaan de applicatie, zoals hieronder getoond.
In eerste instantie zijn alle waarden nul, behalve de temperatuurwaarde. Dit komt omdat de Arduino de MPU-6050 voor deze positie als referentie heeft gekalibreerd, nu kun je de hardware kantelen en controleren of de waarden op de mobiele applicatie ook veranderen samen met de animatie. De volledige werking van de applicatie is te vinden in de onderstaande video. Dus nu kun je het breadboard overal plaatsen en controleren of het oppervlak perfect waterpas is.
Ik hoop dat je het project hebt begrepen en er iets nuttigs van hebt geleerd. Gebruik bij twijfel de commentaarsectie hieronder of de forums om het probleem op te lossen.