這個(gè)項(xiàng)目是為了監(jiān)控用戶安全,傳感器集群收集并繪制盲點(diǎn)障礙物、輪椅速度和傾斜度的數(shù)據(jù)。
故事
許多醫(yī)院尤其是在當(dāng)前面臨的挑戰(zhàn)是人手不足,無(wú)法同時(shí)持續(xù)監(jiān)測(cè)每位患者。因此,我們著手開(kāi)發(fā)一個(gè)系統(tǒng),該系統(tǒng)可以通過(guò)使用三個(gè)傳感器和三個(gè)氬氣監(jiān)測(cè)輪椅的動(dòng)作來(lái)提醒醫(yī)院工作人員坐在輪椅上的病人可能有問(wèn)題。在目前的狀態(tài)下,該系統(tǒng)僅限于測(cè)量輪椅相對(duì)于地面的角度、輪椅的行駛速度以及它是否離物體太近。這些非常簡(jiǎn)單的讀數(shù)仍然會(huì)有很大幫助,因?yàn)獒t(yī)院工作人員可以根據(jù)需要將智能輪椅上的任何人所需的工作人員放松,并僅在輪椅本身向他們傳達(dá)患者需要幫助時(shí)才發(fā)送幫助。
	
硬件部件:
Particle Argon
Elegoo回避傳感器
Elegoo傾斜傳感器
慣性測(cè)量單元(IMU)(6個(gè)自由度)
5毫米LED:黃色
面包板
跳線
傳感器設(shè)置
作為 3 名團(tuán)隊(duì)成員,這款輪椅需要 3 個(gè)氬氣和 3 個(gè)傳感器。由于該輪椅的設(shè)計(jì)目的是監(jiān)測(cè)輪椅本身的狀態(tài),因此不需要生物識(shí)別傳感器,因?yàn)樵谠擁?xiàng)目中沒(méi)有對(duì)患者進(jìn)行測(cè)量。取而代之的是,加速度計(jì)用于測(cè)量輪椅速度,傾斜傳感器用于測(cè)量輪椅的角度,并且接近傳感器用于在輪椅即將與物體碰撞時(shí)發(fā)出警報(bào)。所有 3 個(gè)傳感器和氬氣都被塞進(jìn)一個(gè)盒子里,在實(shí)際操作中,盒子會(huì)固定在輪椅后部的車(chē)把下方,但這次演示由輪椅的騎手拿著。這個(gè)盒子如下圖所示,因?yàn)樗雌饋?lái)附在輪椅的靠背上。
	
	
實(shí)時(shí)數(shù)據(jù)
這個(gè)項(xiàng)目的一個(gè)重要特點(diǎn)是電路被設(shè)置為自己實(shí)時(shí)繪制數(shù)據(jù)。在測(cè)試日之前,代碼似乎正在運(yùn)行,并準(zhǔn)備好在電路激活后推出數(shù)據(jù)。這將由一個(gè) LED 表示,但在測(cè)試當(dāng)天,燈只閃爍一次,傳感器從未產(chǎn)生實(shí)時(shí)數(shù)據(jù)。由于這是唯一可以拍攝視頻的日子,因此必須丟棄實(shí)時(shí)數(shù)據(jù)部分,但可以在此處找到預(yù)先設(shè)置以接收數(shù)據(jù)的代碼和圖表。
	
代碼一、數(shù)據(jù)收集/繪圖和通訊
// 此#include語(yǔ)句是由粒子IDE自動(dòng)添加的
	#include 
	#include 
	TCPClient client;
	unsigned int myChannelNumber = 1358740; //話語(yǔ)信息
	const char * myWriteAPIKey = "Y0D0V28Q7URAHLPY"; // ThingSpeak信息
	int ObjectYes = 1;
	int ObjectNo = 0;
	int SpeedYes = 1;
	int SpeedNo = 0;
	int TiltYes = 1;
	int TiltNo = 0;
	void setup() {
	?
	Serial.begin(9600); ???
	????
	Particle.publish("PowerOn", PRIVATE);
	Particle.publish("CheckConnection", PRIVATE);
	????
	Particle.subscribe("ObjectY", WC1OY, MY_DEVICES);
	Particle.subscribe("ObjectN", WC2ON, MY_DEVICES);
	Particle.subscribe("SpeedY", WC3SY, MY_DEVICES);
	Particle.subscribe("SpeedN", WC4SN, MY_DEVICES);
	Particle.subscribe("TiltY", WC5TY, MY_DEVICES);
	Particle.subscribe("TiltN", WC6TN, MY_DEVICES);
ThingSpeak.begin(client);
}
void loop() {
	Particle.subscribe("ObjectY", WC1OY, MY_DEVICES);
	Particle.subscribe("ObjectN", WC2ON, MY_DEVICES);
	Particle.subscribe("SpeedY", WC3SY, MY_DEVICES);
	Particle.subscribe("SpeedN", WC4SN, MY_DEVICES);
	Particle.subscribe("TiltY", WC5TY, MY_DEVICES);
	Particle.subscribe("TiltN", WC6TN, MY_DEVICES);
	delay(500); // 數(shù)據(jù)收集緩沖區(qū)
}
	void WC1OY(const char *event, const char *data) {
	ThingSpeak.setField(1, ObjectYes); // 寫(xiě)入圖形數(shù)據(jù)
	ThingSpeak.writeFields(myChannelNumber, 1, myWriteAPIKey);
	delay(16000);
	}?
	void WC2ON(const char *event, const char *data) {
	ThingSpeak.setField(1, ObjectNo); // 寫(xiě)入圖形數(shù)據(jù)
	ThingSpeak.writeFields(myChannelNumber, 0, myWriteAPIKey);
	delay(16000); ???
	}?
	void WC3SY(const char *event, const char *data) {
	ThingSpeak.setField(2, SpeedYes);
	ThingSpeak.writeFields(myChannelNumber, 1, myWriteAPIKey);
	delay(16000); ???
	}?
	void WC4SN(const char *event, const char *data) {
	ThingSpeak.setField(2, SpeedNo);
	ThingSpeak.writeFields(myChannelNumber, 0, myWriteAPIKey);
	delay(16000); ???
	}?
	void WC5TY(const char *event, const char *data) {
	ThingSpeak.setField(3, TiltYes);
	ThingSpeak.writeFields(myChannelNumber, 1, myWriteAPIKey);
	delay(16000); ???
	}?
	void WC6TN(const char *event, const char *data) {
	ThingSpeak.setField(3, TiltNo);
	ThingSpeak.writeFields(myChannelNumber, 0, myWriteAPIKey);
	delay(16000); ???
	}?
代碼二、帶啟用功能的Argon 2回避傳感器
	int Detection = D6; // 回避傳感器
	int Enable = D7; // 避開(kāi)傳感器的開(kāi)/關(guān)引腳
	int Obj = HIGH; // 沒(méi)有障礙
	int NoObj = LOW; //障礙
	int val;
void setup() {
	pinMode(Detection, INPUT);
	pinMode(Enable, OUTPUT);
	digitalWrite(Enable, LOW);
Particle.subscribe("PowerOn", start, MY_DEVICES);
Serial.begin(9600);
}
	void loop() {
	????
	val = digitalRead(Detection);
	if (val == Obj) { // 沒(méi)有障礙
	????
	delay(50); //緩沖時(shí)間
	Particle.publish("ObjectN", PRIVATE);
	delay(50); // 傳感器休息時(shí)間
	????
	}
if (val == NoObj) {
	delay(50); //緩沖時(shí)間
	Particle.publish("ObjectY", PRIVATE);
	delay(50); // 傳感器休息時(shí)間
	}
	
	}
	void start(const char *event, const char *data) {
	????digitalWrite(Enable, HIGH);
	????
	}
代碼三、帶有Comms Check LED的Argon 3加速度計(jì)和傾斜傳感器
	// 此#include語(yǔ)句是由粒子IDE自動(dòng)添加的
	#include 
	#include 
	#define MPU 0x68 // 加速度計(jì)
	int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
	int Tilt = D2; // 傾斜銷(xiāo)
	int LED = D3; //連接指示
	int val; // 傾斜變量
	int VcX; //速度
	int VcY; // 速度
	int VcZ; // 速度
	int DeltaTime;
	int OldTime = 0;
	int NewTime = 60000;
	
	?
	void setup() {
	Serial.begin(9600);
	????
	Particle.subscribe("CheckConnection", test, MY_DEVICES);
	pinMode(Tilt, INPUT);
	pinMode(LED, OUTPUT);
	digitalWrite(LED, LOW);
	Wire.begin(); // 加速度計(jì)設(shè)置
	Wire.beginTransmission(MPU);
	Wire.write(0x6B);?
	Wire.write(0); ???
	Wire.endTransmission(true);
	DeltaTime = NewTime - OldTime; // 一分鐘的間隔,每60秒發(fā)送一次數(shù)據(jù)
	}
void loop() {
	??Wire.beginTransmission(MPU);
	??Wire.write(0x3B); ?
	??Wire.endTransmission(false);
	??Wire.requestFrom(MPU,12,true); ?
	??AcX=Wire.read()<<8|Wire.read(); ???
	??AcY=Wire.read()<<8|Wire.read(); ?
	??AcZ=Wire.read()<<8|Wire.read(); ?
	??GyX=Wire.read()<<8|Wire.read(); ?
	??GyY=Wire.read()<<8|Wire.read(); ?
	??GyZ=Wire.read()<<8|Wire.read();?
	??delay(500);
	??
	????VcX = AcX*(DeltaTime/1000);
	????VcY = AcY*(DeltaTime/1000);
	????VcZ = AcZ*(DeltaTime/1000);
	if (VcX > 2) {
	?Particle.publish("SpeedY", PRIVATE);
	}
	if (VcY > 2) {
	?Particle.publish("SpeedY", PRIVATE);
	}
	if (VcZ > 2) {
	?Particle.publish("SpeedY", PRIVATE);
	}
	if (VcX < 2) {
	Particle.publish("SpeedN", PRIVATE);
	????
	}
	if (VcY < 2) {
	Particle.publish("SpeedN", PRIVATE);
	????
	}
	if (VcZ < 2) {
	Particle.publish("SpeedN", PRIVATE);
	????
	}
	?val = digitalRead(Tilt);
	????if (val == HIGH) // 傾斜傳感器傾斜,也就是輪椅被撞倒了
	??{
	????Particle.publish("TiltY", PRIVATE);
	??}
	??if (val == LOW)
	??{
	????Particle.publish("TiltN", PRIVATE);
	??}
}
	void test(const char *event, const char *data) {
	????digitalWrite(LED, HIGH);
	????delay(500);
	????digitalWrite(LED, LOW);
	????delay(500);
	}
                        電子發(fā)燒友App
                    
                
                
          
        
        











           
            
            
                
            
評(píng)論