Archive for Speciální díly

Merkurino 01 – připojení motorů s PWM

Pokud chceme připojit k merkurinu přímo jeden až tři motory, použijeme obvykle toto zapojení:

merkurino-01-připojení motoru

Doporučené napětí je 9V dc.

Na Merkurinu jsou vyvedeny všechny PWM výstupy nahoře na dvouřadém konektoru (out-pwm).

Výstupy označené 3 5 6 9 10 11 odpovídají na arduinu D3, D5, D6, D9, D10 a D11.
Horní řada jsou země (gnd).
Neosazené 2 otvory jsou připraveny pro ty, kteří potřebují dalších +5V.

Abychom mohli připojit motory k procesoru, musíme použít zesilovač proudu, takzvané H-můstky. Na obrázku jsou vpravo.

Poznámka: H-můstky jsou oddělené od ostatních součástek, společná je pouze zem (gnd).

Vstupy s TTL logikou jsou přes nezámkový jednořadý konektor.
Výstupy jsou zámkové „bílé“ konektory, zapojené signál-zem-signál.
Předtím, než motory připojíte, můžete sledovat výstupní signál (napětí) přes dvojici antiparalelních LED.

Pokud potřebujete otočit směr motoru a nechcete zasahovat do kódu programu, nemusíte přepojovat motor, ale stačí přehodit (otočit) vstupy.

Pro napájení můstků můžete použít jeden ze dvou způsobů:

  1. hlavní vstupní napětí zleva, konektor A1 powerjack.
    V tom případě spojíte spojkou (zde červený jumper vpravo)
  2. externí napětí od 3V do 9V na konektoru PwrBridge vpravo nahoře.
    V tom případě MUSÍTE rozpojit červený jumper – napájecí napětí by se „pohádala“ a deska by „shořela“.

UPOZORNĚNÍ: Nezapomínejte na maximální výkonovou ztrátu h-můstků (to je maximální odebíraný proud motorů). Doporučené je použití PWM od 30%, pak zvyšujete výkon a prstem můžete otestovat, jestli se můstky (pod LCD displejem vlevo) nadměrně nezahřívají.

Zkouška teploty: připojím motor a postupně navyšuji výkon

analogWrite(3, fadeValue); 
//3 = výstup D3; fadeValue = výstupní PWM "výkon" , hodnota plnění je 0 až 255

pokud prst udržím = ok,
pokud se zahřeje během 5 sekund tak, že neudržím prst = něco je špatně.

Testovací program je zde:

//Sample using LiquidCrystal library
#include <LiquidCrystal.h> 
/*******************************************************
 upravil Ladislav Vohralik 2015, MerkurRobot.cz
********************************************************/
// select the pins used on the LCD panel
LiquidCrystal lcd(13, 12, 8, 7, 4, 2);
// define some values used by the panel and buttons
int lcd_key = 0;
int adc_key_in = 0;
int motor_sel =0;
int motor1_speed = 0;
int motor2_speed = 0;
int motor3_speed = 0;
int motor1a_out = 3;    // motor 1a connected to PWM digital pin 3
int motor1b_out = 5;    // motor 1a connected to PWM digital pin 5
int motor2a_out = 6;    // motor 1a connected to PWM digital pin 6
int motor2b_out = 9;    // motor 1a connected to PWM digital pin 9
int motor3a_out = 10;    // motor 1a connected to PWM digital pin 10
int motor3b_out = 11;    // motor 1a connected to PWM digital pin 11
int x =0; // pomocná 
int y =0; // pomocná 
int fadeValue = 0;

#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnESC 5
#define btnNONE 6
// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // 
if (adc_key_in < 12) return btnESC; 
if (adc_key_in < 25) return btnLEFT;
if (adc_key_in < 111) return btnDOWN;
if (adc_key_in < 222) return btnUP;
if (adc_key_in < 555) return btnRIGHT;
if (adc_key_in < 850) return btnSELECT;

return btnNONE; // when all others fail, return this...
}
void setup()
{
  lcd.begin(16, 2); // start the library
  lcd.setCursor(0,0);
  lcd.print("motor/speed"); // print a simple message
  // set motor: up/down
  // motor: 1..3
  // motor=4 all=stop Low
  // motor=0 lock setting
  // set speed: left/right 
  // speed: -99..0..99%

}
void loop()
{
   // test output ----------------- 
  for(fadeValue = -255 ; fadeValue <= 255; fadeValue +=25) { 
    // sets the value (range from 0 to 255):
    if  (fadeValue >= 0) {
       analogWrite(3, fadeValue);
       analogWrite(5, 0);
    }
    x = abs(fadeValue);
    x = x * 1;
    if  (fadeValue < 0) {
       analogWrite(3, 0);
       analogWrite(5, x);
    }
    vypis_na_lcd();
    // wait for 550 milliseconds to see the dimming effect    
    delay(550);                            
  } 
  for(int fadeValue = 255 ; fadeValue > -255; fadeValue -=25) { 
    // sets the value (range from 0 to 255):
    if  (fadeValue >= 0) {
       analogWrite(3, fadeValue);
       analogWrite(5, 0);
    }
    x = abs(fadeValue);
    x = x * 1;
    if  (fadeValue < 0) {
       analogWrite(3, 0);
       analogWrite(5, x);
    }
    
    // wait for 550 milliseconds to see the dimming effect    
    delay(550);                            
  } 
  
     // konec test output ----------------- 

  lcd.setCursor(0,1); // move to the begining of the second line
  lcd_key = read_LCD_buttons(); // read the buttons
  switch (lcd_key) // depending on which button was pushed, we perform an action
    {
    case btnRIGHT:
      {
      //set speed up
      if ((motor_sel == 1) and (motor1_speed < 99)) { 
        motor1_speed = motor1_speed + 11;
        lcd.setCursor(3,1);
        //lcd.print("");
        lcd.print(motor1_speed);
        lcd.print(" ");
        x = abs(motor1_speed);
        if (motor1_speed > 0) {
          analogWrite(motor1a_out, x); 
          analogWrite(motor1b_out, 0);         
        }
        if (motor1_speed <= 0) {
          analogWrite(motor1a_out, 0); 
          analogWrite(motor1b_out, x);  
        }
      }
      delay(100);
      break;
      }
    case btnLEFT:
      {
      //set speed down
      if ((motor_sel == 1) and (motor1_speed > -99)) { 
        motor1_speed = motor1_speed - 11;
        lcd.setCursor(3,1);
        //lcd.print("");
        lcd.print(motor1_speed);
        lcd.print(" ");
      }
      delay(100);
      break;
      }
    case btnUP:
      {
      //select motor
      if (motor_sel < 3) { 
        motor_sel = motor_sel+1;
        lcd.setCursor(1,1);
        //lcd.print(" m");
        lcd.print(motor_sel);
      }
      delay(300);
      break;
      }
    case btnDOWN:
      {
      //select motor
      if (motor_sel > 1) { 
        motor_sel = motor_sel-1;
        lcd.setCursor(1,1);
        //lcd.print("");
        lcd.print(motor_sel);
      }
      delay(300);
      break;
      }
    case btnSELECT:
      {
      lcd.print("SELECT ");
      break;
      }
    case btnESC:
      {
      lcd.print("ESC    ");
      break;
      }
    case btnNONE:
      {
      lcd.setCursor(0,1);
      lcd.print("M");
      break;
      }
    }
    
    lcd.setCursor(8,0);
    //lcd.print(motor_sel);
    //lcd.print(" ");
    lcd.print("m");
    lcd.print(motor1_speed);
    lcd.print("x");
    lcd.print(x);
      
}  // konec loop ------------

int test_output(int x,int y){   //  funkce test_output ------------
  int led_1 = x;
  int led_2 = y; 
  // fade in from min to max in increments of 5 points:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(led_1, fadeValue);         
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  } 
  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(led_1, fadeValue);         
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  } 
  int result = led_1;
  return result;
}  // konec funkce test_output ------------

int vypis_na_lcd(){
    lcd.setCursor(0,0);
    lcd.print(" x ");
    lcd.print(x);
    lcd.print(" y ");
    lcd.print(fadeValue);
    lcd.print(" ");
    
}

 

Světla pro auto

Pořád  jsem toužil po hezkých světlech pro merkurovská vozidla

Parametry:

napájení:  4-6 V
přední: blikačky – dálková – potkávací
zadní: blikačky – zadní – brzdová

Společná zem – nelze připojit k otevřenému kolektoru, možno připojit přímo k Arduinu, viz video.

rozměry:  10x40mm, upevňovací díry 4mm, rozteč 10mm




Přední světla



Výpis programu pro arduino (4x světla 3G):

/*
 Svetla u auta, 12x, demonstrace všech světel
 
            vlevo       vpravo
            left        right
 front     2, 3, 4     5, 6, 7
 predni    0, 1, 2     3, 4, 5
 
 back      8, 9, 10    11, 12, 13
 zadni     6, 7, 8      9, 10, 11
 
 Programování pomocí Arrays, LED mají spolecnou zem - GND
 
 The circuit:
 * LEDs from pins 2 through 13 to ground
 
 created 2012
 by Ladislav Vohralik
 */

int timer = 500;           // The higher the number, the slower the timing.
int ledPins[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
           // 2, 7, 4, 6, 5, 3 an array of pin numbers to which LEDs are attached
int pinCount = 12;           // 6 the number of pins (i.e. the length of the array)

void setup() {
  int thisPin;
  // the array elements are numbered from 0 to (pinCount - 1).
  // use a for loop to initialize each pin as an output:
  for (int thisPin = 0; thisPin < pinCount; thisPin++)  {
    pinMode(ledPins[thisPin], OUTPUT);
  }
}

void light_on() { //rozsvitit 4, 5, 10, 11  
  digitalWrite(ledPins[2], HIGH);
  digitalWrite(ledPins[3], HIGH);
  digitalWrite(ledPins[8], HIGH);
  digitalWrite(ledPins[9], HIGH);
    delay(timer);
}
void light_off() { //zhasnout 4, 5, 10, 11
  digitalWrite(ledPins[2], LOW);
  digitalWrite(ledPins[3], LOW);
  digitalWrite(ledPins[8], LOW);
  digitalWrite(ledPins[9], LOW);
  delay(timer);
}
void beam_on() { //rozsvitit 3, 6
  digitalWrite(ledPins[1], HIGH);
  digitalWrite(ledPins[4], HIGH);
  delay(timer);
}
void beam_off() { //zhasnout 3, 6
  digitalWrite(ledPins[1], LOW);
  digitalWrite(ledPins[4], LOW);
  delay(timer);
}
void break_on() { //rozsvitit 9, 12
  digitalWrite(ledPins[7], HIGH);
  digitalWrite(ledPins[10], HIGH);
  delay(timer);
}
void break_off() { //zhasnout 9, 12
  digitalWrite(ledPins[7], LOW);
  digitalWrite(ledPins[10], LOW);
}
void go_left() { // blika 2, 8
  digitalWrite(ledPins[0], HIGH);
  digitalWrite(ledPins[6], HIGH);
  delay(timer);
  digitalWrite(ledPins[0], LOW);
  digitalWrite(ledPins[6], LOW);
  delay(timer);
}
void go_right() { // blika 7, 13
  digitalWrite(ledPins[5], HIGH);
  digitalWrite(ledPins[11], HIGH);
  delay(timer);
  digitalWrite(ledPins[5], LOW);
  digitalWrite(ledPins[11], LOW);
  delay(timer);
  
}
void crash() {
  for (int thisPin = 0; thisPin < pinCount; thisPin++) {
    // turn the pin on:
    digitalWrite(ledPins[thisPin], HIGH);
  }
  delay(timer);
  for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) {
    // turn the pin off:
    digitalWrite(ledPins[thisPin], LOW);
  }
}
void parking() {
  digitalWrite(ledPins[0], HIGH);
  digitalWrite(ledPins[6], HIGH);
  digitalWrite(ledPins[5], HIGH);
  digitalWrite(ledPins[11], HIGH);
  delay(timer);
  digitalWrite(ledPins[0], LOW);
  digitalWrite(ledPins[6], LOW);
  digitalWrite(ledPins[5], LOW);
  digitalWrite(ledPins[11], LOW);
  delay(timer);
  
}
void bargraf() {
  // loop from the lowest pin to the highest:
  for (int thisPin = 0; thisPin < pinCount; thisPin++) {
    // turn the pin on:
    digitalWrite(ledPins[thisPin], HIGH);
    delay(timer);
    // turn the pin off:
    digitalWrite(ledPins[thisPin], LOW);    

  }

  // loop from the highest pin to the lowest:
  for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) {
    // turn the pin on:
    digitalWrite(ledPins[thisPin], HIGH);
    delay(timer);
    // turn the pin off:
    digitalWrite(ledPins[thisPin], LOW);
  }
}

void loop() {
 light_on();  // rozsvitit svetla 4, 5, 10, 11
// light_off(); // zhasnout svetla 4, 5, 10, 11
 beam_on();   // rozsvitit dalkova 3, 6 
 beam_off();  // zhasnout dalkova 3, 6
 break_on();  // rozsvitit brzdova 9, 12
 break_off(); // zhasnout brzdova 9, 12
 go_left();   // blika doleva 2, 8
 go_left();   // blika doleva 2, 8
 go_left();   // blika doleva 2, 8
 go_left();   // blika doleva 2, 8
 go_right();  // blika doprava 7, 13
 go_right();  // blika doprava 7, 13
 go_right();  // blika doprava 7, 13
 go_right();  // blika doprava 7, 13
 
 light_off(); // zhasnout svetla 4, 5, 10, 11
 crash();     // blikaji vsechna svetla
 parking();   // blikaji vsechny smerovky
 bargraf();   // rozsveceni dokola

 light_on();  // rozsvitit svetla 4, 5, 10, 11  
 beam_on();   // rozsvitit dalkova 3, 6 
 parking();   // blikaji vsechny smerovky
 parking();   // blikaji vsechny smerovky
 parking();   // blikaji vsechny smerovky
 parking();   // blikaji vsechny smerovky
 parking();   // blikaji vsechny smerovky
 parking();   // blikaji vsechny smerovky
 delay(timer);
}

Točna v.3

Jak vytvořit točnu na velké zatížení, která má i možnost v ose vést kabeláž?

Po mnohých zkoumání přinášíme novou finální verzi 3.

Rozměry ke stažení zde:  lozisko_axialni_v3_dokumentace

Co je nového:

  • nahrazení vnitřních distančních sloupků dutým plastovým válcem
  • zmenšení počtu otvorů a zesílení plechu na 2mm -> zvětšení tuhosti a nosnosti
  • zesílení plechu umožnilo zvětšit středový otvor na 26mm
  • možnost přišroubovat ozubené kolo z Merkuru
  • možnost přišroubovat velké kladkové kolo – pro převod použít vhodné „O-kroužky“
  • při potřebě větší síly (momentu) stačí kola znásobit za použití delších šroubků M3 (vhodné pro vymezení vůlí)
  • O-kroužky jsou vhodné také z jiného důvodu – mohou „proklouznout“, když bude potřeba, aby se nestrhl motor nebo zuby, když vám někdo nebo něco škubne s jeřábem (někdo = šikovné dítko, něco = pád na zem 🙂 )

Točna-v3 pohled ze zdola - pohled na uchycující šroubky M3

Točna-v3 s velkým kladkovým kolem

Točna-v3 pohled ze shora

Točna-v3 pohled z boku

Objednat můžete např. zde:

Spojka Flexi

Spojky flexi

Objevili jsme něco, co pomáhá správně připojit motor ke hřídeli, takzvanou flexi spojku.

Spojka se skládá ze třech částí, dvě ozubené bočnice, které jsou spojeny tak akorát pružným válečkem, který vymezí mírnou nesouosost dvou hřídelí.

Typické použití je připojení motoru.

Objednat můžete např. zde:

Spojka flexi frézovaná

Spojka pro menší průměry se obvykle frézuje.

Spojka flexi odlitá

Spojka pro větší rozměry můře být i odlévaná z lehké kovové slitiny.

Spojka flexi sestava

Příklad použití spojky ke spojení motoru s hnaným válcem

Držák serva

Držák serva Vigor VS-2

Držák serva Vigor VS-2 zezadu

Zde je naše řešení přichycení modelářského serva VS-2 k Merkuru

Možné jsou i různé barevné varianty.

Koupit je možno zde :

Držák serva Vigor VS-2 šikmo zezadu

Šikmý pohled

Ozubená kola

současná ozubená kola

Ozubené kolo 1045x

Plastové ozubené kolo

ocelový náboj,  stavěcí šroub M3

šest otvorů

průměr roztečné kružnice 30 mm

50 zubů

modul 0,6

Ozubené kolo 1047x

Plastové ozubené kolo

ocelový náboj, stavěcí šroub M3

2x šest otvorů

průměr roztečné kružnice 50 mm

85 zubů

modul 0,6

Ozubené kolo 2047x

Plastové ozubené kolo

ocelový náboj, stavěcí šroub M3

2x šest otvorů

průměr roztečné kružnice 70 mm

119 zubů

modul 0,6

Ozubené kolo 2046m

Ocelové ozubené kolo

frézované !

ocelový náboj, stavěcí šroub M3

šest otvorů

průměr roztečné kružnice 20 mm

34 zubů

modul 0,6

Ozubené kolo 1046

Ocelový pastorek
ocelový náboj, stavěcí šroub M4

průměr roztečné kružnice 10 mm

17 zubů

modul 0,6

Šnek 1044

Ocelový šnek

průměr 11 x 16 mm

stavěcí šroub M4

modul 0,6

Kuželové kolo 1056

Kuželové ozubené kolo kuželové
ocelový náboj, stavěcí šroub M3

25 zubů

modul 0,6

Základní deska – BaseBoard

Při sestavování větších celků ze stavebnice Merkur byl vždy problém jak zajistit, aby konstrukce měla dobrý základ. Sestavovat větší množství destiček bylo jednak náročné, jednak nijak krásné a také jich ani v žádné stavebnici tolik nebylo.

Proto jsme ve spolupráci s firmou Merkur navrhli a vyrobili dva typy dírkovaných základových desek o rozměrech:

Baseboard 1 – 250 x 170 x 10 mm

Baseboard 2 – 340 x 250 x 10 mm

Základové desky jsou vyrobeny z ocelového plechu tl. 1 mm, rastr upevňovacích otvorů je 10 x 10 mm a jejich průměr je 3,8 mm. Povrchově jsou desky upraveny práškovým lakem.

Ceny (včetně DPH):

Baseboard 1: 125,00 Kč

Baseboard 2: 175,00 Kč

Kulový kloub

Chcete si omotorovat nějaký hezký stroj a zjistili jste, že kloub vytvořený ze dvou plechů a šroubku vydrží hezky běhat jen do té doby, než se ošoupe barva.

Hledali jsme jednoduché řešení a tady je – modelářské kulové klouby.

kulový kloub

Kulové klouby např. od výrobce MP Jet  se  skládají z oka kloubu a mosazné hlavice kloubu.

Dodáváme je buď s otvorem pro šroub 3mm nebo s vyříznutým závitem M3,5 pro Merkur

Ukázka použití dvou kulových kloubů, táhla a lineárního  posunu

Zakoupit můžete například zde: http://www.stavebnice.com/eshop/index.php?cPath=47_83

Pořádek především

Co co co to jeee ?

Ano, každému se líbí konstrukce jinak, někdo miluje chaos, někdy je ale lepší pořádek.

Náš malý příspěvek pro druhou kategorii 🙂

držák kabelů

Malé plastové příchytky se závitem M3,5

vyvázaná deska

Jak taková deska může vypadat vyvázaná

Lineární posun

Co je to lineární posun?
Zjednodušeně řečeno něco, co se pohybuje po přímce (rovně).

Naše řešení pro Merkur jsou průmyslová kluzná ložiska ze silonu a hřídele.

použití kluzného ložiska

Zde vidíte použití čtyř kluzných ložisek s otvorem 4mm na hřídelkách 3,7mm.

uložení hřídelí

Na jedné straně jsou hřídelky zajištěny na přesnou délku staváčky a …

uložení hřídele 2

… na druhé straně se opírají o šroub.