国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SR501人體紅外模塊

這篇具有很好參考價值的文章主要介紹了SR501人體紅外模塊。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

人體紅外模塊 是一種能夠檢測人或動物發(fā)射的紅外線而輸出電信號的傳感器。廣泛應(yīng)用于各種自動化控制裝置中。比如常見的樓道自動開關(guān)、防盜報警等。


一、SR501模塊介紹

引腳 : VCC,OUT, GND

功能 :一種常見的人體紅外傳感器模塊,用于檢測人體的活動。

紅外感應(yīng)原理 :SR501 模塊內(nèi)部包含一個紅外傳感器探測單元,該單元可以檢測環(huán)境中的紅外輻射變化。即使在黑暗中,人體也會通過輻射紅外能量來體現(xiàn)溫度差異。

  • 靜止?fàn)顟B(tài)(無人靠近)時,OUT 引腳通常為電平。
  • 當(dāng)有人體靠近時,OUT 引腳通常會從低電平變?yōu)?mark>高電平。

2 個電位器 : 可以通過電位器實現(xiàn)封鎖時間和檢測距離的調(diào)節(jié) ( 延時控制,距離調(diào)節(jié) )。

SR501人體紅外模塊,linux 驅(qū)動實戰(zhàn),sr501,人體紅外模塊,linux,驅(qū)動開發(fā)SR501人體紅外模塊,linux 驅(qū)動實戰(zhàn),sr501,人體紅外模塊,linux,驅(qū)動開發(fā)

二、設(shè)備樹添加節(jié)點

配置設(shè)備樹需要對 GPIO 引腳 以及相關(guān)的 pincontrol 配置。由于本實驗是使用 SR501 模塊,所以不需要配置 pincontrol 。

通過 SR501人體紅外模塊 的原理圖得到 該模塊 高電平有效。我將其接到開發(fā)板的 gpio4-19 引腳。
compatible :用于 和 驅(qū)動程序進(jìn)行匹配。
使用 gpio4 組的 19 號引腳。(每一組有 32 個引腳)

SR501人體紅外模塊,linux 驅(qū)動實戰(zhàn),sr501,人體紅外模塊,linux,驅(qū)動開發(fā)

三、驅(qū)動程序

  1. 定義字符設(shè)備結(jié)構(gòu)體。
    由于 使用 模塊 SR501,只需要讀出引腳電平即可。
static struct file_operations sr501_ops={
	.owner = THIS_MODULE,
    .read  = sr501_read,
};
  1. 實現(xiàn) read 函數(shù)。

wait_event_interruptible(sr501_wq, sr501_data); : 這是一個等待隊列的函數(shù)調(diào)用。當(dāng)前執(zhí)行的線程(或進(jìn)程)進(jìn)入睡眠狀態(tài),直到滿足指定的條件。

sr501_wq :等待隊列頭對象。

sr501_data 是條件。如果 sr501_data 為真(非零),表示數(shù)據(jù)已經(jīng)準(zhǔn)備好,線程可以繼續(xù)執(zhí)行。否則,線程將進(jìn)入睡眠狀態(tài),并被放入等待隊列。
copy_to_user 函數(shù)的作用是將內(nèi)核空間中的數(shù)據(jù)復(fù)制到用戶空間的緩沖區(qū)(buf)中。

static wait_queue_head_t sr501_wq;		// 定義隊列頭

static ssize_t sr501_read (struct file *file, char __user *buf, size_t size, loff_t *oddset)
{
	int err;
	int len = (size < 4) ? size : 4;
	wait_event_interruptible(sr501_wq, sr501_data);		/* 無數(shù)據(jù)休眠,有數(shù)據(jù)喚醒 */
	err = copy_to_user(buf, &sr501_data, len);
	sr501_data = 0;
	return len;
}
  1. 定義一個platform_driver
    sr501_table 數(shù)組 用于和設(shè)備樹里的 信息進(jìn)行匹配。
    匹配成功后 直接調(diào)用 sr501_probe 函數(shù)。
static const struct of_device_id sr501_table[] = {
	{ .compatible = "my,sr501"},
	{},
};

static struct platform_driver sr501_driver = {
	.driver = {
		.name		= "sr501",
		.of_match_table = sr501_table,
	},
	.probe			= sr501_probe,
	.remove			= sr501_remove,
};
  1. 注冊一個 file_operations 結(jié)構(gòu)體,platform_driver。
    在 入口函數(shù)里進(jìn)行注冊,在出口函數(shù)里進(jìn)行 卸載。

init_waitqueue_head:這是一個內(nèi)核函數(shù),用于初始化一個等待隊列頭對象。等待隊列頭用于管理等待隊列。
&sr501_wq:這是等待隊列頭對象的地址。

static int sr501_init(void)  
{
	int err;
	major = register_chrdev(0, "sr501", &sr501_ops);
	class = class_create(THIS_MODULE, "sr501_class");
	err = PTR_ERR(class);   
	if (IS_ERR(class)) {
		printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
		unregister_chrdev(major, "sr501");
		return -1;
	}
	
	platform_driver_register(&sr501_driver);
	
	init_waitqueue_head(&sr501_wq);						// 初始化等待隊列頭
	return 0;
}
static void sr501_exit(void)  
{
	platform_driver_unregister(&sr501_driver);
	class_destroy(class);
	unregister_chrdev(major, "sr501");
}
  1. 實現(xiàn) probe 函數(shù)。
    當(dāng)設(shè)備樹 和 驅(qū)動和程序匹配成功后調(diào)用 probe 函數(shù)。

gpiod_get :從設(shè)備樹里獲取 GPIO 引腳信息。
==gpiod_direction_input ==: 設(shè)置引腳方向。()輸入
gpiod_to_irq :獲得中斷號。
request_irq : 申請中斷。第二個參數(shù)是 中斷處理函數(shù)。

static int sr501_probe(struct platform_device *pdev)
{
	sr501_gpio = gpiod_get(&pdev->dev, NULL, 0);		//獲取引腳信息
	gpiod_direction_input(sr501_gpio);		// 設(shè)置為 輸入引腳

	irq = gpiod_to_irq(sr501_gpio);			// 獲取中斷號
	request_irq(irq, sr501_isr, IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING, "sr501", NULL);		//請求中斷

    device_create(class, NULL, MKDEV(major, 0), NULL, "sr501"); 		//創(chuàng)建設(shè)備節(jié)點
	return 0;
}
  1. 在 probe 里申請了,就需要在 remove 函數(shù)里進(jìn)行卸載.
	device_destroy(class,MKDEV(major, 0));
	free_irq(irq, NULL);
	gpiod_put(sr501_gpio);
  1. 中斷處理函數(shù)。
    wake_up 喚醒 在 read 函數(shù)里休眠的隊列。將 sr501_data 賦值為 1 ,則 read 函數(shù)里條件為真,執(zhí)行程序。
static irqreturn_t sr501_isr(int irq, void *dev_id)
{
	sr501_data = 1;
	wake_up(&sr501_wq);			/* 喚醒隊列 */
	return IRQ_HANDLED;
}

四、測試程序

首先判斷參數(shù) argc 是否正確。
O_RDWR 可讀可寫的方式打開設(shè)備節(jié)點,獲取設(shè)備句柄 fd 。
while 循環(huán)里讀引腳電平,當(dāng) 引腳為高電平 并且 正確讀出時,打印有人靠近。文章來源地址http://www.zghlxwxcb.cn/news/detail-601215.html

	if(argc != 2)
	{
		printf("Usage: %s <dev>\n",argv[0]);
		return -1;
	}

	//打開文件
	fd = open(argv[1], O_RDWR);
	if(-1 == fd)
	{
		printf("open %s error!\n",argv[1]);
		return -1;
	}

	while (1)
	{
		ret = read(fd, &val, 4);
		if((1 == val) && (ret == 4))
			printf("有人靠近!\n");
	}
	close(fd);

五、上機(jī)測試及效果

  1. 將 .ko 文件加載到內(nèi)核。
    使用 insmod 命令可以將 KO 文件加載到內(nèi)核中,使模塊生效。而使用rmmod 命令可以卸載已加載的模塊,lsmod 命令 可以觀察已加載到內(nèi)核的文件。
    SR501人體紅外模塊,linux 驅(qū)動實戰(zhàn),sr501,人體紅外模塊,linux,驅(qū)動開發(fā)
  2. 執(zhí)行測試程序。 /dev/sr501 是在驅(qū)動程序中創(chuàng)建的設(shè)備節(jié)點 ( device_create )。
    當(dāng)有人靠近時,通過讀出引腳電平的變化判斷是否有人靠近。
    SR501人體紅外模塊,linux 驅(qū)動實戰(zhàn),sr501,人體紅外模塊,linux,驅(qū)動開發(fā)

總結(jié)

到了這里,關(guān)于SR501人體紅外模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • HC-SR501人體感應(yīng)模塊介紹

    HC-SR501人體感應(yīng)模塊介紹

    HC-SR501人體感應(yīng)模塊簡介 ? ? ? HC-SR501是基于紅外線技術(shù)的自動控制模塊,采用德國原裝進(jìn)口 LHI778 探頭設(shè)計,靈敏度高,可靠性強(qiáng),超低電壓工作模式,廣泛應(yīng)用于各類自動感應(yīng)電器設(shè)備,尤其是干電池供電的自動控制產(chǎn)品。 HC-SR501人體感應(yīng)模塊實物 HC-SR501人體感應(yīng)模塊電氣

    2024年02月01日
    瀏覽(23)
  • 熱釋電人體探測模塊HC-SR501

    ? ? ? 熱釋電紅外傳感器是一種能檢測人或動物發(fā)射的紅外線而輸出電信號的傳感器。早在1938年,有人提出過利用熱釋電效應(yīng)探測紅外輻射,但并未受到重視,直到六十年代,隨著激光、紅外技術(shù)的迅速發(fā)展,才又推動了對熱釋電效應(yīng)的研究和對熱釋電晶體的應(yīng)用。它正在被

    2024年02月08日
    瀏覽(16)
  • 基于STM32F103C8T6(HAL庫)的HC-SR501紅外人體傳感及HC-SR04超聲波測距

    基于STM32F103C8T6(HAL庫)的HC-SR501紅外人體傳感及HC-SR04超聲波測距

    一、基于STM32F103C8T6最小系統(tǒng)板和STM32CubeMX實現(xiàn)LED燈循環(huán)閃爍 二、基于STM32F103C8T6和STM32CubeMX實現(xiàn)UART串口通信數(shù)據(jù)收發(fā) 三、實戰(zhàn)小例程 基于STM32F103C8T6最小系統(tǒng)板和STM32CubeMX驅(qū)動WS2812B光立方 四、基于STM32F103C8T6最小系統(tǒng)板HAL庫CubeMX驅(qū)動HC-SR501紅外人體傳感模塊 五、基于STM32F103C8

    2023年04月17日
    瀏覽(84)
  • 紅外人體感應(yīng)傳感器SR602模塊使用說明

    紅外人體感應(yīng)傳感器SR602模塊使用說明

    ?一.HC-SR602模塊 ? ? ? ? 紅外人體感應(yīng)傳感器HC-SR602是基于紅外線技術(shù)的自動控制模塊,專用于感應(yīng)周圍人體的存在。該模塊相較于HC-SR501,靈敏度較高,抗干擾能力大,且簡單易用。 二.HC-SR602模塊主要參數(shù) 工作電壓:3.3V-15V; 靜態(tài)電流:20uA; 感應(yīng)距離:最大5M;建議0-

    2024年02月06日
    瀏覽(14)
  • Linux驅(qū)動基礎(chǔ)(HC-SR04超聲波模塊)

    本篇文章將講解HC-SR04超聲波模塊的驅(qū)動程序編寫,有了上篇SR501模塊驅(qū)動程序編寫的基礎(chǔ)后這篇文章大家將會學(xué)的非常輕松。 HC-SR04超聲波模塊是一種常用于距離測量和障礙物檢測的模塊。它通過發(fā)射超聲波信號并接收回波來計算所測量物體與傳感器之間的距離。 HC-SR04超聲波

    2024年02月05日
    瀏覽(25)
  • 基于STM32的超聲波HC-SR04和紅外測距模塊測量距離的實驗對比(HAL庫)

    基于STM32的超聲波HC-SR04和紅外測距模塊測量距離的實驗對比(HAL庫)

    ????????前言: 本文主要是為了 日常普通場合 下測距做的 對比實驗 ,本實驗主要包含 2種模塊 : 超聲波測距模塊 (HC-SR04)和 紅外測距模塊 (SHARP GP2Y0A21YK0F)。兩種模塊不管是測距原理和編程實驗方式都是不相同的,其測距效果也存在很大差異。感興趣的讀者朋友,

    2023年04月27日
    瀏覽(40)
  • STM32驅(qū)動HC-SR04超聲波模塊

    STM32驅(qū)動HC-SR04超聲波模塊

    本篇文章將帶大家使用HAL庫驅(qū)動HC-SR04超聲波模塊。超聲波模塊作為智能小車必備的模塊,要學(xué)習(xí)智能小車的同學(xué)是必須掌握好這個模塊的使用的。 HC-SR04是一種常用的超聲波傳感器模塊,也被稱為超聲波測距模塊,廣泛應(yīng)用于各種自動化控制和測距系統(tǒng)中。它通常由超聲波發(fā)

    2024年02月09日
    瀏覽(29)
  • 【STM32篇】驅(qū)動HC_SR04超聲波測距模塊

    【STM32篇】驅(qū)動HC_SR04超聲波測距模塊

    CH_SR04 HC_SR04超聲波測距模塊可提供 2cm-400cm 的非接觸式測距感測功能,測距精度高達(dá)3mm;模塊包括超聲波發(fā)射器,接收器與控制電路。 基本工作原理: (1)采用IO口TRIG觸發(fā)測距,需要給最少10us的高電平。 (2)模塊自動發(fā)送8個40kHz的方波,自動檢測是否有信號返回。 (3)有

    2024年02月17日
    瀏覽(22)
  • 【arduino】HC-SR04超聲波測距模塊的驅(qū)動與使用

    【arduino】HC-SR04超聲波測距模塊的驅(qū)動與使用

    超聲波是振動頻率高于20KHZ的機(jī)械波。它具有頻率高、波長短、繞射現(xiàn)象小、方向性好、能夠成為射線而定向傳播等特點應(yīng)用廣泛,適合大學(xué)生、工程師、技術(shù)人員以及電子愛好者等操作。 首先超聲波測距模塊長這個樣 硬件名稱:HC-SR04超聲波傳感器 工作電壓:直流(DC):

    2024年02月09日
    瀏覽(25)
  • 【CubeMX配置STM32驅(qū)動超聲波模塊(HC-SR04)】

    【CubeMX配置STM32驅(qū)動超聲波模塊(HC-SR04)】

    一、CubeMX配置STM32 1、選擇定時器 選擇 輸入捕獲模式 預(yù)分頻設(shè)置為71,向上計數(shù),自動重裝值65535 然后將名字改為 ECHO 2、配置TRIG口 這里的端口使用其它空閑的IO口是可以的,設(shè)置為輸出模式,其它配置不需要改變,最主要的是 User Label 那兒,需要設(shè)置為 TRIG ,因為驅(qū)動函數(shù)里

    2024年02月02日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包