Merkurino – ovládáme modelářské servo potenciometrem

Postavili jste si pěkný domeček pro  pěstování úžasných a lahodných bylinek nebo chcete na dálku kabelem ovládat modelářské servo?

Zapojení je jednoduché:

Merkurino se servem a potenciometrem

Merkurino se servem a potenciometrem

Pokud vám připadá použití příliš samoúčelné, připojte místo potenciometru  termistor nebo fotoodpor a už se bude „něco“ ovládat samo

Příklad kódu s ovládáním také tlačítky

/*******************************************************
Tento program otestuje Merkurino 01 s potenciometrem a modelářským servem
2014, MerkurRobot.cz
********************************************************/ 
//jednoduché použití LiquidCrystal knihovny
#include <LiquidCrystal.h> 
#include <Servo.h> 
Servo myservo;  // vytvoření objektu servo pro ovládání serva
// použité piny pro Merkurino 01 LCD panel
LiquidCrystal lcd(13, 12, 8, 7, 4, 2);
// definice proměnných
int lcd_key = 0;
int adc_key_in = 0;
int val;    // proměnná pro hodnotu serva 
int pot;    // proměnná pro hodnotu potenciometru 
int pot1;    // proměnná pro hodnotu potenciometru 
int potpin = 2;  // analog pin použitý pro připojení potenciometru

#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnENTER 4
#define btnESC 5
#define btnNONE 6
// read the buttons
int read_LCD_buttons() // procedura pro čtení tlačítek ---------------
{
adc_key_in = analogRead(0); // přečti klávesnici na A0
if (adc_key_in > 1000) return btnNONE; // žádné tlačítko není stisknuto
// pro Merkurino 01 plati tyto hodnoty:
if (adc_key_in < 40) return btnESC; 
if (adc_key_in < 110) return btnLEFT;
if (adc_key_in < 300) return btnDOWN;
if (adc_key_in < 450) return btnUP;
if (adc_key_in < 700) return btnRIGHT;
if (adc_key_in < 850) return btnENTER;

return btnNONE; // žádné tlačítko není stisknuto
}  // konec procedura pro čtení tlačítek ---------------

void setup() // procedura setup ---------------
{
    Serial.begin(9600);
  pinMode(A1, OUTPUT); // nastavení "vstupu" A1 jako "výstup"
  myservo.attach(A1);  // servo je připojeno na "vstup" A1
lcd.begin(16, 2); // start LCD library
lcd.setCursor(0,0); // nastavení pozice kurzoru
lcd.print("Stiskni tlacitko"); 
} // konec  procedura setup ---------------

void loop() // začátek nekonečné smyčky ---------------
{
lcd.setCursor(8,1); // nastavení pozice kurzoru
lcd.print(millis()/1000); // zobraz sekundy od zapnutí
lcd.setCursor(0,1); // nastavení pozice kurzoru
lcd_key = read_LCD_buttons(); // read the buttons
  val = adc_key_in;
  val = map(val, 0, 1023, 0, 179);     // změní měřítko hodnoty z potenciometru na servo (rozsah 0-1023 na 0-179) 

switch (lcd_key) // podle stisknutého tlačítka zobrazí text a natočí servo:
{
case btnRIGHT:
{
lcd.print("vpravo  ");
  myservo.write(val);  // natočí servo podle tlačítka  vpravo 
  
break;
}
case btnLEFT:
{
lcd.print("vlevo   ");
  myservo.write(val);  // natočí servo podle tlačítka   vlevo

break;
}
case btnUP:
{
lcd.print("nahoru     ");
  myservo.write(val);  // natočí servo podle tlačítka  nahoru

break;
}
case btnDOWN:
{
lcd.print("dolu   ");
  myservo.write(val);  // natočí servo podle tlačítka  dolu
break;
}
case btnENTER:
{
lcd.print("potvrd ");
  myservo.write(val);  // natočí servo podle tlačítka  potvrd
break;
}
case btnESC:
{
lcd.print("zpet    ");
  myservo.write(val);  // natočí servo podle tlačítka  zpet
break;
}
case btnNONE:  // když není stisknuto žádné tlačítko, natočí servo podle potenciometru:
{
lcd.print("nic   ");
  pot = analogRead(potpin); // přečti potenciometr na A2
  pot = map(pot, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(pot);                  // sets the servo position according to the scaled value 
  if ( pot!= pot1 ){    // uložení stávající hodnoty potenciometru
    pot1 = pot;         // aby se posílala pouze změna (pootočení)
    Serial.println(pot); 
  }
break;
}
}
} // konec nekonečné smyčky ---------------

Napsat komentář