超音波センサーを使用して近くにいるかどうかを検出して沸騰水を開始する(arduinoを使用して)この機能のためにこのケトルに接続してリレーに接続します)、ある程度の温度に達すると(温度センサを使用して)、リレーを停止し(ケトルの電力を制御します)、サーボを使ってケトルを傾けますモーターを別のカップに入れます。Arduino UNOと超音波センサーと温度センサーを使用した沸騰水(ケトルへのハッキング)
今のところ私のコードは、水の温度が十分に暑いのではなく、温度が一定量に達した後に、リレーとケトルを簡単にオンにします(この場合、 )サーボが回転を止めることはありません。コードを3度回転させて停止させる必要がありますが、それは回転し続けます。これを修正する方法はありますか?また、どのように回転部分を終え、プログラムを続けて超音波センサーを使用してプロセスを開始するのですか?
(FYI私はDFロボットやSeeed Studioの超音波センサーと温度センサーと5キロのサーボモータを使用しています)
私はリレー制御、超音波センサのpingライブラリ、および温度センサのためのArduinoのライブラリを使用しています
#include <Servo.h>
#include <SoftwareSerial.h>
int val; //
int tempPin = 1;
int relaypin = 13;
Servo myservo;
const int pingPin = 7;
int ledpin = 10;
void setup()
{
Serial.begin(9600);
pinMode(relaypin, OUTPUT); // taking relay input
myservo.attach(2);
myservo.write(90); // servo position
pinMode(ledpin, OUTPUT);
}
void loop()
{
long duration, cm; //*following code is for ultrasonic sensor
pinMode (pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(1);
digitalWrite(pingPin, HIGH);
delayMicroseconds(2);
digitalWrite(pingPin, LOW);
pinMode (pingPin, INPUT);
duration = pulseIn (pingPin, HIGH);
cm= microsecondsToCentimeters(duration);
val = analogRead(tempPin);
float mv = (val/1024.0)*5000;
float temp = mv/10;
//float farh = (temp*9)/5 + 32; *last line for ultrasonic sensor
//digitalWrite(relaypin, HIGH); //start the boiling
//delay (10);
if (cm <= 20)
{
if (temp <= 27)
{
digitalWrite(relaypin, HIGH); //start the machine
// myservo.write(75); //tilting the servo
// delay (2000); //pause for 2 seconds
// myservo.write(65);
// delay (2000); //pause for 2 seconds
// myservo.write(45);
// delay (2000);
// myservo.write(35);
// delay (2000);
// myservo.write(90);
// delay(5000);
}
else if(temp >= 35)
{
digitalWrite(relaypin, LOW); //stops the machine
delay(5000);
myservo.write(75); //tilting the servo
delay (2000); //pause for 20 seconds
myservo.write(65);
delay (2000); //pause for 20 seconds
myservo.write(45);
delay (2000);
myservo.write(35);
delay (2000);
myservo.write(90);
delay(5000);
}
}
}
long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds/29/2;
}
Josefさん、ありがとうございました。 私はコードを変更してしまい、どういうわけか、ある程度それをしたいと思うようにしました。私はループを終了するためにカウンタ変数を使用しましたが、ループを終了した後に再びループに入る方法があるかどうか疑問に思っていましたか?理想的には、誰かが近くに来るたびに誰かがもう一度それに近づくときにプロセスを繰り返すたびに実行したいと思っています... – rp2402