Announcement

Collapse
No announcement yet.

IDX-PRO+VDI

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • mohandes
    replied
    hi
    my friend another question
    tx an rx have more than 5khz frequency. so how it is covert to 400hz.

    Leave a comment:


  • mohandes
    replied
    Originally posted by Koala View Post
    mohandes Have you got a problem with ground balance or discrimination. If so the problem maybe with you coil. If the RX phase is too far out your detector will not ground balance or discrimination correctly.


    By the way there is a performance advantage using LF347 instead of LM324
    hi my friend.i have not scope to set my dd coils.
    but i really decide to do this and solve my problem.

    if not problem ask another question here( just for improve my knowledge )
    first analysis TX :
    i see 2 bc237, what do these?(say better for why?)
    and then lm393 do disc and GB.then 4066 (is switch) how work? Rx when amplifier by ne5534 go to 4066.how 4066 switch?(what parameter is important to switch)
    excuse for my English

    Leave a comment:


  • Koala
    replied
    mohandes Have you got a problem with ground balance or discrimination. If so the problem maybe with you coil. If the RX phase is too far out your detector will not ground balance or discrimination correctly.


    By the way there is a performance advantage using LF347 instead of LM324

    Leave a comment:


  • Davor
    replied
    @scrungy_doolittle, you are extremely lucky not to be my geometry pupil, as I'd flank you with most graceful ease. IDX is a traditional VLF motion metal detector. I explained how such a detector sorts out what targets need to produce a sound, and a mechanism of exclusion. a target between the boundaries will produce a simple sound - nothing more, and nothing less.

    However it is quite possible to do exactly the same in a micro, there are constraints that say - don't do it.

    With a micro and a display, and perhaps a DAC to make sound indication, the last thing you may wish to do is to revert to a compulsory simplicity of analogue VLF. Because of time-discrete operation, you simply can't produce a stimulus at any desired phase. You just can't. What you can do instead is play with I and Q values, and reach to any degree imaginable by math. That's the detail you flanked.
    In analogue you can get to any phase imaginable, but in the very IDX you don't do that. Instead you apply addition to reach a desired discrimination angle, just as you'd do with a micro.

    Because you can distinguish an exact angle of any target response by observing I and Q ratio, you do not have to pay any attention to a classical detector mode of discrimination. You simply map phase to a desired sound representation, and display indication, The VDI that is paired with IDX does half of that job.

    I suggest you to take a piece of paper and draw it. A little trigonometry will help a lot. Once you are able to visualise things that way, you'd be able to convert it into code, but not sooner than that. There are many things you can do to enhance signal detection with a micro, but mimicking a traditional VLF will surely not get you anywhere.

    Hope I did not burst any bubbles with this post.

    Leave a comment:


  • dfbowers
    replied
    Originally posted by scrungy_doolittle View Post
    Well your code may run, but there is a difference between running and running correctly.... In the case that I pointed out, two of the bars will be wrong.

    I started in 1976 with APL,basic and fortran, then moved to assembly. Moved on to C in 1985 from assembly. I've been programming for many years.
    In general, you do not need goto's. In c, they are restricted to being within a function. You can write any program you want by using structured code.
    for loops in C with breaks and continues. some might argue that breaks and continues are a form of goto. perhaps so. but they are managed by the compiler, and are always forward branches. Do while loops are also structured.
    Look up principle of structured code.

    So lets take a simple example:
    c=0;
    start:
    c=c+1; // just some example code
    if (c==5) goto end
    // code
    goto start
    end:

    c=0;
    do
    {
    c=c+1;
    // code
    }
    while (c !=5);

    A do while loop always executes at least once, and the test is done at the bottom of the loop

    for (c=0; c!= 5;c++)
    {
    // code
    };

    is the same thing, except the test is at the top of the loop, and if it fails the code is not executed.. C starts out at 0, and increments until it hits 5.


    do
    {
    //
    // loops for ever unless you do the following
    break; // exits the loop because it exits the current scope
    }
    while(1);

    for(i=0;i<10;i++)
    {
    if (condition == true) // we need to bail from the loop when this is true
    {
    break; // this will exit the loop
    }
    if(i==4) // we need to skip iteration 5
    {
    i=6; // sets i = 6 overriding the loop control
    continue; // this will branch to the top of the loop resulting in iteration 5 being skipped.
    }
    }

    // next block of code
    in this case break will take you out of the loop to the next block of code, while continue will do an early branch to the test.
    your code uses goto, for example, to transfer control to the top of the loop. But it can be re-written to avoid goto's all to gether.
    Right now it is 10:30 p.m. and I needed to be in bed long ago.
    I will tweak your code and repost it, but right now I am at company headquarters doing a hump week...
    Much appreciate your time for the short tutorial. It is said that most things you learn in life are learned while trying to accomplish something else.. and programming Arduinos is apparently one of those.

    Leave a comment:


  • Davor
    replied
    Originally posted by mohandes View Post
    many thanks .i am amateur.but very well.it is very complete man .i understand every think you say.but have another question , if need i open new topic?
    1-i see axis R and X in IGSl project(by dfbowers) but really hard to understand the axis diagram.(so sorry).
    2- why in this frequency should we work, cant use higher frequency?
    3-preamp (5534) how work in vlf, like PI or no?
    regards
    Hi my friend, trust me, it is not complicated.
    1-the R axis corresponds to GB channel. It has a zero response only for ground response, and ideally for objects underneath a coil it has positive response for all metal objects imaginable. X axis is equal to Disc channel, and it has positive response for non-ferrous, but negative for ferrous objects.
    2-you can use any frequency you wish, and the same principle works, but the coils are well balanced for a range of frequencies, and some Tx oscillators are not working if coil Q-factor is below optimum for a given frequency. Many devices have audio synthesized from Tx frequency. So everything considered it is much easier making a device for a single frequency. Square wave Tx and somewhat different front end makes it possible to extend frequency range, but that is not IDX. IDX is a device optimal for relic hunting, and frequency is chosen accordingly. Changing a frequency within one octave will not make significant difference anyway.
    3-preamps in VLF have a much easier, but completely equal role as in PI detectors. They are never turned into saturation as in PI, but everything else is equal - they have to improve input S/N

    Leave a comment:


  • mohandes
    replied
    Originally posted by Davor View Post
    You have 3 channels in IDX: All metal, motion GB, and motion discrimination channels. Of these the All metal is used for pinpointing in a quasi non-motion way.
    GB and discrimination channels provide actual discrimination. To grasp it you have to picture a diagram with metal targets responding to a sinus signal stimulus. All metals will have a response somewhere in between 0 and 180° from Tx phase, but ferrous will have it in 0 to 90°, and non-ferrous will have it in 90 to 180°. Both motion channels are used for discrimination which happens in comparators that perform AND logical operation. There is a beep when both GB channel and disc channel provide positive signal at the inputs of comparators.

    How it goes? Say you adjust discrimination channel phase at 90° sharp. GB channel is aligned with the soil response which is in vicinity of 0° and it goes positive if response is in 0 to 180° range, and discrimination channel goes positive when response is in 90 to 270° range. It means that both channels will give positive responses only if a target response is in a range between 90 and 180°.

    If you want to exclude aluminium foil from detection, you simply adjust discrimination a little over 90° (say 100°) and your discrimination range becomes 100 to 180°.
    many thanks .i am amateur.but very well.it is very complete man .i understand every think you say.but have another question , if need i open new topic?
    1-i see axis R and X in IGSl project(by dfbowers) but really hard to understand the axis diagram.(so sorry).
    2- why in this frequency should we work, cant use higher frequency?
    3-preamp (5534) how work in vlf, like PI or no?
    regards

    Leave a comment:


  • scrungy_doolittle
    replied
    Originally posted by Davor View Post
    You have 3 channels in IDX: All metal, motion GB, and motion discrimination channels. Of these the All metal is used for pinpointing in a quasi non-motion way.
    GB and discrimination channels provide actual discrimination. To grasp it you have to picture a diagram with metal targets responding to a sinus signal stimulus. All metals will have a response somewhere in between 0 and 180° from Tx phase, but ferrous will have it in 0 to 90°, and non-ferrous will have it in 90 to 180°. Both motion channels are used for discrimination which happens in comparators that perform AND logical operation. There is a beep when both GB channel and disc channel provide positive signal at the inputs of comparators.

    How it goes? Say you adjust discrimination channel phase at 90° sharp. GB channel is aligned with the soil response which is in vicinity of 0° and it goes positive if response is in 0 to 180° range, and discrimination channel goes positive when response is in 90 to 270° range. It means that both channels will give positive responses only if a target response is in a range between 90 and 180°.

    If you want to exclude aluminium foil from detection, you simply adjust discrimination a little over 90° (say 100°) and your discrimination range becomes 100 to 180°.
    That is one of the most succinct and to the point explanations of how this works, that I have ever heard. Very nice. And it helps me as well..... Never could suse out the and function.
    So in code, if you have the signal digitized, and the transmit digitized so you can sync, then your discrimination is simply looking for indexes corresponding to in the above example, 100 and 180, assuming that your sample buffer digitizes one sine wave in one degree increments.
    Lets see at 6.59 khz a sine wave cycle takes: 1.5 e-4 seconds or 150 usec. 416 ns sample time would give you 360 samples across one cycle. 2.2msamples per second would be 450 ns per. In actuality 180 samples would give you 2 degree increments, or 180. The nyquist criteria would be to sample at least 13 khz. 2.4 msamples per second would give you 416 ns sample time.
    Can you do that? With the STM32F411 you can get 2.2 with the pic24FJ128CG010 you can sample 10 msamples. Of course there are other ways to skin this cat so to speak. Apparently there are IQ formulas that would allow this.

    Normal VLF detectors actually gate the signal into the analog processing at a phase angle set by a comparator, which essentially amounts to setting a voltage threshold such that at a point in the sinewave, the compartor will output a high, on the rising side of the sinewave. and then turn off on the falling side at the same point. Since the angle is related to time, if you set the trigger point such that it occurs at the dead center of the first hump, you are looking at the angle of 90 degrees relative to the entire sinewave being 360, and starting at 0.

    If you consider the frequency to be x then x/4 = 90 degrees into the wave. X/8 would be 45 degrees into the sinewave. This is what Mr. Crockers arduino code does, he samples 8 times.The frequency is based on the adc sample time and a counter.
    Davor tells me that you can examine any phase point that way, though I don't really understand that part of the math.

    Leave a comment:


  • Davor
    replied
    You have 3 channels in IDX: All metal, motion GB, and motion discrimination channels. Of these the All metal is used for pinpointing in a quasi non-motion way.
    GB and discrimination channels provide actual discrimination. To grasp it you have to picture a diagram with metal targets responding to a sinus signal stimulus. All metals will have a response somewhere in between 0 and 180° from Tx phase, but ferrous will have it in 0 to 90°, and non-ferrous will have it in 90 to 180°. Both motion channels are used for discrimination which happens in comparators that perform AND logical operation. There is a beep when both GB channel and disc channel provide positive signal at the inputs of comparators.

    How it goes? Say you adjust discrimination channel phase at 90° sharp. GB channel is aligned with the soil response which is in vicinity of 0° and it goes positive if response is in 0 to 180° range, and discrimination channel goes positive when response is in 90 to 270° range. It means that both channels will give positive responses only if a target response is in a range between 90 and 180°.

    If you want to exclude aluminium foil from detection, you simply adjust discrimination a little over 90° (say 100°) and your discrimination range becomes 100 to 180°.

    Leave a comment:


  • mohandes
    replied
    hi
    who can explain me simple discrimination in schematic on IDX?(just know which parts work to this and how?)
    regards

    Leave a comment:


  • scrungy_doolittle
    replied
    Originally posted by dfbowers View Post
    Yes, thanks for catching the errors. I get sloppy sometimes : / I did not keep it from running though.
    Lot's of options available with the Arduino! I have written at least a dozen variations of this program but all contain the basic logic on sampling.
    You will have to elaborate on the "goto" issue. It seems to work just fine though.
    I grew up learning Basic and Fortran in school, 30-some years ago and just picked it up programming again from the Arduino website.

    Also, thanks for the suggestions on enhancements. In reality, I'm still on a steep learning curve.
    Don
    Well your code may run, but there is a difference between running and running correctly.... In the case that I pointed out, two of the bars will be wrong.

    I started in 1976 with APL,basic and fortran, then moved to assembly. Moved on to C in 1985 from assembly. I've been programming for many years.
    In general, you do not need goto's. In c, they are restricted to being within a function. You can write any program you want by using structured code.
    for loops in C with breaks and continues. some might argue that breaks and continues are a form of goto. perhaps so. but they are managed by the compiler, and are always forward branches. Do while loops are also structured.
    Look up principle of structured code.

    So lets take a simple example:
    c=0;
    start:
    c=c+1; // just some example code
    if (c==5) goto end
    // code
    goto start
    end:

    c=0;
    do
    {
    c=c+1;
    // code
    }
    while (c !=5);

    A do while loop always executes at least once, and the test is done at the bottom of the loop

    for (c=0; c!= 5;c++)
    {
    // code
    };

    is the same thing, except the test is at the top of the loop, and if it fails the code is not executed.. C starts out at 0, and increments until it hits 5.


    do
    {
    //
    // loops for ever unless you do the following
    break; // exits the loop because it exits the current scope
    }
    while(1);

    for(i=0;i<10;i++)
    {
    if (condition == true) // we need to bail from the loop when this is true
    {
    break; // this will exit the loop
    }
    if(i==4) // we need to skip iteration 5
    {
    i=6; // sets i = 6 overriding the loop control
    continue; // this will branch to the top of the loop resulting in iteration 5 being skipped.
    }
    }

    // next block of code
    in this case break will take you out of the loop to the next block of code, while continue will do an early branch to the test.
    your code uses goto, for example, to transfer control to the top of the loop. But it can be re-written to avoid goto's all to gether.
    Right now it is 10:30 p.m. and I needed to be in bed long ago.
    I will tweak your code and repost it, but right now I am at company headquarters doing a hump week...

    Leave a comment:


  • dfbowers
    replied
    Originally posted by scrungy_doolittle View Post
    dfbowers:
    There is a bug in the code above, in the display bars....

    if (b3 > 7)
    {
    b3 = 7;
    }
    lcd.write(b3);
    if (b4 > 7)
    {
    b4 = 7;
    lcd.write(b4);
    }
    if (b5 > 7)
    {
    b5 = 7;
    lcd.write(b5);
    }
    lcd.write(b5);
    if (b6 > 7)
    {
    b6 = 7;
    }
    lcd.write(b6);
    if (b7 > 7)
    {
    b7 = 7;
    }
    lcd.write(b7);


    In this section of code consider b3 is > 7 it gets set to 0 and then printed outside of the if statement. That is good
    if b4 > 7 then you set it to 7 and write it INSIDE of the if. so the only time that B4 will be written is if it is >7.
    The same error exists in the b5 >7

    Second comment: Goto's are really a no no in C. I have rewritten the code to eliminate them, have not tested it, but while i
    was doing so I discovered this bug.

    There are a couple of things missing from this code in my opinion.
    There should be in addition to the phase, an indication of what you see. is it in the Dime range? howabout a pull tab?
    The second feature that would be nice, is a timer running showing how long you have had the unit on and running.
    The third feature that would be nice, is a reject range array. If the vdi number is between certain ranges, you just don't show it.
    And the user can set those.
    make two display screens, one default, the other slectable by holding a button down.

    The little 8 character bar graph is pretty cool. On a 16 character display, there is also enough room to display the signal intensity as well, so why not display the average of the
    X and r channels.
    Screen 1 where VIDKIND is a 7 character place for displaying the "guess", and XX:XX is the time since you turned it on, with a user option to be able to set the time and have it downcount
    so you can go hunt for say 45 min and get an indication that it is time to pack up and go back to work
    P= phase, and bb is the bar graph

    VIDKIND XX:XX
    P=xxxx bbbbbbbb

    Screen 2 the pinpoint screen when you hold the pinpoint button down (call it a depth screen or whatever.)
    Where mm is the depth in inches computed from the intensity averages. and bbbbbbbb is your graph, and X and R are the intensity averages that you computed the slope off of.
    X=XXXX R=XXXX mm
    P=XXXX bbbbbbbb
    Yes, thanks for catching the errors. I get sloppy sometimes : / I did not keep it from running though.
    Lot's of options available with the Arduino! I have written at least a dozen variations of this program but all contain the basic logic on sampling.
    You will have to elaborate on the "goto" issue. It seems to work just fine though.
    I grew up learning Basic and Fortran in school, 30-some years ago and just picked it up programming again from the Arduino website.

    Also, thanks for the suggestions on enhancements. In reality, I'm still on a steep learning curve.
    Don

    Leave a comment:


  • bernte_one
    replied
    hello paku
    which vdi (normal geotech vdi?) or arduino

    for normal geotech vdi i have a double sided layout which fits direct under the 1602lcd, no cable Needed direct stick on

    Leave a comment:


  • paku
    replied
    hi is that someone have SMD LAY for VDI

    Leave a comment:


  • scrungy_doolittle
    replied
    dfbowers:
    There is a bug in the code above, in the display bars....

    if (b3 > 7)
    {
    b3 = 7;
    }
    lcd.write(b3);
    if (b4 > 7)
    {
    b4 = 7;
    lcd.write(b4);
    }
    if (b5 > 7)
    {
    b5 = 7;
    lcd.write(b5);
    }
    lcd.write(b5);
    if (b6 > 7)
    {
    b6 = 7;
    }
    lcd.write(b6);
    if (b7 > 7)
    {
    b7 = 7;
    }
    lcd.write(b7);


    In this section of code consider b3 is > 7 it gets set to 0 and then printed outside of the if statement. That is good
    if b4 > 7 then you set it to 7 and write it INSIDE of the if. so the only time that B4 will be written is if it is >7.
    The same error exists in the b5 >7

    Second comment: Goto's are really a no no in C. I have rewritten the code to eliminate them, have not tested it, but while i
    was doing so I discovered this bug.

    There are a couple of things missing from this code in my opinion.
    There should be in addition to the phase, an indication of what you see. is it in the Dime range? howabout a pull tab?
    The second feature that would be nice, is a timer running showing how long you have had the unit on and running.
    The third feature that would be nice, is a reject range array. If the vdi number is between certain ranges, you just don't show it.
    And the user can set those.
    make two display screens, one default, the other slectable by holding a button down.

    The little 8 character bar graph is pretty cool. On a 16 character display, there is also enough room to display the signal intensity as well, so why not display the average of the
    X and r channels.
    Screen 1 where VIDKIND is a 7 character place for displaying the "guess", and XX:XX is the time since you turned it on, with a user option to be able to set the time and have it downcount
    so you can go hunt for say 45 min and get an indication that it is time to pack up and go back to work
    P= phase, and bb is the bar graph

    VIDKIND XX:XX
    P=xxxx bbbbbbbb

    Screen 2 the pinpoint screen when you hold the pinpoint button down (call it a depth screen or whatever.)
    Where mm is the depth in inches computed from the intensity averages. and bbbbbbbb is your graph, and X and R are the intensity averages that you computed the slope off of.
    X=XXXX R=XXXX mm
    P=XXXX bbbbbbbb

    Leave a comment:

Working...
X