本帖最后由 rexpie 于 2016-3-3 16:04 编辑  
 
最近颈椎腰椎告急,于是决定要开始矫正坐姿。 
 
知乎说好的椅子很重要。我一看Herman Miller Embody要5位数。呵呵。 
 
但是人体工学椅子好一点的上千,似乎会有用。但是!! 
 
我曾经特地观察过。在某高大上办公楼里面,办公椅清一色Herman Miller Aeron,正确使用推荐坐姿的,不到5%。几乎全部都弓背前倾,程度不一。 
 
注意正确坐姿: 
  
 
 
请问正在看帖子的你,是不是这样的: 
  
 
 
 
被我说中的继续往下看,坐姿正确的可以点右上角了。 
 
没事的我觉得你还可以抢救一下 
  
 
 
于是,我决定做个小东西提醒我自己: 
 
材料: 
超声波测距 x1 
Beetle 主控板 x1 
红外测距开关 x1 
蜂鸣器 x1 
充电宝 x1 
震动马达 (可选)(店长推荐) 
导线、铅丝、焊接工具不一而足 
 
先把测距用铅丝固定到椅子背面,最好和自己的后脑保持水平。 
  
 
把七七八八的东西绑到椅子边上。注意红外测距(右上角黄色部分)要调整好有效距离,能测出人是否坐着。 
  
 
蜂鸣器和震动马达、电池、beetle放一起。 
 所以为什么要用震动马达?蜂鸣器不够么? 
因为场景是办公室。蜂鸣器会吵同事啊。你喜欢鄙视的眼神是不是?  
 
我知道,我也觉得丑。无路赛。 
 
 
  
 
 
 
如果不想用充电宝,一根线连电脑也可以。 
 
听说有人要视频。 
没有视频。 
 
勉强画了个图。 
 
首先没人坐上去是不会触发警报的。没图。 
 
然后你坐直了也是不会触发警报的。如图。 
 
  
 
 
但是你坐姿有变就会触发警报。大概如图。 
  
 
 
 
 
 
大致代码如下,参数可调整。 
 
			
			
			- #define trigPin 4
 - #define echoPin 5
 - #define irPin 3
 - #define warnPin 2
 - 
 - int count = 0;
 - int countThreshold = 5;
 - int warnTime = 200;
 - 
 - int postureDistance = 20; //cm
 - int maxDistance = 3000;
 - 
 - void setup() {
 -   Serial.begin (9600);
 -   pinMode(trigPin, OUTPUT);
 -   pinMode(echoPin, INPUT);
 -   pinMode(irPin, INPUT);
 -   pinMode(warnPin, OUTPUT);
 - }
 - 
 - void loop() {
 - 
 -   long duration, distance;
 - 
 -   // for ultra sound distance sensor
 -   digitalWrite(trigPin, LOW);  
 -   delayMicroseconds(2); 
 -   digitalWrite(trigPin, HIGH);
 -   delayMicroseconds(10); 
 -   digitalWrite(trigPin, LOW);
 - 
 - 
 -   // head position
 -   duration = pulseIn(echoPin, HIGH);
 -   distance = (duration / 2) / 29.1;
 - 
 -   Serial.print(distance);
 -   Serial.println(" cm");
 - 
 -   // ir 0 means object detected, so someone is sitting
 -   int ir = !digitalRead(irPin);
 -   digitalWrite(13, ir);
 -   Serial.print("ir: ");
 -   Serial.println(ir);
 - 
 -   if (ir && distance > postureDistance && distance < maxDistance) {
 -     // accumulate count when person detected
 -     count++;
 -   } else {
 -     // cool down
 -       count = 0;
 -   }
 - 
 -   Serial.print("count:");
 -   Serial.println(count);
 -   
 -   delay(1000);
 - 
 -   if ( count >= countThreshold ) {
 -     // need to warn you
 -     digitalWrite(warnPin, HIGH);
 -     Serial.println("###########Warning!!#############");
 -     count = 0;
 -     delay(warnTime);
 -     digitalWrite(warnPin, LOW);
 -   } else {
 -     digitalWrite(warnPin, LOW);
 -   }
 - }
 
  复制代码
  
 
 
 
 
 
 
 |