رادار هوشمند با MQTT و Node_RED
آذر ۲, ۱۳۹۹
Posted by رامین دانش پژوه
98 بازدید

سلام در این جلسه قصد داریم با استفاده از سنسور آلتراسونیک و یک عدد سروو موتور و برد NodeMCU یک عدد رادار هوشمند بسازیم .
طوری که بعد از فرمان رصد رادار به چرخش در آمده و دیتا را دریافت و تحلیل خواهد کرد.
در این پروژه برای ارسال و دریافت دیتا از نرم افزار Node_RED استفاده میکنیم برای اینکه راحت تر بتونین این پروژه رو انجام بدین بهتر هستش که آموزش های قبلی مربوط به نرم افزار Node_RED و پروتکل MQTT رو مطالعه کنید.
پلتفرم برنامه نویسی بلوکی۴ADAIOT :
۴ADAIOT
گالری پروژه :
Slide 1 |
Slide 2 |
Slide 3 |
شماتیک و اتصالات :
نحوه قرار دادن بلوک ها در پلتفرم برنامه نویسی بلوکی ۴ADAIOT:
اول از قسمت پروژه های آماده پروژه MQTT CLIENT رو انتخاب میکنیم و بعد بلوک دریافت دیتا از تاپیک رو برداشته و به قسمت دریافت دیتا اضافه میکنیم.
کد ساخته شده توسط پلتفرم برنامه نویسی بلوکی :
///////////////////////////////// // Generated with a lot of love// // with 4ADAIOT FOR ESP8266 // // Website: https://4adateam.com // ///////////////////////////////// #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <Servo.h> WiFiClient espClient; PubSubClient client(espClient); void reconnectmqttserver() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); if (client.connect(clientId.c_str())) { Serial.println("connected"); client.subscribe("admin"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } Servo servo_0; long ultrason_4() { long duration, distance; digitalWrite(4,LOW); delayMicroseconds(2); digitalWrite(4, HIGH); delayMicroseconds(10); digitalWrite(4, LOW); duration = pulseIn(5, HIGH); distance = duration * 340 / (2 * 10000); return distance; } char msgmqtt[50]; int i; void callback(char* topic, byte* payload, unsigned int length) { String MQTT_DATA = ""; for (int i=0;i<length;i++) { MQTT_DATA += (char)payload[i];} if (MQTT_DATA == "run") { digitalWrite(16,HIGH); delay(200); digitalWrite(16,LOW); delay(200); for (i = 1; i <= 180; i++) { servo_0.write(i); delay(200); snprintf (msgmqtt, 50, "%ld ",ultrason_4()); client.publish("4adacm", msgmqtt); } digitalWrite(16,HIGH); delay(200); digitalWrite(16,LOW); delay(200); for (i = 180; i >= 1; i--) { servo_0.write(i); delay(200); snprintf (msgmqtt, 50, "%ld ",ultrason_4()); client.publish("4adacm", msgmqtt); } } if (MQTT_DATA == "stop") { servo_0.write(0); delay(20); digitalWrite(16,HIGH); delay(2000); digitalWrite(16,LOW); delay(2000); } } void setup() { Serial.begin(9600); WiFi.disconnect(); delay(3000); Serial.println("START"); WiFi.begin("نام وایفای","رمز عبور"); while ((!(WiFi.status() == WL_CONNECTED))){ delay(300); Serial.print(".."); } Serial.println("Connected"); Serial.println("Your IP is"); Serial.println((WiFi.localIP().toString())); client.setServer("آدرس آی پی سرور", ۱۸۸۳); client.setCallback(callback); pinMode(16, OUTPUT); servo_0.attach(0); pinMode(4, OUTPUT); pinMode(5, INPUT); } void loop() { if (!client.connected()) { reconnectmqttserver(); } client.loop(); }
برنامه نویسی نرم افزار Node_RED :