Arduino krokohrátky 1

Začneme tím nejjednodušším, tedy řízením rychlosti otáčení krokového motoru potenciometrem.

Ve zkušebním zapojení bylo použito zcela standardní Arduino UNO, doplněné Connector shieldem, driver SMCB10 s obvodem A3982 a běžný krokový motor velikosti NEMA 17.

Doporučené vybavení:

Program bude samozřejmě fungovat i s libovolným jiným driverem, řízeným signály STEP a DIR a jakýmkoli bipolárním krokovým motorem.

Blokové schéma:

Pokud nemá váš driver k dispozici výstup pro napájení externích zařízení s napětím 5 V, je nutno zjistit samostatné napájení Arduina napětím velikosti 7 až 12 V nebo ho trvale napájet z USB portu.

Názorný obrázek zapojení:

Program:

Program je určen pro spolupráci s drivery řízenými signály STEP a DIR.

Nepřehlédněte, že program používá knihovnu AccelStepper a pokud potřebujete motor připojit jiným způsobem, prostudujte nejprve příručku.

Potenciometr je možno připojit na kterýkoli z analogových vstupů Arduina, ale v programu je třeba patřičně upravit tuto definici:

SPEED_PIN 5

Maximální rychlost otáčení motoru určena konstantou:

MAX_SPEED 2000 (kroky za sekundu)

a minimální rychlost konstantou:

MIN_SPEED 0 (kroky za sekundu)

/*
StepperPotControl.ino
Jednosměrné řízení rychlosti otáčení krokového motoru potenciometrem
Driver STEP / DIR (SMCB10), motor MEMA 17 generic
JeDe robot s.r.o., říjen 2019
www.edurobot.cz
www.robodoupe.cz
*/ 

#include <AccelStepper.h>
// Knihovna AccelStepper
 
AccelStepper stepper1(AccelStepper::DRIVER, 2, 3);
// STEP (2), DIR (3)
// Nastavení druhu řídícího rozhraní a přiřazení pracovních pinů
// Viz příručka knihovny AccelStepper

// přiřazení pinů
#define  SPEED_PIN 5
// Potenciometr (1-10k) je připojen na vstup A5
 
// konstanty
#define  MAX_SPEED 2000
#define  MIN_SPEED 0
// Nastavení maxima a minima rychlosti otáčení motoru v krocích za sekundu

// proměnné
float current_speed = 0.0;        // Okamžitá rychlost otáčení motoru v krocích za sekundu
int analog_value = 0;             // Okamžitá hodnota napětí na analogovém vstup A5
                                  // určuje rychlost otáčení motoru.

// ZAČÁTEK PROGRAMU 
void setup()
{
  // Knihovně AccelStepper předáme maximální rychlost otáčení motoru
  stepper1.setMaxSpeed(MAX_SPEED);
}
 
void loop()
{
  analog_value = analogRead(SPEED_PIN);
   // Přečteme hodnotu z pinu A5 (0 až 1023)…
    
  current_speed = (((analog_value/1023.0) * (MAX_SPEED - MIN_SPEED)) + MIN_SPEED);
  // … a přepočteme ji na rychlost otáčení motoru
    
  stepper1.setSpeed(current_speed);
  // Nastavíme novou rychlost otáčení…
  
  stepper1.runSpeed();
  // … a předáme driveru
}