wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 49|回復: 0
收起左側

搬運個帶金屬鑒別功能的Arduino金屬探測器帖子

[復制鏈接]
ID:1066092 發表于 2025-11-30 00:38 | 顯示全部樓層 |閱讀模式
原來想做個金屬檢測器,一直沒搞成,無意找到個這玩意,搬運過來給有興趣的做個參考,有這個板子的和懂這個程序的可以驗證下這個是不是真的可行,提供的那個。原文是英文看不懂干脆用翻譯軟件翻譯成中文在后面,正文開始:
Arduino Metal Detector with Metal Discrimination
image-60.png

In this article, we will consider the creation of a metal detector based on the Arduino board with the ability to discriminate metals. This metal detector will be able to detect small metal objects (for example, coins) at a depth of up to 15 cm, and large metal objects it will be able to detect at a depth of up to 50 cm (and even more). It will also be able to distinguish iron-containing metals (ferrous) from non-ferrous metals (nonferrous). The metal detector has a fairly simple design and at the same time it provides acceptable sensitivity.
5.JPG

Earlier on our website we reviewed a project of a simple metal detector on Arduino , we recommend reading it to understand the principle of operation of a metal detector.
Necessary components
  • Arduino Nano board
  • LCD display 16×2
  • Operational amplifier TL081 or 741, LT1677 will also work (used by the author of the project)
  • Speaker 0.25 W, 8 Ohm.
  • General purpose transistor NPN type.
  • Induction coil – 2 pcs.
  • Potentiometer 10 kOhm
  • Capacitors and resistors (as per the diagram below).
  • Switches.
  • Battery.

Project scheme

The circuit diagram of the metal detector on Arduino with metal discrimination is shown in the following figure.

arduino_metal_detector_with_discrimination-2048x1448.jpg

When metal is detected, the device will emit a sound signal, and the LCD display will display the proximity of the metal using a bar graph, as well as indicate the type of metal – iron (ferrous) or non-ferrous (non-ferrous).

The device is an induction-balanced metal detector operating at a very low frequency (VLF). The metal detector contains a transmitting and receiving inductance coil. As in all circuits of similar detectors, the balance between the coils is very important for our device. The potentiometer in the detector circuit is used to eliminate the influence of the out-of-phase component of the signal – it brings the phase shift to zero, and the in-phase component is zeroed using the appropriate arrangement of the coils – according to the operating principle of IB detectors.


Each induction coil is made by winding 64 turns of 0.5 mm2 enameled copper wire onto a D shape with a diameter of 11 cm. The coil structure is then wrapped with tape and shielded with aluminum foil, after which tinned copper wire is attached to it – it is necessary to leave a small gap in the foil to attach it. After that, both coils are fixed to a plastic base. The appearance of the assembled induction coils for the metal detector is shown in the following figure.

5.JPG

You can watch the assembly process in more detail in the video provided at the end of the article. The appearance of the assembled metal detector structure is shown in the following figure.

5.JPG

To set up the project, we first need to determine the resonant frequency of the oscillatory circuit in our circuit. To do this, you can use the formula known from the physics course, online calculators, or you can measure it with an oscilloscope. If you assembled the coils in the described way, then the resonant frequency of our circuit should be approximately 7.64 kHz. If you received a different resonant frequency value, then you need to make the appropriate changes to the next line of the program:


  1. #define TIMER1_TOP (249) // fine-tune the frequency
復制代碼

As you can see in the video below, the results of the metal detector were quite impressive. In the absence of metal, the device shows stable operation. A metal circle with a diameter of 15 cm is detected at a distance of more than 30 cm. Larger metal objects are detected at distances exceeding 40-50 cm. A small coin can be detected at a distance of 15 cm (in the air).

To power the metal detector, the author of the project used two lithium batteries, which, when connected in series, provide a supply voltage of 7.4 V – this voltage is supplied to the Vin contact of the Arduino board. The power consumption of the device does not exceed 20 mA, so it will work for quite a long time from such batteries.

To significantly increase the sensitivity of the metal detector, the author of the project proposes to control the transmitting coil using a powerful MOSFET transistor – in the future, he plans to publish the results of such an experiment on the project page.



Note : recommendations for practical assembly of this metal detector project from an active reader of our site named Alexander with a description, photographs and video can be downloaded fromthe following link .


Source code of the program (sketch)

  1. // Induction balance metal detector


  2. // We run the CPU at 16MHz and the ADC clock at 1MHz (АЦП работает на 1 МГц). ADC resolution is reduced to 8 bits at this speed. (разрешение АЦП уменьшено до 8 бит)


  3. // Timer 1 is used to divide the system clock by about 256 to produce a 62.5kHz square wave. (Таймер 1 использовается для формирования прямоугольных импульсов с частотой 62,5 кГц)

  4. // This is used to drive timer 0 and also to trigger ADC conversions.

  5. // Timer 0 is used to divide the output of timer 1 by 8, giving a 7.8125kHz signal for driving the transmit coil.

  6. // Таймер 0 делит выход таймера 1 на 8, и, таким образом, формирует сигнал частотой 7.8125kHz для управления передающей катушкой

  7. // This gives us 16 ADC clock cycles for each ADC conversion (it actually takes 13.5 cycles), and we take 8 samples per cycle of the coil drive voltage.

  8. // The ADC implements four phase-sensitive detectors at 45 degree intervals. Using 4 instead of just 2 allows us to cancel the third harmonic of the

  9. // coil frequency.


  10. // Timer 2 will be used to generate a tone for the earpiece or headset. (таймер 2 используется для генерации тона для наушников)


  11. // Other division ratios for timer 1 are possible, from about 235 upwards.


  12. // Wiring:

  13. // Connect digital pin 4 (alias T0) to digital pin 9

  14. // Connect digital pin 5 through resistor to primary coil and tuning capacitor

  15. // Connect output from receive amplifier to analog pin 0. Output of receive amplifier should be biased to about half of the analog reference.

  16. // When using USB power, change analog reference to the 3.3V pin, because there is too much noise on the +5V rail to get good sensitivity.

  17. #include <LiquidCrystal.h>

  18. #include <LcdBarGraph.h>

  19. #define max_ampAverage 200

  20. LiquidCrystal lcd(6, 7, 10, 11, 12, 13);

  21. LcdBarGraph lbg(&lcd, 16, 0, 1);


  22. #define TIMER1_TOP  (259)        // can adjust this to fine-tune the frequency to get the coil tuned (see above) (это значение используется для точной настройки частоты катушки)


  23. #define USE_3V3_AREF  (1)        // set to 1 of running on an Arduino with USB power, 0 for an embedded atmega28p with no 3.3V supply available


  24. // Digital pin definitions

  25. // Digital pin 0 not used, however if we are using the serial port for debugging then it’s serial input

  26. const int debugTxPin = 1;        // transmit pin reserved for debugging (передающий контакт, зарезервированный для целей отладки)

  27. const int encoderButtonPin = 2;  // encoder button, also IN0 for waking up from sleep mode

  28. const int earpiecePin = 3;       // earpiece, aka OCR2B for tone generation

  29. const int T0InputPin = 4;

  30. const int coilDrivePin = 5;

  31. const int LcdRsPin = 6;

  32. const int LcdEnPin = 7;

  33. const int LcdPowerPin = 8;       // LCD power and backlight enable

  34. const int T0OutputPin = 9;

  35. const int lcdD4Pin = 10;

  36. const int lcdD5Pin = 11;         // pins 11-13 also used for ICSP

  37. const int LcdD6Pin = 12;

  38. const int LcdD7Pin = 13;


  39. // Analog pin definitions (используемые аналоговые контакты)

  40. const int receiverInputPin = 0;

  41. const int encoderAPin = A1;

  42. const int encoderBpin = A2;

  43. // Analog pins 3-5 not used


  44. // Variables used only by the ISR

  45. int16_t bins[4];                 // bins used to accumulate ADC readings, one for each of the 4 phases (используются для хранения значений, считываемых с АЦП)

  46. uint16_t numSamples = 0;

  47. const uint16_t numSamplesToAverage = 1024;


  48. // Variables used by the ISR and outside it

  49. volatile int16_t averages[4];    // when we’ve accumulated enough readings in the bins, the ISR copies them to here and starts again

  50. volatile uint32_t ticks = 0;     // system tick counter for timekeeping

  51. volatile bool sampleReady = false;  // indicates that the averages array has been updated


  52. // Variables used only outside the ISR

  53. int16_t calib[4];                // values (set during calibration) that we subtract from the averages (значения, устанавливаемые во время калибровки, в дальнейшем мы их вычитаем из средних значений)


  54. volatile uint8_t lastctr;

  55. volatile uint16_t misses = 0;    // this counts how many times the ISR has been executed too late. Should remain at zero if everything is working properly.


  56. const double halfRoot2 = sqrt(0.5);

  57. const double quarterPi = 3.1415927/4.0;

  58. const double radiansToDegrees = 180.0/3.1415927;


  59. // The ADC sample and hold occurs 2 ADC clocks (= 32 system clocks) after the timer 1 overflow flag is set.

  60. // This introduces a slight phase error, which we adjust for in the calculations.

  61. const float phaseAdjust = (45.0 * 32.0)/(float)(TIMER1_TOP + 1);


  62. float threshold = 5.0;          // lower = greater sensitivity. 10 is just about usable with a well-balanced coil.

  63.                                  // The user will be able to adjust this via a pot or rotary encoder. (эту границу можно сделать настраиваемой с помощью потенциометра или энкодера)


  64. void setup()

  65. {

  66.   lcd.begin(16, 2);// LCD 16X2

  67.   pinMode(encoderButtonPin, INPUT_PULLUP);  

  68.   digitalWrite(T0OutputPin, LOW);

  69.   pinMode(T0OutputPin, OUTPUT);       // pulse pin from timer 1 used to feed timer 0

  70.   digitalWrite(coilDrivePin, LOW);

  71.   pinMode(coilDrivePin, OUTPUT);      // timer 0 output, square wave to drive transmit coil

  72.   

  73.   cli();

  74.   // Stop timer 0 which was set up by the Arduino core

  75.   TCCR0B = 0;        // stop the timer

  76.   TIMSK0 = 0;        // disable interrupt

  77.   TIFR0 = 0x07;      // clear any pending interrupt

  78.   

  79.   // Set up ADC to trigger and read channel 0 on timer 1 overflow

  80. #if USE_3V3_AREF

  81.   ADMUX = (1 << ADLAR);                   // use AREF pin (connected to 3.3V) as voltage reference, read pin A0, left-adjust result

  82. #else

  83.   ADMUX = (1 << REFS0) | (1 << ADLAR);    // use Avcc as voltage reference, read pin A0, left-adjust result

  84. #endif  

  85.   ADCSRB = (1 << ADTS2) | (1 << ADTS1);   // auto-trigger ADC on timer/counter 1 overflow

  86.   ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADATE) | (1 << ADPS2);  // enable adc, enable auto-trigger, prescaler = 16 (1MHz ADC clock)

  87.   DIDR0 = 1;


  88.   // Set up timer 1.

  89.   // Prescaler = 1, phase correct PWM mode, TOP = ICR1A

  90.   TCCR1A = (1 << COM1A1) | (1 << WGM11);

  91.   TCCR1B = (1 << WGM12) | (1 << WGM13) | (1 << CS10);    // CTC mode, prescaler = 1

  92.   TCCR1C = 0;

  93.   OCR1AH = (TIMER1_TOP/2 >> 8);

  94.   OCR1AL = (TIMER1_TOP/2 & 0xFF);

  95.   ICR1H = (TIMER1_TOP >> 8);

  96.   ICR1L = (TIMER1_TOP & 0xFF);

  97.   TCNT1H = 0;

  98.   TCNT1L = 0;

  99.   TIFR1 = 0x07;      // clear any pending interrupt

  100.   TIMSK1 = (1 << TOIE1);


  101.   // Set up timer 0

  102.   // Clock source = T0, fast PWM mode, TOP (OCR0A) = 7, PWM output on OC0B

  103.   TCCR0A = (1 << COM0B1) | (1 << WGM01) | (1 << WGM00);

  104.   TCCR0B = (1 << CS00) | (1 << CS01) | (1 << CS02) | (1 << WGM02);

  105.   OCR0A = 7;

  106.   OCR0B = 3;

  107.   TCNT0 = 0;

  108.   sei();

  109.   

  110.   while (!sampleReady) {}    // discard the first sample (отбрасываем первый отсчет)

  111.   misses = 0;

  112.   sampleReady = false;

  113.   

  114.   Serial.begin(19200);

  115. }


  116. // Timer 0 overflow interrupt (прерывание от таймера 0). This serves 2 purposes: (служит для 2-х целей)

  117. // 1. It clears the timer 0 overflow flag. If we don’t do this, the ADC will not see any more Timer 0 overflows and we will not get any more conversions.

  118. // 2. It increments the tick counter, allowing is to do timekeeping. We get 62500 ticks/second.

  119. // We now read the ADC in the timer interrupt routine instead of having a separate comversion complete interrupt.

  120. ISR(TIMER1_OVF_vect)

  121. {

  122.   ++ticks;

  123.   uint8_t ctr = TCNT0;

  124.   int16_t val = (int16_t)(uint16_t)ADCH;    // only need to read most significant 8 bits (нам нужно считывать только 8 наиболее значащих бит)

  125.   if (ctr != ((lastctr + 1) & 7))

  126.   {

  127.     ++misses;

  128.   }

  129.   lastctr = ctr;

  130.   int16_t *p = &bins[ctr & 3];

  131.   if (ctr < 4)

  132.   {

  133.     *p += (val);

  134.     if (*p > 15000) *p = 15000;

  135.   }

  136.   else

  137.   {

  138.     *p -= val;

  139.     if (*p < –15000) *p = –15000;

  140.   }

  141.   if (ctr == 7)

  142.   {

  143.     ++numSamples;

  144.     if (numSamples == numSamplesToAverage)

  145.     {

  146.       numSamples = 0;

  147.       if (!sampleReady)      // if previous sample has been consumed

  148.       {

  149.         memcpy((void*)averages, bins, sizeof(averages));

  150.         sampleReady = true;

  151.       }

  152.       memset(bins, 0, sizeof(bins));

  153.     }

  154.   }

  155. }


  156. void loop()

  157. {

  158.   while (!sampleReady) {}

  159.   uint32_t oldTicks = ticks;

  160.   

  161.   if (digitalRead(encoderButtonPin) == LOW)

  162.   {

  163.     // Calibrate button pressed. We save the current phase detector outputs and subtract them from future results.

  164.     // This lets us use the detector if the coil is slightly off-balance.

  165.     // It would be better to everage several samples instead of taking just one.

  166.     for (int i = 0; i < 4; ++i)

  167.     {

  168.       calib[i] = averages[i];

  169.     }

  170.     sampleReady = false;

  171.     Serial.print(“Calibrated: “);

  172.    

  173.     lcd.setCursor(0,0);

  174.     lcd.print(“Calibrating…  “);   

  175.     for (int i = 0; i < 4; ++i)

  176.     {

  177.       Serial.write(‘ ‘);

  178.       

  179.       Serial.print(calib[i]);

  180.    

  181.     lcd.setCursor(0,1);   

  182.     lcd.print(‘ ‘);   

  183.     lcd.print(calib[4]);

  184.     lcd.print(”        “);     

  185.     }

  186.     Serial.println();

  187.   }

  188.   else

  189.   {  

  190.     for (int i = 0; i < 4; ++i)

  191.     {

  192.       averages[i] -= calib[i];

  193.     }

  194.     const double f = 200.0;

  195.    

  196.     // Massage the results to eliminate sensitivity to the 3rd harmonic, and divide by 200

  197.     double bin0 = (averages[0] + halfRoot2 * (averages[1] – averages[3]))/f;

  198.     double bin1 = (averages[1] + halfRoot2 * (averages[0] + averages[2]))/f;

  199.     double bin2 = (averages[2] + halfRoot2 * (averages[1] + averages[3]))/f;

  200.     double bin3 = (averages[3] + halfRoot2 * (averages[2] – averages[0]))/f;

  201.     sampleReady = false;          // we’ve finished reading the averages, so the ISR is free to overwrite them again


  202.     double amp1 = sqrt((bin0 * bin0) + (bin2 * bin2));

  203.     double amp2 = sqrt((bin1 * bin1) + (bin3 * bin3));

  204.     double ampAverage = (amp1 + amp2)/2.0;

  205.    

  206.     // The ADC sample/hold takes place 2 clocks after the timer overflow

  207.     double phase1 = atan2(bin0, bin2) * radiansToDegrees + 45.0;

  208.     double phase2 = atan2(bin1, bin3) * radiansToDegrees;

  209.   

  210.     if (phase1 > phase2)

  211.     {

  212.       double temp = phase1;

  213.       phase1 = phase2;

  214.       phase2 = temp;

  215.     }

  216.    

  217.     double phaseAverage = ((phase1 + phase2)/2.0) – phaseAdjust;

  218.     if (phase2 – phase1 > 180.0)

  219.     {

  220.       if (phaseAverage < 0.0)

  221.       {

  222.         phaseAverage += 180.0;

  223.       }

  224.       else

  225.       {

  226.         phaseAverage -= 180.0;

  227.       }

  228.     }

  229.         

  230.     // For diagnostic purposes, print the individual bin counts and the 2 indepedently-calculated gains and phases                                                        

  231.     Serial.print(misses);

  232.     Serial.write(‘ ‘);

  233.    

  234.     if (bin0 >= 0.0) Serial.write(‘ ‘);

  235.     Serial.print(bin0, 2);

  236.     Serial.write(‘ ‘);

  237.     if (bin1 >= 0.0) Serial.write(‘ ‘);

  238.     Serial.print(bin1, 2);

  239.     Serial.write(‘ ‘);

  240.     if (bin2 >= 0.0) Serial.write(‘ ‘);

  241.     Serial.print(bin2, 2);

  242.     Serial.write(‘ ‘);

  243.     if (bin3 >= 0.0) Serial.write(‘ ‘);

  244.     Serial.print(bin3, 2);

  245.     Serial.print(”    “);

  246.     Serial.print(amp1, 2);

  247.     Serial.write(‘ ‘);

  248.     Serial.print(amp2, 2);

  249.     Serial.write(‘ ‘);

  250.     if (phase1 >= 0.0) Serial.write(‘ ‘);

  251.     Serial.print(phase1, 2);

  252.     Serial.write(‘ ‘);

  253.     if (phase2 >= 0.0) Serial.write(‘ ‘);

  254.     Serial.print(phase2, 2);

  255.     Serial.print(”    “);

  256.    

  257.     // Print the final amplitude and phase, which we use to decide what (if anything) we have found)

  258.     if (ampAverage >= 0.0) Serial.write(‘ ‘);

  259.     Serial.print(ampAverage, 1);

  260.     Serial.write(‘ ‘);

  261.         

  262.         lcd.setCursor(0,0);

  263.         lcd.print(”          “);

  264.         lcd.print(ampAverage);        

  265.         lcd.setCursor(0,1);

  266.         lbg.drawValue(ampAverage, max_ampAverage);


  267.     if (phaseAverage >= 0.0) Serial.write(‘ ‘);

  268.     Serial.print((int)phaseAverage);

  269.    

  270.     // Decide what we have found and tell the user

  271.     if (ampAverage >= threshold)

  272.     {

  273.       // When held in line with the centre of the coil:

  274.       // – non-ferrous metals give a negative phase shift, e.g. -90deg for thick copper or aluminium, a copper olive, -30deg for thin alumimium.

  275.       // Ferrous metals give zero phase shift or a small positive phase shift.

  276.       // So we’ll say that anything with a phase shift below -20deg is non-ferrous.

  277.       if (phaseAverage < –20.0)

  278.       {

  279.         Serial.print(” Non-ferrous”);

  280.         lcd.setCursor(0,0);        

  281.         lcd.print(“NonFerous “);      

  282.      

  283.       }

  284.       else

  285.       {

  286.         Serial.print(” Ferrous”);        

  287.         lcd.setCursor(0,0);      

  288.         lcd.print(“Ferrous    “);                 

  289.       }

  290.       float temp = ampAverage;

  291.               

  292.        int thisPitch = map (temp, 10, 200, 100, 1500);

  293.        tone(3, thisPitch,120);

  294.       

  295.       while (temp > threshold)

  296.       {

  297.         Serial.write(‘!’);      

  298.         temp -= (threshold/2);

  299.       }

  300.     }   

  301.     Serial.println();

  302.    

  303.    }

  304.   while (ticks – oldTicks < 8000)

  305.   {

  306.   }      

  307. }
復制代碼
The LcdBarGraph library used in this sketch can be downloaded from this link . The program code makes extensive use of timers, if you are not very good at these, we recommend reading the Arduino Timers Guide for Beginners .
Video demonstrating the circuit in operation
http://bilibili.com/video/BV1G6ScBUE4W/?spm_id_from=333.337.search-card.all.click

中文的翻譯如下:
本文將介紹如何基于 Arduino 開發板制作一款能夠區分不同金屬的金屬探測器。這款金屬探測器能夠探測到深度達 15 厘米的小型金屬物體(例如硬幣),以及深度達 50 厘米(甚至更深)的大型金屬物體。它還能區分含鐵金屬(鐵質金屬)和非鐵質金屬(非鐵質金屬)。該金屬探測器設計簡潔,同時又具備令人滿意的靈敏度。

此前,我們在網站上介紹過一個 基于 Arduino 的簡易金屬探測器項目 ,建議大家閱讀一下,以了解金屬探測器的工作原理。

必要組件
  • Arduino Nano 開發板
  • LCD 顯示屏 16×2
  • 運算放大器 TL081 或 741、LT1677 也適用(項目作者使用)
  • 揚聲器 0.25 瓦,8 歐姆。
  • 通用型NPN晶體管。
  • 感應線圈 – 2 個
  • 10 kΩ 電位器
  • 電容器和電阻器(如下圖所示)。
  • 開關。
  • 電池。

項目方案

下圖所示為基于 Arduino 的金屬探測器電路圖,該電路具有金屬識別功能。

當檢測到金屬時,該設備會發出聲音信號,液晶顯示屏會用條形圖顯示金屬的接近程度,并指示金屬的類型——鐵(鐵質)或非鐵質(非鐵質)。

該裝置是一款工作頻率極低(VLF)的感應平衡式金屬探測器。金屬探測器包含一個發射電感線圈和一個接收電感線圈。與所有類似探測器的電路一樣,線圈間的平衡對于我們的裝置至關重要。探測器電路中的電位器用于消除信號中反相分量的影響——它將相位偏移降至零,而同相分量則通過適當排列線圈來使其降至零——這符合感應平衡式探測器的工作原理。


每個感應線圈均由64匝0.5平方毫米的漆包銅線繞制而成,繞線形狀為直徑11厘米的D形。線圈結構用膠帶包裹,并用鋁箔屏蔽,之后將鍍錫銅線連接到鋁箔上——需要在鋁箔上留出一個小縫隙以便連接。最后,將兩個線圈固定在塑料底座上。金屬探測器感應線圈的組裝外觀如下圖所示。

您可以在文章末尾提供的視頻中更詳細地了解組裝過程。組裝完成后的金屬探測器結構如下圖所示。

要搭建這個項目,首先需要確定電路中振蕩電路的諧振頻率。你可以使用物理課上學到的公式、在線計算器,或者用示波器測量。如果你按照說明組裝了線圈,那么電路的諧振頻率應該約為 7.64 kHz。如果你得到的諧振頻率值不同,則需要對程序的下一行進行相應的修改:

正如您在下方視頻中所見,金屬探測器的探測結果令人印象深刻。在沒有金屬的情況下,該設備運行穩定。直徑為15厘米的金屬圓片可在30厘米以上的距離被探測到。較大的金屬物體可在40-50厘米以上的距離被探測到。一枚小硬幣(在空中)可在15厘米的距離被探測到。

為了給金屬探測器供電,項目作者使用了兩節鋰電池,串聯后可提供 7.4V 的供電電壓——該電壓被施加到 Arduino 板的 Vin 引腳。該設備的功耗不超過 20mA,因此使用這樣的電池可以長時間工作。

為了顯著提高金屬探測器的靈敏度,該項目的作者提議使用大功率 MOSFET 晶體管來控制發射線圈——未來,他計劃在項目頁面上公布此類實驗的結果。


本程序中使用的 LcdBarGraph 庫
LcdBarGraph-2.0.1.zip (100.2 KB, 下載次數: 0) 下載 。程序代碼大量使用了定時器,如果您對定時器不太熟悉,我們建議您閱讀 《Arduino 定時器入門指南》 。
視頻演示了電路的運行情況

評分

參與人數 2黑幣 +80 收起 理由
wpppmlah + 30 共享資料的獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
亚洲精品久久久蜜桃| 国产成人精品在线播放| 国产日韩欧美a| 成人午夜剧场免费观看完整版| 永久久久久久久| 奇米精品一区二区三区| 亚洲a成v人在线观看| 欧美日韩精品二区| 国产一二三四| 加勒比在线一区| 秋霞av国产精品一区| 精品乱人伦小说| 亚洲一区二区三区精品在线| 国产精品综合av一区二区国产馆| 欧美精品色图| 久久亚洲精品人成综合网| 美女欧美视频在线观看免费| 有没有片在线看www| www天堂在线| 国产在线视频第一页| 在线观看免费视频黄| 阿v天堂2017| 视频一区免费观看| 国产精品一区二区三| 久久视频在线播放| 日韩美女在线视频| 狠狠躁夜夜躁人人躁婷婷91| 久久久久久久电影| 久久97超碰色| 一区二区三区导航| 国产精选一区| 超碰精品在线观看| 亚洲a∨精品一区二区三区导航| av在线免费一区| 午夜影院免费播放| 任你操在线观看| 欧美疯狂爱爱xxxxbbbb| 99在线精品视频免费观看软件| 国产一级片免费看| 青青草自拍偷拍| 波多野结衣 在线| 女人扒开腿免费视频app| 啊啊啊一区二区| 亚洲欧美综合一区| 激情欧美一区二区三区中文字幕| 国产精品视频大全| 欧美最猛性xxxxx免费| 九九热在线精品视频| 中文字幕久久精品| 亚洲天堂网在线观看| 亚洲精品一区二区三区香蕉| 91精品国产美女浴室洗澡无遮挡| 在线看不卡av| 色婷婷久久综合| 精品久久久中文| 亚洲成人精品在线观看| 一个色妞综合视频在线观看| 亚洲婷婷综合色高清在线| 欧美激情一区不卡| 国产欧美一区二区精品性| 91视频一区二区三区| 成人av资源站| 99精品在线免费| av不卡在线播放| 91亚洲永久精品| 91影院在线免费观看| 久久久久9999亚洲精品| 日本一区二区视频在线| 欧美国产日本韩| 18成人在线视频| 亚洲激情网站免费观看| 一级做a爱片久久| 亚洲一区二区三区四区的| 亚洲黄色av一区| 天天av天天翘天天综合网色鬼国产 | 日韩在线观看电影完整版高清免费| 亚洲www在线| 99国产在线视频| 国产成人精品日本亚洲11 | 五月天免费网站| 国产suv精品一区二区68| 久草福利资源在线| 国产盗摄一区二区三区在线| 情侣偷拍对白清晰饥渴难耐| 1024手机在线视频| 中文字幕精品三级久久久| 最近中文字幕在线视频| 亚洲国产精品欧美久久 | 日韩欧美123区| 自拍偷拍欧美亚洲| 国产又大又粗又长| 天堂av资源网| 国产成人精品男人的天堂538| 看全色黄大色黄大片免责看的| 明星乱亚洲合成图.com| 在线中文字幕视频| a级毛片免费观看在线 | 国产视频在线观看一区二区三区| 国产精品久久国产精麻豆99网站| 亚洲一区在线观看免费观看电影高清| 日本久久电影网| 亚洲精品av在线| 九九九久久久久久| 亚洲欧洲国产日本综合| 日韩人在线观看| 日韩av一区二区在线| 美乳少妇欧美精品| 国产精品久久久av| 欧美日韩精品久久久免费观看| 男人添女人下部视频免费| 天天色综合天天色| 香蕉视频黄色在线观看| 日干夜干天天干| 免费看日韩av| japan乱配videos老少配| 污污的网站在线观看| 黄网在线免费看| 欧美影院精品| 国内精品久久久久国产盗摄免费观看完整版 | 婷婷国产在线综合| 精品剧情在线观看| 欧美黑人又粗大| 操一操视频一区| 激情深爱综合网| 精品人妻无码一区二区三区换脸| 日韩视频在线观看一区| 在线播放一区二区精品产| 成视频在线观看免费观看| 97caopron在线视频| 亚洲3区在线| 国产免费成人| 国产精品久久看| 91精品国产综合久久国产大片| 久久成人av网站| 精品国产乱码久久久久久丨区2区| 日b视频免费观看| 中文字幕一区二区三区人妻| 中国女人真人一级毛片| 中国老太性bbbxxxx| 久蕉在线视频| 欧美在线在线| 青青草视频一区| 一区二区不卡在线播放| 亚洲女人天堂成人av在线| 国产精品视频999| 日韩国产小视频| 亚洲理论片在线观看| 97国产精品久久久| 黄色高清视频在线观看| 香蕉视频在线播放| 亚洲一区 二区| 人人狠狠综合久久亚洲| 怡红院av一区二区三区| 亚洲国产91精品在线观看| 国产一区私人高清影院| 日韩中文字幕三区| 九九精品在线观看视频| 欧美成人禁片在线观看网址| 国产在线三区| 亚洲天堂日韩在线| 成人av资源站| 亚洲福利视频在线| av免费精品一区二区三区| 在线看的黄色网址| 久久精品一二区| jizzjizz19| 国内精品伊人| 蜜臀av一区二区在线免费观看| 精品人伦一区二区三区蜜桃免费| 欧美日韩高清区| 男人日女人的bb| 日韩一级片av| 免费网站你懂的| 中文字幕久热| 天堂av在线7| 亚洲警察之高压线| 久久综合久久99| 日韩av最新在线观看| av一区二区三区免费| 精品人妻一区二区三| 国产视频手机在线| 日韩黄色网址| 神马日本精品| 26uuu欧美日本| 伊人亚洲福利一区二区三区| 日韩精品另类天天更新| 国产免费嫩草影院| 在线www天堂网在线| 浪潮色综合久久天堂| 免费av成人在线| 日韩欧美一区中文| 国产综合色一区二区三区| 一女三黑人理论片在线 | 偷拍自拍亚洲| 高清不卡一二三区| 亚洲精选一区二区| 偷拍盗摄高潮叫床对白清晰| 久久香蕉精品视频| 日日躁天天躁狠狠躁| 涩爱av色老久久精品偷偷鲁| jizz一区二区| 久久精品久久久久电影| 久久视频这里有精品| 这里只有精品9| yes4444视频在线观看| 激情欧美一区| 在线不卡一区二区| 久久资源av| 久久久精品99| 在线看片你懂得| 欧美 亚欧 日韩视频在线| 色综合久久88色综合天天 | 一级黄色录像视频| 四虎免费av| 国产成人三级| 午夜免费久久看| 亚洲一区久久久| 男女全黄做爰文章| 麻豆美女网站| 久久综合欧美| 一本久久综合亚洲鲁鲁五月天| 亚洲japanese制服美女| 国产探花视频在线播放| 97超超碰碰| 日本欧美视频| 欧美曰成人黄网| 欧美一区2区三区4区公司二百| 欧美日韩中文视频| 久久精品a一级国产免视看成人| 伊人精品成人久久综合软件| 欧美一区二区三区小说| 欧美一级黄色录像片| 国产精品无码免费播放| 欧美1—12sexvideos| 国产一区激情在线| 久久成人综合视频| 日本中文字幕观看| 国产精品天美传媒入口| 日本伊人久久| 五月天欧美精品| 久久久久久国产精品一区| 日本熟伦人妇xxxx| 香蕉视频在线播放| 丁香网亚洲国际| 欧美一级大片在线免费观看| 青青草成人免费视频| 成人黄动漫网站| 亚洲激情网址| 亚洲一级片在线看| 91免费版网站在线观看| 少妇太紧太爽又黄又硬又爽小说| a视频免费看| 一区在线免费| 色噜噜狠狠狠综合曰曰曰| 亚洲一区二区图片| 777影院狠狠色| 国产精品激情电影| 亚洲人成在线播放| 热99久久精品| 欧美激情久久久久久久| 伪装者在线观看完整版免费| 天堂成人免费av电影一区| www.日韩视频| 天天插天天射天天干| 日本五十路在线| 青青草国产成人99久久| 国模极品一区二区三区| 免费成人深夜蜜桃视频 | 免费日韩一区二区| 俺也去精品视频在线观看| 丰满人妻一区二区三区免费视频棣 | 成人黄色免费观看| 一区二区三区不卡视频| 日韩一本精品| 色先锋av资源中文字幕| 九九热播视频在线精品6| 欧美一区二区视频在线观看2020| 国产一区亚洲二区三区| 狠狠操五月天| 麻豆精品91| 欧美一级在线播放| 自拍偷拍欧美亚洲| 少妇一区视频| 欧美视频13p| 久久久亚洲精品无码| 一个人看免费www视频有多爽| 欧美激情性爽国产精品17p| 日韩在线观看免费全集电视剧网站| 无码人妻aⅴ一区二区三区| 三级视频在线| 国产午夜亚洲精品羞羞网站| 另类小说综合网| 亚洲色图综合图区| 欧美日韩在线观看视频小说| 亚洲日本中文字幕| 亚洲精品色午夜无码专区日韩| 国产1区2区3区在线| 国产欧美日韩在线观看| 五月天亚洲综合情| 亚洲国产日韩成人综合天堂| 首页国产精品| 日韩在线视频二区| 久艹在线观看视频| 麻豆免费在线| 91国模大尺度私拍在线视频| 久久久精品麻豆| 特黄国产免费播放| 成人激情小说乱人伦| 国产区二精品视| 亚洲一卡2卡三卡4卡2021四卡| 日韩精品不卡一区二区| 久久久精品国产一区二区| 黄色网页免费在线观看| 18激情网站| 成人高清视频在线| 婷婷精品国产一区二区三区日韩| 国产日韩欧美精品一区二区三区| 亚洲伊人观看| 91影视免费在线观看| 亚洲欧美国产高清va在线播放| 色婷婷一区二区三区| 欧美激情视频在线| 欧美 亚洲 另类 激情 另类| 日本欧美三级| 欧美成人免费大片| 天天综合天天干| 人人精品视频| 久久成人18免费网站| 国产成人精品777777| 久久影院资源站| 久久亚洲国产精品成人av秋霞| www.国产高清| 国产欧美日韩免费观看| 久久久久久久久电影| 国产原创中文av| 国一区二区在线观看| 国产在线高清精品| 四虎影在永久在线观看| 水野朝阳av一区二区三区| 国产日产精品一区二区三区四区| 国产成人亚洲综合小说区| 国产福利一区二区三区视频| 日韩美女在线观看| 超碰人人人人人人| 亚洲高清网站| 91国产丝袜在线放| 成人网站免费观看| 草草在线视频| 亚洲国产成人精品久久久国产成人一区| 免费黄色国产视频| 亚洲一区二区三区四区电影 | 一区二区三区久久久| 亚洲美女性囗交| 18+激情视频在线| 91精品国产麻豆| 九九热精品在线观看| 亚洲精品一级二级三级| 国产成人在线一区| 欧美五级在线观看视频播放| 国产在线乱码一区二区三区| 超碰成人在线免费观看| 四虎国产精品永远| 在线亚洲高清视频| 美女av免费看| 一区二区在线免费播放| 午夜精品美女自拍福到在线| 婷婷五月综合久久中文字幕| 另类小说视频一区二区| 热久久最新地址| √天堂资源地址在线官网| 777久久久精品| 日本一级黄色大片| 一区二区三区网站 | 色婷婷综合久久久久中文字幕1| 中文字幕视频二区| 国产美女诱惑一区二区| 亚洲欧美日韩国产yyy| 国家队第一季免费高清在线观看 | 亚洲一区二区精品在线观看| 伊人久久青青草| 欧美日韩久久不卡| 日本少妇裸体做爰| 欧美久久九九| 日韩经典在线视频| 欧美白人做受xxxx视频| 欧美一区二区在线视频| 婷婷激情五月网| 亚洲色诱最新| 天天爱天天做天天操| av午夜在线| 日韩精品在线看| 亚洲产国偷v产偷v自拍涩爱| 国产一区激情在线| 国产精品v日韩精品v在线观看| 中文字幕 在线观看| 欧美精品午夜视频| 国产卡一卡二卡三| 一区二区三区中文字幕| jizz18女人高潮| 99九九热只有国产精品|