基于STM32的智能手表

这篇具有很好参考价值的文章主要介绍了基于STM32的智能手表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于stm32的智能手表,智能手表,stm32,单片机

 

本设计由STM32单片机作为控制中枢,来驱动温度采集模块、液晶显示系统、记步模块、血氧心率检测模块等一系列系统。由用户操作屏幕,手环进行一系列的功能。

1、通过DS3231时钟模块实现日期显示功能。

2、通过MAX30100传感器实时监测血氧数据。

3、通过ADXL345检测使用者运动步数。

4、使用液晶显示屏实时显示日期、时间、步数、心率、以及体温等。

5、在设计电路时,保证系统的长久性、稳定性以及高效性。

总体的流程框图如图:

基于stm32的智能手表,智能手表,stm32,单片机

 

温度采集使用的是DS18B20,使用方便测量人体温度作为数据

 基于stm32的智能手表,智能手表,stm32,单片机

  其驱动代码则为:

#include "ds18b20.h"
#include "delay.h"	
  
//复位DS18B20
void DS18B20_Rst(void)	   
{                 
	DS18B20_IO_OUT(); //SET PA0 OUTPUT
  DS18B20_DQ_OUT=0; //拉低DQ
  DelayUs(750);    //拉低750us
  DS18B20_DQ_OUT=1; //DQ=1 
	DelayUs(15);     //15US
}
//等待DS18B20的回应
//返回1:未检测到DS18B20的存在
//返回0:存在
u8 DS18B20_Check(void) 	   
{   
	u8 retry=0;
	DS18B20_IO_IN();//SET PA0 INPUT	 
    while (DS18B20_DQ_IN&&retry<200)
	{
		retry++;
		DelayUs(1);
	};	 
	if(retry>=200)return 1;
	else retry=0;
    while (!DS18B20_DQ_IN&&retry<240)
	{
		retry++;
		DelayUs(1);
	};
	if(retry>=240)return 1;	    
	return 0;
}
//从DS18B20读取一个位
//返回值:1/0
u8 DS18B20_Read_Bit(void) 			 // read one bit
{
    u8 data;
	DS18B20_IO_OUT();//SET PA0 OUTPUT
    DS18B20_DQ_OUT=0; 
	DelayUs(2);
    DS18B20_DQ_OUT=1; 
	DS18B20_IO_IN();//SET PA0 INPUT
	DelayUs(12);
	if(DS18B20_DQ_IN)data=1;//数据1
    else data=0;//数据0	 
    DelayUs(50);           
    return data;
}
//从DS18B20读取一个字节
//返回值:读到的数据
u8 DS18B20_Read_Byte(void)    // read one byte
{        
    u8 i,j,dat;
    dat=0;
	 for (i=1;i<=8;i++) 
	 {
        j=DS18B20_Read_Bit();  
        dat=(j<<7)|(dat>>1);
   }						    
    return dat;
}
//写一个字节到DS18B20
//dat:要写入的字节
void DS18B20_Write_Byte(u8 dat)     
 {             
    u8 j;
    u8 testb;
	DS18B20_IO_OUT();//SET PA0 OUTPUT;
    for (j=1;j<=8;j++) 
	{
        testb=dat&0x01;
        dat=dat>>1;
        if (testb) 
        {
            DS18B20_DQ_OUT=0;// Write 1
            DelayUs(2);                            
            DS18B20_DQ_OUT=1;
            DelayUs(60);             
        }
        else 
        {
            DS18B20_DQ_OUT=0;// Write 0
            DelayUs(60);             
            DS18B20_DQ_OUT=1;
            DelayUs(2);                          
        }
    }
}
//开始温度转换
void DS18B20_Start(void)// ds1820 start convert
{   						               
    DS18B20_Rst();	   
		DS18B20_Check();	 
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0x44);// convert
} 
//初始化DS18B20的IO口 DQ 同时检测DS的存在
//返回1:不存在
//返回0:存在    	 
u8 DS18B20_Init(void)
{
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //使能PORTA口时钟 
	
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;				//PORTA11 推挽输出
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		  
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);

 	GPIO_SetBits(GPIOA,GPIO_Pin_11);    //输出1

	DS18B20_Rst();

	return DS18B20_Check();
}  
//从ds18b20得到温度值
//精度:0.1C
//返回值:温度值 (-550~1250) 
short DS18B20_Get_Temp(void)
{
    u8 temp;
    u8 TL,TH;
	short tem;
    DS18B20_Start ();                    // ds1820 start convert
    DS18B20_Rst();
    DS18B20_Check();	 
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0xbe);// convert	    
    TL=DS18B20_Read_Byte(); // LSB   
    TH=DS18B20_Read_Byte(); // MSB  
	    	  
    if(TH>7)
    {
        TH=~TH;
        TL=~TL; 
        temp=0;//温度为负  
    }else temp=1;//温度为正	  	  
    tem=TH; //获得高八位
    tem<<=8;    
    tem+=TL;//获得底八位
    tem=(float)tem*0.625;//转换     
	if(temp)return tem; //返回温度值
	else return -tem;    
} 
 
 

设置的四个按键分别为设置数据、加、减、重置步数。

#include "key.h"
#include "delay.h"
 	    
void KEY_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//使能PORTA,PORTC时钟

	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
 	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOB, GPIO_Pin_9);//初始化为低电平
} 

u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode&&KEY0!=0&&KEY3!=0)key_up=1;  //支持连按		  
	if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==0||KEY4==0))
	{
		DelayMs(65);//去抖动 
		key_up=0;
		if(KEY0==0)return 1;
		else if(KEY1==0)return 2;
		else if(KEY2==0)return 3;
		else if(KEY3==0)return 4;
		else if(KEY4==0)return 5;
	}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)key_up=1; 	     
	return 0;// 无按键按下
}

采用MAX30102心率血氧模块采集心率信号,MAX30102是一款同时对脉搏血氧和心率监测于一体的模块。具有尺寸小、低功耗、精度高等优点,其硬件内部包含LED、光电探测器、光学元件和具有表境光抑制功能的低噪声电子设备。(使用的是驱动代码,就不放在里面了)

MAX30102工作原理:

光溶积法:用人体组织在血管搏动时造成透光率不同来进行脉搏和血氧饱和度测量的。

光源:采用对动脉血中氧合血红蛋白(HbO2)和血红蛋白,(Hb)有选择性的特定波长的发光了极管。
    透光率转化为电信号:脉搏动充血容积化导到光的透光率发生改变,此时由光电变换接收经人体组织反射光线,转变为电信号并将其放大和输出。

基于stm32的智能手表,智能手表,stm32,单片机

 步数使用的是ADXL345,具体我也没了解,只是听说比MPU6050好用,步数,摔倒啥的。就不细说了。

时钟我没有用32写的,一开始没想那么多,就拿了DS1302时钟模块,直接外接,因为我用的是32的最小系统板(硬件不到家)。断电没法保护,所以要是外加电池,那就太麻烦了,所以我直接给板子通电!外接时钟模块。用的也是商家给的,我自己写闰年啥的。

void DisplayTime(void)//显示时间函数
{
	  unsigned char i=0,x=0;
	  u16 nian_temp;
	
	  if(setn==0)DS1302_DateRead(&SysDate);//读时间
	  nian_temp=2000+SysDate.year;
		if((nian_temp%400==0)||((nian_temp%100!=0)&&(nian_temp%4==0)))  //判断是否为闰年
				p_r=1;
		else
				p_r=0;
	  if(setn<8)
		{
	  OLED_ShowChar((x++)*8,0,'2',2,setn+1-1);
	  OLED_ShowChar((x++)*8,0,'0',2,setn+1-1);
	  OLED_ShowChar((x++)*8,0,SysDate.year/10+'0',2,setn+1-1);
	  OLED_ShowChar((x++)*8,0,SysDate.year%10+'0',2,setn+1-1);
	  OLED_ShowChar((x++)*8,0,'-',2,0);
	  OLED_ShowChar((x++)*8,0,SysDate.mon/10+'0',2,setn+1-2);
	  OLED_ShowChar((x++)*8,0,SysDate.mon%10+'0',2,setn+1-2);
	  OLED_ShowChar((x++)*8,0,'-',2,0);
	  OLED_ShowChar((x++)*8,0,SysDate.day/10+'0',2,setn+1-3);
	  OLED_ShowChar((x++)*8,0,SysDate.day%10+'0',2,setn+1-3);
	  
	  OLED_ShowCN(i*16+88,0,0,setn+1-4);//测试显示中文:周
	  switch(SysDate.week)
    {
    case 1: 
			  OLED_ShowCN(i*16+104,0,1,setn+1-4);//测试显示中文:一
        break;

    case 2: 
			  OLED_ShowCN(i*16+104,0,2,setn+1-4);//测试显示中文:二
        break;

    case 3: 
			  OLED_ShowCN(i*16+104,0,3,setn+1-4);//测试显示中文:三
        break;

    case 4: 
			  OLED_ShowCN(i*16+104,0,4,setn+1-4);//测试显示中文:四
        break;

    case 5: 
			  OLED_ShowCN(i*16+104,0,i+5,setn+1-4);//测试显示中文:五
        break;

    case 6: 
			  OLED_ShowCN(i*16+104,0,6,setn+1-4);//测试显示中文:六
        break;

    case 7: 
			  OLED_ShowCN(i*16+104,0,7,setn+1-4);//测试显示中文:日
        break;
    }
    x=0;
		
	  OLED_ShowChar((x++)*8,2,SysDate.hour/10+'0',2,setn+1-5);
	  OLED_ShowChar((x++)*8,2,SysDate.hour%10+'0',2,setn+1-5);
	  OLED_ShowChar((x++)*8,2,':',2,0);
	  OLED_ShowChar((x++)*8,2,SysDate.min/10+'0',2,setn+1-6);
	  OLED_ShowChar((x++)*8,2,SysDate.min%10+'0',2,setn+1-6);
	  OLED_ShowChar((x++)*8,2,':',2,0);
	  OLED_ShowChar((x++)*8,2,SysDate.sec/10+'0',2,setn+1-7);
	  OLED_ShowChar((x++)*8,2,SysDate.sec%10+'0',2,setn+1-7);
	}
}

 读取心率模块显示我就不放了,按键模块拿出来参考吧。

void KeySettings(void)//按键设置函数
{
	  unsigned char keynum = 0,i;
	
	  keynum = KEY_Scan(1);//获取按键值
		if(keynum==1)//设置
		{
				setn++;

				if(setn > 11)
				{
						setn=0;
						sendSetValueFlag=1;
						OLED_CLS();//清屏
						for(i=0;i<2;i++)OLED_ShowCN(i*16+16,4,i+16,1);//测试显示中文:心率
						for(i=0;i<2;i++)OLED_ShowCN(i*16+79,4,i+20,1);//测试显示中文:步数
						OLED_ShowCentigrade(112, 2);    //℃
						DelayMs(50);
						Store_Data();
				}
				
			  if(setn==8)
				{
						OLED_CLS();//清屏
						for(i=0;i<4;i++)OLED_ShowCN(i*16+32,0,i+22,0);//测试显示中文:设置心率
					  for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+26,0);   //测试显示中文:下限
						for(i=0;i<2;i++)OLED_ShowCN(i*16,6,i+28,0);   //测试显示中文:上限
						OLED_ShowChar(34,4,':',2,0);
						OLED_ShowChar(34,6,':',2,0);
				}
				if(setn==10)
				{
						for(i=0;i<4;i++)OLED_ShowCN(i*16+32,0,i+34,0);//测试显示中文:设置温度
					  for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+26,0);   //测试显示中文:下限
						for(i=0;i<2;i++)OLED_ShowCN(i*16,6,i+28,0);   //测试显示中文:上限
						OLED_ShowChar(34,4,':',2,0);
						OLED_ShowChar(34,6,':',2,0);
				}

				DisplaySetValue();
		}
		if(keynum==2)//加
		{
				if(setn == 1)//设置年
				{
						SysDate.year ++;
						if(SysDate.year == 100)SysDate.year=0;
						DS1302_DateSet(&SysDate);//设置时间
				}
				if(setn == 2)//设置月
				{
						SysDate.mon ++;
						if(SysDate.mon == 13)SysDate.mon = 1;
						if((SysDate.mon==4)||(SysDate.mon==6)||(SysDate.mon==9)||(SysDate.mon==11))
						{
								if(SysDate.day>30)SysDate.day=1;
						}
						else
						{
								if(SysDate.mon==2)
								{
										if(p_r==1)
										{
												if(SysDate.day>29)
														SysDate.day=1;
										}
										else
										{
												if(SysDate.day>28)
														SysDate.day=1;
										}
								}
						}
						DS1302_DateSet(&SysDate);//设置时间
				}
				if(setn == 3)//设置日
				{
						SysDate.day ++;
						if((SysDate.mon==1)||(SysDate.mon==3)||(SysDate.mon==5)||(SysDate.mon==7)||(SysDate.mon==8)||(SysDate.mon==10)||(SysDate.mon==12))//大月
						{
								if(SysDate.day==32)//最大31天
										SysDate.day=1;//从1开始
						}
						else
						{
								if(SysDate.mon==2)//二月份
								{
										if(p_r==1)//闰年
										{
												if(SysDate.day==30)//最大29天
														SysDate.day=1;
										}
										else
										{
												if(SysDate.day==29)//最大28天
														SysDate.day=1;
										}
								}
								else
								{
										if(SysDate.day==31)//最大30天
												SysDate.day=1;
								}
						}
						DS1302_DateSet(&SysDate);//设置时间
				}
				if(setn == 4)//设置星期
				{
						SysDate.week ++;
						if(SysDate.week == 8)SysDate.week=1;
						DS1302_DateSet(&SysDate);//设置时间
				}
				if(setn == 5)//设置时
				{
						SysDate.hour ++;
						if(SysDate.hour == 24)SysDate.hour=0;
						DS1302_DateSet(&SysDate);//设置时间
				}
				if(setn == 6)//设置分
				{
						SysDate.min ++;
						if(SysDate.min == 60)SysDate.min=0;
						DS1302_DateSet(&SysDate);//设置时间
				}
				if(setn == 7)//设置秒
				{
						SysDate.sec ++;
						if(SysDate.sec == 60)SysDate.sec=0;
						DS1302_DateSet(&SysDate);//设置时间
				}
				if((setn==8)&&(xinlvMax-xinlvMin>1))xinlvMin++;
				if((setn==9)&&(xinlvMax<300))xinlvMax++;
				if((setn==10)&&(tempMax-tempMin>1))tempMin++; 
				if((setn==11)&&(tempMax<999))tempMax++; 

				DisplaySetValue();
		}

		if(keynum==3)//减
		{
				if(setn == 1)//设置年
				{
						if(SysDate.year == 0)SysDate.year=100;
						SysDate.year --;
						DS1302_DateSet(&SysDate);
				}
				if(setn == 2)//设置月
				{
						if(SysDate.mon == 1)SysDate.mon=13;
						SysDate.mon --;
						if((SysDate.mon==4)||(SysDate.mon==6)||(SysDate.mon==9)||(SysDate.mon==11))
						{
								if(SysDate.day>30)
										SysDate.day=1;
						}
						else
						{
								if(SysDate.mon==2)
								{
										if(p_r==1)
										{
												if(SysDate.day>29)
														SysDate.day=1;
										}
										else
										{
												if(SysDate.day>28)
														SysDate.day=1;
										}
								}
						}
						DS1302_DateSet(&SysDate);
				}
				if(setn == 3)//设置日
				{
						SysDate.day --;
						if((SysDate.mon==1)||(SysDate.mon==3)||(SysDate.mon==5)||(SysDate.mon==7)||(SysDate.mon==8)||(SysDate.mon==10)||(SysDate.mon==12))
						{
								if(SysDate.day==0)
										SysDate.day=31;
						}
						else
						{
								if(SysDate.mon==2)
								{
										if(p_r==1)
										{
												if(SysDate.day==0)
														SysDate.day=29;
										}
										else
										{
												if(SysDate.day==0)
														SysDate.day=28;
										}
								}
								else
								{
										if(SysDate.day==0)
												SysDate.day=30;
								}
						}
						DS1302_DateSet(&SysDate);
				}
				if(setn == 4)//设置星期
				{
						if(SysDate.week == 1)SysDate.week=8;
						SysDate.week --;
						DS1302_DateSet(&SysDate);
				}
				if(setn == 5)//设置时
				{
						if(SysDate.hour == 0)SysDate.hour=24;
						SysDate.hour --;
						DS1302_DateSet(&SysDate);
				}
				if(setn == 6)//设置分
				{
						if(SysDate.min == 0)SysDate.min=60;
						SysDate.min --;
						DS1302_DateSet(&SysDate);
				}
				if(setn == 7)//设置秒
				{
						if(SysDate.sec == 0)SysDate.sec=60;
						SysDate.sec --;
						DS1302_DateSet(&SysDate);
				}
				if((setn==8)&&(xinlvMin>0))xinlvMin--;
				if((setn==9)&&(xinlvMax-xinlvMin>1))xinlvMax--;
				if((setn==10)&&(tempMin>0))tempMin--; 
				if((setn==11)&&(tempMax-tempMin>1))tempMax--; 

				DisplaySetValue();
		}
		if(keynum==4)//步数清零
		{
			 bushu = 0;
			 Store_Data();//存储数据
		}
}

总结 :

        采用STM32为主控,通过串口的方式将体温检测、血氧心率检测、运动步数的记录;显示采用I2C通信的OLED屏幕,可显示血氧等数据,各项指标基本完成。即包括年月日在内的时间显示、用户体温、血氧心率检测及步数显示。虽然满足了初始要求,但仍有不足。例如测得血氧数据时常不稳定以及无测试对象时,仍有数据显示。系统虽然满足了题目的要求,但其中人有一些不足,令人无法释怀,例如测得血氧数据时常不稳定以及无测试对象时,仍有数据显示。此外,由于时间原因,未能将其做成一款可穿戴产品,希望在未来可做进一步改进。谢谢观看!文章来源地址https://www.toymoban.com/news/detail-738622.html

到了这里,关于基于STM32的智能手表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机项目分享 基于Stm32的家庭智能监控系统 - 单片机 图像识别 人体检测 AI

    hr style=\\\" border:solid; width:100px; height:1px;\\\" color=#000000 size=1\\\" 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最

    2024年01月16日
    浏览(70)
  • 【毕业设计】基于单片机的智能鱼缸系统设计与实现 - 嵌入式 物联网 stm32 51单片机 智能鱼缸

    Hi,大家好,今天向大家介绍一个 单片机项目, 大家可用于 课程设计 或 毕业设计 基于单片机的智能鱼缸系统设计与实现 🔥 项目分享与指导: https://gitee.com/sinonfin/sharing 近年以来,随着我国综合实力飞速飙升,人们对物质和精神生活质量的要求也不断提升,各式各样的智能

    2024年02月04日
    浏览(85)
  • 基于51/STM32单片机的智能药盒 物联网定时吃药 药品分类

     功能介绍  以51/STM32单片机作为主控系统;   LCD1602液晶显示当前时间、温湿度、药品重量   3次吃药时间、药品类目和药品数量  HX711压力采集当前药品重量  红外感应当前药盒是否打开  DS1302时钟芯片显示当前年月日、时分秒、星期  DHT11采集当前环境温度和湿度       

    2024年02月19日
    浏览(45)
  • 物联网毕设 - 基于单片机的智能鱼缸系统设计与实现 - 嵌入式 物联网 stm32 51单片机 智能鱼缸

    Hi,大家好,今天向大家介绍一个 单片机项目, 大家可用于 课程设计 或 毕业设计 基于单片机的智能鱼缸系统设计与实现 🔥 项目分享与指导: https://gitee.com/sinonfin/sharing 近年以来,随着我国综合实力飞速飙升,人们对物质和精神生活质量的要求也不断提升,各式各样的智能

    2024年02月03日
    浏览(75)
  • 【毕业设计】基于单片机的智能温控农业大棚系统 - 物联网 stm32

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 基于单片机的智能温控农业大棚系统 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/125409052 近年来我国的温室控制取得了 长足的进步, 首先在

    2024年02月02日
    浏览(56)
  • 【单片机毕设选题】 基于Stm32的家庭智能监控系统 - 单片机 图像识别 人体检测 AI

    hr style=\\\" border:solid; width:100px; height:1px;\\\" color=#000000 size=1\\\" 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最

    2024年01月21日
    浏览(63)
  • 毕设开源 基于stm32的智能平衡小车 - 单片机 物联网嵌入式

    文章目录 0 前言 1 项目背景 2 设计思路 3 硬件设计 4 软件设计 4.2 直立控制程序设计 4.3 速度控制程序设计 4.4 方向控制程序设计 4.5 关键代码 5 最后 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这

    2024年02月22日
    浏览(60)
  • 基于STM32单片机和AD9850的智能DDS函数信号发生器

    CSDN话题挑战赛第2期 参赛话题:学习笔记 有一天,我在浏览CSDN时看到一篇关于 AD9850 的帖子。AD9850是一款可以产生1hz到40mhz左右正弦波的芯片。淘宝的产品经销商能够将芯片与提供 TTL 电平控制的小板配对,然后以令人难以置信的 60元(或更低!)的价格出售。 要控制 AD985

    2024年02月13日
    浏览(44)
  • 基于STM32单片机的智能家居环境监测与控制系统设计

    基于STM32单片机的智能家居环境监测与控制系统设计 摘要 :随着物联网技术的不断发展,智能家居环境监测与控制系统的应用越来越广泛。本文设计了一种基于STM32单片机的智能家居环境监测与控制系统,该系统能够实时监测环境中的温湿度和天然气浓度,并将数据显示在

    2024年04月25日
    浏览(50)
  • 毕业设计|基于STM32单片机的语音识别控制智能停车场设计

    演示视频 https://www.bilibili.com/video/BV1bC4y1579d/?spm_id_from=333.999.0.0vd_source=0fb8a603c3cd84c0c72e5fa5d4201605 本系统采用stm32f103c8t6单片机+晶振电路+复位电路+电源电路+车位检测电路+OLED显示电路+继电器控制电路+语音识别电路构成。 1,通过红外对管模块实时检测车位是否占用,车位分为

    2024年02月04日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包