Steins;Lab

  • 项目
  • 折腾
  • 笔记
  • 图册
  • 杂谈
  • 文章索引 - 博主自荐博文
  • 关于/留言
Steins;Lab
某团的自留研究所
  1. 首页
  2. 项目跟踪
  3. 正文

[趴会儿Project]No.001 一种外置的暴力宿舍关灯装置(2016.8.27更新完成)

2016年8月18日 8991点热度 2人点赞 16条评论

一种外置的暴力宿舍关灯装置,使用外部机械舵机结构,免改造,易安装,实现方法暴力。人来即拆,人走即安。

done

 

20160817140114


 

本项目隶属于趴会儿Project项目组,详见[企划]趴会儿Project–宿舍床上趴到底&解放双腿计划

项目编号001,分类为照明控制。

thumb

 

本项目后来拿去参加比赛搞事了,详见[趴会儿Project]关于《掌握光明的女神★反物联网反智能暴力外置关灯器V2.0 by 夜露死苦》的一点后续

%e5%b9%bb%e7%81%af%e7%89%871

 

目录

  • 1.背景&使用场景
  • 2.简述
  • 3.内容
    • 3.1部件选用
      • 3.1.1 主控
      • 3.1.2 外部配件
    • 3.2 连接
    • 3.3代码段
    • 3.4 遇到的问题
  • 4.装配与效果
  • 5.参考资料

1.背景&使用场景

也许你经常会遇到,宿舍11点熄灯,世界暗了。但是,大家沉浸在黑暗世界中,无人顾及将小小的照明开关关掉。

第二天5点30,李毅大帝降临人间,瞬间整个宿舍骤亮。

最终对灯光最敏感的人惺惺下地关灯。

没错,你是不是对灯光最敏感的那个倒霉鬼?说的就是你!

 


2.简述

本作品崇尚一种暴力的解决方法,基本思路即为外置舵机,直接定向旋转物理性地控制照明开关。

仔细想想,毕竟大学宿舍,时不时有消防安全检查。一方面如果拆了照明系统开关,内置继电器控制,是不科学的。一方面会被物业找麻烦,另一方面,也是最重要的,不安全,私改线路要是打火,太危险了。

为了避免发生不必要的麻烦,一种可即使拆卸的外置设备,打游击战还是很有必要的。

 


3.内容

3.1部件选用

3.1.1 主控

主控采用Arduino UNO R3 初期调试用。如果后期想要集成便携属性,减小体积可转为Arduino Nano等小体积版。

如果不考虑功耗,更进一步压缩成本,其实更可选用STC51系列的单片机系统。这玩意便宜,大家都用他来入门。只需把舵机的PWM等代码移植即可。

目前先不考虑大系统集成

----↓2016.8.27更新----

使用了兼容的Nano作为主控,缩小体积。

 

3.1.2 外部配件

想要在床上便捷关灯(或者故意先上床然后画蛇添足多此一举用遥控关灯),必不可少的是遥控模块。我也考虑了一些,比如红外模块。但是红外模块的迷之距离和遮挡失效属性,弃用。后来还是用315Mhz的遥控模块吧。没准甚至能楼下关灯。

最终采用  2272-M4 非锁四路无线遥控套件

因为对加密性没有要求,315Mhz的遥控对于我来说反而越模块化、越易用越好。

模块焊盘固定码,解码器和遥控器配好,按键既有电平变化。

20160817222417

 

舵机采用SG90微型舵机即可。

 

3.2 连接

本实例连接很简单。5v取自主控板,分别给接收解码模块和微型舵机供电(事实上,板载可驱动一个sg90微型舵机)。

IO口分别连接。

 

3.3代码段

v1.0

/*
  趴会儿Project项目集 http://steinslab.io/archives/752
  No.001 一种外置的暴力宿舍关灯装置
  详见http://steinslab.io/archives/749

  [email protected]
*/

#include <Servo.h>
#include <Enerlib.h>

Servo switcher;
Energy energy;
int pos = 20;
int sig = 2;
int flag = 0;
int flag_temp = 0;

void signal0()
{

  delay(1);
  if (digitalRead(sig) == 1)
  {

    Serial.println("Signal!");
    flag = (!flag);
    while (digitalRead(sig) == 1);

  }
  changePosition();
  flag_temp = flag;
  Serial.println("tempflag!");
  switcher.write(pos);
  delay(2000);




}

int changePosition()
{

  if (flag != flag_temp)
  {
    Serial.println("change position!");
    if (flag == 0)
    {
      pos = 0;
      Serial.println("change position0!");

      return 0;
    }
    if (flag == 1)
    {
      pos = 180;
      Serial.println("change position1!");
      return 1;
    }



  }

}
void setup() {
  Serial.begin(9600);
  Serial.println("Servo test!");
  switcher.attach(9);
  pinMode(sig, INPUT);
  switcher.write(90);
  attachInterrupt(0, signal0, RISING);
  delay(2000);
}

void loop() {
  delay(1000);
  energy.PowerDown();



}

 

----2016.8.27更新调试完毕的代码段v2.0----

/*
  趴会儿Project项目集 http://steinslab.io/archives/752
  No.001 一种外置的暴力宿舍关灯装置 2.0
  详见http://steinslab.io/archives/749

  [email protected]
*/

#include <Servo.h>
#include <Enerlib.h>

Servo switcher;
Energy energy;
int pos = 20;
int sig = 2;
int flag = 0;
int flag_temp = 0;

void signal0()
{

  if (digitalRead(sig) == 1)
  {

    Serial.println("Signal!");
    flag = (!flag);
    while (digitalRead(sig) == 1);

  }
  changePosition();
  flag_temp = flag;
  Serial.println("tempflag!");





}

int changePosition()
{

  if (flag != flag_temp)
  {
    Serial.println("change position!");
    if (flag == 0)
    {
      pos = 20;
      Serial.println("change position0!");


    }
    if (flag == 1)
    {
      pos = 150;
      Serial.println("change position1!");

    }

    switcher.write(pos);
    //delay(2000);  不要在中断中使用delay()
    return 0;


  }

}
void setup() {
  Serial.begin(9600);
  Serial.println("Servo test!");
  switcher.attach(9);
  pinMode(sig, INPUT);
  switcher.write(90);
  attachInterrupt(0, signal0, RISING);
  delay(2000);
}

void loop() {
  delay(1000);
  setup();
  if (switcher.read() == 90)
    energy.PowerDown();



}

3.4 遇到的问题

首先我尝试使用Arduino自带的Servo库,但是遇到了很大的问题。servo最终定位的舵机异常抖动,貌似未归位发出异响,这是我无法忍受的。后来换了自写的PWM控制函数,仍然抖动。

后来使用了中断方式获取遥控的信号。为了避免发出异响,并考虑到以后,为了免外接电源需加入省电模式,省电模式可由0号中断唤醒。两者配合最终解决问题。

----2016.8.27----

优化了代码。最后调试由于旋转尺度不够,不能保证将开关撞击到指定位置,设置了多余的转动角度。

优化了代码,使舵机臂每次击打后归中,为手动开灯关灯让路。

 

 

 

4.装配与效果

测试环境下的效果

http://steinslab.io/wp-content/uploads/2016/08/MOV_1253_clip_Compress.mp4

关灯的原理太清楚了,让舵机微微转动15度即可关灯/开灯。

最终我再用pvc板子包装一下,换成Arduino nano或者51。舵机做个衣服上用的粘贴,就成最终版了。

 

----2016.8.27-----

为了防止人工开关灯时破坏装置,对用于关灯开灯的舵机臂进行改造。使用自带的两个云台壁,用跳线铰接,简单实用。

20160827002933

换用了兼容的第三方nano。在面包板上进行测试。(视频大小1.3MB)

http://steinslab.io/wp-content/uploads/2016/08/MOV_1266_Compress-1.mp4

测试完毕后,把各个组件在洞洞板上集成。背面焊了跳线,将5v和gnd引出。同时导出D9IO口用于舵机控制,给以后改造留个余地。背面焊工就不漏了,班门弄斧(视频大小1.5MB)

http://steinslab.io/wp-content/uploads/2016/08/MOV_1273_Compress-1.mp4

done20160827003705

最终效果:(视频大小2MB)

http://steinslab.io/wp-content/uploads/2016/08/MOV_1274_clip_Compress-1.mp4

MOV_1274_c_clip

5.参考资料

[1] 認識與實驗Arduino的睡眠模式

这家网站以图解的方式将睡眠模式讲得很透彻!赞!

[2] ArduinoNano 中文Wiki

[3] Arduino外部中断的使用

相关

标签: 趴会儿Project 项目追踪
最后更新:2022年7月11日

SPtuan

SPtuan 是一名普通的工程师,最大的愿望是度过平静的时光。 研究生时做过一点自动驾驶算法,当前对网络/后端技术比较感兴趣。

点赞
< 上一篇
下一篇 >
0 0 votes
文章评分
Subscribe
Login
提醒
guest

guest

16 评论
最新
最旧 得票最多
Inline Feedbacks
View all comments
HawkMaple
HawkMaple
5 年 之前

我在想 既然都做到这了 为什么不搞个定时熄灯就关灯的代码呢???

0
回复
SPtuan
SPtuan
作者
Reply to  HawkMaple
5 年 之前

@HawkMaple 终于有人能精确吐槽这点了!这才是这篇文章最大的槽点啊!其实这个装置是用来报复室友的 :lol:

0
回复
Clarke
Clarke
6 年 之前

好厉害~我都看不懂!

0
回复
SPtuan
SPtuan
作者
Reply to  Clarke
6 年 之前

@Clarke 哈哈,学习单片机顺便做的一点小项目。这边一般都放比较严肃的。一时脑抽或者各种奇奇怪怪的东西都堆到misaka.cc了

0
回复
printempw
printempw
6 年 之前

哦哦!好有意思啊
懒才是第一生产力(笑

0
回复
SPtuan
SPtuan
作者
Reply to  printempw
6 年 之前

@printempw 大佬!!
后来我发现了,即使有了这个装置,每天早上醒来按动遥控按钮的还是我…好气啊 :eek:

0
回复
monian
monian
6 年 之前

666,简单粗暴

0
回复
大树
大树
6 年 之前

点赞

0
回复
SPtuan
SPtuan
Reply to  大树
6 年 之前

@大树 贵客啊!欢迎欢迎!啪啪啪啪啪

0
回复
大树
大树
Reply to  SPtuan
6 年 之前

@SPtuan 哈哈哈哈没有没有!其实总来看这些看不太懂的东西的~

0
回复
你冰雪可爱得崔神
你冰雪可爱得崔神
6 年 之前

水水水,狠狠狠,看不懂

0
回复
SPtuan
SPtuan
作者
Reply to  你冰雪可爱得崔神
6 年 之前

@你冰雪可爱得崔神 ?????鏌

0
回复
星月
星月
6 年 之前

棒棒的

0
回复
SPtuan
SPtuan
作者
Reply to  星月
6 年 之前

@星月 终于上来了!

0
回复
fandy
fandy
6 年 之前

狠

0
回复
SPtuan
SPtuan
作者
Reply to  fandy
6 年 之前

@fandy 别灌水啊喂()

0
回复

SPtuan

SPtuan 是一名普通的工程师,最大的愿望是度过平静的时光。
研究生时做过一点自动驾驶算法,当前对网络/后端技术比较感兴趣。

  • 1.背景&使用场景
  • 2.简述
  • 3.内容
    • 3.1部件选用
      • 3.1.1 主控
      • 3.1.2 外部配件
    • 3.2 连接
    • 3.3代码段
    • 3.4 遇到的问题
  • 4.装配与效果
  • 5.参考资料
分类
  • Uncategorized
  • 图册
  • 学习笔记
  • 库
  • 折腾
  • 杂谈
  • 瞎**扯
  • 碎碎念
  • 项目跟踪
最近评论
三五笑话 发布于 2 个月前(01月23日) 不知道说啥,开心快乐每一天吧!
rantrism 发布于 3 个月前(01月13日) 您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体...
qw23123 发布于 4 个月前(11月22日) 你好,我也是这个问题,怎么确认板子有没有正常联网呢?板子用网线和电脑连了,可以正常使用pynq的ju...
luckf 发布于 5 个月前(11月12日) 谢谢博主的回复,的确是pynq-z2开发板的时间有问题,后来自己发现pynq板没有联网,连上网以后便...
luckf 发布于 5 个月前(11月11日) pip安装时报错信息“ERROR: Command errored out with exit st...
热门主题 & 页面
  • 100 Go Mistakes 阅读随记 - 01 Code and project organization
  • 基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量
  • 在Nvidia Jetson Xavier开发者套件上启用CAN总线
  • 100 Go Mistakes 阅读随记 - 03 Control Structures, Functions and Methods, Error Management
  • 关于/留言
归档
  • 2023年1月
  • 2022年12月
  • 2022年10月
  • 2022年9月
  • 2022年7月
  • 2022年6月
  • 2022年2月
  • 2021年12月
  • 2021年11月
  • 2021年2月
  • 2021年1月
  • 2020年9月
  • 2020年4月
  • 2020年3月
  • 2020年1月
  • 2019年8月
  • 2019年7月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2018年12月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年5月
  • 2018年2月
  • 2018年1月
  • 2017年11月
  • 2017年9月
  • 2017年7月
  • 2017年6月
  • 2017年5月
  • 2017年4月
  • 2017年3月
  • 2017年2月
  • 2017年1月
  • 2016年12月
  • 2016年11月
  • 2016年10月
  • 2016年9月
  • 2016年8月
  • 2016年7月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年9月

友情链接:

Blessing Studio hahaschool 绘枫和畅 魔法少女Fandy monsterx Clarke的博客 Luminous’ Home Shintaku's Blog
蓝黑的博客 haruhi.club Yida的博客 Bo2SS 涛叔 TangBao 同和君Hocassian

Steins;Lab 团子神社 zdfmc.net

steinslab.io built with ❤. Thanks for all 2015-2022.

Theme Kratos Made By Seaton Jiang

wpDiscuz