教你用arduino的触控功能做一个实用的颈椎病预防器

2018-11-261.2万
AI 快速预览详细 收起
本文介绍了如何使用Arduino的capacitance库和电机驱动制作一个颈椎前倾提醒器。主要硬件包括Arduino、电机驱动和马达。当用户的头部触碰触控点时,马达会左右转动3次,提醒用户调整姿势。这个项目适用于学生和长时间伏案工作者,可以帮助预防颈椎病。此外,如果拥有3D打印机,还可以打印一个直线驱动结构,进一步完善颈部支撑效果。


我知道学生一般写作业都会写很晚。头不由自主的会前倾。时间久了颈椎久会变形。时间长了就是颈椎病。
这里教大家做一个颈椎前倾的物理提醒。它主要是通过Arduino的capacitance库来实现这个功能的。这里并不讲cap库的具体用法。大家有兴趣可以去google搜索。
除了这个触控功能,主要硬件就是arduino和一个电机驱动以及一个马达。这个马达可以在人的头部碰到触控点后。向左转3转。然后停止,再向右转3转。回到原位。当再次触发触控时候,马达重复以上动作。

教你用arduino的触控功能做一个实用的颈椎病预防器图1

一年前做的。电机可以用小型的减速电机。如果有3D打印机,打印一个直线驱动结构。用这个机构把弯曲的颈部给顶回来。那就更完美了。我没有3D打印机。无法完美呈现这种效果。
注意:主控可以是很小的arduino mini电机驱动也可以用很小的。完全可以做成可穿戴的。程序就是这个程序。’

[mw_shl_code=applescript,true]//============add lib=============
#include <CapSense.h>
//============define================
#define ON_PERCH 1500
#define CAP_SENSE 30
#define ONBOARD_LED 13
//==========placement=============
CapSense foil_sensor = CapSense(10,7);

int perch_value = 0;
const int AIA = 5;  
const int AIB = 6;  
byte speed = 250;
//==========setup===========
void setup()
{
// for serial window debugging
Serial.begin(9600);
// set pin for onboard led
//pinMode(ONBOARD_LED, OUTPUT);
pinMode(AIA, OUTPUT); // set pins to output
pinMode(AIB, OUTPUT);
}
//============functions=============
void SendPerchAlert(int perch_value, int perch_state)
{
digitalWrite(AIA, perch_state ? HIGH : LOW);
digitalWrite(AIB, perch_state ? HIGH : LOW);
if (perch_state)
Serial.print("Perch arrival event, perch_value=");
else
Serial.print("Perch departure event, perch_value=");
Serial.println(perch_value);
}
//============loop============
void loop() {

delay(1000);

perch_value = foil_sensor.capSense(CAP_SENSE);
switch (perch_state)
{
case 0:
if (perch_value >= ON_PERCH)
{
perch_state = 1;
SendPerchAlert(perch_value, perch_state);
}
break;
case 1:
if (perch_value < ON_PERCH)
{
perch_state = 0;
SendPerchAlert(perch_value, perch_state);
forward();
  delay(2000);
  STOP();
  Serial.println( "Indietro..." );
  backward();
  delay(2000);
  STOP();
}
break;
}
}
void backward()
{
  analogWrite(AIA, 0);
  analogWrite(AIB, speed);
}
void forward()
{
  analogWrite(AIA, speed);
  analogWrite(AIB, 0);
}
void STOP()
{
  analogWrite(AIA, 0);
  analogWrite(AIB, 0);
  delay (4000);
}[/mw_shl_code]

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -