초음파 센서를 사용하여 가까운 곳에 있는지 감지하고 끓는 물을 시작하는이 기계 (arduino 사용)를 만들고 있습니다. 이 기능을 위해이 케틀에 연결하고 릴레이에 연결) 온도가 어느 정도 (온도 센서 사용) 도달하면 릴레이 (케틀의 전원을 제어)를 중지하고 서보를 사용하여 케틀을 기울입니다 모터를 별도의 컵에 넣습니다.Arduino UNO 및 초음파 센서 및 온도 센서를 사용하는 끓는 물 (주전자에 해킹)
현재 코드는 물의 온도가 충분히 뜨겁지는 않지만 온도가 특정 양에 도달하면 릴레이 및 주전자를 쉽게 켭니다 (이 경우에는 35 번을 시도로 사용함).) 서보가 회전을 멈추지 않을 것입니다. 코드는 3도 각도로 회전 한 다음 정지해야합니다 (그렇습니까?)하지만 계속 회전합니다. 이 문제를 해결할 방법이 있습니까? 또한, 어떻게 회전 부분을 마무리하고 프로그램을 계속해서 초음파 센서를 사용하고 프로세스를 시작합니까?
I 릴레이 제어, 초음파 센서 핑 라이브러리의 Arduino의 라이브러리를 사용하고및 온도 센서 (FYI 난 DF 로봇 또는 Seeed Studio의 초음파 센서와 온도 센서와 5kg 서보 모터를 사용하고있다)
#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