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

#include <Servo.h> #define Engine 7 #define RPWM 3 #define LPWM 4 #define Steering_Pin 5 #define Steering_Angle 5 int Engine_Speed_Now = 50; int Steering_Pos = 45; Servo Steering_Serv; void Engine_Parking_without_brake() { // отключение питания двигателя, остановка за счёт трения Serial.println("Engine_Parking_without_brake"); digitalWrite(RPWM, LOW); digitalWrite(LPWM, LOW); delay(1000); } void Engine_Forward(){ // прямое вращение двигателя Serial.println("En_Forward"); digitalWrite(RPWM, LOW); digitalWrite(LPWM, HIGH); for(int i=0;i<=Engine_Speed_Now;i++){ analogWrite(Engine, Engine_Speed_Now); delay(10); } } void Engine_Back(){ // обратное вращение двигателя Serial.println("Engine_Back"); digitalWrite(LPWM, LOW); digitalWrite(RPWM, HIGH); for(int i=0;i<=Engine_Speed_Now;i++){ analogWrite(Engine, Engine_Speed_Now); delay(10); } } void Steering_Forward(){ // рулевая прямо, требуется выравнивание поворотами левво\право, если нагрузна большая Steering_Pos = 45; Serial.println(" Steering_Forward(45) "); Steering_Serv.write(Steering_Pos); } void Steering_Left(){ // при нажатии рулевая немного налево, в зависимости от нагрузки платформы Serial.print(" Steering_Left "); if(Steering_Pos > 15){ Steering_Pos -= Steering_Angle; Serial.println(Steering_Pos); Steering_Serv.write(Steering_Pos); } } void Steering_Right(){ // при нажатии рулевая немного направо, в зависимости от нагрузки платформы Serial.print(" Steering_Right "); if(Steering_Pos < 75){ Steering_Pos += Steering_Angle; Serial.println(Steering_Pos); Steering_Serv.write(Steering_Pos); } } void Engine_Speed_Up(){ if(Engine_Speed_Now<254){ 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=50; } void setup() { Serial.begin(38400); Steering_Serv.attach(Steering_Pin); pinMode(Engine, OUTPUT); pinMode(RPWM, OUTPUT); pinMode(LPWM, OUTPUT); } void loop() { char key; if (Serial.available()> 0) key = Serial.read(); switch(key){ case 'W': Engine_Parking_without_brake(); Engine_Forward(); break; case 'A': Steering_Left(); break; case 'S': Engine_Parking_without_brake(); break; case 'D': Steering_Right(); break; case 'Q': Engine_Speed_Down(); break; case 'E': Engine_Speed_Up(); break; case 'X': Engine_Parking_without_brake(); Engine_Back(); break; case 'F': Steering_Forward(); break; } }

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

«»

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

Наименование	Количество
Пневматический цилиндр 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-осевого манипулятора

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