Arduino Uno + Lcd Keypad + Шаговый двигатель. Не могу подключить, кто может помочь?
- Войдите на сайт для отправки комментариев
Пнд, 02/09/2019 - 13:21
Всем добрый день!)
Не могу подключить всё это (Arduino Uno + Lcd Keypad + Шаговый двигатель) правильно.
Так, как Lcd Keypad ставится сверху Ардуинки, то я запутался в портах, куда и в какие, мне подключать 4 провода от Контроллера?
Может кто сможет помочь, в какие порты назначен контроллер и куда всё подключать?
Код брал с другого ресурса и честно говоря, не сильно в нём разбираюсь.
Понимание лишь поверхностное, каюсь!
Вот сам код:
// ASTRODUINO - STARTRACKER // motorisation d'une "planchette equatoriale" a tige filetée courbée // controle de vitesse du moteur PAP par gestion du delai "microseconde" entre les fronts montants et descendants // compteur de temps de poursuite en utilisant un timer #include <TimerOne.h> // librairie pour le timer d'horloge #include <LiquidCrystal.h> // librairie ecran LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // declaration des pins utilisées par l'ecran lcd #define motorPinStep 13 // commande de pas moteur sur pin 13 #define motorPinDir 12 // commande de direction du moteur sur pin 12 int adc_key_val[5] ={50, 200, 400, 600, 800 }; // valeurs analogiques des boutons int NUM_KEYS = 5; // declaration du nombre de boutons int adc_key_in; // valeur analogique du bouton appuyé int key=-1; // int isRun; // variable "en marche" ou "arret" int DelaiPas = 458; // delai en microsecondes entre chaque pas moteur int minspeed = 8000; // delai max pour vitesse minimum char message[16] = ""; // taille d'une ligne de l'ecran pour affichage de l'horloge int heures,minutes,secondes; // variables pour horloge volatile unsigned long blinkCount = 0; //iterations du timer ///////////////////////////////////////////////////////////////////////////// void Horloge(void) // fonction d'interruption timer pour affichage de l'horloge { blinkCount = blinkCount + 1; // incrementation du timer // on commence par gérer le temps qui passe... secondes++; if(secondes == 60) // une minute est atteinte ? { secondes = 0; // on recompte à partir de 0 minutes++; } if(minutes == 60) // une heure est atteinte ? { minutes = 0; heures++; } if(heures == 24) // une journée est atteinte ? { heures = 0; } sprintf(message,"%2d:%2d:%2d",heures,minutes,secondes); // formatage de l'horloge lcd.setCursor(8,0); lcd.write(message); } ////////////////////////////////////////////////////////////////////// void motorrun() // fonction moteur { digitalWrite( 13 , HIGH ); delayMicroseconds( DelaiPas ); digitalWrite( 13 , LOW ); delayMicroseconds( DelaiPas ); } ///////////////////////////////////////////////////////////////////////////// void setup() { pinMode( 12 , OUTPUT); // declaration des broches en sorties pinMode( 13 , OUTPUT); // digitalWrite( 12 , HIGH ); // on fixe le sens de rotation heures = 0; // minutes = 0; // initialisation des variables de temps secondes = 0; // Timer1.initialize(1000000); // initialisation du timer (1000000 de microsecondes = 1 seconde) Timer1.attachInterrupt(Horloge); // affectation d'une fonction d'interruption ( quoi faire a chaque interruption du timer) Timer1.stop(); // on stop le timer pour empecher le debut du compte lcd.clear(); // efface l'ecran lcd.begin(16, 2); // initialise l'ecran lcd.setCursor(0,0); // place le curseur au premier caractere de la premiere ligne lcd.print("***ASTRODUINO***"); lcd.setCursor(0,1); lcd.print("**STAR-TRACKER**"); delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Stopped 0: 0: 0"); lcd.setCursor(0,1); lcd.print("Delay= "); lcd.print(DelaiPas); lcd.print(" Msec"); isRun = 0; } ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// void loop() { adc_key_in = analogRead(0); // lire la valeur du capteur key = get_key(adc_key_in); // convertir en " qulle touche a ete appuyée" if (key >= 0) // si appui d'une touche detecté.. { if (key == 1) { DelaiPas += 1; delay(150); } if (key == 2 && DelaiPas > 0) { DelaiPas -= 1; delay(150); } if (key == 0) { DelaiPas += 10; delay(150); } if (key == 3) { DelaiPas -= 10; delay(150); } if (DelaiPas>minspeed) { DelaiPas = minspeed; } if (DelaiPas<-minspeed) { DelaiPas = -minspeed; } if (key == 4) { // si touche " select " appuyée > "running" ou "stopped" isRun = 1 - isRun; // bascule logique > si "marche" alors "arret" et vice versa lcd.setCursor(0,0); if (isRun == 1) { lcd.print("Running"); } else { lcd.print("Stopped"); Timer1.stop(); // arret du timer (donc de l'horloge) quand passage de running a stopped } delay(150); } lcd.setCursor(0, 1); lcd.print("Delay= "); lcd.print(DelaiPas); lcd.print(" Msec "); delay(50); } if (isRun == 1) { // si "running"... motorrun(); // ... fonction moteur... Timer1.resume(); //... reprise de l' horloge } } // fonction destinée a savoir quelle touche a ete appuyée int get_key(unsigned int input) { int k; for (k = 0; k < NUM_KEYS; k++) { if (input < adc_key_val[k]) return k; } if (k >= NUM_KEYS) k = -1; // No valid key pressed return k; }
А в оригинале (откуда скетч утянут) драйвер шагового двигателя такой как на фото был?
Думаю, что нет. Судя по скетчу, нужен драйвер, управляемый по двум линиям Step и Direction. И эти линии драйвера должны подключаться к 13 и 12 пинам ардуино/шилда (опять же по скетчу).
А у драйвера на фото надо самому в определённом порядке четырьмя его ногами дёргать. Этот скетч такого не делает.
Так что придётся или всё-таки разбираться или воспроизводить оригинальную схему точно.
А в оригинале (откуда скетч утянут) драйвер шагового двигателя такой как на фото был?
Думаю, что нет. Судя по скетчу, нужен драйвер, управляемый по двум линиям Step и Direction. И эти линии драйвера должны подключаться к 13 и 12 пинам ардуино/шилда (опять же по скетчу).
А у драйвера на фото надо самому в определённом порядке четырьмя его ногами дёргать. Этот скетч такого не делает.
Так что придётся или всё-таки разбираться или воспроизводить оригинальную схему точно.
Да, там драйвер другой :(
А как прикрутить функционал (отображение таймера и задержек) этого скетча к моему шаговому?
Я просто уже столько перелопатил...
Сейчас дам фото с оригинальной статьи, вот:

Так что придётся или всё-таки разбираться или воспроизводить оригинальную схему точно.
перевожу для ТС, а то боюсь он не поймет: с этим кодом этот драйвер мотора РАБОТАТЬ НЕ БУДЕТ.
Либо меняйтедрайвер, либо переписывайте код.
А как прикрутить функционал (отображение таймера и задержек) этого скетча к моему шаговому?
Для вас, думаю, самое простое будет поменять драйвер.
Да, именно так. Купите этот самый "Easy driver" и всё должно заработать. Моторчик, который обычно в комплекте с Вашим драйвером продаётся, скорее всего подойдёт. Так что только плату драйвера заменить.
Хотя за моторчик может и вру. Проверить, кто он там такой не помешает.
А как прикрутить функционал (отображение таймера и задержек) этого скетча к моему шаговому?
Для вас, думаю, самое простое будет поменять драйвер.
Вас понял, вот печаль же((
А тут могут помочь с написанием?
Я честно пытался дважды вникнуть, не выходит.
Или, к примеру, есть очень даже рабочий код с моим контроллером, даже проверял, но опять же, там выражено не в задержке(как выше на экране), а в скорости вращения, а я тупо не могу найти как высчитать под мои параметры эту скорость.
Вот код второго автора, который работает с моими железяками, так сказать:
Вот две статьи, с которых брал пример, может вам понятнее будет:
https://www.thingiverse.com/thing:1719566
https://habr.com/ru/post/227499/
Это в разделе "Ищу исполнителя" темку создайте.
Только купить подходящие детали, по-моему, дешевле выйдет :)
Не могу подключить всё это (Arduino Uno + Lcd Keypad + Шаговый двигатель) правильно.
Код брал с другого ресурса и честно говоря, не сильно в нём разбираюсь.
Понимание лишь поверхностное, каюсь!
У тебя есть 3 варианта действий.
1. Не хочешь разбираца - делай всё как в оригинальном проекте.
2. Надо изменить первоначальный проект - придется читать книшки и начинать разбираться, спрашивая форум именно по своему коду, а не чужому.
3. Всё-таки разбираться не хочется, а сделать надо - идти в соотвецтвующий раздел и искать исполнителя за деньги. Просто так за тебя здесь никто ничо точно делать не будет.
С изидрайвером такой мотор работать не будет, если ему один провод не почикать.
С изидрайвером такой мотор работать не будет, если ему один провод не почикать.
Точно, он же униполярный там, а Изи биполярными управляет.
Не могу подключить всё это (Arduino Uno + Lcd Keypad + Шаговый двигатель) правильно.
Код брал с другого ресурса и честно говоря, не сильно в нём разбираюсь.
Понимание лишь поверхностное, каюсь!
У тебя есть 3 варианта действий.
1. Не хочешь разбираца - делай всё как в оригинальном проекте.
2. Надо изменить первоначальный проект - придется читать книшки и начинать разбираться, спрашивая форум именно по своему коду, а не чужому.
3. Всё-таки разбираться не хочется, а сделать надо - идти в соотвецтвующий раздел и искать исполнителя за деньги. Просто так за тебя здесь никто ничо точно делать не будет.
В общем, проблема решена, код на писан и даже меню есть)))
Если что, пусть нуждающиеся обращаются!)
Здравствуйте! Собираю такой же аатротрэкер на этом же наборе железок. Не поделитесь вашим скетчем?
Конечно поделюсь, мне не сложно!
Как вам его передать?