做一个简单的超声波测距装置,用Arduino
novakon2013/04/23电子技术 IP:广东
大家好我是电子小白,我的水平不高,所以写出来的教程水平也不高,请多包涵。
这个教程是写给没有任何电子基础的同学看的。


零基础教程:做一个简单的超声波测距装置


首先你需要一块Arduino单片机。为什么不是51单片机呢?不是都说51单片机是入门吗?
我认为“入门”这个词代表着简单,但是不代表低端。我用的第一块单片机是STM32F407,纯粹只是因为它够快够猛IO口够多罢了。
Arduino的编程够简单,各种功能类库啥的比较齐全,所以推荐初学者折腾这个。


闲话不多说,这是我花四十多大洋购买的Arduino Leonardo板子,右边的是在网上买的超声测距模块,十几块钱一个。


DSC_2321.jpg

(背面写的是made in italy,但愿吧)


得到Arduino单片机之后,上Arduino官方网站下载Arduino开发环境:
XXXXXXXXXXXXXXXXX/en/Main/Software


选择windows,下载。
zip文件直接解压。在解压后的文件夹找到drivers文件夹,
选择里面的XXXXXXXXXXf文件,右键,安装驱动程序。


然后就可以把arduino连到电脑的usb口,电脑应该能够成功识别插入的是Arduino.


然后运行arduino.exe:
QQ截图20130423154229.jpg



在菜单里面选择你的arduino型号:
QQ截图20130423154658.jpg



接下来就要输入代码。代码是C语言的语法,不过不会C语言也没关系。在菜单里面找到blink,打开最简单的例子:


QQ截图20130423155629.jpg



(待续
+10  科创币    justinpiggy    2013/04/23 已补充注释
+100  科创币    拔刀斋    2013/04/23 非常详细的入门教程
+10  科创币    yurifreeman    2013/04/24 怀念啊,我的激活帖就是用areuino做的超声波测距。
+1  科创币    布布卡    2013/07/31 Arduino单片机+1
来自:电子信息 / 电子技术
31
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
novakon 作者
11年1个月前 IP:未同步
518878
QQ截图20130423160158.jpg

这就是blink程序。

程序中灰色的字是注释,也就是和程序无关的说明性文字。写注释的方法:用/*和*/包住一段文字,或者在某一行的开头加入两个斜杠//

点击upload按钮,就可将程序编译并上传到arduino上面开始运行。
QQ截图20130423160422.jpg

如果上传失败,检查这里,看有没有给当前arduino使用的usb口打钩
QQ截图20130423160759.jpg

(待续
+30
科创币
极度深寒
2013-04-23
正需要这玩意..谢
+20
科创币
ry7740kptv
2013-04-23
很不错
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy
11年1个月前 IP:未同步
518879
这个Made In Italy是不可能的。。。原产意大利的价格是18欧元,也就是100多块钱。你的这个是国产兼容板,但是Arduino这个遵循CC,所以没问题,质量好的国产也非常棒,没必要买原产的。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy
11年1个月前 IP:未同步
518881
/*这里分享我的代码
在Arduino Mega 2560上测试通过
由于该超声波模块工作电流很小,所以尝试用Arduino的GPIO供电,测试没问题,好处是可以直接把模块插Arduino板上而不需要转接杜邦线。
使用时候注意更改自己板上插模块的PowerPin,GroundPin,TrigPin和EchoPin,还有室内温度。
Upload完成后点右上角Serial Monitor就可以看到快速刷新的串口距离数据。修改REFRESH 20为其他数字得到不同刷新率,单位ms
我有另外一个版本是用DS18B20获取温度再补偿的并输出在12864LCD上,由于本贴讨论超声波,所以固定温度,串口输出结果。*/

#define REFRESH 20 //设置REFRESH表示20
int TrigPin=51;  //声明整型变量TrigPin为51
int EchoPin=49;  //声明整型变量EchoPin为49
int PowerPin=53; //声明整型变量PowerPin为53
int GroundPin=47; //声明整型变量GroundPin为49
long time,temp; //声明长整型变量time(存储8个脉冲时间),temp室内温度
double distance; //声明双精度浮点变量,存储距离数据

void setup(){
  pinMode(PowerPin,OUTPUT); //设置PowerPin为输出模式,用来给超声波模块提供VCC,作为电源+
  pinMode(GroundPin,OUTPUT); //设置GroundPin为输出模式,用来超声波模块提供GND,作为电源-
  digitalWrite(PowerPin,HIGH); //初始化PowerPin,使得电压为5V,作为电源+
  digitalWrite(GroundPin,LOW); //初始化GroundPin,使得电压为0V,作为电源-
  pinMode(TrigPin,OUTPUT);  //设置TrigPin为输出模式,用来触发模块发射超声波
  pinMode(EchoPin,INPUT);  //设置EchoPin为输入模式,用来接受脉冲时长
  temp=20; //初始化室内温度为20摄氏度
  XXXXXXXXXgin(9600); //初始化串口输出,波特率为9600
}

void loop(){
  digitalWrite(TrigPin,HIGH); //设置TrigPin为高电平
  delayMicroseconds(50); //等待50us
  digitalWrite(TrigPin,LOW); //设置TrigPin为低电平,以上3步在TrigPin上输出50us的脉冲,触发模块工作
  time=pulseIn(EchoPin,HIGH,10000); //在EchoPin上等待高电平脉冲,超过10ms没有收到就继续运行,收到就返回脉冲长度并赋值给time
  distance=(331.3+(0.606*temp))*(time)/20000; //通过time和temp计算距离,注意8个脉冲,超声波来回
  XXXXXXXXXint(distance); //通过串口输出距离
  XXXXXXXXXintln(); //通过串口输出换行符
  delay(REFRESH); //等待REFRESH时间后继续运行loop()
  }
+1
科创币
novakon
2013-04-23
这是教程贴,如果要插楼,务必补上对程序的说明。没有注释的程序网上是很多的。
+1
科创币
novakon
2013-04-23
已经补上,赞扬
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
11年1个月前 IP:未同步
518882
blink程序运行后,应该能够看到arduino开发板上面的led灯在闪动,每秒钟切换一次状态(明/暗)。

下面是对blink程序的解释:

/*
  Blink
  将一个LED不断地点亮、熄灭,每秒钟切换一次,重复不断地运行。
*/

// 大多数的Arduino板子的13号针脚,都连接了一个LED灯。
// 现在要定义一个叫led的整数型(int)变量,值为13;
int led = 13;

// 下面是叫做setup的函数。每当板子通电或者重启时,运行一次这个函数里面的代码,而且只运行一次。
void setup() {                
  // 这是pinMode函数,用来调整针脚的工作方式。函数有两个参数,一个是针脚的号码,一个是工作方式。
  // led代表13号针脚,这个脚的另一头通常连接了板子上的一个LED灯。OUTPUT表示输出模式,即这个脚输出一个电压,这个电压可以是0V,也可以是芯片供电电压5V
  pinMode(led, OUTPUT);    
}

// 而loop函数在setup函数之后运行,但是loop函数会不断地、一次又一次地循环运行。
void loop() {
  digitalWrite(led, HIGH);   // digitalWrite函数的意思是,向某个针脚写入输出的状态。HIGH代表高电平。
//这句话就将第13号针脚设为5V电压,LED灯就亮了。
  delay(1000);               // delay函数代表延时等待,单位是毫秒。等待1000毫秒就是1秒钟。也就是让单片机休息一秒钟
  digitalWrite(led, LOW);    // 向13号针脚写入低,也就是设为0V电压。这一步就关掉了led
  delay(1000);               // 再等待一秒
//到此为止,循环执行。
}


QQ截图20130423162839.jpg



此时我们将程序中的delay(1000); 都改成delay(100); 然后上传到arduino,就会看到LED灯闪得更快了,每0.1秒改变一次状态。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy
11年1个月前 IP:未同步
518885
回 4楼(novakon) 的帖子
纠一个错哦

  digitalWrite(led, HIGH);   // digitalWrite函数的意思是,向某个针脚写入输出的状态。HIGH代表高电平。
//这句话就将第13号针脚设为3.3V电压,LED灯就亮了。


Arduino使用的都是AVR单片机,然后供电一般都是5V,HIGH代表的是高电平,是5V,所以如果把LED直接接13脚和GND上,时间长了LED会过热烧毁,而13号脚本身板载一个LED,这个LED有限流电阻,所以没问题。整个Arduino板上只有3.3V那个接口是3.3V,来自板载LDO,用来对外供电。


XXXXXXXXXX原文:
When a pin is configured to OUTPUT with pinMode, and set to HIGH with digitalWrite, the pin is at 5 volts. In this state it can source current, e.g. light an LED that is connected through a series resistor to ground, or to another pin configured as an output, and set to LOW.

人肉翻译:
当一个引脚用pinMode函数设置为输出模式,并且用digitalWrite函数设置为高电平输出,那么这个引脚电压为5V。在这个状态下这个引脚可以输出电流,比如点亮一个通过电阻连接到地或者另一个设置为输出低电平的引脚的LED。
+100
科创币
novakon
2013-04-23
是的,输出电压确实是5V,我写错了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
11年1个月前 IP:未同步
518890
如果能够成功地运行blink程序,并且通过修改参数改变LED灯的闪烁频率,就算是成功地给Arduino编程了。

下面介绍这个教程的主角,超声波模块:
DSC_2321.jpg
图上标出了四个脚的名称,vcc trig echo gnd

然后将它插在我的leonardo板子的2-5脚上。0和1脚要作为和计算机之间串口通信用的针脚,保留不用。
DSC_2323.jpg

那么介绍一下这个超声波模块的用法。首先vcc脚连5V电压,gnd脚连0V电压供电。当trig脚接收到高电平(也就是当单片机向trig脚输出一个高电压)的时候,会向前方发射一个超声波信号。

发射信号完毕,模块会通过echo脚,向单片机发送高电平;当超声波反射信号接收到之后,模块又会把echo脚设为低电平。我们只要测量echo脚电压变化的间隔时间,就可以知道超声波在空气中从发射到返回花掉的时间,也就可以计算出距离了。

下面给出程序。
(待续
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
11年1个月前 IP:未同步
518897
int ssgnd=5; //首先为了程序看着方便,定义若干针脚。gnd是5, echo是4, trig 是3, vcc是2.
int ssecho=4;
int sstrig=3;
int ssvcc=2;
//前缀ss是supersonic的意思,不加也可以。

void setup() {                
  pinMode(ssgnd,OUTPUT);
  pinMode(sstrig,OUTPUT);
  pinMode(ssecho,INPUT); //除了echo脚设成输入模式(INPUT),其他都设为输出模式。因为我们要检测echo脚的电平变化,所以设成输入模式。
  pinMode(ssvcc,OUTPUT);

  digitalWrite(ssvcc,HIGH); //将vcc脚设为高电压5V,给超声波模块供电。
  XXXXXXXXXgin(9600); //启用串口(虽然是通过usb连接模拟的),速率为9600字每秒。
}

这里讲一下串口。我们用串口将信息发回到电脑,在电脑上用串口查看程序就可以看到单片机发来的信息。
比如我测量到了距离信息,我就可以把这个距离数值不断地发回到电脑上,这样一来就可以实时观察它的变化。

(待续
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
11年1个月前 IP:未同步
518903
int supersonicread()
//这里我定义了一个函数,叫做supersonicread,顾名思义就是读取超声波传感器数值。
//函数前面的int表示这个函数返回一个整数。
{
   digitalWrite(sstrig,HIGH); // 将trig脚电压设为高
  digitalWrite(sstrig,LOW); //将trig脚电压设为低,这样就向模块发送了一个信号,让模块发射超声波。
  int echotime=pulseIn(ssecho,HIGH); //定义一个叫做echotime(回声时间)的量,并让它等于pulseIn函数的返回值。这里介绍一下pulseIn函数。

pulseIn(abc,HIGH) 代表在abc针脚上,等待一个高电压脉冲(等待电压由低变高,又由高变低)。然后返回一个值,这个值代表两次电压变化经过的时间,单位是微秒(microseconds, us).

pulseIn(abc,LOW)代表等待一个低电压脉冲,其他一样。
所以在程序里面写int echotime=pulseIn(ssecho,HIGH);  就代表我在ssecho脚上,等待电压由低变高(发射了超声波),开始计时,然后等待电压由高变低(收到了超声波),停止计时,然后把经过的时间写到echotime变量里面去。

  return echotime; //return 命令 表示把一个数作为这个函数的返回值。我们把echotime,也就是回声时间,作为这个函数返回的数值。
}

然后是程序主干,也就是loop函数。

void loop() {
  int microseconds=supersonicread(); //定义一个叫microseconds变量,令它的值等于supersonicread函数的返回值。我们知道supersonicread的返回值,是超声波从发射到回声所经过的时间,单位是微秒。所以现在microseconds变量里面就保存了这个时间。
  XXXXXXXXXint(microseconds); //XXXXXXXXXint代表从串口输出文字(这样我们就可以用电脑接收)。先输出微秒值;
  XXXXXXXXXint("us,"); //再输出单位符号
  float centimeters=microseconds/58.0; //定义一个叫做centimeters的float(浮点数,也就是带有小数部分的数)类型的变量,并让它的值等于计算出的距离,单位是厘米。这里的换算关系很简单,微秒/1000000=秒,厘米/100=米,声速是每秒3xx米,而声音传播的路程是实际距离的两倍……
  XXXXXXXXXint(centimeters); //从串口输出厘米值
  XXXXXXXXXint("cm.\\n"); //输出单位符号厘米,最后面的斜杠n代表回车符号
  delay(100);//延迟100毫秒,然后循环。
}
QQ截图20130423173055.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
11年1个月前 IP:未同步
518906
上传程序到你的arduino板子,开始运行,会听到超声模块发出疙瘩声。

然后在arduino开发界面找到串口查看程序:

QQ截图20130423173838.jpg

就能看到源源不断的输出了。
QQ截图20130423173952.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
11年1个月前 IP:未同步
518940
吐槽一下,LZ的C代码,和Arduino全C++的库格格不入。

Playground的NewPing库
XXXXXXXXXXXXXXXXXXXXXXXXXXXX/Code/NewPing

Methods

sonar.ping(); - Send a ping, returns the echo time in microseconds or 0 (zero) if no ping echo within set distance limit
sonar.ping_in(); - Send a ping, returns the distance in inches or 0 (zero) if no ping echo within set distance limit
sonar.ping_cm(); - Send a ping, returns the distance in centimeters or 0 (zero) if no ping echo within set distance limit
sonar.ping_median(iterations); - Do multiple pings (default=5), discard out of range pings and return median in microseconds
XXXXXXXXnvert_in(echoTime); - Converts microseconds to distance in inches
XXXXXXXXnvert_cm(echoTime); - Converts microseconds to distance in centimeters
sonar.ping_timer(function); - Send a ping and call function to test if ping is complete.
XXXXXXXXeck_timer(); - Check if ping has returned within the set distance limit.
timer_us(frequency, function); - Call function every frequency microseconds.
timer_ms(frequency, function); - Call function every frequency milliseconds.
timer_stop(); - Stop the timer.
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
laji3865689
11年1个月前 IP:未同步
518973
Leonardo才40多?
为毛我的UNO都花了180多。。。[s:225]
据说Leonardo还可以软件设置成USB HOST,一次满足你两个愿望
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
11年1个月前 IP:未同步
518988
引用第10楼warmonkey于2013-04-23 19:10发表的  :
吐槽一下,LZ的C代码,和Arduino全C++的库格格不入。

Playground的NewPing库
XXXXXXXXXXXXXXXXXXXXXXXXXXXX/Code/NewPing

.......


吐个槽哈。
从【代码越短越好】的角度来看,当然应该用人家写好的类库。
在这个教程里,我写了一个函数,没有用人家写好的库来演示,是希望没有单片机基础/单片机基础很差的同学,通过阅读我的代码,掌握数字输入、输出等等功能的基本用法。如果只是纯粹演示类库,两句话就搞掂了,人家还没弄清楚怎么回事呢。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
11年1个月前 IP:未同步
518990
引用第11楼laji3865689于2013-04-23 20:50发表的  :
Leonardo才40多?
为毛我的UNO都花了180多。。。[s:225]
据说Leonardo还可以软件设置成USB HOST,一次满足你两个愿望




是的,leonardo可以把自己模拟成USB鼠标键盘,这貌似是其他arduino上没有的功能。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
口贝
11年1个月前 IP:未同步
519005
这个可以说下模块制作完毕后的预计使用数据吗,比如测距距离速度等
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
10班陈大葱22号
11年1个月前 IP:未同步
519054
前段时间用超声波测距,实在是无奈了,哥们测到的是在其探头测距扇区内最近的与之垂直物体的距离,也就是说测到的不知道是哪,测个墙距还行,可上方前面伸出机械手就傻逼了。最后还是得换会自己做的激光测距,虽然远处分辨率降到厘米级了但至少知道测的是哪
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
量子隧道
11年1个月前 IP:未同步
519062
有趣。害的老夫这种10多年没玩单片机的都想练练了。两位能否给稍微讲讲arduino板的选购指导?比如说,性能高些选哪种,低些选哪种;IO多些选哪种,少些选哪种,等等,多谢[s:274]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yurifreeman
11年1个月前 IP:未同步
519064
怀念啊,我的激活帖就是用areuino做的超声波测距。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
11年1个月前 IP:未同步
519067
回 15楼(10班陈大葱22号) 的帖子
1超声测距也是厘米级精度
2那个毕竟只是A超的设计,也只能测扇形
3可以考虑加入复杂的信号处理算法来辨识目标
4激光测距可以考虑加入调制
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
10班陈大葱22号
11年1个月前 IP:未同步
519161
回 18楼(warmonkey) 的帖子
看到有声波频率是300kHz的超声波测距头买,看说明书它的指向就很好,但是只能测1.2m&2000¥+一个.......于是就算了......
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
量子隧道
11年1个月前 IP:未同步
519311
回 楼主(novakon) 的帖子
NOVACON你好,请站内消息我一下,多谢!我的浏览器不知为什么不能发消息了,但是能回。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
量子隧道
11年1个月前 IP:未同步
519385
大神们请问下,leonardo和2560的主要区别是什么?另外还看到一个UNO,一般入门用哪个好些?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
www1988
11年1个月前 IP:未同步
519419
回 6楼(novakon) 的帖子
呃,能看见KC有玩ARDUINO的同伴很高兴,大概扫了一眼程序,没有发现滤波的部分,我以前做的时候,没有滤波代码的话,发现数据抖动很厉害
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
11年1个月前 IP:未同步
520000
回 16楼(量子隧道) 的帖子
关于arduino选购:

我也是第一次买arduino。arduino本身并没有多大区别,无非是有的型号可以usb直接下载,有的型号要麻烦一点点,还有就是运行速度的差别。
arduino从性能和针脚数量上来讲是不怎么样,唯一的优点是编程门槛低。

选型可以去官网参考一下。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
量子隧道
11年1个月前 IP:未同步
520424
回 23楼(novakon) 的帖子
好的,多谢。我买了MEGA2560玩一玩。主要看中了他的IO多,程序空间大,这样今后的项目可以重复利用。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
daphigee
11年1个月前 IP:未同步
521731
made in italy[s:274]。含税价40大洋[s:230]
开个玩笑。教程不错。楼主的超声波模块后面的芯片是不是打磨了的?有图纸没?感觉现在都是现成的模块,插上就用的,有点知其然不知其所以然啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
lnjzghy
11年1个月前 IP:未同步
521773
留个记号,有空搞一个玩
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
11年1个月前 IP:未同步
524654
回 25楼(daphigee) 的帖子
网上卖这个模块的就有资料,具体你翻一下。XXXXXXXXXXXXXXXXXXXXX/file/id_XXXXXXXXXXXXXXXXXXXXml
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
hmjack2008
11年1个月前 IP:未同步
525096
原来是靠 Pin-2脚输出做为供电.
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
10年7个月前 IP:未同步
650916
这是一个好帖,希望多一些这样的教程。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
bg8npk
10年6个月前 IP:未同步
656370
测试发现,304所录音室对于超声波吸收效果好得很[s:3]
77ec5502tw1eb7nu65sbvj21kw0w0guk.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
novakon
学者 机友 笔友
文章
1256
回复
8385
学术分
16
2008/03/29注册,2年3个月前活动

已走,勿送

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}