Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:1602:mgul.160021.002 [2018/01/15 01:18] angel_of_death |
doc:1602:mgul.160021.002 [2018/04/28 23:47] (текущий) |
||
---|---|---|---|
Строка 5: | Строка 5: | ||
- Точность поворота зависит от текущего веса робота, чем тяжелее, тем больше раз нужно подать команду поворота на сервопривод, существуют разумные границы поворота, чтобы не вывести из строя тягу или сервопривод. \\ | - Точность поворота зависит от текущего веса робота, чем тяжелее, тем больше раз нужно подать команду поворота на сервопривод, существуют разумные границы поворота, чтобы не вывести из строя тягу или сервопривод. \\ | ||
</hidden> | </hidden> | ||
- | <hidden Текст программы от 14 января 2018 года> | + | |
- | <code> | + | <hidden Текст программы от 11 апреля 2018 года (в работе проверялось, Inseptima поехала)> |
+ | <code asm> | ||
#include <Servo.h> | #include <Servo.h> | ||
- | #define Engine 7 | + | #define Engine 2 |
- | #define RPWM 3 | + | #define Engine_pwm 3 |
- | #define LPWM 4 | + | #define R 5 |
- | #define Steering_Pin 5 | + | #define L 4 |
- | #define Steering_Angle 5 | + | int Steering_Angle = 15; |
- | int Engine_Speed_Now = 50; | + | int Engine_Speed_Now = 30; |
- | int Steering_Pos = 45; | + | int Steering_Pos = 60; |
- | Servo Steering_Serv; | + | double flag_st = 0; // флаг для сервопривода |
- | void Engine_Parking_without_brake() { // отключение питания двигателя, остановка за счёт трения | + | Servo Steering_Serv; |
+ | void Engine_Parking_without_brake() { // отключение питания двигателя, остановка за счёт трения | ||
Serial.println("Engine_Parking_without_brake"); | Serial.println("Engine_Parking_without_brake"); | ||
- | digitalWrite(RPWM, LOW); | + | digitalWrite(R, LOW); |
- | digitalWrite(LPWM, LOW); | + | digitalWrite(L, LOW); |
+ | digitalWrite(Engine, LOW); | ||
delay(1000); | delay(1000); | ||
+ | digitalWrite(Engine, HIGH); | ||
+ | flag_st = 0; | ||
} | } | ||
- | void Engine_Forward(){ // прямое вращение двигателя | + | void Engine_Forward() { // прямое вращение двигателя |
Serial.println("En_Forward"); | Serial.println("En_Forward"); | ||
- | digitalWrite(RPWM, LOW); | + | digitalWrite(L, LOW);X |
- | digitalWrite(LPWM, HIGH); | + | digitalWrite(R, HIGH); |
- | for(int i=0;i<=Engine_Speed_Now;i++){ | + | analogWrite(Engine_pwm, Engine_Speed_Now); |
- | analogWrite(Engine, Engine_Speed_Now); | + | flag_st = 1; |
- | delay(10); | + | |
- | } | + | |
} | } | ||
- | void Engine_Back(){ // обратное вращение двигателя | + | void Engine_Back() { // обратное вращение двигателя |
Serial.println("Engine_Back"); | Serial.println("Engine_Back"); | ||
- | digitalWrite(LPWM, LOW); | + | digitalWrite(L, HIGH); |
- | digitalWrite(RPWM, HIGH); | + | digitalWrite(R, LOW); |
- | for(int i=0;i<=Engine_Speed_Now;i++){ | + | analogWrite(Engine_pwm, Engine_Speed_Now); |
- | analogWrite(Engine, Engine_Speed_Now); | + | flag_st = 1; |
- | delay(10); | + | } |
+ | void Engine_Speed_Up() { | ||
+ | if (Engine_Speed_Now <= 245) { | ||
+ | Engine_Speed_Now += 15; | ||
+ | Serial.print(Engine_Speed_Now); | ||
+ | Serial.println(" Engine_Speed_Up "); | ||
} | } | ||
+ | else | ||
+ | Engine_Speed_Now = 255; | ||
} | } | ||
- | void Steering_Forward(){ // рулевая прямо, требуется выравнивание поворотами левво\право, если нагрузна большая | + | void Engine_Speed_Down() { |
- | Steering_Pos = 45; | + | if (Engine_Speed_Now > 40) { |
- | Serial.println(" Steering_Forward(45) "); | + | Engine_Speed_Now -= 15; |
- | Steering_Serv.write(Steering_Pos); | + | Serial.print(Engine_Speed_Now); |
+ | Serial.println(" Engine_Speed_Down "); | ||
+ | } | ||
+ | else | ||
+ | Engine_Speed_Now = 40; | ||
} | } | ||
- | void Steering_Left(){ // при нажатии рулевая немного налево, в зависимости от нагрузки платформы | + | void Steering_Forward() { |
- | Serial.print(" Steering_Left "); | + | if (flag_st == 0) { // флаг 0, выравниваемся способом №1 |
- | if(Steering_Pos > 15){ | + | Steering_Pos = 60; |
- | Steering_Pos -= Steering_Angle; | + | Serial.println(" Steering_Forward(60) "); |
- | Serial.println(Steering_Pos); | + | Steering_Serv.write(70); |
- | Steering_Serv.write(Steering_Pos); | + | delay(200); |
+ | Steering_Serv.write(35); | ||
+ | delay(200); | ||
+ | Steering_Serv.write(70); | ||
+ | delay(200); | ||
+ | Steering_Serv.write(35); | ||
+ | delay(200); | ||
+ | Steering_Serv.write(Steering_Pos + 2); | ||
+ | } | ||
+ | if (flag_st == 1) { // флаг 1, выравниваемся способом №2 | ||
+ | if (Steering_Pos > 60 && Steering_Pos < 130) { // программная проверка позиции сервы | ||
+ | Steering_Pos = 60; // выравнивание для правого поворота | ||
+ | Serial.println(" Steering_Forward(60) "); | ||
+ | Steering_Serv.write(75); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(33); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(75); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(33); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(45); | ||
+ | } | ||
+ | if (Steering_Pos < 60 && Steering_Pos > -5) { // программная проверка позиции сервы | ||
+ | Steering_Pos = 60; // выравнивание для левого поворота | ||
+ | Steering_Serv.write(75); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(33); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(75); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(33); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(60); | ||
+ | } | ||
+ | } | ||
} | } | ||
+ | void Steering_Right() { | ||
+ | if (flag_st == 0) { // если стоим, то до упора поворот | ||
+ | Steering_Pos = 0; | ||
+ | Steering_Serv.write(Steering_Pos); | ||
+ | Serial.println("MAX R"); | ||
+ | } | ||
+ | if (flag_st == 1) { | ||
+ | if (Steering_Pos > 5) { // если едем, то плавно рулим | ||
+ | Steering_Pos -= Steering_Angle; | ||
+ | Serial.println(Steering_Pos); | ||
+ | Steering_Serv.write(Steering_Pos); | ||
+ | } | ||
+ | } | ||
} | } | ||
- | void Steering_Right(){ // при нажатии рулевая немного направо, в зависимости от нагрузки платформы | + | void Steering_Left() { |
- | Serial.print(" Steering_Right "); | + | if (flag_st == 0) { // если стоим, то до упора поворот |
- | if(Steering_Pos < 75){ | + | Steering_Pos = 120; |
- | Steering_Pos += Steering_Angle; | + | Steering_Serv.write(Steering_Pos); |
- | Serial.println(Steering_Pos); | + | Serial.println("MAX L"); |
- | Steering_Serv.write(Steering_Pos); | + | } |
- | } | + | if (flag_st == 1) { // если едем, то плавно рулим |
- | } | + | if (Steering_Pos < 120) { |
- | void Engine_Speed_Up(){ | + | Steering_Pos += Steering_Angle; |
- | if(Engine_Speed_Now<254){ | + | Serial.println(Steering_Pos); |
- | Engine_Speed_Now+=10; | + | Steering_Serv.write(Steering_Pos); |
- | 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() { | void setup() { | ||
- | Serial.begin(38400); | + | Serial.begin(38400); |
- | Steering_Serv.attach(Steering_Pin); | + | pinMode(Engine, OUTPUT); |
- | pinMode(Engine, OUTPUT); | + | pinMode(Engine_pwm, OUTPUT); |
- | pinMode(RPWM, OUTPUT); | + | pinMode(R, OUTPUT); |
- | pinMode(LPWM, OUTPUT); | + | pinMode(L, OUTPUT); |
+ | digitalWrite(Engine, HIGH); | ||
+ | Steering_Serv.attach(8); | ||
+ | Steering_Forward(); | ||
} | } | ||
+ | |||
void loop() { | void loop() { | ||
- | char key; | + | char key; |
- | if (Serial.available()> 0) | + | if (Serial.available() > 0) |
- | key = Serial.read(); | + | key = Serial.read(); |
- | switch(key){ | + | switch (key) { |
case 'W': | case 'W': | ||
- | Engine_Parking_without_brake(); | + | Engine_Forward(); |
- | Engine_Forward(); | + | break; |
- | break; | + | |
- | case 'A': | + | |
- | Steering_Left(); | + | |
- | break; | + | |
- | case 'S': | + | |
- | Engine_Parking_without_brake(); | + | |
- | break; | + | |
case 'D': | case 'D': | ||
- | Steering_Right(); | + | Serial.print(" Steering_Right "); |
- | break; | + | Steering_Right(); |
+ | break; | ||
+ | case 'S': | ||
+ | Engine_Parking_without_brake(); | ||
+ | break; | ||
+ | case 'A': | ||
+ | Serial.print(" Steering_Left "); | ||
+ | Steering_Left(); | ||
+ | break; | ||
case 'Q': | case 'Q': | ||
- | Engine_Speed_Down(); | + | Engine_Speed_Down(); |
- | break; | + | break; |
case 'E': | case 'E': | ||
- | Engine_Speed_Up(); | + | Engine_Speed_Up(); |
- | break; | + | break; |
case 'X': | case 'X': | ||
- | Engine_Parking_without_brake(); | + | Engine_Back(); |
- | Engine_Back(); | + | break; |
- | break; | + | |
case 'F': | case 'F': | ||
- | Steering_Forward(); | + | Steering_Forward(); |
- | break; | + | break; |
} | } | ||
} | } | ||
Строка 124: | Строка 178: | ||
\\ | \\ | ||
==== Разработка необходимой телеметрии ==== | ==== Разработка необходимой телеметрии ==== | ||
- | <hidden Описание от 14 января 2018 года> | + | <hidden Описание от 25 января 2018 года> |
- | Так как на платформе будут установлено 3 аккумулятора (7.2V на всю логику; 14.8V 10,8Аh двигатель , пневматика и манипулятор; 14,8V 3,4Ah резерв для двигателя,подключаемый)\\ | + | Так как на платформе будут установлено 3 аккумулятора (7.2V 6Ah на всю логику; 14.8V 10,8Аh двигатель , пневматика и манипулятор; 14,8V 3,4Ah резерв для двигателя,подключаемый)\\ |
- 5 Вольтметров с пиком в 25V \\ | - 5 Вольтметров с пиком в 25V \\ | ||
- 4 Амперметра ACS712-30A \\ | - 4 Амперметра ACS712-30A \\ | ||
- 10-осевой датчик от "Amperka.ru" (гироскоп,акселерометр,магнитометр,датчик давления) \\ | - 10-осевой датчик от "Amperka.ru" (гироскоп,акселерометр,магнитометр,датчик давления) \\ | ||
- Датчик давления BPM180(внутри воздушного резервуара) \\ | - Датчик давления BPM180(внутри воздушного резервуара) \\ | ||
- | - 10 Датчиков температуры(двигатель,драйвер двигателя,сервопривод на рулевой,3 на аккумуляторы, 1 на бортовую эмв, 1 на Arduino)\\ | + | - Датчик давления и влажности BME280(внешний) \\ |
- | - 2 Датчика влажности\\ | + | - 8 Датчиков температуры(двигатель,драйвер двигателя,сервопривод на рулевой,3 на аккумуляторы, 1 на бортовую эмв, 2 контрольный)\\ |
+ | - 2 Датчика влажности DHT22\\ | ||
Данные будут записываться на постоянной основе в бортовую эвм, а при утере сигнала Wi-fi будут передаваться по запросу оператору с помощью NRF20L01. \\ | Данные будут записываться на постоянной основе в бортовую эвм, а при утере сигнала Wi-fi будут передаваться по запросу оператору с помощью NRF20L01. \\ | ||
- | </hidden>\\ | + | </hidden> |
+ | <hidden Текст программы от 25 января 2018 года(собрано почти всё)> | ||
+ | <code asm> | ||
+ | #include <iarduino_Pressure_BMP.h> | ||
+ | #include <TroykaIMU.h> | ||
+ | #include <Wire.h> | ||
+ | #include <SparkFunBME280.h> // более оптимизированная библиотека для bme280 | ||
+ | #include <DHT.h> // библиотека dht ,модель выбиратется константой | ||
+ | #include <CD74HC4067.h> // библиотека мультиплексора, не нужно внутри кода перебирать каналы, выбирается нужный | ||
+ | #define DHT1PIN 8 | ||
+ | #define DHT2PIN 9 | ||
+ | #define DHTTYPE DHT22 | ||
+ | Gyroscope gyro; // объекты для работы с 10 осевым датчиком от amperka | ||
+ | Accelerometer accel; | ||
+ | Compass compass; | ||
+ | Barometer barometer; | ||
+ | DHT dht1(DHT1PIN, DHTTYPE); | ||
+ | DHT dht2(DHT2PIN, DHTTYPE); | ||
+ | CD74HC4067 Multiplexor_pin(4, 5, 6, 7); // подключенные пины мультиплексора | ||
+ | iarduino_Pressure_BMP BPM180; | ||
+ | const int signal_input = A0; // входной сигнал с мультиплексора на 16 каналов | ||
+ | BME280 bme; // переменная для датчика давления bme280 | ||
+ | float gx, gy, gz, ax, ay, az, mx, my, mz; | ||
+ | |||
+ | // полученные в калибровочной матрице из примера «compassCalibrateMatrix» | ||
+ | const double compassCalibrationBias[3] = { | ||
+ | 524.21, | ||
+ | 3352.214, | ||
+ | -1402.236 | ||
+ | }; | ||
+ | const double compassCalibrationMatrix[3][3] = { | ||
+ | {1.757, 0.04, -0.028}, | ||
+ | {0.008, 1.767, -0.016}, | ||
+ | {-0.018, 0.077, 1.782} | ||
+ | }; | ||
+ | void setup() { | ||
+ | gyro.begin(); | ||
+ | accel.begin(); | ||
+ | compass.begin(); | ||
+ | barometer.begin(); | ||
+ | BPM180.begin(); | ||
+ | compass.calibrateMatrix(compassCalibrationMatrix, compassCalibrationBias); | ||
+ | compass.setRange(RANGE_4_GAUSS); | ||
+ | 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_BPM180(){ | ||
+ | float Pressure,Temp; | ||
+ | if(BPM180.read(1)) { | ||
+ | Pressure = BPM180.pressure; | ||
+ | Temp = BPM180.temperature; | ||
+ | Serial.print(Pressure); | ||
+ | Serial.print("/t"); | ||
+ | Serial.print(Temp); | ||
+ | } | ||
+ | else{ | ||
+ | Serial.println("HET OTBETA OT CEHCOPA"); | ||
+ | } | ||
+ | } | ||
+ | void Scan_IMU(){ | ||
+ | // считываем данные с акселерометра в единицах G | ||
+ | accel.readGXYZ(&ax, &ay, &az); | ||
+ | // считываем данные с гироскопа в радианах в секунду | ||
+ | gyro.readRadPerSecXYZ(&gx, &gy, &gz); | ||
+ | // считываем данные с компаса в Гауссах потому что можем | ||
+ | compass.readCalibrateGaussXYZ(&mx, &my, &mz); | ||
+ | // считываем азимут относительно оси Z | ||
+ | compass.readAzimut(); | ||
+ | // вывод угловой скорости в градусах в секунду относительно оси X | ||
+ | Serial.print(gyro.readDegPerSecX()); | ||
+ | Serial.print("\t"); | ||
+ | // вывод угловой скорости в градусах в секунду относительно оси Y | ||
+ | Serial.print(gyro.readDegPerSecY()); | ||
+ | Serial.print("\t"); | ||
+ | // вывод угловой скорости в градусах в секунду относительно оси Z | ||
+ | Serial.print(gyro.readDegPerSecZ()); | ||
+ | Serial.print("\t\t"); | ||
+ | // вывод направления и величины ускорения в м/с² по оси X | ||
+ | Serial.print(accel.readAX()); | ||
+ | Serial.print("\t"); | ||
+ | // вывод направления и величины ускорения в м/с² по оси Y | ||
+ | Serial.print(accel.readAY()); | ||
+ | Serial.print("\t"); | ||
+ | // вывод направления и величины ускорения в м/с² по оси Z | ||
+ | Serial.print(accel.readAZ()); | ||
+ | Serial.print("\t\t"); | ||
+ | // выводим азимут относительно оси Z | ||
+ | Serial.print(compass.readAzimut()); | ||
+ | Serial.print(" Degrees\t"); | ||
+ | // вывод значения абсолютного давления | ||
+ | Serial.print(barometer.readPressureMillibars()); | ||
+ | Serial.print("\t"); | ||
+ | // вывод значения температуры окружающей среды | ||
+ | Serial.print(barometer.readTemperatureC()); | ||
+ | Serial.print("\t"); | ||
+ | Serial.println(""); | ||
+ | } | ||
+ | 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() { | ||
+ | int Temp, Press, Humidity; | ||
+ | Temp = bme.readTempC(); // температура с датчика bme280 | ||
+ | Press = bme.readFloatPressure() / 133.3; // давление с датчика bme280 | ||
+ | Humidity = bme.readFloatHumidity(); // влажность с датчика bme280 | ||
+ | } | ||
+ | void loop() { | ||
+ | //P.S. оптимизация и вывод будут позже(после проверки на реальном стенде) | ||
+ | // ссылки на библиотеки будут после проверки работоспособности скетча на деле :D | ||
+ | |||
+ | } | ||
+ | </code> | ||
+ | </hidden> | ||
+ | \\ | ||
==== Разработка,конструирование и отладка системы пневматических стоек ==== | ==== Разработка,конструирование и отладка системы пневматических стоек ==== | ||
<hidden Описание от 14 января 2018 года> | <hidden Описание от 14 января 2018 года> | ||
Строка 147: | Строка 380: | ||
|Воздушный насос| 1 | | |Воздушный насос| 1 | | ||
|Механический обратный клапан| 1 | | |Механический обратный клапан| 1 | | ||
+ | </hidden> | ||
+ | |||
+ | <hidden Текст программы от 15 января 2018 года(наброски)> | ||
+ | <code asm> | ||
+ | #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() { | ||
+ | } | ||
+ | </code> | ||
</hidden> | </hidden> | ||
\\ | \\ |