沈樵综合在线,一区二区三区乱码,免费资源一区二区三区,91超碰碰,av极品一线天,日韩免费高清一区二区,国产蜜尤福利在线,嗯啊91在线观看,精品一区二三

行業(yè)產品

  • 行業(yè)產品

上海維立勝衡傳感器有限公司


當前位置:上海維立勝衡傳感器有限公司>技術文章>接近開關與線性執(zhí)行器結合實現非接觸式控制和物體檢測反饋

    暫無信息


    暫無信息

經營模式:其他

商鋪產品:108條

所在地區(qū):上海上海

技術文章

接近開關與線性執(zhí)行器結合實現非接觸式控制和物體檢測反饋

閱讀:83發(fā)布時間:2025-3-3

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

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

電感式::使用磁場檢測含鐵材料

電容式:使用電容變化來檢測物體

光電:使用光來檢測物體是否存在

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

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

非接觸式控制

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

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

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

要在微控制器中執(zhí)行此操作,我們需要在每次觸發(fā)接近傳感器時切換標志變量。下面的代碼示例顯示了Arduino IDE代碼的主循環(huán),使用標志sensorFlag來確定要移動的方向驅動線性執(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);
  }
}

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

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函數是定時器中斷的中斷服務程序,每次觸發(fā)中斷時都會運行該函數,每秒更新接近傳感器的值。如果從傳感器讀取的值小于我們的閾值,我們認為傳感器“被按下”并切換sensorFlag。需要通過測試傳感器來預先確定該閾值,并確定想要視為“按下”的輸出值。為了將sensorFlag的切換限制為在傳感器被“按下”時僅切換一次,還有另一個標志在傳感器值不再小于閾值之前不會重置。

障礙物檢測

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

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


儀表網 設計制作,未經允許翻錄必究 .? ? ? Copyright(C)?2021 http://m.liuyangwu.com,All rights reserved.

以上信息由企業(yè)自行提供,信息內容的真實性、準確性和合法性由相關企業(yè)負責,儀表網對此不承擔任何保證責任。 溫馨提示:為規(guī)避購買風險,建議您在購買產品前務必確認供應商資質及產品質量。

會員登錄

×

請輸入賬號

請輸入密碼

=請輸驗證碼

收藏該商鋪

請 登錄 后再收藏

提示

您的留言已提交成功!我們將在第一時間回復您~
肃北| 龙游县| 常德市| 都兰县| 文昌市| 浦城县| 镇平县| 古丈县| 滨海县| 泸州市| 龙门县| 西充县| 琼结县| 三门县| 中江县| 宁强县| 旺苍县| 庄河市| 南江县| 陇南市| 白玉县| 蓬莱市| 娱乐| 临城县| 磐安县| 江永县| 正安县| 鄄城县| 沙雅县| 林芝县| 纳雍县| 通河县| 井冈山市| 襄樊市| 抚松县| 巴彦县| 庆阳市| 修文县| 鱼台县| 科技| 呼伦贝尔市|