помогите со скетчем Проект такой . АВТОМАТИЧЕСКИЙ НАМОТЧНЫЙ станок катушек!! стоит двигатель с редуктором включается с помощью реле, на двигателе стоит геркон который считает оборты , кнопка запуска 01 int relayPin = 7;//к этому пину подключено реле 02 int buttPin = 2;//кнопка 03 int gerkoPin = 3;//геркон 04 int i = 0;//счетчик 05 void setup() { 06 pinMode(relayPin, OUTPUT); 07 pinMode(gerkoPin, INPUT); 08 digitalWrite(relayPin, 0); 09 attachInterrupt(0, tap, RISING);//прерывания на кнопку 10 Serial.begin(9600); 11 } 12 bool isOn = false; 13 void loop() { 14 while(isOn) 15 { 16 if (digitalRead(gerkoPin) == 1) 17 { 18 i++; 19 if (i == 10) 20 { 21 digitalWrite(relayPin, 0);//выключаем реле 22 isOn = false; 23 } 24 while(digitalRead(gerkoPin) == 1) {} 25 } 26 Serial.println(i); 27 } 28 delay(50); 29 } 30 void tap() 31 { 32 i = 0; 33 digitalWrite(relayPin, 1);//включаем реле 34 isOn = true; 35 //attachInterrupt(1, gerkonOn, RISING);//вешаем прерывания на геркон Если геркон на замыкания то RISING если на размыкания то FALLING 36 } с помощью шагового двигателя двигается головка с проводом 01 #include <Stepper.h> 02 #define STEPS 200 //Количество шагов 03 Stepper stepper(STEPS, 8, 9, 10, 11); // пины к которым подключен двигатель 04 void setup(){ 05 stepper.setSpeed(130); //скорость вращения 06 } 07 void loop() 08 { 09 stepper.step(10*STEPS); 10 delay(1000); 11 stepper.step(-10*STEPS); 12 delay(1000); 13 } помогите чтобы все работала от одной кнопки, нажал старт , запустился редуктор и шаговый двигатель , когда реле выключилось все остановилось. нажал опять старт чтобы шаговый двигатель в свое первоначальное состояние Кто может со скетчем ЗА РАННИЕ СПАСИБО
Делаю перемоточный станок для своих целей. Правда мотаю не медную проволоку, а пластиковый пруток на экструзионной линии. Принцип механики такой же. За исключением счетчика оборотов. У меня там не кнопка, а датчик холла + энкодер. Датчик холла для точного вычисления одного оборота, а энкодер для определения направления вращения и приблизительной скоорости. Так же планирую поставить ультразвуковой сенсор для вычисления объема текущей намотки и автокалибровки каретки укладчиика по краям бобины. Arduino стоит в распечатанном на 3D принтере корпусе. На верхней панели, 4 кнопки, 2 светодиода, дисплей на 4 строки и ручка энкодера для навигации по меню и изменения настроек. Старт намотки происходит с одной кнопки. Базовая логика намотки такая: 1. Ловим нажатие на кнопку СТАРТ. 2. Возврат каретки укладчика в 0 позицию. 3. Плавный разгон двигателя намотки до максимально заданных оборотов. 4. Смещение каретки на заданный в настройках шаг по каждому срабатыванию датчика холла. 5. При достижении 98% намотки, плавное снижение скорости до минимально заданной. 6. При достижении 100% намотки остановка. Ну и все это обвязано дополнительной логикой не относящейся напрямую к намотчику. Пока не все доделал, не весь скетч дописал и протестировал но сложностей в написании скетча не вижу. На чем конкретно возникли затруднения?
Код могу написать. Присылайте схему и т.з., что куда при каком нажатии, я код напишу и проверю. А схема нужна еще и для того, чтобы я проверил, правильно ли вы спроектировали и собрали схему. Мой мыл ydom coбakа mail.ru
Спасибо. У меня по проще. Нашел код. Соственно при нажатии на кнопку, шаговик делает несколько оборотов. В частности при радиусе 7.5 см получается один метр кабеля. Код (C++): // Troyka-Stepper подключён к следующим пинам: const byte stepPin = 7; const byte directionPin = 8; const byte enablePin = 11; const byte buttonPin = 2; // кнопка подключается между пином и GND // Выдержка для регулировки скорости вращения unsigned int delayTime = 1; void setup() { // Настраиваем нужные контакты на вход и выход pinMode(buttonPin, INPUT_PULLUP); pinMode(stepPin, OUTPUT); pinMode(directionPin, OUTPUT); pinMode(enablePin, OUTPUT); // Отключаем двигатель digitalWrite(enablePin, LOW); } void loop() { // если кнопка нажата if(!digitalRead(buttonPin)) { // Подаём питание на двигатель digitalWrite(enablePin, HIGH); // Задаём направление вращения по часовой стрелке digitalWrite(directionPin, HIGH); // Делаем 200 шагов //Делаем вращение 1 м при радикусе 7,5см for (int i = 0; i < 450; ++i) { // Делаем шаг digitalWrite(stepPin, HIGH); delay(delayTime); digitalWrite(stepPin, LOW); delay(delayTime); } //... на три секунды delay(1000); // Отключаем двигатель digitalWrite(enablePin, LOW); } }