国产精品成人网站,日韩视频二区,亚洲成人手机电影,怡红院国产

產(chǎn)品推薦:水表|流量計(jì)|壓力變送器|熱電偶|液位計(jì)|冷熱沖擊試驗(yàn)箱|水質(zhì)分析|光譜儀|試驗(yàn)機(jī)|試驗(yàn)箱


儀表網(wǎng)>技術(shù)中心>技術(shù)交流>正文

歡迎聯(lián)系我

有什么可以幫您? 在線咨詢

接近開關(guān)與線性執(zhí)行器結(jié)合實(shí)現(xiàn)非接觸式控制和物體檢測(cè)反饋

來源:上海維立勝衡傳感器有限公司   2025年03月03日 07:40  

接近開關(guān)是非接觸式開關(guān),可以檢測(cè)附近是否存在物體。通常,接近傳感器與非接觸式設(shè)備一起使用,例如非接觸式干手器和SUV中的免提電動(dòng)尾門,也廣泛用于工業(yè)應(yīng)用。配合使用線性執(zhí)行器,接近傳感器可用于各種情況,包括非接觸式控制和物體檢測(cè)反饋。

接近傳感器通常通過使用電磁場(chǎng)、光或聲音來檢測(cè)物體的存在。而線性執(zhí)行器檢測(cè)物體是否存在的方法取決于接近傳感器的類型。接近傳感器有四種常見類型:

電感式::使用磁場(chǎng)檢測(cè)含鐵材料

電容式:使用電容變化來檢測(cè)物體

光電:使用光來檢測(cè)物體是否存在

超聲波:使用聲音來檢測(cè)物體是否存在

當(dāng)物體位于傳感器前面或物體被拿走時(shí),這些傳感器會(huì)告訴線性執(zhí)行器移動(dòng)或停止。它們還可用于確定最近的物體距它們有多遠(yuǎn),并可用于提供反饋來控制線性致動(dòng)器。

非接觸式控制

對(duì)于非接觸式控制,就像使用簡(jiǎn)單的按鈕一樣使用接近傳感器。為此,需要選擇一個(gè)檢測(cè)范圍較短的接近傳感器,這樣就不會(huì)意外觸發(fā)開關(guān)。這里我們以電容式接近開關(guān)為例:

將接近傳感器連接到微控制器,例如Arduino,讀取傳感器的輸出。如何將接近傳感器連接到微控制器將取決于選擇的傳感器,但在大多數(shù)情況下,微控制器將接收數(shù)字轉(zhuǎn)換的模擬值,或者需要將模擬信號(hào)轉(zhuǎn)換為數(shù)字值。

在此應(yīng)用中,接近傳感器僅充當(dāng)單個(gè)按鈕,這將限制我們對(duì)線性執(zhí)行器的控制。利用我們的微控制器,我們可以編寫代碼,在傳感器被觸發(fā)時(shí)在伸出和縮回之間切換,并利用線性執(zhí)行器的內(nèi)部限位開關(guān)在執(zhí)行器到達(dá)伸出或縮回位置時(shí)停止執(zhí)行器。我們還可以利用內(nèi)部反饋或外部限位開關(guān)利用到其他位置。

要在微控制器中執(zhí)行此操作,我們需要在每次觸發(fā)接近傳感器時(shí)切換標(biāo)志變量。下面的代碼示例顯示了Arduino IDE代碼的主循環(huán),使用標(biāo)志sensorFlag來確定要移動(dòng)的方向驅(qū)動(dòng)線性執(zhí)行器:

void loop() {
  if(sensorFlag == 0){
    // Retract Linear Actuator
    analogWrite(10, 0);
    analogWrite(11, 255);
  }else if(sensorFlag == 1){
    // Extend Linear Actuator
    analogWrite(10, 255);
    analogWrite(11, 0);
  }
}

要切換此標(biāo)志,我們需要讀取接近傳感器的值。由于我們不知道傳感器何時(shí)會(huì)被觸發(fā),因此可以利用內(nèi)部定時(shí)器中斷定期讀取傳感器。下面的代碼示例使用Arduino,展示了如何設(shè)置每秒觸發(fā)的內(nèi)部計(jì)時(shí)器中斷。

void setup() {
// Set Timer1 Interrupt to Trigger Every Second 
  TCCR1A = 0;   // Set TCCR1A Register to 0
  TCCR1B = 0;   // Set TCCR1B Register to 0
  TCNT1  = 0;   // Initialize counter
  // Set compare match register for 1hz increments
  OCR1A = 15624; // = (16*10^6) / (1*1024) - 1 (must be <65536)
  // Turn On CTC Mode
  TCCR1B |= (1 << WGM12);
  // Set CS10 and CS12 Bits for 1024 prescaler
  TCCR1B |= (1 << CS12) | (1 << CS10);  
  // Enable Timer Compare Interrupt
  TIMSK1 |= (1 << OCIE1A);

// Setup Pins
  pinMode(A1, INPUT);   // Input For Analog Signal From Proximity Sensor
  pinMode(10, OUTPUT);  // Configure pin 10 as an Output to Motor Driver
  pinMode(11, OUTPUT);  // Configure pin 11 as an Output to Motor Driver
}

SIGNAL(TIMER1_COMPA_vect) {
  sensorValue = analogRead(A1);
  if(sensorValue < thresholdValue & pressedFlag == 0){
    sensorFlag = !sensorFlag;
    pressedFlag = 1;
  } else if(sensorValue > thresholdValue){
    pressedFlag = 0;
  }
}

上面代碼中的SINGAL函數(shù)是定時(shí)器中斷的中斷服務(wù)程序,每次觸發(fā)中斷時(shí)都會(huì)運(yùn)行該函數(shù),每秒更新接近傳感器的值。如果從傳感器讀取的值小于我們的閾值,我們認(rèn)為傳感器“被按下”并切換sensorFlag。需要通過測(cè)試傳感器來預(yù)先確定該閾值,并確定想要視為“按下”的輸出值。為了將sensorFlag的切換限制為在傳感器被“按下”時(shí)僅切換一次,還有另一個(gè)標(biāo)志在傳感器值不再小于閾值之前不會(huì)重置。

障礙物檢測(cè)

接近傳感器還可用于測(cè)量前方最近物體的距離。這在使用線性執(zhí)行器的應(yīng)用中特別有用,可以檢測(cè)執(zhí)行器前面的障礙物,并向控制器發(fā)送反饋,以便在執(zhí)行器距離物體太近時(shí)停止執(zhí)行器,

此應(yīng)用的接近傳感器的設(shè)置與非接觸式控制非常相似。仍然需要使用微控制器讀取傳感器的輸出,并且將再次利用內(nèi)部定時(shí)器中斷來定期讀取傳感器的值。不過,傳感器現(xiàn)在將放置在執(zhí)行器前面,以檢測(cè)其前面的障礙物。傳感器的輸出將與傳感器前面最近的物體的距離相關(guān),這意味著我們可以根據(jù)最小安全距離確定一個(gè)閾值。該閾值將根據(jù)所選傳感器的不同而變化。在下面的代碼示例中,信號(hào)函數(shù)(中斷服務(wù)例程)每毫秒執(zhí)行一次,測(cè)量傳感器的輸出并將其與閾值進(jìn)行比較。如果測(cè)量值小于閾值,則將標(biāo)志sensorFlag設(shè)置為1,并在主循環(huán)中使用該標(biāo)志來停止線性執(zhí)行器。當(dāng)測(cè)量值小于閾值時(shí),代碼將不允許執(zhí)行器進(jìn)一步延伸,直到測(cè)量值大于閾值并且標(biāo)志重置為0。代碼仍然允許線性當(dāng)sensorFlag設(shè)置為1時(shí),執(zhí)行器將縮回,因?yàn)榭s回執(zhí)行器仍然是安全的。

void setup() {
// Set Timer1 Interrupt to Trigger Every Millisecond 
  TCCR1A = 0;   // Set TCCR1A Register to 0
  TCCR1B = 0;   // Set TCCR1B Register to 0
  TCNT1  = 0;   // Initialize counter
  // Set compare match register for 1000hz increments
  OCR1A = 15; // = (16*10^6) / (1*1024) - 1 (must be <65536)
  // Turn On CTC Mode
  TCCR1B |= (1 << WGM12); 
  // Set CS10 and CS12 Bits for 1024 prescaler
  TCCR1B |= (1 << CS12) | (1 << CS10);  
  // Enable Timer Compare Interrupt
  TIMSK1 |= (1 << OCIE1A);

// Setup Pins
  pinMode(A1, INPUT);   // Input For Analog Signal From Proximity Sensor
  pinMode(10, OUTPUT);  // Configure pin 10 as an Output to Motor Driver
  pinMode(11, OUTPUT);  // Configure pin 11 as an Output to Motor Driver
}

SIGNAL(TIMER1_COMPA_vect) {
  sensorValue = analogRead(A1);
  if(sensorValue > thresholdValue){
    sensorFlag = 1;
  } else{
    sensorFlag = 0;
  }
}

void loop() {
 
   if(digitalRead(2) == HIGH & digitalRead(3) == LOW){
   // Retract Actuator
    analogWrite(10, 0);
    analogWrite(11, 255);
  }
  else if(digitalRead(2) == LOW & digitalRead(3) == HIGH){
    if(sensorFlag == 1){
        // Stop Actuator
        analogWrite(10, 0);
        analogWrite(11, 0);
    } else {
        // Extend Actuator
        analogWrite(10, 255);
        analogWrite(11, 0);
    }
  }
  else{
    // Stop Actuator
    analogWrite(10, 0);
    analogWrite(11, 0);
  }
}

免責(zé)聲明

  • 凡本網(wǎng)注明“來源:儀表網(wǎng)”的所有作品,均為浙江興旺寶明通網(wǎng)絡(luò)有限公司-儀表網(wǎng)合法擁有版權(quán)或有權(quán)使用的作品,未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用上述作品。已經(jīng)本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使用,并注明“來源:儀表網(wǎng)”。違反上述聲明者,本網(wǎng)將追究其相關(guān)法律責(zé)任。
  • 本網(wǎng)轉(zhuǎn)載并注明自其它來源(非儀表網(wǎng))的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或和對(duì)其真實(shí)性負(fù)責(zé),不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品第一來源,并自負(fù)版權(quán)等法律責(zé)任。
  • 如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
聯(lián)系我們

客服熱線: 15267989561

加盟熱線: 15267989561

媒體合作: 0571-87759945

投訴熱線: 0571-87759942

關(guān)注我們
  • 下載儀表站APP

  • Ybzhan手機(jī)版

  • Ybzhan公眾號(hào)

  • Ybzhan小程序

企業(yè)未開通此功能
詳詢客服 : 0571-87759942