Отработка движения

#include <Servo.h> #define Engine 4 #define Engine_pwm 6 #define R 7 #define L 8 int Steering_Angle=5; int Engine_Speed_Now = 200; int Steering_Pos = 45; Servo Steering_Serv; void Engine_Parking_without_brake() { // отключение питания двигателя, остановка за счёт трения Serial.println("Engine_Parking_without_brake"); digitalWrite(R, LOW); digitalWrite(L, LOW); digitalWrite(Engine, LOW); delay(1000); digitalWrite(Engine, HIGH); } void Engine_Forward(){ // прямое вращение двигателя Serial.println("En_Forward"); digitalWrite(L, LOW); digitalWrite(R, HIGH); analogWrite(Engine_pwm, Engine_Speed_Now); } void Engine_Back(){ // обратное вращение двигателя Serial.println("Engine_Back"); digitalWrite(L, HIGH); digitalWrite(R, LOW); analogWrite(Engine_pwm, Engine_Speed_Now); } void Engine_Speed_Up(){ if(Engine_Speed_Now<=245){ Engine_Speed_Now+=10; Serial.print(Engine_Speed_Now); Serial.println(" Engine_Speed_Up "); } else Engine_Speed_Now=255; } void Engine_Speed_Down(){ if(Engine_Speed_Now>50){ Engine_Speed_Now-=10; Serial.print(Engine_Speed_Now); Serial.println(" Engine_Speed_Down "); } else Engine_Speed_Now=45; } void Steering_Forward(){ // рулевая прямо, требуется выравнивание поворотами левво\право, если нагрузна большая Steering_Pos = 45; Serial.println(" Steering_Forward(45) "); Steering_Serv.write(60); delay(100); Steering_Serv.write(30); delay(100); Steering_Serv.write(Steering_Pos); Steering_Serv.write(45); } void Steering_Left(){ // при нажатии рулевая немного налево, в зависимости от нагрузки платформы Serial.print(" Steering_Left "); if(Steering_Pos > 5){ Steering_Pos -= Steering_Angle; Serial.println(Steering_Pos); Steering_Serv.write(Steering_Pos); } } void Steering_Right(){ // при нажатии рулевая немного направо, в зависимости от нагрузки платформы Serial.print(" Steering_Right "); if(Steering_Pos < 85){ Steering_Pos += Steering_Angle; Serial.println(Steering_Pos); Steering_Serv.write(Steering_Pos); } } void setup() { Serial.begin(115200); pinMode(Engine, OUTPUT); pinMode(Engine_pwm, OUTPUT); pinMode(R, OUTPUT); pinMode(L, OUTPUT); digitalWrite(Engine, HIGH); Steering_Serv.attach(5); Steering_Serv.write(45); } void loop() { char key; if (Serial.available()> 0) key = Serial.read(); switch(key){ case 'W': Engine_Forward(); break; case 'A': Steering_Right(); break; case 'S': Engine_Parking_without_brake(); break; case 'D': Steering_Left(); break; case 'Q': Engine_Speed_Down(); break; case 'E': Engine_Speed_Up(); break; case 'X': Engine_Back(); break; case 'F': Steering_Forward(); break; } }

Разработка необходимой телеметрии

«»

#include <SparkFunBME280.h> // более оптимизированная библиотека для bme280 #include <DHT.h> // библиотека dht ,модель выбиратется константой #include <CD74HC4067.h> // библиотека мультиплексора, не нужно внутри кода перебирать каналы, выбирается нужный #define DHT1PIN 8 #define DHT2PIN 9 #define DHTTYPE DHT22 DHT dht1(DHT1PIN, DHTTYPE); DHT dht2(DHT2PIN, DHTTYPE); CD74HC4067 Multiplexor_pin(4, 5, 6, 7); // подключенные пины мультиплексора const int signal_input = A0; // входной сигнал с мультиплексора на 16 каналов BME280 bme; // переменная для датчика давления bme280 void setup() { bme.settings.commInterface = I2C_MODE; bme.settings.I2CAddress = 0x76; bme.settings.runMode = 3; bme.settings.tStandby = 0; bme.settings.filter = 0; bme.settings.tempOverSample = 1; bme.settings.pressOverSample = 1; bme.settings.humidOverSample = 1; } void Scan_Multiplexor() { float voltage_engine, voltage_logic, voltage_5v_line, voltage_backup_battery, voltage5; float amper_engine, amper_logic, amper_manip, amper_pump; float Temp_Engine, Temp_logic_battery, Temp_engine_battery, Temp_driver_engine, Temp_backup_battery, Temp_serv, Temp_Computer; Multiplexor_pin.channel(0); delay(1); voltage_engine = analogRead(signal_input) / 40.92; Multiplexor_pin.channel(1); delay(1); voltage_logic = analogRead(signal_input) / 40.92; Multiplexor_pin.channel(2); delay(1); voltage_5v_line = analogRead(signal_input) / 40.92; Multiplexor_pin.channel(3); delay(1); voltage_backup_battery = analogRead(signal_input) / 40.92; Multiplexor_pin.channel(4); delay(1); voltage5 = analogRead(signal_input) / 40.92; Multiplexor_pin.channel(5); delay(1); amper_engine = ((((analogRead(signal_input) / 1023) * 5000) - 2500) / 66); Multiplexor_pin.channel(6); delay(1); amper_logic = ((((analogRead(signal_input) / 1023) * 5000) - 2500) / 66); Multiplexor_pin.channel(7); delay(1); amper_manip = ((((analogRead(signal_input) / 1023) * 5000) - 2500) / 66); Multiplexor_pin.channel(8); delay(1); amper_pump = ((((analogRead(signal_input) / 1023) * 5000) - 2500) / 66); Multiplexor_pin.channel(9); delay(1); Temp_Engine = ((analogRead(signal_input) * 0.004888) - 0.5) * 100; Multiplexor_pin.channel(10); delay(1); Temp_logic_battery = ((analogRead(signal_input) * 0.004888) - 0.5) * 100; Multiplexor_pin.channel(11); delay(1); Temp_engine_battery = ((analogRead(signal_input) * 0.004888) - 0.5) * 100; Multiplexor_pin.channel(12); delay(1); Temp_driver_engine = ((analogRead(signal_input) * 0.004888) - 0.5) * 100; Multiplexor_pin.channel(13); delay(1); Temp_backup_battery = ((analogRead(signal_input) * 0.004888) - 0.5) * 100; Multiplexor_pin.channel(14); delay(1); Temp_serv = ((analogRead(signal_input) * 0.004888) - 0.5) * 100; Multiplexor_pin.channel(15); delay(1); Temp_Computer = ((analogRead(signal_input) * 0.004888) - 0.5) * 100; } void Scan_DHT22() { float h1, h2, t1, t2; h1 = dht1.readHumidity(); // влажность с датчика dht22 t1 = dht1.readTemperature(); // температура с датчика dht22 h2 = dht2.readHumidity(); t2 = dht2.readTemperature(); } void scan_Bme() { float Temp, Press, Humidity; Temp = bme.readTempC(); // температура с датчика bme280 Press = bme.readFloatPressure() / 133.3; // давление с датчика bme280 Humidity = bme.readFloatHumidity(); // влажность с датчика bme280 } void loop() { }

Разработка,конструирование и отладка системы пневматических стоек

Наименование	Количество
Пневматический цилиндр CDJ2B16	4
Штуцер М5х0,8	8
Коннектор на Х6	2
Шланг 3/5мм	?
Биполярный электромагнитный клапан	1
Электромагнитный клапан	2
Воздушный насос	1
Механический обратный клапан	1
#define Pump_Engine 24 // насос #define Valve_Out 25 // впускной клапан обратный ход #define Valve_Input 26 // выпускной клапан выдвижение #define Valve_way_1 27 // направление на выдвижение поршня #define Valve_way_2 28 // направление на задвиг поршня void upload_air(){ digitalWrite(Valve_way_1,LOW); // открытие направления на выдвижение digitalWrite(Valve_way_2,HIGH);// открытие направления на выдвижение digitalWrite(Valve_Input,HIGH);// закр вып кл на выд,поршнешь в рабочем положении digitalWrite(Valve_Output,LOW); digitalWrite(Pump_Engine,HIGH); // включение воздушного насоса } void Pump_Out_air(){ digitalWrite(Valve_way_1,HIGH); // открытие направления на выдвижение digitalWrite(Valve_way_2,LOW); // открытие направления на выдвижение digitalWrite(Valve_Input,LOW); digitalWrite(Valve_Output,HIGH); // зак вып кл на задв,поршень в начальном положении digitalWrite(Pump_Engine,HIGH); // включение воздушного насоса } void Off_pump_system(){ digitalWrite(Valve_way_1,LOW); digitalWrite(Valve_way_2,LOW); digitalWrite(Valve_Input,LOW); digitalWrite(Valve_Output,LOW); digitalWrite(Pump_Engine,LOW); } void setup() { Serial.begin(38400); pinMode(Valve_Out, OUTPUT); pinMode(Valve_Input, OUTPUT); pinMode(Valve_way_1, OUTPUT); pinMode(Valve_way_2, OUTPUT); } /* требуется прописать гистерезис для включения двигателя( по данным датчика давления внутри резервуара ) * для поддержания нужного уровня давления в рабочем положении,а так же команды по которым * будут производиться какие-либо манипуляции с системой пневмо-стоек * Требуется нарисовать схему работы данной системы для более подробного описания */ void loop() { }

Разработка и отладка управления при помощи модуля приёмопередатчика NRF24L01

Отработка получения телеметрии по запросу при помощи модуля приёмопередатчика NRF24L01

Разработка и конструирования собственного 6-осевого манипулятора

Сборка всех элементов