Я делаю эту машину (используя ардуино), которая использует ультразвуковой датчик для обнаружения, если вы близко к нему, а затем он начинает кипящую воду (я взломал в этот чайник для этой функции и подключить его к реле), и как только температура достигает определенной степени (с использованием температурного датчика), она останавливает реле (которое контролирует мощность чайника) и наклоняет чайник с помощью сервопривода двигатель в отдельную чашку.Кипящая вода (взламывание в чайник) с использованием Arduino UNO и ультразвукового датчика и датчика температуры
В настоящее время мой код легко включает реле и чайник, когда он обнаруживает, что температура воды недостаточно высокая, но после того, как температура достигла определенной величины (я использовал 35 в этом случае, как попытку) серво не перестанет вращаться. Код заставляет его вращаться на трех градусах, а затем он должен остановиться (справа?), Но затем он продолжает вращаться. Есть ли способ исправить это? Кроме того, как мне закончить часть вращения и снова включить программу, чтобы снова использовать ультразвуковой датчик и начать процесс?
(FYI я с помощью робота DF или датчик и датчик температуры Ультразвуковой Seeed Studio в и серводвигатель 5 кг)
Я использую библиотеку 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