Monday, January 7, 2013

Contact Me: Feedback? Corrections?


Subscribe by Email! (via FeedBurner)
Date this section was added to website: 7 July 2013
Last updated: 18 March 2017
-Added link to my Consulting Work page - 20170318
-Added png image of email, and link to my new "About me" page. - 20160806

Related Pages:

Write a Comment:
If you have feedback or corrections for any of my articles or pages, please post them in the comments section below the post you'd like to comment on, *or* post them right here under this post, with the link to the article you are referring to (if applicable) at the top of your comment.  

Email Me:
Writing comments is the preferred way I'd like to see your questions, so that when I answer them, others can benefit from the answers too.  However, if you want to contact me directly, you may do so at rcflyyer (special email symbol) gmail (period) com--as shown as a png image just below my name below so that it's not searchable by internet spam bots. I do not guarantee a response to your email, but I do hope to be able to find the time to respond, and I certainly do make an effort to do so.

Gabriel Staples
Electric RC Aircraft Guy

***Subscribe by Email! (via FeedBurner)***


  1. Hi there, I am an aerospace engineering undergraduate student currently working on a flight performance project. I've adapted your equation of finding dynamic thrust from rpm, pitch, and velocity, however I am getting a negative dynamic thrust for the maximum velocity of the RC plane. For your reference, I have flew the RC propeller driven plane at a steady flight and recorded its velocity, for its maximum velocity being measured at its full throttle. The flight test was carried out in an open area (external disturbance) and the velocity was obtained without the use of advance technology gadgets. The puzzle of the negative dynamic thrust at the maximum velocity remains unsolved hence I am here to seek for your advice.

    1. Shen, my dynamic thrust equation underestimates the velocity at which zero-thrust will occur (Figure 1 of my main thrust article shows this clearly), therefore, my equation thinks your plane can't go as fast as it is going, so it reports a negative thrust at that speed. In actuality, of course, your plane is producing a small positive thrust at that speed, since for steady flight thrust = drag, and drag of course, is a positive value in the opposite direction to thrust.

      Just yesterday, Hamtaro Tee asked me the exact same question, so please go here ( and read my responses to him.

    2. Shen, if you don't mind my asking, what university are you attending?

    3. Thank you Sir, I have read through your response on Tee's question. I am from University of Science Malaysia, for your information. Great work on the static thrust and dynamic thrust conversion, you have helped us a lot!

    4. Shen, I'm glad I could help! If you would like to share any papers/work you do where my equation is involved, feel free to drop it on Google Drive or dropbox or something and post the link here, and I'd be happy to take a look just to see how people are able to use my work. I likely won't have time to provide any feedback or anything (that's what teachers/professors, and peers are for), but it certainly would interest me to see what people like you are doing with it. Thanks!

  2. This comment has been removed by the author.

  3. Hello. I have a few questions regarding you live plotting serial data on matlab code (which is very impressive by the way).

    First, where do you collect data from the arduino? I don't see anywhere explicitly collecting data from a port on the arduino.

    Second, where do you write to union1.byte_array[i] that ultimately gets sent to matlab? I might be getting lost in the typedef's.

    Also does there exist a tutorial or whatnot for breaking the data down into packets that might be a little simpler to grasp? I'm currently just trying to get data through the arduino's analog input, and then plot it live to matlab.

    I have a lot more questions but this is a start - thanks!

    1. Jess, see line 254 here:

      It reads "Serial.write(union1.byte_array[i]); //this is where we actually send the data over to MATLAB, via serial, one byte at a time"

      That's where I send the data to MATLAB via the hardware serial port.

      On the MATLAB side I am receiving data here:
      See line 23: “packet_byte_array(i) = uint8(fread(s,1,'uint8'));”
      “s” is a serial port object created in MATLAB in my “setup_serial.m” file.

      I know my code is complex, because I took what I considered to be a more thorough and professional approach...something that I could expand upon in my future work. However, simpler methods do exist. For instance, I am sending binary data, but sending ASCII characters of data would be simpler.
      Also, the typedefs, unions, and error checking isn't really necessary unless you want to have a more optimized, and in my opinion a more “professional” approach....again, for simple stuff like this not really necessary. It was also a learning experience for first time using packets, unions, structures, typedefs, etc.

      For a great explanation and basic tutorial of using serial ports, here's a document I found very useful in my process of creating this project:

      He's not entirely correct about how the serial buffer works in MATLAB (and I even called the MATLAB support about this), but he does provide some very valuable info. nonetheless.

  4. I read about your comment on TV B Gone at
    I am trying to build one on Arduino, but it works only on my Arduino UNO and not on ATmega 168, I ordered the 328 one but seller sent me 168 one.

    Only person Whom I've seen running it on Mini Pro is you, can you please tell if it would work on ATmega168 or it needs to be specifically 328 ?
    I burned the sketch and status light flickers but IR LED stays constant ON, its not flashing like I see on UNO.

    1. Referring to the TVBGone article/code, and my comment here (

      My Pro Mini's all use ATmega328 mcu's. Is your 168-based device running at 16Mhz and 5V? If so, I don't see why it wouldn't work. In other words, it should work. My compiled sketch (ie: Ken Shirriff's Arduino version, with some of my own slight modifications), when compiled in the Arduino 1.5.6-r2 IDE, only takes up 13262 bytes of Program space (plus it requires 0.5kb for the Optiboot bootloader), and the global variables only take up 214 bytes of SRAM. An ATmega168 microcontroller has enough room, with 16kB program space and 1kB SRAM.

    2. thanks for reply.
      I know you already optimized the code, thats why it fits very well on a 16KB chip version, but don't know why the output is not as desired, code seems working as PIN 13 based light blinks showing the sequence running but IR LED remains lit all the time.

      Another thing I noticed is that the code is looping cause it restarts every time without the need to trigger the PIN 2.

      Any further guidance would be greatly appreciated.

    3. 1) How are you verifying IR LED is remaining lit all the time? Did you put a regular LED on that pin so you could see it?

      2) I don't recall having problems with the code looping automatically either.

      3) can you verify your Arduino is running at 16Mhz?

      4) can you upload a schematic somewhere for me to see please? I'd like to see which parts you are using and how you have it wired up. It is *possible* that the looping is caused by pulling too much power, or shorting the device, causing it to brown-out and reset--or something weird like that.

      5) -can you verify which bootloader you last uploaded to it? I recommend the optiboot bootloader. If it's a 16Mhz board just upload the Uno's bootloader, as is uses the optiboot bootloader.

      6) Lastly, here's the exact code I'm using, so give it a try too.

  5. update:
    Finally my TV-B-Gone working fine on ATmega 168 (pro mini)
    Tried it on home TVs and I couldn't stop my loud laugh at 4 A.M.

    I was just posting the update when I saw your reply a moment back.

    The problem I was having was due to direct connect of IR to PIN3, once I put the transistor in place
    its working like a charm, I am using 2N3904 x 5

    details are at :

    Thanks a lot Gabriel for your help and reply.

    1. Glad you got it working! That makes sense. You must have been browning out the device, causing it to continually reset. Next time I work on a TVBGone it will be with a 3W IR LED. I'd like more range, for sports-bar use from across the room. :).

  6. Hi Gabriel,
    This regards your very helpful post:

    I'm considering purchasing the Thunder AC680 charger, but was puzzled by one thing: it appears to me that it's impossible to *simultaneously* do PC data-logging and temperature monitoring, since both functions make use of the same (3-pin) connector. Is my understanding correct? If so, why is the software advertised as allowing for "graphing of temperature curves"?

    Are you aware of any low-cost chargers/conditioners which allow for simultaneous data-logging of voltage, current and temperature? In your opinion, would this be a useful feature, or not so important?

    Thanks for your insights, and my compliments on an excellent website!


    1. Dave, I've replied to your comment under the charger article here.

  7. Dear Sir,

    I am new to Arduino. I have Arduino Due and trying to use your 0.5uSec library.
    Could you give some insight how to integrate your library to IDE ?
    Here what I done.
    1) copy and paste the entire folder content into IDE installation folder/Libray/mynewfolder.
    I can not find file "Timer2_Counter.ino" you mentioned in your blog.
    i tried to open another example from downloaded file.
    Its not compiling completely.

    I request you to help me to fix this problem.

    1. The Due uses a totally different architecture, and already has 1us resolution when you call the Arduino built-in function "micros()", so just use micros() instead--it's good enough. Getting better resolution on the Due would take me a lot of time and I just don't have time for that unless I need it for one of my own projects.

  8. Hi Gabriel
    Going to use the .5 micro timer on rc a/c Rx output to enhance my planes aux channels using a 3 position switch on Spektrum dx8g2.

    But I don't quite understand the serial output screen and hope for your help.

    There are three things
    1. PulseTime (us). This is the true length of pulse in microsecond?
    2. Pd_us(us) The time in between pulses ( the low)?
    3. Hertz The freq of the event in this sec. ie .5 us per sec = 2 megahertz

    I understand rx Rx is approx 900-1400 us low
    1500 us neut.
    1600-2000 us high.
    So pin 12 analyzed pulse and gave readout, now what to do?
    (a) use pin 12 as analog input But I need to tell arduino if high/low/ neutral. How does promini handle it?
    (B) use pulseTime is program to be the deciding factor and add new pin output and a couple of ,if, statements to decide on the level of the pulse (in us,time)
    (C) Some other method I don't see or that you might brief me (others) on.

    Wow what a lot!
    I thank you Gabriel in advance for any snipit of info you could pass my way .
    Thanks Doug

    1. 1. Pulse Time (us) is the true length of the pulse, yes, in microseconds. This is the HIGH pulse time.
      2. Pd_us is the microsecond *period* of the pulses. The period = HIGH time + LOW time for one cycle. So, if the period is 20000us = 20ms = 0.02 sec, and the Pulse Time is 1000us = 1ms = 0.001 sec, then the LOW time = period - HIGH = 20ms - 1ms = 19ms = 19000us.
      3. Freq (Hz) = frequency of the incoming pulses. Freq = 1/pd, where pd is in seconds. So, for a period of 20ms, the freq = 1/20ms = 1/.02sec = 50Hz.

      Your question about how to use the readout...I don't fully understand what you don't understand. If your 3-position switch is configured to output 1000us low, 1500 mid, ad 2000us high (or similar), then simply do something like the following:

      if (pulseTime<1300)
      //For pulse times <1300us (low switch position) do something here:
      else if (pulseTime<1700)
      //For pulse times from 1300us to 1699us, inclusive (middle switch position), do this:
      else if (pulseTime>=1700)
      //For pulse times >=1700us, (high switch position), do this:


Thanks for your comment or question! If it is a question, I will try to get back to you quickly. Notice to spammers: I personally remove all spam promptly and report spammers to Google, so please don't do it.

Note: some HTML tags are allowed in your comments. To learn how to add bold (<b>...</b>), italics (<i>...</i>), or hyperlinks (<a href="URL">NAME</a>) to your comments, read here.

~Sincerely, Gabriel Staples.

P.S. Yo hablo español también. Je parle français aussi. (I speak Spanish & French too).