CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Arduino-механизм для нарезки пенки


Замечательный пример автоматизации при помощи Arduino — автоматический нарезальщик пенки.

Контроллер Arduino (автор использовал — Arduino Nano, но подойдёт и любой другой), пара шаговых двигателей NEMA 14 и пара драйверов для них — вот и вся электроника, которая потребуется для повторения данной конструкции.

Скетч (FoamCutter.ino):

//  FoamCutter - Driver for Actobotics FoamCutter
//
//  Compiler:      Arduino 1.6.1 on Windows 7
//
//  Dependencies:  Bounce2 Library (http://playground.arduino.cc/code/bounce)
//
//  Hardware:      Arduino Nano
//                 Pololu A4988 Stepper Driver with Voltage Regulator (Item # 1183)
//                 NEMA 14 1.5A 56oz-in for feeder & Cutter
//
//  2015.03.12 - Jurgen G. Schmidt - www.jgscraft.com
//
//-----------------------------------------------------------------------------
#include <Bounce2.h>                  // pushbutton debounce library
  
//--- Program control CONSTANTS --- kept at top for easy management
#define  DEBOUNCE_DELAY  5
#define  FEED_STEPS      865 // Feed motor is configured for half-step
//#define  CUT_STEPS       950 // 15-tooth pulley
#define  CUT_STEPS       1188 // 12-tooth pulley
  
#define  M_RIGHT    HIGH    // set cutter motor direction
#define  M_LEFT     LOW
  
//--- Hardware pin assignments
                                             
#define  LED_13     13      // Built-in LED
   
#define  MOT1_ENA   9       // Motor 1 enable - active low 
#define  MOT1_DIR   6       // Motor 1 direction
#define  MOT1_STP   7       // Motor 1 step
   
#define  MOT2_ENA   5       // Motor 2 enable - active low 
#define  MOT2_DIR   2       // Motor 2 direction
#define  MOT2_STP   4       // Motor 2 step
   
#define  PB_FEED    3       // PB to run feed motor one cycle
#define  PB_CUT     8       // PB to run cutter one cycle back and forth
#define  PB_RUN     12      // PB to run feed and cut 10 times
 
//--- instantiate button debouncers
   
Bounce FeedButton = Bounce();
Bounce CutButton = Bounce();
Bounce RunButton = Bounce();
   
//---------------------------- setup() ----------------------------------------
   
void setup() {
  pinMode( LED_13, OUTPUT );
  pinMode( MOT1_ENA, OUTPUT );      // add 10K to + to avoid jitter at startup
  pinMode( MOT1_DIR, OUTPUT );
  pinMode( MOT1_STP, OUTPUT );
  pinMode( MOT2_ENA, OUTPUT );      // add 10K to +
  pinMode( MOT2_DIR, OUTPUT );
  pinMode( MOT2_STP, OUTPUT );
  pinMode( PB_FEED, INPUT_PULLUP );
  pinMode( PB_CUT, INPUT_PULLUP );
  pinMode( PB_RUN, INPUT_PULLUP );
 
  FeedButton.attach( PB_FEED );
  FeedButton.interval( DEBOUNCE_DELAY );
  CutButton.attach( PB_CUT );
  CutButton.interval( DEBOUNCE_DELAY );
  RunButton.attach( PB_RUN );
  RunButton.interval( DEBOUNCE_DELAY );
 
  digitalWrite( MOT1_ENA, HIGH );          // motors off by default
  digitalWrite( MOT2_ENA, HIGH ); 
}

//---------------------------- loop() -----------------------------------------
//--- Wait for a button press and then call matching function
  
void loop() {
  FeedButton.update();
  CutButton.update();
  RunButton.update();
  
  if( FeedButton.fell() ) Feed();
  if( CutButton.fell() ) OneCut();
  if( RunButton.fell() ) Run();
}

//---------------------------- Feed() -----------------------------------------
//--- Feed motor operation
//
void Feed() {
  digitalWrite( LED_13, HIGH );
  digitalWrite( MOT1_ENA, LOW );      // power to stepper motor
  digitalWrite( MOT1_DIR, HIGH );     // select direction 
  for( int i; i<FEED_STEPS; i++ ) {
    digitalWrite( MOT1_STP, HIGH );
    delayMicroseconds( 10 );          // duration of step signal
    digitalWrite( MOT1_STP, LOW );
    delayMicroseconds( 1000 );        // pause between steps
  }
  digitalWrite( MOT1_ENA, HIGH );     // turn off motor - let things cool
  digitalWrite( LED_13, LOW );
}

//---------------------------- MoveBlade() ------------------------------------
//--- Move cutting head in desired direction
void MoveBlade( unsigned int mDir ) {
  digitalWrite( LED_13, HIGH );
  digitalWrite( MOT2_ENA, LOW );      // power to stepper motor
  digitalWrite( MOT2_DIR, mDir );     // select direction 
  for( int i; i<CUT_STEPS; i++ ) {
    digitalWrite( MOT2_STP, HIGH );
    delayMicroseconds( 10 );          // duration of step signal
    digitalWrite( MOT2_STP, LOW );
    delayMicroseconds( 1000 );        // pause between steps
  }
  digitalWrite( MOT2_ENA, HIGH );     // turn off motor - let things cool
  digitalWrite( LED_13, LOW );
}  

//---------------------------- OneCut() ---------------------------------------
//--- Perform a single cut - blade moves back and forth to return it home
void OneCut( void ) {
  MoveBlade( M_RIGHT );
  MoveBlade( M_LEFT );
}

//---------------------------- Run() ------------------------------------------
//--- Perform multiple cuts
void Run( void ) {
  for( int i=0; i<5; i++ ) {
    Feed();
    MoveBlade( M_RIGHT );
    Feed();
    MoveBlade( M_LEFT );
  }
}

//-----------------------------------------------------------------------------
//------ end of FoamCutter.ino ------


Ссылки
Robot Foam Cutter

По теме
Автомат для нарезания провода
Робо-программатор
Укладчик футболок на базе Arduino-робота
Контроль температуры воды в газовой колонке при помощи Arduino
Arduino для автоматизации кофейного автомата
Arduino для автоматизации снекового автомата
  • 0
  • 6 апреля 2015, 13:06
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.