專題範例_揮手感應

 


1.給ChayGPT校網上的SONIC範例
2..給ChayGPT校網上的SG90伺服馬達範例

可以讓ChayGPT直接參考停車場(超音波+伺服馬達)
https://lujuer.blogspot.com/2024/12/blog-post.html

3.請ChayGPT參考上述程式碼寫超音波感應揮手






程式碼如下:


#include <Servo.h>

// 設定伺服馬達控制引腳
#define sg90Pin 6     // 伺服控制引腳 (連接到伺服馬達的控制線)

// 定義超音波感應器的引腳
#define echoPin 8     // 超音波感應器的 Echo 引腳 (接收回波信號)
#define trigPin 9     // 超音波感應器的 Trigger 引腳 (發送觸發信號)

// 設定伺服物件
Servo servo;

void setup() {
  Serial.begin(9600);

  // 設定超音波感應器的引腳
  pinMode(trigPin, OUTPUT);  // Trigger 引腳設為輸出,用來發送超音波信號
  pinMode(echoPin, INPUT);   // Echo 引腳設為輸入,用來接收回波信號

  // 連接伺服馬達到指定引腳
  servo.attach(sg90Pin);     // 設定伺服馬達控制引腳,這裡是 pin 6
}

void loop() {
  long duration, distance;

  // 發送一個超音波脈衝
  digitalWrite(trigPin, LOW);  // 設定 Trigger 引腳為低電位
  delayMicroseconds(2);        // 等待 2 微秒
  digitalWrite(trigPin, HIGH); // 設定 Trigger 引腳為高電位,發送超音波
  delayMicroseconds(10);       // 發送超音波信號持續 10 微秒
  digitalWrite(trigPin, LOW);  // 停止發送超音波信號

  // 測量回波的持續時間並計算距離
  duration = pulseIn(echoPin, HIGH);  // 計算 Echo 引腳接收到的回波時間
  distance = (duration / 2) / 29.1;   // 計算距離(單位:公分)

  // 如果距離小於 100 cm,則進行揮手動作
  if (distance < 100) {
    Serial.print(distance);  // 輸出測量到的距離
    Serial.println(" cm - 距離小於 100 cm,開始揮手");

    // 揮手 4 次
    for (int i = 0; i < 4; i++) {
      servo.write(45);  // 揮手動作(45 度)
      delay(500);        // 停頓 0.5 秒
      servo.write(0);    // 回到原點(0 度)
      delay(500);        // 停頓 0.5 秒
    }

    // 完成揮手後,再休息一段時間
    delay(2000); // 等待 2 秒後再測量距離
  } else {
    // 如果距離大於 100 cm,伺服保持在 0 度位置
    servo.write(0); // 保持伺服在 0 度
  }

  delay(500);  // 延遲 0.5 秒後再進行下一次測量
}






留言