Obsah:
- Krok 1: Vyrobte základnu a sklopný držák víčka
- Krok 2: Vytvořte delší servo rameno a připojte servo
- Krok 3: Načtěte a spusťte skicu
Video: Automatický kuličkový válec s Arduinem a jedním servem: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:19
Jedná se o jednoduchý malý projekt Arduino a servo, jehož dokončení trvá přibližně dvě hodiny. Pomocí serva zvedne jeden konec víčka nádoby tak, aby roztáčel ocelovou kouli po vnitřním obvodu. Je to samočinné spouštění, může měnit rychlost a může točit dvě (nebo více?) Koule najednou. Zábava stavět a pracovat. S časovacími parametry lze hrát pravděpodobně ještě rychleji. Mohlo by být použito několik senzorů s Hallovým efektem s magnetickou koulí, aby byl chytřejší stroj, který dokáže zjistit nejlepší parametry.
Měl bych zmínit, že někdo zde na instructables.com má důmyslnější stroj s kuličkovými válečky:
Potřebné materiály:
Arduino Uno (nebo jakékoli Arduino)
Servo štít (volitelně)
9g servo
jar cap
ocelový míč
nějaký šrot
Krok 1: Vyrobte základnu a sklopný držák víčka
Základna je jen kus dřeva, na který lze připevnit závěsný kus dřeva. Kloubové dřevo by mělo být větší než víčko nádoby, které budete používat, a mít dostatek místa pro závěsy a pro montáž serva.
Použil jsem malé plastové závěsy RC letadel a jen je přilepil na závěsné dřevo a základnu.
Krok 2: Vytvořte delší servo rameno a připojte servo
Abych vyrobil delší rameno serva, připevnil jsem na rameno serva 5 centimetrů dřeva pomocí několika malých šroubů a matic. Servo rameno by mělo být na 90 stupňů na servu, když je vodorovně k základně.
Právě jsem za tepla nalepil servo na kloubový držák dřeva, ale zjistil jsem, že pokud ho necháte běžet déle než několik minut, servo zahřeje horké lepidlo a pustí ho ze dřeva. Je tedy zaručena lepší metoda připevnění.
Krok 3: Načtěte a spusťte skicu
Připojil jsem své servo na pin 7 pomocí štítu, protože je to pohodlné a stojí jen pár dolarů. Pokud nemáte štít, připojte signální vodič serva ke kolíku 7 na Arduinu, červený vodič k 5v na Arduinu a uzemňovací vodič k GND na Arduinu. Arduino by mělo poskytovat dostatek proudu pro provoz serva. Používám štít, protože je snadné použít externí napětí jen pro servo.
Tady je skica. Napsal jsem rutinu ovladače rychlosti serva, abych změnil rychlost serva, protože to pravděpodobně nebude fungovat dobře při plné rychlosti.
Můžete změnit časové zpoždění, abyste získali různé rychlosti otáčení míče. Také můžete změnit třetí parametr funkce myServo () a změnit rychlost.
////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// //////////////// // vytvořil Jim Demello, Shangluo University, 2017
// s tímto kódem můžete svobodně používat, manipulovat, dělat, co chcete, moje jméno není povinné
// Tato rutina umožňuje interpolovat libovolný počet serv, stačí přidat nové řádky, pokud počet serv přesáhne 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#zahrnout
Servo myservo1, myservo2; // vytvoření objektu serva pro ovládání serva
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
vrátit servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
if (servoNumber == 1) {myservo1.write (offset); }
if (servoNumber == 2) {myservo2.write (offset); }
}
void myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
if (servoNum == 1) {curAngle = myservo1.read (); }
if (servoNum == 2) {curAngle = myservo2.read (); }
if (curAngle <newAngle) {
for (int angle = curAngle; angle <newAngle; angle += angleInc) {
if (servoNum == 1) myservo1.write (úhel);
if (servoNum == 2) myservo2.write (úhel);
zpoždění (včetně Zpoždění); }
}
else if (curAngle> newAngle) {
for (int angle = curAngle; angle> newAngle; angle -= angleInc) {
if (servoNum == 1) myservo1.write (úhel);
if (servoNum == 2) myservo2.write (úhel);
zpoždění (včetně Zpoždění); }
}
}
void interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2Position, int numberSteps, int timeDelay) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos a aktuální"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos a aktuální"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos a aktuální"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos a aktuální"); Serial.print (servo6Position); Serial.print (""); Serial.println (servo6Current);
// Serial.println ("");
int cOffset = (servo1Position - servo1Current); cOffset = abs (cOffset)/numberSteps;
int dOffset = (servo2Position - servo2Current); dOffset = abs (dOffset)/numberSteps;
int cOffsetTotal = 0, dOffsetTotal = 0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
pro (int x = 0; x
if (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
else {cOffsetTotal = cOffsetTotal - cOffset; }
if (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
else {dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
if (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a a b offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); zpoždění (10);
zpoždění (timeDelay);
} // konec pro
//////////////////////////////////////
// postarejte se o zbytky modulo //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Toto je počáteční stupeň (musí být menší než koncový stupeň)
int degStart = 0;
// Toto jsou koncové stupně (musí být větší než počáteční stupeň)
int degEnd = 360;
// Toto je poloměr kruhu
int poloměr = 8;
neplatné nastavení ()
{
Serial.begin (9600);
zpoždění (100);
myservo1.attach (7); // připojí servo na pinu 7 k objektu serva
myservo1.write (90);
myservo2.attach (8); // připojí servo na pinu 8 k objektu serva
myservo2.write (90);
zpoždění (1000); // čeká, až se tam servo dostane
interpolate2Servos (1, 90, 2, 90, 10, 60); // neutrální
zpoždění (1000);
}
prázdná smyčka () {
timingDelay = 15; // funguje v 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutrální
// zpoždění (1000);
// exit (0); // pozastavení programu - pokračujte stisknutím reset
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neutrální
zpoždění (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neutrální
zpoždění (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutrální
zpoždění (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neutrální
zpoždění (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neutrální
zpoždění (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutrální
zpoždění (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3,14));
float deg = (degStart * 3,141592 / 180); // převod stupňů na radiány
float xPos = 90 + (cos (deg) * radius);
// xPos = kulatý (xPos);
float yPos = 90 + (sin (deg) * radius);
// yPos = kulatý (yPos);
Serial.print ("degGap ="); Serial.print (degGap); Serial.print ("deg ="); Serial.print (deg); Serial.print ("cos ="); Serial.print (cos (deg)); Serial.print ("degStart ="); Serial.print (degStart); Serial.print ("x ="); Serial.print (xPos); Serial.print ("y ="); Serial. println (yPos);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // neutrální
myservo1.write (xPos);
myservo2.write (yPos);
zpoždění (timingDelay);
if (degStart> = degEnd) {
degStart = 0;
if (degGap> 180)
degGap = 180;
// degGap = 0;
jiný
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
pro (int i = 0; i <= 360; i ++) {
float j = 20 * (cos ((3,14 * i)/180)) + 90;
float k = 20 * (sin ((3,14 * i)/180)) + 90;
myservo1.write (j);
myservo2.write (k);
Serial.print (j);
Serial.print (",");
Serial.println (k);
zpoždění (100);
}
}
Doporučuje:
Automatický dávkovač alkoholu s Arduinem: 6 kroků
Automatický dávkovač alkoholu s Arduino: Tento projekt arduino vás provede výrobou automatického dávkovače alkoholu. Uživatel se nemusí dotýkat čehokoli, aby získal alkohol, stačí se přiblížit k ultrazvukovému senzoru, alkohol bude vytlačen a poté bude přehráván zvukový soubor, který uživatele upozorní, že by měl
Automatický dávkovač Handgel s Arduinem: 3 kroky
Automatický dávkovač Handgel s Arduinem: tento projekt je založen na velmi jednoduchých a snadných znalostech, vhodných pro amatéry, na základě otevřených zdrojových kódů a snadno vyhledatelných komponent za velmi dostupnou cenu. Cílem tohoto projektu je udržet naše ruce čisté od virů a další zárodky v
Nástěnný držák pro iPad jako ovládací panel domácí automatizace, aktivace obrazovky pomocí magnetu ovládaného servem: 4 kroky (s obrázky)
Nástěnný držák pro iPad jako ovládací panel domácí automatizace, pomocí magnetu ovládaného servem k aktivaci obrazovky: V poslední době jsem strávil nějaký čas automatizací věcí ve svém domě a kolem něj. Jako aplikaci pro domácí automatizaci používám Domoticz, podrobnosti najdete na www.domoticz.com. Při hledání aplikace na palubní desce, která zobrazuje všechny informace o Domoticz
Kovový kuličkový spínač náklonu SW -520D - Visuino: 6 kroků
Kovový kuličkový spínač náklonu SW-520D-Visuino: Tento základní naklápěcí spínač SW-520D lze snadno použít k detekci orientace. Uvnitř plechovky je koule, která je ve vzpřímeném stavu v kontaktu s kolíky. Nakloňte pouzdro a míčky se nedotýkají, čímž nedojde k připojení. Snímač náklonu
Automatický tester zařízení s Arduinem: 9 kroků
Automatický tester zařízení s Arduinem: Možná to nevypadá moc, ale toto je pravděpodobně nejužitečnější věc, kterou jsem kdy s Arduinem vytvořil. Jedná se o automatický tester pro mnou prodávaný výrobek s názvem Power Blough-R. Šetří mi to nejen čas (aktuálně mi to ušetřilo nejméně 4 hodiny