基于51单片机、SG90舵机的笔记本电脑遥控远程开机方案

1、前提:现在的电视就是个广告播放器,所有内容都要开会员,并且电视自带软件看视频总是有一种模糊的感觉。家中闲置一Z480笔记本电脑,连接HDMI可输出1080P分辨率,日常看电视足够了。于是将笔记本电脑屏幕拆下,笔记本主机放到电视后面,刚好可以完美隐藏各种线。

2、问题:每次开机都要去电视后面按按钮,实在不符合本人懒惰的习惯,因此要想个办法远程开机。但是经过查询,笔记本电脑不支持上电开机,也不支持网络开机,比较好的办法就是每次关机都点睡眠,然后通过鼠标就可以开机,虽说点睡眠也不是很麻烦,一个批处理就能搞定的事情,但鼠标总是误触,或者有时候睡眠会死机,不太完美。

3、想法:经过网上查询,现成的遥控手指需要搭配网关,一套需要将近200元,太贵。正好手头有个射频继电器可以用来控制电路通断。因此想自己做一个遥控开机的装置。

4、实现:网上教程很多,舵机原理不再赘述,我本人也不明白。在开发板上连接好线路,程序烧进去,开始测试。程序自己当然是不可能写的,照搬的这位老哥的程序,一字未改。用51单片机怎么玩SG90舵机?_单片机 舵机_知名摸鱼大学生的博客-CSDN博客https://blog.csdn.net/m0_56852164/article/details/124915860

 5、意外:

①通过在程序中加入一些让LED闪烁的代码来判断程序是否运行,发现SG90舵机和开发板共用同一个电源时,程序不运行且舵机发出“咔咔”声音,纹丝不动。

②开发板连接电脑USB电源,舵机连接另一个电脑USB电源,运行一切正常。(但我总不可能用台式机USB当电源吧,,那就太扯了,我要的是远程控制)

③开发板和舵机共用手机5V充电器电源,程序可以运行,但是舵机无规律抖动。

④用不知道哪里拆下来的12V电源适配器连接7805做电源(7805用法查百度,简单的很)连接舵机,电脑USB电源连接开发板,舵机依然无规律抖动。

⑤自己焊了一个51小板子(如下图),有上电自动复位电路。用手机5V电源适配器做电源,舵机和单片机都连接在小板子上,程序依然无法正确运行,舵机偏转角度错误,运行异常。

⑥经过网上查询,说是手机或者光猫等电源适配器输出的不是稳定的电压,所以又在板子上加了7805稳压器,使用不知道哪里拆下来的某调制解调器的12V电源适配器做电源(7805不能用5V电源起码要7V以上),这次终于运行正常了。原来是电压不稳造成SG90舵机不知道该怎么转。(我猜的)

 由于本人学艺不精,,也许是个很简单的问题,却费了这么大劲才找到原因。归根到底是电压不稳,一开始没有稳压模块。来来回回折腾三天才找到办法。

然后有人要问,怎么远程控制呢,这就要用到 我之前买的遥控继电器。

       这个东西有很多功能,可以延时,可以自锁,可以点动。把他接到电源上,就可以遥控控制电路的通断了。

    当然用ESP8266应该更方便,还能连接wifi直接手机控制远程控制,但是本人手头没有ESP8266的板子,只有51单片机,所以才用了这个办法。终于不用再去电视后面找按钮了!

 演示:

 代码来自:https://blog.csdn.net/m0_56852164/article/details/124915860

#include "reg52.h"
 
sbit sg90_con = P1^0;
int jd;
int cnt = 0;
 
 
void Delay2000ms()		//@11.0592MHz
{
	unsigned char i, j, k;
 
	i = 15;
	j = 2;
	k = 235;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
 
 
void Time0Init()
{
	TMOD = 0x01;
	//2. ???,???0.5??
	TL0=0x33;
	TH0=0xFE;
	TR0 = 1;
	TF0 = 0;
	ET0 = 1;
	EA = 1;
}
 
void Delay300ms()		//@11.0592MHz
{
	unsigned char i, j, k;
 
	i = 3;
	j = 26;
	k = 223;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
 
void main()
{
	Delay300ms();
	Time0Init(); 
	jd = 1;      
	cnt = 0;
	sg90_con = 1;
	
	//??????????
	while(1){
		P0 = 0XFF;
		jd = 3; 
		cnt = 0;
		Delay2000ms();
		Delay2000ms();
		P0 = 0X00;
		jd = 1; //0?
		cnt = 0;
		Delay300ms();
	}
}
 
void Time0Handler() interrupt 1
{
	cnt++;  
	//?????
	TL0=0x33;
	TH0=0xFE;
	if(cnt < jd){
		sg90_con = 1;
	}else{
		sg90_con = 0;
	}
	
	if(cnt == 40)
    {
		cnt = 0;  
		sg90_con = 1;
	}
		
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值