Подключаю по такой схеме,ардуинка сгорела-вообще не отвечает.если вместо ардуинки подавать на мосфет 9v кроной ,то все щелкает отлично.если вместо батареи использовать крону то сил у актуатора не хватает.батарея от ибп 12в 7ач. Подскажите как сделать правильно.
http://www.pighixxx.com/test/portfolio-items/connect-a-dc-motor/ Но по такой схеме актуатор будет крутить только в одну сторону, т.к. реверса полярности нет. Для полноценного управления надо H-драйвер моторов, типа такого.
Решил не создовать новой темы, решил выложить тут. Долго искал как управлять линейным приводом (актуатор), в режиме отрыть, закрыть по времени. Вот скетч может кому-то будет полезно Код (C++): const int actuator_OP = 36; const int actuator_CL = 27; static byte cleaning; // необходимо создать счётчик переменную до цикла unsigned long previousMillis = 0; boolean opening = false; //флаг boolean stopping = false; void setup() { pinMode(actuator_OP, OUTPUT); pinMode(actuator_CL, OUTPUT); Serial.begin(9600); } void extendActuator() { digitalWrite(actuator_OP, HIGH); digitalWrite(actuator_CL, LOW); } void retractActuator() { digitalWrite(actuator_OP, LOW); digitalWrite(actuator_CL, HIGH); } void stopActuator() { digitalWrite(actuator_OP, LOW); digitalWrite(actuator_CL, LOW); } void loop() { if (millis() - previousMillis >= 1000) {// начало пауза, а потом работа cleaning++; Serial.println(cleaning); Serial.println(millis()); Serial.print("counter"); if (cleaning >= 5) { //interval *5 этап 1 extendActuator(); opening = true; Serial.print("OPEN");} //cleaning=0;} if((cleaning >= 7) && (opening == true) ) {//interval +5 +2 этап 2 stopActuator(); stopping = true; Serial.print("STOP");} if ((cleaning >= 12)&& (stopping == true)) {//interval +5 +2+5 этап 3 (этап 1= этап 3) retractActuator(); Serial.print("CLOSE"); cleaning =0; } previousMillis = millis(); } } и второй код, где действие повторяется несколько раз подряд Код (C++): const int actuator_OP = 36; //назначаем контакт для открытия const int actuator_CL = 27; //назначаем контакт для закрытия byte cleaning=0; // необходимо создать переменную до цикла unsigned long previousMillis = 0; void setup() { pinMode(actuator_OP, OUTPUT); pinMode(actuator_CL, OUTPUT); } void extendActuator() { digitalWrite(actuator_OP, HIGH); digitalWrite(actuator_CL, LOW); } void retractActuator() { digitalWrite(actuator_OP, LOW); digitalWrite(actuator_CL, HIGH); } void stopActuator() { digitalWrite(actuator_OP, LOW); digitalWrite(actuator_CL, LOW); } void loop() { //~~~~~~~~~~~~~~~~~~~~~~~работает нужно ~~~~~~~~~~~~~~~~~~~~~~~~~~~ while (cleaning<3){ // цикл выполняется, пока i меньше 3 extendActuator(); //сначало работа, а потом пауза delay(6000); stopActuator(); delay(3000); retractActuator(); delay(6000); stopActuator(); delay(3000); cleaning++; // изменение переменной } } Если кто подскажет как избавиться от delay() в последнем скетче буду очень признателен
да я в курсе про это, но если я из первого скетча дело перенесу во второй, он Заработает или придется немного допилить? В прошлой рас что-то пошло не так. Так и цель второго скетча бала в том что бы повторить тело кода n-количество раз
я попробывал ,и не заработало Код (C++): const int actuatori_OP = 36; //назначаем контакт для открытия const int actuator_CL = 27; //назначаем контакт для закрытия byte operating=0; // необходимо создать переменную до цикла static byte cleaning; // необходимо создать счётчик переменную до цикла unsigned long previousMillis = 0; boolean opening = false; //флаг boolean stopping = false; void setup() { pinMode(actuator_OP, OUTPUT); pinMode(actuator_CL, OUTPUT); Serial.begin(9600); } void extendActuator() { digitalWrite(actuator_OP, HIGH); digitalWrite(actuator_CL, LOW); } void retractActuator() { digitalWrite(actuator_OP, LOW); digitalWrite(actuator_CL, HIGH); } void stopActuator() { digitalWrite(actuator_OP, LOW); digitalWrite(actuator_CL, LOW); } void loop() { while (operating<3){ // цикл выполняется, пока i меньше 3 if (millis() - previousMillis >= 1000) { cleaning++; Serial.println(cleaning); Serial.println(millis()); Serial.print("counter"); if (cleaning >= 5) { //interval *5 этап 1 extendActuator(); opening = true; Serial.print("OPEN");} //cleaning=0;} if((cleaning >= 7) && (opening == true) ) {//interval +5 +2 этап 2 stopActuator(); stopping = true; Serial.print("STOP");} if ((cleaning >= 12)&& (stopping == true)) {//interval +5 +2+5 этап 3 (этап 1= этап 3) retractActuator(); Serial.print("CLOSE"); cleaning =0; } previousMillis = millis(); } operating++; } } не кидайте тапками, пока я это вижу так. но это не работает. поэтому и прошу подсказать