单片机声控延迟电路如何测量延迟时间

已经采用基于555电路构成单稳态触发器的声控延迟电路。
问: 如何利用LED来指示声控延迟时间,并对时间进行测量并显示(最好有仿真图和可以使单片机或者可编程控制器显示延迟时间的程序编码)。

该回答参考ChatGPT:
要构建基于555电路的单稳态触发器的声控延迟电路,您需要以下材料:

555计时器芯片
电容器
电阻器
麦克风
LED灯
电池或电源
以下是构建电路的步骤:

将555芯片插入面包板上,并连接电源和地线。

将一个电容器连接到555芯片的引脚2和6之间,并将一个电阻器连接到引脚6和7之间。

将麦克风连接到电容器的负极,并将一个电阻器连接到麦克风的正极和引脚2之间。

将一个电阻器连接到引脚3和电源之间,并将LED灯连接到电阻器的正极和地线之间。

将另一个电容器连接到引脚2和地线之间,并将一个电阻器连接到引脚2和引脚6之间。

将一个电阻器连接到引脚7和地线之间,并将另一个LED灯连接到电阻器的正极和地线之间。

将一个电容器连接到引脚5和地线之间。

将一个电阻器连接到引脚4和电源之间。

将一个开关连接到电阻器的正极和地线之间。

将一个电容器连接到开关的正极和引脚2之间。

完成电路后,您可以使用麦克风来控制延迟时间。当声音达到一定的强度时,LED灯会亮起,指示延迟时间。您还可以使用电容器和电阻器来调整延迟时间。

要测量延迟时间并显示它,您可以使用一个计时器电路,例如基于Arduino的计时器。将计时器连接到电路中的LED灯,并使用代码来测量延迟时间并将其显示在计时器上。

希望这些步骤能够帮助您构建基于555电路的单稳态触发器的声控延迟电路,并测量和显示延迟时间。

基于555电路的单稳态触发器可以用来构造声控延迟电路,如下所示:

基于555电路的声控延迟电路

在这个电路中,一个麦克风被用作输入设备,它将周围的声音转换成一个电信号。当检测到声音时,电容C1开始充电,并导致555计时器输出高电平,同时LED灯也亮起。当C1的电压到达特定阈值时,计时器将会重置,切换到低电平并熄灭LED灯。

为了显示延迟时间,我们可以使用单片机或可编程控制器。例如,在Arduino平台上,您可以编写以下程序来测量和输出延迟时间:

// 声控延迟电路的输入引脚
const int micPin = A0;

// LED指示灯连接的引脚
const int ledPin = 13;

// 设置计时器默认值(毫秒)
unsigned long startTimer = 0;
unsigned long endTimer = 0;

void setup() {
  pinMode(micPin, INPUT);
  pinMode(ledPin, OUTPUT);
  
  // 开始串口通讯以便与PC进行通讯
  Serial.begin(9600);
}

void loop() {
  // 检测声音输入
  if (digitalRead(micPin) == HIGH) {
    // 如果检测到声音,开始计时
    startTimer = millis();
    digitalWrite(ledPin, HIGH);
  } else {
    // 如果声音消失,则停止计时并输出延迟时间
    endTimer = millis();
    digitalWrite(ledPin, LOW);
    
    // 计算延迟时间
    unsigned long delayTime = endTimer - startTimer;
    
    // 输出结果到串口和LCD屏幕
    Serial.print("Delay time: ");
    Serial.print(delayTime);
    Serial.println(" ms");
  }
}

这个程序接收来自麦克风的输入,并在检测到声音时记录开始计时,然后等待声音消失并记录结束时间。最后,程序计算延迟时间并将其输出到控制台。您可以使用程序修改它输出到其他设备,如LCD显示器或数码管。

请注意,由于麦克风的灵敏度取决于其品牌和型号,因此可能需要微调电路以获得预期的结果。同时,请确保加上合适的保护电路以防止555电路短路或过载。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,将要测量延迟时间的声控延迟电路的输出脚连接到单片机或可编程控制器的输入脚,使用中断来检测电平的变化。然后,利用单片机或可编程控制器的定时器来测量两个中断之间的时间差,即延迟时间。

接着,使用单片机或可编程控制器的输出口控制一个LED灯,当延迟时间达到一定条件时,LED灯点亮,指示延迟时间已经到达设定值。同时,将延迟时间显示在LCD屏幕上,方便监测和记录。

下面是一个基于Arduino的代码实现:

//定义引脚
const int inputPin = 2;    //声控延迟电路的输出接单片机的D2口
const int ledPin = 13;     //LED指示灯接单片机的D13口
const float delayTime = 500.00; //延迟时间

//计时器相关变量
volatile unsigned long firstTime;   //第一次中断时间
volatile unsigned long secondTime;  //第二次中断时间
volatile byte state = HIGH;  //当前电平状态

void setup() {
  pinMode(inputPin, INPUT);  //设置声控延迟电路输出口为输入
  pinMode(ledPin, OUTPUT);   //设置LED指示灯接口为输出
  Serial.begin(9600);        //开启串口
  attachInterrupt(digitalPinToInterrupt(inputPin), detectSignalChange, CHANGE); //连接中断
}

void loop() {
  //计算延迟时间
  if (firstTime != 0 && secondTime != 0) {
    float diffTime = secondTime - firstTime;
    if (diffTime >= delayTime) {
      digitalWrite(ledPin, HIGH); //延迟时间达到设定值,LED灯点亮
    } else {
      digitalWrite(ledPin, LOW);  //延迟时间未达到设定值,LED灯熄灭
    }
    Serial.print("Delay Time: ");
    Serial.print(diffTime);
    Serial.print(" ms");
    Serial.println();
    firstTime = 0;
    secondTime = 0;
  }
}

//中断函数
void detectSignalChange() {
  byte curState = digitalRead(inputPin);
  if (curState != state) {
    if (curState == HIGH) {
      firstTime = micros();
    } else {
      secondTime = micros();
    }
  }
  state = curState;
}

在这段代码中,我们使用了中断处理来检测声控延迟电路的输出脚的状态变化,并在变化时立即记录时间戳。然后使用定时器来计算时间差,并根据设置的延迟时间控制LED灯的开关,并将延迟时间在串口上输出。

当延迟时间达到设定条件时,LED灯会点亮,指示延迟时间已经到达设定值。你也可以添加更多的功能,如显示延迟时间在LCD屏幕上。

注意:本文提供的代码仅作为学习参考使用,如需在实际工程中使用,请自行根据具体情况进行修改和完善。确保电路的安全性、可靠性和稳定性。
如果我的回答解决了您的问题,请采纳!

可以借鉴下

使用定时器/计数器实现精确延时

 
单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。

在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。


要使用 555 电路构成单稳态触发器,可以按照以下步骤进行:

将 555 定时器的三个引脚连接在一起,这三个引脚分别是 A、B、C 引脚。

将正电源 (+V) 连接到 A 引脚,负电源 (-V) 连接到 C 引脚,GND 连接到 B 引脚。

选择合适的电阻和电容,将它们连接到 A、B、C 引脚上,以便构成一个相对稳定的触发器。一般来说,触发器的触发电压需要大于 3V,而且需要使用 10K 左右的电阻和 100pF 左右的电容。

将声控电路 (例如麦克风) 连接到 555 定时器的 D 引脚。

在 D 引脚和 A 引脚之间连接一个电阻,以限制电流流过 D 引脚。

将 LED 连接到 555 定时器的 E 引脚。

将电源连接到 555 定时器的 E 引脚,以便 LED 能够点亮。

最后,将电路连接到计算机或其他控制器上,以便测量和显示延迟时间。

对于声控延迟电路的 LED 指示和测量时间的功能,可以使用以下电路:

将 555 定时器的 D 引脚连接到一个电阻上,然后将电阻连接到 LED 的引脚。

将 555 定时器的 C 引脚连接到一个电容上,然后将电容连接到 LED 的引脚。

在 C 引脚和 D 引脚之间连接一个电阻,以限制 LED 的电流。

将 555 定时器的 A 引脚连接到一个电阻上,然后将电阻连接到计数器的重置引脚 (reset)。

将 555 定时器的 B 引脚连接到一个电容上,然后将电容连接到计数器的重置引脚。

将 555 定时器的 C 引脚连接到一个电阻上,然后将电阻连接到计数器的时钟引脚 (clock)。

将 555 定时器的 D 引脚连接到一个电容上,然后将电容连接到计数器的时钟引脚。

将 555 定时器的 E 引脚连接到一个电阻上,然后将电阻连接到计数器的时钟引脚。

最后,将电路连接到计算机或其他控制器上,以便能够测量和显示延迟时间。

需要注意的是,以上电路仅作为参考,实际电路设计需要根据具体情况进行调整和修改。同时,在实际应用中,需要根据具体情况对电路进行优化,以确保其稳定性和可靠性。