YMFC-AL - Build your own self-leveling Arduino quadcopter - with schematic and code
HTML-код
- Опубликовано: 3 окт 2024
- Check out the GPS version: • How to build the YMFC-...
The YMFC-AL is an auto-leveling Arduino Uno based quadcopter that is easy to build and fun to fly. Auto leveling means that, when you release the sticks the quadcopter levels itself. This makes it much easier to fly.
The YMFC-AL is not a high level flight controller. The purpose of the YMFC-AL is to provide a simple and understandable code that is needed to build an Arduino based auto-level quadcopter flight controller.
Website: www.brokking.ne...
IMU part 1: • MPU-6050 6dof IMU tuto...
IMU part 2: • MPU-6050 6dof IMU tuto...
I've made a successful flight today after almost 2 months of figuring things out. I have no experience in drones whatsoever prior to this. The past weeks have been so frustrating attempting to fly drone as part of an objective in a grad school requirement. Thank you very much for this wonderful videos, its been frustrating yet fun experience..Thank you very much!
Are these tutorials sufficient for me to build my drone, or did you use additional sources as well?
You have made successfully your own drone... It is stable and fast response please reply.
It’s Addicting
Hi bro, I'm also making a drone for my project, I don't know how to adjust the motor vibration properly, and I also have a problem in the flight code, when I attach the propeller, when starting, the motor speed increases It goes up very quickly for a few seconds then stops, but without the propeller the code works normally. Thank you very much if you see my question.
@@thanhsangg I hear you brother my one took off and turned over on my first run and now net to make adjustments
Man, I'm doing eletronic engeneering at UFSC ( I'm from Brazil ) and as a project of my transducers class I tried to find a good project to build and create a YT video about it. So far I'm very exited about your tutorial and schematics, so thank you a lot for taking your precious time to create this great tutorial, It really is helping me a lot with understanding about Quad's.
Concordo contigo melhor vídeo do youtube!!! Best RUclips Vídeo!!! Thank
Olá Marilene!
Did it go well ?
I just finished my first test and it's flying. I'm super happy but I'm even happier to know that there are people who provide such documentation for such a great project, thanks a lot Joop, the real MVP on earth.
Hi can u tell me were u got the codes for ardrino because i am having hard time finding them
Hi have you change the pid values?
My High school Seniors in Arapahoe Nebraska built and flew this!!! It worked great, and was a great project. You did just enough (All) of the heavy lifting to keep it accessible to high school students with little programming background. Took us about a 6 weeks (30 classroom hours) with three students and myself to build and then debug it (Most of the time was finding the errors and fixing them). I gave students very little instruction and just let them build from your site and others. Great Experience!
Thank you for sharing this story. It really keeps me motivated.
Please reply!! CAN I resetup my quad because when I send r in esc calibration the roll and pitch sticks are at 2000ms
how old were they?
Hi Joop,
I just finished building and flying my first quadcopter,YMFC-AL. It works beautifully!!! Thank you!
I would like to thank you for the sharing your knowledge!!! I was able to get up to speed very quickly on what I need to know e.g. Info about PID controllers, gyro/accelerometers, AVR embedded programming, transmitters/receivers, basic electronics and wiring, micro controllers, understanding spec sheets, bit-manipulation of registers, bitwise logical operators, your Arduino sketches, and quadcopters in general.
Wow what a project!!! Just phenomenal!!!
Thanks.
Thomas D. Wilhelm
Robotics Enthusiast
Hi Mr.Joop, I have built and tested successfully my own Quadcopter using Arduino Mega. My model has many functions like auto-balanced, holding altitude, holding position, return home, autoFlight, and emergency return,... I used this project for my Graduate thesis and now I was graduated.
Honestly, I want to thank you and give you a big respect for all knowledges you share.
Wishing you all the best!!
am doing the samething will graduate soon i included a computer vision camera that detects cracks on concrete, let me ask you which battery did you use
@@Patrick-wn6ujyes!! I used Lipo battery,
Weight: >= 350g
3s - 5400mah - 30C( changeable )
@@syha06 did you have to change the resistors of the voltage divider?
@@Patrick-wn6uj no, because the voltage of Battery is still 12.6V (3s full charged). You change the resistor when you change the voltage of battery ( it’s up to type of battery’s voltage that u are using
Congratulations. I call Joop saying that the arduino version is not fast enough for some things and this is why he switched to the STM32 version. basically autolevel and holding altitude would be sufficient for me. So you implemented this with a ATMEGA 2560 and this should be enough info for me to go with the ATMEGA1284p as it should also have enough flash and is fast enough to implement the additional altitude hold function, right?
Thanks a lot Joop!!. I ran the setup program and below are the output for gyro configuration
Gyro calibration
===================================================
Don't move the quadcopter!! Calibration starts in 3 seconds
Calibrating the gyro, this will take +/- 8 seconds
Please wait....................
Axis 1 offset=67.15
Axis 2 offset=-36.96
Axis 3 offset=-45.95
===================================================
Gyro axes configuration
===================================================
Lift the left side of the quadcopter to a 45 degree angle within 10 seconds
OK!
Angle detection = 2 (
Axis inverted = no
Put the quadcopter back in its original position
Move stick 'nose up' and back to center to continue
Lift the nose of the quadcopter to a 45 degree angle within 10 seconds
OK!
Angle detection = 1
Axis inverted = no
Put the quadcopter back in its original position
Move stick 'nose up' and back to center to continue
Rotate the nose of the quadcopter 45 degree to the right within 10 seconds
OK!
Angle detection = 3
Axis inverted = no
Put the quadcopter back in its original position
Move stick 'nose up' and back to center to continue
===================================================
LED test
===================================================
The LED should now be lit
Move stick 'nose up' and back to center to continue
===================================================
Final setup check
===================================================
Receiver channels ok
Gyro axes ok
===================================================
Storing EEPROM information
===================================================
Writing EEPROM
Done!
Verify EEPROM data
Verification done
Setup is finished.
You can now calibrate the esc's and upload the YMFC-AL code.
Can you please let me know gyro axes are Ok? In your video Angle detection is 1,2 and 3 but in may case it is 2 , 1 and 3. In your case Axis inverted - No, Yes and Yes but in my case all No. Let me know if the above setup output is correct for gyro configuration. Thanks in advance.
I do not normally like a video nor comment on it, but this sure does deserve adequate recognition. The maker did a very good job both in the software and with the documentation. Well done.
respect
This was so well explained. Good Job Bro
Just finished my quadcopter and all I have to say is THANKS. it flies perfectly, followed this step by step and the result is amazing, i'm really happy right now. Congratulations for this series.
Please can you tell me if you used same parameters of pid controller?
Joop I have to thank you for these amazing tutorials, 2 months ago I had never even heard of an Adruino never mind ever flown a quadcopter. I have just finished building and learning to fly my very own Adruino based Quadcopter thanks to you! And you know what, it flies fantastically. Its been a doddle to make because of your intuitive videos and web site and I have loved doing it I really have, cheers mate. I do have one question though when I up the pid_i_gain_roll above 0.00 even by .01 it lurches/rolls to the right and I can't control it. Thank You for teaching me so much, I am going to go autonomous next..Ps doing this has kept me sane with all these coronavirus problems..Keep safe..
Are these tutorials sufficient for me to build my drone, or did you use additional sources as well?
Worked for Arapahoe Public School in Nebraska!!! Thank you for sharing your code and Schematics! My students are standing on the shoulders of a giant for sure! Thank You!!!
My quadcopter flies perfectly but after some time (around 1 to 2 min) suddenly all motors stop , it falls off and get crashed. All motors are rotating in correct direction and connections are perfectly soldered . What might be the reason for this sudden switch off. I read all Q/A and all comments but did not find solution for this
Even I am facing same issue
I will give u answer plz replace the wire of receiver mean voltage and ground wire try to replace them both waire and connect new waire in the same place ur issue will be solved thank you
But I have a problem in my quad my quad can't fly why? All the components work properly
@@KongaRaju read my comments your issue will be solved
Turning off problem got solved but it's not flying and all components functioning properly
This is a great idea. A quad that can be home built from very cheap parts and electronics. All the while giving step by step instructions in an easy to understand diy way for each and every step. Simply awesome. The only problem I can see is there may be a lot of new flyers banging quads into everything :D
Hi there, thank you so much for these very useful videos.
I have already built my quad-copter but when I try to do all setup I received this massage :
Final setup check
===================================================
Receiver channel verification failed!!! (ERROR 6)
Gyro exes verification failed!!! (ERROR 7)
The setup is aborted due to an error.
and I checked on the Q and A page but I don't understand what are you mean on error 6 and 7 respectively?!
1)One stick is assigned to two functions
and
1)One axis is assigned to two functions.
Thanks,
The stick functions are not setup correct. What center and endpoints does the software find for you stick inputs?
I had a problem with error 6 too, but then I realized, that I was moving stick in the wrong direction during setup...
@@Joop_Brokking Sorry you. I got the same error, but I use a different set of tx rx than your tutorial videos, my tx rx is Flysky i6. Can you answer for me that the Flysky i6 kit integrates with the quadcopter setup code?
Mr. Joop,
You are the best.You took some much pain to teach people.Because of you many can now realise their dream of making a drone.
Thank You
can you help me with my trouble
i am facing an issue where my gyro is giving a value of roll as 20 and pitch and yaw are 0 how can i fix it??
Hi Joop. Thanks for sharing your experience. I'm just starting in the drone world, but you've saved me a lot in the learning path. I'll use your concepts in my designs, and I'll use your lessons learned. What I got from your videos is that Arduino uno could be slow for managing receptor, sensors, motor control and the algorithms for navigation, so I'll try to start from the beginning with distributed processing and/or faster processors. Thanks again, Juan.
Will I be considered as adamant if I say 'man u did well'? I am an Electronics engineering student from India and I take freaking' interest in aerial vehicles. I love you sir Joop, God must be lucky enough to bless you!
Everything explained very well ....it is the best thing you did and never seen before, thanks so much .
Bro you are awesome with all your affords at this project we all viewers are able to make this happen I am a 13 year old boy from india created this quadcopter with all your codes . Thanks a lot bro. Big respect from me
You are awesome. I am just now gathering parts. I just wanted to say thank you so much for all you video and document.
Dear Joop, I made another quadcopter according to your guide......it is awesome...it is flying very well.....Thank you very much for your guide...I learned lot...you are a really good teacher....
That is good to hear!
This video broke my brain. Thanks for trying to explain your work.
Thanks a lot for taking the time and creating such an amazing tutorial. I'm currently working on the quad project, this tutorial helped me alot in understanding the quad with Arduino very clearly. Thank you very much. Much love from India.
bro had u finished with your project
Joop, thank you for the best instructional video's on RUclips. I am fairly recent to Arduino and Multi-copters, but have been working through a design for a variable pitch / constant RPM quad for a while now, and I am so grateful for the source code you have provided which will be a great starting point for my project.
Thank you and good luck with your project.
Awesome project! This morning I got all the pieces to build the quadcopter :D
Thank you for putting this out Joop, it is a very clean implementation of the KISS principle, once again. It looks like the NaN problem I was facing traced to my attempts to calibrate and normalize the 1G values of the accelerometer (unnecessarily, as it turns out the IMU is fine without this extra step). I've now flown your AL and my own and somewhat surprisingly, where your version really surpassed mine (apart from less 'dead wood' here and there, compared to my approach) is in the Z stability. My version tended to use up quite a bit of the Z-dimension, as I flew about. Anyway, I wanted to be sure to let you know, there seems to be no hidden NaN lurking in your IMU. Thanks again for everything!
NaN will / can only occur when two accelerometer values will go to maximum value (8g). The value of the total vector will overflow and cause a NaN error. During a normal flight this is unlikely (impossible) to happen because the only possible acceleration is in the Z-axis.
Hi Joop, I haven't managed to catch the precise numbers that produced the NaN, as I've been experimenting with your new code and am presently rebuilding my shield.
I wonder though... Given that a) I had my full scale set to +/- 4g (instead of 8) and b) I was scaling and normalizing my raw accelerometer outputs (very much the same way YMFC scales the receiver inputs) to be +/- 10,000 at 1g and c) the problem always presented during hover...
Is there a 1 in ~300,000 (20 minutes worth of program cycles) chance that acc_x, acc_y and acc_z could all be =0.000 at the same time? That would result in an acc_total_vector of zero and a NaN (divide by zero error) in the line angle_pitch_acc = asin((float)acc_y/acc_total_vector)* 57.296
To be safe, should the code be testing to ensure that acc_(foo) be larger than some very small, non-zero number, before passing them?
Or, failing a convergence of zeros... Is there some 'accidental' combination of numbers that the asin function wouldn't cope with? I ask, because I'm not seeing anything approaching max values in my tests.
Thanks to you, joop, I have been able to achieve my dream. The drone has flown perfectly with the Arduino nano. Just the pid needs some adjustment, but, even so, everything flies very well. Thank you, thank you very much for your great work. congratulations
Awesome project, this has been really helpful to look at!
For the blade balancing it is going to do a little better to stick the tape on the propellers downward facing surface. Since typically 80% of the lift is generated from the low pressure surface so you will be dealing with lower aerodynamic forces on the other side when the surface imperfection adds turbulence so there should be less aeroelasctic vibrations.
Thank you very much for this great video tutorial.
Today I did the first flight with my quadcopter. It works as you described it in your video but I think it takes some time to fly it safe.
I've learned so much. Thank you!
Thank you for writing me this message. Great to heat that you got it to fly!
Hi Joop, great tutorials and easy to read code. Having made a quad using the pro-mini I would offer this feedback to anyone else having a go:1. The pro-mini can't be used to power the gyro & receiver on VCC. An AMS1117 5V regulator is sufficient, but solder the tab to a heatsink (could be the quadcopter board itself) and use an electrolytic capacitor (uF range) on the output (the boards themselves have small capacitors)2. Your website has no mention of calibrating the accelerometer and has a Q&A that says it isn't necessary in general as you can use sub-trims to do this. I think its much easier to test-fly if you do calibrate the accelerometer. I was about to modify the code to do so but found that there is already a template in the flight controller code. My recommendation is to modify the ESC code to give 1 or 2 decimal places on the accelerometer reading (its stable to >1 decimal place when not running - make sure the quadcopter is flat with a spirit level) and use that figure in the relevant part of the flight controller. My corrections of 3-4 degrees made the test flights much less scary.
Exciting stuff. Thank you for your hard work to enable us to play. Just love it.
Hi sir, thank you so much for sharing your knowledge, i followed your tutorial and now i have a really stable quadcopter, i was trying to do something similar to you, programming and auto level controller for a quadcopter but using other technique; implementing on a raspberry pi 3 an LQR control system + an Extended Kalman Filter to stimate and regulating the angles of the quad, but with no good results (now i know it was because of the sampling time of the loop, i was working with the minimun frecuency for the ESC - 50Hz and i noticed thanks to your videos that 50Hz is too low frecuency, i know the problems of the implementation for the sensors and all the hardware (procesing times, the sensor´s noise) and your way to solve it was really amazing. I am very grateful. my next step is go back to my aplication on the RPI3 but keeping in mind all that i learn here.
P.S: sorry for my bad english.
Thank you for taking the time to write this message. It keeps me motivated to help people :-)
Hello Joop,
I'm really lucky that I've found that nice guide and the time is more than perfect.
I'm in R/C since a few years, building planes from scratch, having some cam birds, but also some boats and even micro helis and toy class quads for bad weather. Caused by 3D printing I came in contact with Arduino and right now I want to tip a toe into real quads, so I've ordered a F450 flamewheel frame, and sets of 2826 motors, BLHeli ESCs, props, ... (korting in a lot of shops tghese days, you know) , the needed LiPos, BEC, Arduino and of corse a Taranis+ and FS-i6 I have anyway. However, as FC I have only some old CC3D lying around for what I've ordered an external baro/compass, but hey it's much more fun to do it with Arduino and learn how it's really working. ;)
As I said, the time is perfect and all I need to start with this project is to order the MPU-6050, while I have to wait for the postman with my F450 frame.
Maybe that AL feature should be also fine for my cambirds too. ;)
Thanks Joop for your new super great video !
asap I will try it on my quadcopter build following your previous precious video lessons and let you knows.
By now, with old fw I had lot of trouble in calibrating procedure, but watching this new video I see lot of valuable new tools to have more control of what's going on.
You have a great selection of videos and your site is very easy to navigate and to the point.
Thanks!
Thank you so much for all of this Joop!! I've learned so much from your videos.
THANK YOU VERY MUCH i had made it Completly and the performance was Great
i now want to add some new features
like self leveling and self localization
at last to be fully Autonomous
As a promised! i have tried it and worked very well. Thank you Joop, you are a kind man. God bless you.
hi...can you help me? You can send arduino quadcopter code to me, please.
Thank you very much.
My email: phanngoctuong.bigedu@gmail.com
+Tường Phan Ngọc you can directly download in Mr. Joop's website, and he can answer your problem.
Hi , how did u correct the vibration , mine are increasing when add insulation tape pls help me
My quadcopter is not taking off please help me
thanks JOOP BROKING you helped me a lot for making this drone I am just in process
Thank you sir. You are great. You are helping lot to all the people who don't know coding
Thank you so much Mr. Joop for a wonderful and educational video. We made it and because of this we passed our laboratory subject :D. Again thank you for sharing your knowledge
Thank you for writing this message and congratulations.
I have accumulated 5hrs of flight time with the new AL code integrated into my controller and have not had an NaN crash in all of that time. I found a flight park about 5 minutes from work and fly every day on my lunch hour. I am learning to fly, as I go, so primarily I'm doing a lot of high speed "out-and-backs", "walking the dog", tail-in circling, full throttle punch outs, VRS recoveries and the like.
So, it appears that NaN was addressed, either by improving my electronics layout/routing (reduced EMI) or with the software filter.
I am also fairly convinced that the I-term 'death wobble' that I experienced was due in large part to the pendulum effect of the relatively heavy landing skid and camera/gimbal setup I was using.
I have been flying without any of the 'under carriage' and the PID's are now much closer to default values. I bought an inexpensive flamewheel kit that includes 4 DJI-style legs and I plan to make a detachable lower plate, with the landing gear and a lighter Walkera gimbal attached. This will give me a 'convertible' setup, when I want to switch from 'sporty' to 'camera platform' and should be much lighter than the rig I was flying.
That is good to hear! Thank you for the feedback.
Hallo Mr Brokking,
Thank you for your great videos.
I tried to build my own ymfs-al according to your videos and website.
The only differences in the build are:
my 4 Motors have a KV value of 810 instead of your 1000KV. (using 4 30A-ESCs)
I wanted to use my 4s lipo.
Therefore I changed the R2 & R3 resistor values according to your Q&A section formula:
R3 was 1500Ω and needs to be 8200Ω
R2 was 1000Ω and needs to be 3300Ω
((16.8V - 0.6V) / (3300Ω + 8200Ω)) * 3300Ω = 4.65V
because the resistor values were to high for me (not wanting to serial connect alot of single ones)
I tried to apply the formula and came to the idea to use 300ohm for R3 and 700 ohm for R2.
This gave me 4,86 V.
I made through the whole setup procedure according to your videos and everything seemed fine until today.
It looks like somehow i killed my arduino uno. I cant upload sketches anymore. 2 red leds still blink the green one is inactive.
I know would like to know:
Was my resistor-choice wrong & why?
I forgot to change the code according to your Q&A regarding the different resistor values.
Which consequences does this have?
Today before the arduino uno broke I wanted to measure the voltage between Vin and Gnd and measured around 15V. (with 4s lipo connected)
Did I hearby cause a shortcircuit and this is why it broke?
Before it broke under calibration conditions everything seemed to work. When i installed the flight controller and tried starting it i had 2 crashes. Then resoldered and recalibrated...
Then i fixed it to the ground with tape. After a few short tries 1 Motor didnt work as the others did and the thrust stick wasnt as programmed (i use a flysky fs i6)
But most important the whole quad stopped working after a few seconds.
What reason probably caused this?
I hope you can help me with my questions (especially concerning the resistors!), and thank you for your great work!!
Kind regards from Austria
PS:
I still have an arduino mega left. Is it reasonable to use it without to many changes in the programs?
Which pins would have to be changed, and how would i have to change the different registers you spoke of in another comment?
The max input voltage of the Arduino Uno is 12V. Connecting it to 16.2V will overload the voltage regulator on the Arduino. This is probably the cause of the problem.
If the Arduino program freezes it most likely is a I2C bus problem. Double check your wiring. Makes sure it's reliably soldered and don't use bread boards.
This is a very flexible drone because of programmability... 😀. It's auto leveling because of code...can't believe I'm getting a hobby, I'm so geeky! 😀
Auto lvl or self lvl, it all depends on the transmitter you use and mapping the pot data with the esc speed as well using the pid to balance the quadcopter. It's different setup using different transmitters ready made ones for rc or homemade modified one.
Thank you so much your videos really help me fix old drone arduino based....Thank you so much.....I'm
from Philippines
1st time done with the help of your video.
Really well explained and helpful..
Thanku sir....
Bedankt voor de uitgebreide uitleg en downloads, na alles volgens schema gesoldeerd te hebben kon ik de setup zonder problemen doorlopen. Volgende stap is leren vliegen :-)
thanks a lot for this particular video, We are creating a drone for a project at my school using your code, but a structure different that yours. We've had a lot of problems, but I think video is the one going to fix everything. Guess I just didn't see it before
This project is more valuable for the inventor. Encourage you to further development.Thank you.
Your such a great engineer and youtuber ! Your videos empowered me soo much that I have decided to rewrite my own code , inspired on your but with new flavours of mine. I am now passioned by this Thanks a lot. Currently i am Studying engineering in France. Have a great time in the Netherland.
i have been waiting for this......thanks a lot for your hard work...gonna try it asap...
Best ever tutorial....Thanks👍👍👍👍👍👍👍👍👍 You deserve infinity likes............,👍👍👍👍👍👍👍👍👍👍👍
this progect works with arduino nano and pro mini without any modifications.
tip:when orienting the direction of the motors place the front face that you want to be the leading face of the drone to the back and then assign the motors:
front face (placed back)
cw pin 7 LF --------|---------RF pin 4 ccw
|
|
ccw pin 6 LR-------|---------RR pin 5 cw
and if your using the same frame you just need some tiny modifications in pid values(works ok with stock values) .
Sir, this tutorial is awesome ! I already built my YMFC. Now is tuning the PID value.
AWESOME videos you spend a lot of time on this everybody ought to donate to him...
And that was a nice explanation with detailed vd discussion and mentioned everything about the performance circuits and systems with programming and controls,,,,,
Thanks a lott sir,,,,it helped me a lot in my project♥️✨👍🙏
thank you, Joop!!!! because of you, I have flown my first drone that too a homemade drone
Very good project Joop Brokking.
Thank you very much for the videos! My quadcopter worked perfectly!
Amazing... I wish I would like to have all this information a few years before... Thank you.
wow man, that was awasome!
thanks for the amazing effort!
will try this asap...
Nice tutorial, this will come handy when I receive the parts for the hardware part!
Btw, are you from Denmark? I can't unsee that "hvad".
Definitely building this! Great job.
Mr. Brokking thank you for your work. BUT.
It took me nearly 1 year since the pandemic started to study your code. It is awesome if comes to build bigger quads. Like you did Sir.
But when it comes to smaller quads like 250 or even 210 quads it turns out that it is impossible to tune the quad. I’ve ported the code to ESP32 and scaled the data from gyro. Second of all i have applied a second LPF to reduce noise from props and last but not least implementation of LPF to d term is a must.
Anyway THANK YOU for your work it wouldn’t be possible for me to understand the code of quads without you.
a great thanks to joop ,I made it, it works fine all the things are done all checks are done it's time for the first flight test thanks once again
Please make sure to test it in your hand first as I showed in the video. This would prevent unnecessary crashes. Good luck.
Joop Brokking i have checked it is working correctly but there is one problem when I start the motors with throttle down and left the motor start spinning at that's step it is ok but after that the motors increase its speed slowly ( not too much ) without increasing the throttle ,is this behaviour fine?
Please check question 10 on this page: www.brokking.net/ymfc-al_qanda.html
wow thank you Joop!! this is amazing!
what should do if the throttle increase at idle position
I thanks to your efforts to give your talents to the world . . .
Can I make a question?
You wrote :
esc_1 = throttle - pid_output_pitch + pid_output_roll - pid_output_yaw; //Calculate the pulse for esc 1 (front-right - CCW)
esc_2 = throttle + pid_output_pitch + pid_output_roll + pid_output_yaw; //Calculate the pulse for esc 2 (rear-right - CW)
esc_3 = throttle + pid_output_pitch - pid_output_roll - pid_output_yaw; //Calculate the pulse for esc 3 (rear-left - CCW)
esc_4 = throttle - pid_output_pitch - pid_output_roll + pid_output_yaw; //Calculate the pulse for esc 4 (front-left - CW)
I want to add two more esc(i.e. esc_5, esc_6) to make a hexacopter. What can I do write for esc-5 and esc_6?
Of course I'll align two more pins for them.
Please check this video and calculator: ruclips.net/video/9FvpT9jH0NA/видео.html
Thanks a lot. I'd got it!!!
Hey crashed several times , but it was all my fault, I needed to trim the control, your codes are perfect I had no issues with them...I'm heading to 32 soon ...please let me know you are well..
Amazing video! Thank you so much, you are a great youtuber! Wishing success
love your videos man! If it is in high enough demand, could you do a video on mounting a camera on a gimbal with servos?
AMAZING PROJECT!!!!! CONGRATULATIONS!
this is just awesome. Great work and thank you for sharing !!!
i used your proggrams to setup my drone and it is working 1000K thanx t u, ure awsome
Joop Brokking, I believe I found a small error in both the YMFC-AL and the MPU-6050 code. It's a very subtle error. Here's how the code is written:
//Gyro angle calculations
//0.0000611 = 1 / (250Hz / 65.5)
angle_pitch += gyro_pitch * 0.0000611;
angle_roll += gyro_roll * 0.0000611;
//0.000001066 = 0.0000611 * (3.142(PI) / 180degr)
angle_pitch -= angle_roll * sin(gyro_yaw * 0.000001066);
angle_roll += angle_pitch * sin(gyro_yaw * 0.000001066);
The problem is in the line above that reads
angle_roll += angle_pitch * sin(gyro_z * 0.000001066)
It will read the angle_pitch value from the line immediately before it (the yaw transferred roll angle to the pitch value) whereas I believe you meant it to get the angle_pitch value from several lines prior, the line that reads
angle_pitch += gyro_x * 0.0000611
There are a couple of ways to fix it. One (not so eloquent, but simple) way is the following:
angle_pitch += gyro_pitch * 0.0000611;
angle_roll += gyro_roll * 0.0000611;
angle_pitch_temp = angle_pitch;
angle_pitch -= angle_roll * sin(gyro_yaw * 0.000001066);
angle_roll += angle_pitch_temp * sin(gyro_yaw * 0.000001066);
That way the non-yaw-corrected angle_pitch value is used in the final angle_roll calculation.
Let me know if you see what I mean. Thanks, Don
brilliant ... exactly what I was looking for.
Great work sir..I am impressed with your work
Joop, I'm again,
I'm leaving now in December and I'll try to reproduce your quadcopter
project .... but I'd like to tell you a few things before ... From a
distance you're a very didactic guy and know how to pass your knowledge ,
I already know other projects based on Arduino and I have one that I
had to do to graduate. Your solutions are simple and very efficient, for
me there are only two things that I believe you know but did not do!
1st
you should create functions to improve the code maintenance, create
"tabs" in the program with each problem solved and call in the loop. 2º
creating the functions in tabs would be much more didactic than it is
today, sometimes it is difficult to find where a solution begins and
ends. No more congratulations on the project you are very competent.
Like Muitwii, Arducopter among others. It
would be a new upgrade but it would bring you and the others much
better conditions to understand how to revolve the problems of flying
with a drone
I have 2 two question in Your Code :
Question 1 :
“esc_1 = throttle - pid_output_pitch + pid_output_roll - pid_output_yaw; //Calculate the pulse for esc 1 (front-right - CCW)
esc_2 = throttle + pid_output_pitch + pid_output_roll + pid_output_yaw; //Calculate the pulse for esc 2 (rear-right - CW)
esc_3 = throttle + pid_output_pitch - pid_output_roll - pid_output_yaw; //Calculate the pulse for esc 3 (rear-left - CCW)
esc_4 = throttle - pid_output_pitch - pid_output_roll + pid_output_yaw; //Calculate the pulse for esc 4 (front-left - CW)”
I want to solve it. But I am not sure with my answer.
We have:
Because CCW along axes x (North): dRoll = (Thrust3 + Thrust4) - (Thrust1 + Thrust2) = k( -w1 - w2 + w3 + w4)
CCW along axes y (East): dPitch = (Thrust1 + Thrust4) - (Thrust2 + Thrust3) = k(w1 - w2 - w3 + w4)
CCW along axes z (Down): dYaw = Torque1 + Torqe3 - (Torque2 + Torque4) = k(w1 - w2 + w3 - w4)
Along axes z (Down): dThrottle = Thrust1 + Thrust2 + Thrust3 + Thrust4 = k(-w1 - w2 - w3 - w4)
Solve with matlab:
Convert it to matrix A, B, X
Hence :
A = [-1, -1, 1, 1; 1, -1, -1, 1; 1, -1, 1, -1; 1, 1, 1, 1]
B = [dRoll; dPitch; dYaw; dThrottle]
X = [w1; w2; w3; w4]
Otherwise: AX = B;
Solved:
X = K[1, -1, -1, 1; 1, 1, 1, 1; -1, 1, 1, -1; -1, -1, 1, 1]
Or:
w1 = K (dRoll - dPitch - dYaw + dThrottle) = K (throttle - pid_output_pitch + pid_output_roll -pid_output_yaw);
w2 = K (dRoll + dPitch + dYaw + dThrottle) = K (throttle + pid_output_pitch + pid_output_roll + pid_output_yaw);
w3 = K (-dRoll + dPitch - dYaw + dThrottle) = throttle + pid_output_pitch - pid_output_roll - pid_output_yaw);
w4 = K (-dRoll - dPitch + dYaw + dThrottle) = throttle - pid_output_pitch - pid_output_roll + pid_output_yaw);
Is it correct, Joop?
And Question 2:
" if (battery_voltage < 1240 && battery_voltage > 800){ //Is the battery connected?
esc_1 += esc_1 * ((1240 - battery_voltage)/(float)3500); //Compensate the esc-1 pulse for voltage drop.
.............."
Why do you divide with "3500"?
I don't get the point of the first question. w4 is missing yaw while all motors react on yaw?
The 3500 values makes the quad hover at the same throttle position when the battery voltage is dropping during flight.
Yes. I typed some missing word :
"w4 = K (-dRoll - dPitch + dYaw + dThrottle ) = throttle - pid_output_pitch - pid_output_roll + pid_output_yaw)"
Your answer is helpful for me. Thanks Joop :D
Well, the two look the same except for other variable names.I don't know what dPitch means but if it is the same as pid_output_pitch they are the same.
+Joop Brokking dPitch = Pitch_dot or Deriration of Pitch
www.slideshare.net/corradosantoro/quadcopter-31045379?next_slideshow=1
I found it in the above web (slide 17 to slide 23).
Then, I demonstrated again with your coordinates. (ESC 1 - FR, ESC 2 - RR, ..etc)
Beautiful. i love you bro
Primer comentario en español !, excelente aporte amigo. Gracias
I have been watching your tutorials for a while Joop n amazed how your tutorials simplify everything. Just a query if you gonna plan to make a tricopter how would you change the codes for PID.
My friend your a blessing thanks for sharing this knowledge sir
Amazing video's! I came across a 6 axis gyro, have you ever worked with one of those? Sounds like a real improvement from the 3 axis gyro, maybe you could make a video about it and/or introduce it to your quadcopter project. That would be a nice feature
Thank you sir, for this type of helpful video,
My question is ....where did "last_channel_1, last_channel_2 .....4, define. Why did last_channel_1 represent pin 8 of arduino uno ...
Awesome work bro. Respects
Joop,
Really good job, a great blessing for those wishing to learn or create! I have personally enjoyed tracking through all of the videos/builds since your postings began.
I've built a 450 sized quad based on your code using a custom p.c.b.. Its been good fun learning to fly this item and your code update for AL version 1.2 was good but i think i spotted a couple of issues which i would like to share with you.
I sent a few submissions to your contact page form over time, two of them earlier today with contact info for you to reach me. I have a couple of suggestions on the 1.2 release of YMFC-AL which I have already implemented and begun flight testing
Notes on my suggestions:
the comparison you added with abs() is likely best resolved with labs() (i.e. the long version of abs())
also, the variables which are updated within the ISR need to be declared as 'volatile' in order to be faithfully updated during an ISR event
I did forward code examples in the web page form for your consideration
Flight tests were good with the changes i suggest above
Best Wishes Always,
You Made RC A Better Place To Be :)
Thank you for your contribution to improve the code. As I explained in our email contact the abs() is a macro that can be found in the arduino.h file. It replaces abs(x) with (x)>0?(x):-(x) so it handles float, int, and long without problems.
Volatile just tells the compiler not to simplify or optimize the code where the volatile variable is used. Because the Arduino IDE hardly uses optimization it's not necessary to use volatile. It should be used when using high optimizing compiler settings (the code simply would not run).
Joop, ik heb mede dankzij jouw naam wel het idee dat je nederlands bent, haha. Dit klinkt misschien dom, maar ik wilde even zeggen dat je mn held bent op het gebied van techniek. Ga zo door!
Ik ben inderdaad Nederlands. Als een Nederlander Engels praat valt ie zo door de mand haha. Bedankt voor je compliment.
+Joop Brokking Dat viel me inderdaad op, je hebt totaal geen accent! Ik heb ook nog een vraagje, ik ben totaal nieuw in de elektrotechniek wereld (ik kom uit de werktuigbouwkunde) en ik ben mede door jou geinspireerd geraakt om zelf een drone/vliegtuig te maken. Nu zag ik dat je in de onderdelenlijst een motor met een hoge V/lage A gebruikt en een batterij met een lage V/hoge A. Welk onderdeel zorgt nu voor een transformatie van lage voltage naar hoge voltage? Is dat de ESC of doet de Arduino dat? Alvast bedankt!
De kV op de motor is het aantal omwentelingen per aangesloten volt. Dit heeft niets te maken met het aantal volt waarop hij aangesloten kan worden.
Een 2000kV motor draait hierdoor harder dan een 1000kV motor bij dezelfde spanning.
Dus als ik het goed begrijp geeft een motor van 2000kV, 10000 omwentelingen op een 5V aansluiting? Per minuut neem ik aan?
Dat is inderdaad het idee. Het zal echter niet 100% kloppen maar dat is wel het idee.
im trying to make a cube based blimp robots with no moving parts for the challenge thanks for the research. these will be slower but hopefully better for household stuff when they need to idle
Hi there Joop,
This is truly an amazing project and I am currently knee deep fixing my hardware and software. Your Q&A on your website has been able to help me through all steps except for the one I'm on. I am using all the pieces of hardware that you have recommended, except I'm using the FS-R6B receiver.
Heres my situation.
1. Run setup: Everything checks out.
2. Run esc_calibrate, Receive receiver inputs, gyro calibrates, each motor acts fine (
Always test the quadcopter firmly in your hand so it does not flip over. You can feel if it is working correct.
Double check all the connections and make sure that all the ESC's are connected to the correct outputs and that the props are mounted in the correct rotation and pushing the quadcopter up.
>>Always test the quadcopter firmly in your hand so it does not flip over. You can feel if it is working correct.
Roger that, I'll give that a shot.
>>Double check all the connections and make sure that all the ESC's are connected to the correct outputs and that the props are mounted in the correct rotation and pushing the quad-copter up.
During the esc_calibration, I have verified that all the props are oriented properly and the ESCs are connect to the correct outputs. That is, each motor works individually, then all of them work in unison. But when I upload, the Flight Controller, there is something that is causing several of the motors to just arbitrarily start.
Any advice?
Awesome, works great.. it would be cool if you could show how to add the 10dof MPU with Barometer & compass functionality to this quad. Thanks a million for sharing your great work :)
Hey j, I'm so excited, my quadcopter is finish cant wait to fly , you codes are genius I'm about to take over the world , what you doing later?..
My drone is wide to fly, but I can not set PID. Can somebody Help me to solve the Problem please.
excellent ......super
Sir, I want to know .....since this video was created 6 year back. Are there further improvements in CODE and hardware ?
the MPU6050 needs i2c serial converter, the project works perfectly !! Thank you !!
What do you mean serial converter.. Software or hardware.. Please reply.
its hardware www.google.ro/search?newwindow=1&espv=2&biw=1920&bih=950&tbm=isch&sa=1&q=i2c+5+to+3+v&oq=i2c+5+to+3+v&gs_l=img.3...6899.10741.0.10861.12.10.2.0.0.0.81.697.10.10.0....0...1c.1.64.img..0.1.80...0i30k1j0i24k1.V4C77X1MndA#imgrc=7mNbnfWmdQI0WM:
M project is not working. Can you help me?
what is not working ? did you folow de q and a stage
When I initilize quad with throtle down yaw left one side of the quad keeps
speeding up even the throtle stick at its lowest position.
Thanks to you Joop for sharing your work with us, I finally have a fully functioning AL-quadcopter. From here on out I aim to improve and add some features and would like to begin by increasing the battery capacity from 2200mAh. Can you give me some advice on what to consider when looking at higher capacity batteries and changes in the circuit schematic? Thanks!
If the battery voltage stays the same there is no need to change the schematic. So you can increase the capacity without problem. Make sure that the motors can handle the weight of the battery.
My MPU6050 couldn't be found any more during the setup process. After shortening the wiring to the IMU it worked perfectly, too long IMU wiring could cause a problem! -- Just as a hint for people who have the same problem like I had.
Thanks for the hint.
Hey Joop, your project is amazing.
One thing is interesting to me: as far as I can see is the PID loop based on the angular velocity from the gyro.
Wouldn't it be more accurate to base the PID loop on absolute angle values (x, y, z)?
I never tried it because this method works pretty well as you can see here: ruclips.net/video/oc8Gv61bfvU/видео.html