Мазмуну:
- 1 -кадам: Базаны жана топсого капкак кармагычты жасаңыз
- 2 -кадам: Серво колун узун кылып, Сервону тиркеңиз
- 3 -кадам: Эскизди жүктөө жана иштетүү
Video: Arduino жана One Servo менен автоматташтырылган шар ролиги: 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:36
Бул жөнөкөй кичинекей Arduino жана servo долбоору, аны аягына чыгарууга эки сааттай убакыт кетет. Бул идиштин капкагынын бир четин көтөрүү үчүн servo колдонот, ошондо болоттун шарын ички айлананын айланасына айлантат. Бул өзү башталат, ылдамдыгын өзгөртө алат жана бир эле убакта эки (же андан көп?) Топту айланта алат. Куруу жана иштөө кызыктуу. Убакыт параметрлерин, балким, андан да ылдамыраак ойнотсо болот. Магниттик шар менен бир нече зал эффекти сенсорлору аны эң жакшы параметрлерди аныктай турган акылдуу машина кылуу үчүн колдонулушу мүмкүн.
Айта кетүүчү нерсе, Instructables.com сайтында кимдир бирөөнүн татаал шар ролиги бар:
Керектүү материалдар:
Arduino Uno (же ар кандай Arduino)
Серво калканы (милдеттүү эмес)
9g servo
банка капкагы
болот шар
кээ бир жыгач сыныктары
1 -кадам: Базаны жана топсого капкак кармагычты жасаңыз
База - жыгачтын бир үзүмү, ага илинген жыгачты орнотуу үчүн. Илгич жыгач сиз колдоно турган кумуранын капкагынан чоңураак болушу керек жана илгичтер үчүн жана сервону орнотуу үчүн жетиштүү орун бар.
Мен кичинекей пластикалык rc учак топсолорун колдонуп, аларды илгичтүү жыгачка жана базага жөн эле жабыштырдым.
2 -кадам: Серво колун узун кылып, Сервону тиркеңиз
Узунураак серво колун жасоо үчүн мен жөн эле 5 сантиметрлик жыгачты бир нече кичинекей бурамалар жана гайкалар менен серво колуна бекиттим. Серво колу базага горизонталдуу болгондо серводо 90 градус болушу керек.
Мен сервону илгичтүү жыгач кармагычка ысык кылып чаптадым, бирок эгер сиз аны бир нече мүнөттөн ашык иштетсеңиз, серво ысык желимди ысытат жана жыгачтан кетет. Ошентип, жакшы тиркөө ыкмасы кепилденет.
3 -кадам: Эскизди жүктөө жана иштетүү
Мен сервомду 7 -пинге калканч менен бекиттим, анткени бул ыңгайлуу жана алар бир нече долларга гана турат. Эгерде сизде калкан жок болсо, анда Arduinoдогу 7 -пинге кызыл сигналды Arduinoдогу 5v -ге жана жердин зымын Arduinoдогу GNDге туташтырыңыз. Arduino сервону иштетүү үчүн жетиштүү токту камсыздашы керек. Мен калканы колдоном, анткени тышкы чыңалууну жөн гана серво үчүн колдонуу оңой.
Мына эскиз. Мен сервонун ылдамдыгын өзгөртүү үчүн серво ылдамдыгын көзөмөлдөө тартибин жаздым, анткени ал толук ылдамдыкта жакшы иштебейт.
Сиз топтун ар кандай ылдамдыгын алуу үчүн кечиктирүүнү өзгөртө аласыз. Ошондой эле ылдамдыкты өзгөртүү үчүн myServo () функциясынын үчүнчү параметрин өзгөртө аласыз.
//////////////////////////////////////////////////// //////////////////////////////////////////////////// /////////////// Джим Демелло тарабынан түзүлгөн, Shangluo University, 2017
// сиз колдонууга, манипуляциялоого, бул код менен каалаганыңызды жасоого эркинсиз, менин атым талап кылынбайт
// Бул жол -жобо каалаган сандагы интерполяцияны жүргүзүүгө мүмкүндүк берет, эгерде серволордун саны 4төн ашса, жаңы саптарды кошуңуз
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#кошуу
Myservo1, myservo2; // сервону көзөмөлдөө үчүн servo объектисин түзүү
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
return servoCurrent;
}
жараксыз servoWrite (int servoNumber, int офсет) {
if (servoNumber == 1) {myservo1.write (offset); }
if (servoNumber == 2) {myservo2.write (offset); }
}
жараксыз 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) {
үчүн (int бурч = curAngle; бурч <newAngle; бурч += angleInc) {
if (servoNum == 1) myservo1.write (бурч);
if (servoNum == 2) myservo2.write (бурч);
кечиктирүү (incDelay); }
}
башка болсо (curAngle> newAngle) {
үчүн (int angle = curAngle; бурч> newAngle; бурч -= angleInc) {
if (servoNum == 1) myservo1.write (бурч);
if (servoNum == 2) myservo2.write (бурч);
кечиктирүү (incDelay); }
}
}
жараксыз 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 жана Current"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos жана Current"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos жана Current"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos жана Current"); 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;
үчүн (int x = 0; x
if (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
башка {cOffsetTotal = cOffsetTotal - cOffset; }
эгер (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
башка {dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
if (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a жана b Offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); кечигүү (10);
кечиктирүү (timeDelay);
} // үчүн аяктайт
//////////////////////////////////////
// модулдук калдыктарга кам көрүңүз //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Бул баштапкы даража (акыркы даражадан азыраак болушу керек)
int degStart = 0;
// Бул бүтүрүүчү даражалар (башталгыч даражадан чоң болушу керек)
int degEnd = 360;
// Бул тегерек радиусу
int радиусу = 8;
жараксыз орнотуу ()
{
Serial.begin (9600);
кечиктирүү (100);
myservo1.attach (7); // серво объектисине 7 пиндеги сервону бекитет
myservo1.write (90);
myservo2.attach (8); // servo объектине 8 -пиндеги сервону бекитет
myservo2.write (90);
кечигүү (1000); // сервонун ал жакка келишин күтөт
interpolate2Servos (1, 90, 2, 90, 10, 60); // нейтралдуу
кечигүү (1000);
}
void loop () {
timingDelay = 15; // 10до иштейт
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // нейтралдуу
// кечиктирүү (1000);
// чыгуу (0); // программаны тындыруу - улантуу үчүн "Сырттан" баскычын басыңыз
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // нейтралдуу
кечигүү (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // нейтралдуу
кечигүү (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // нейтралдуу
кечигүү (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // нейтралдуу
кечигүү (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // нейтралдуу
кечигүү (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // нейтралдуу
кечигүү (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // градустарды радиандарга айландыруу
float xPos = 90 + (cos (deg) * радиусу);
// xPos = тегерек (xPos);
сүзүү yPos = 90 + (sin (deg) * радиусу);
// yPos = тегерек (yPos);
Serial.print ("degGap ="); Serial.print (degGap); Serial.print ("deg ="); Serial.print (deg); Serial.print ("cos ="); Serial.print (cos (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); // нейтралдуу
myservo1.write (xPos);
myservo2.write (yPos);
кечигүү (timingDelay);
эгер (degStart> = degEnd) {
degStart = 0;
эгер (degGap> 180)
degGap = 180;
// degGap = 0;
башка
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
үчүн (int i = 0; i <= 360; i ++) {
float j = 20 * (cos ((3.14 * i)/180)) + 90;
float k = 20 * (күнөө ((3.14 * i)/180)) + 90;
myservo1.write (j);
myservo2.write (k);
Serial.print (j);
Serial.print (",");
Serial.println (k);
кечиктирүү (100);
}
}
Сунушталууда:
Автоматташтырылган ЭКГ: LTspiceти колдонуу менен күчөтүү жана чыпкалоо симуляциялары: 5 кадам
Автоматташтырылган ЭКГ: Күчөтүү жана LTspiceти колдонуп чыпкалоо симуляциялары: Бул сиз кура турган акыркы түзмөктүн сүрөтү жана ар бир бөлүк жөнүндө абдан терең талкуу. Ошондой эле ар бир этап үчүн эсептөөлөрдү сүрөттөйт. Сүрөт бул түзмөктүн блок -схемасын көрсөтөт Методдору жана материалдары: Бул пр
Arduino Wedding Photo Booth - 3D Басылган Бөлүктөрү, Автоматташтырылган жана Аз Бюджет: 22 Кадам (Сүрөттөр менен)
Arduino Үйлөнүү Фото Буту - 3D Басылган Бөлүктөр, Автоматташтырылган жана Бюджети төмөн: Мени жакында эле өнөктөшүмдүн инисинин тоюна чакырышты, алар сураштырып беребизби, сурашат, анткени алар жалдоого өтө кымбат. Бул биз ойлоп тапкан нерсе жана бир нече комплименттерден кийин мен аны инструкцияга айлантууну чечтим
Arduino автоматташтырылган көлөкө экраны долбоору үчүн кадам моторун жана драйверди тандоо: 12 кадам (сүрөттөр менен)
Arduino автоматташтырылган көлөкө экраны долбоору үчүн тепкич моторун жана драйверди тандоо: Бул Нускамада мен Automated Shade Screen долбоорунун прототипине Step Motor жана Driver тандоо үчүн жасаган кадамдарымдан өтөм. Көлөкөлүү экрандар - бул популярдуу жана арзан Coolaroo кол менен жасалган моделдер, мен аны алмаштыргым келди
WiFi жана IR Remote жана Android колдонмосун колдонуп NodeMCU жана IR алуучу менен 8 релелик көзөмөл: 5 кадам (сүрөттөр менен)
WiFi жана IR Remote жана Android тиркемесин колдонуп NodeMCU жана IR алуучу менен 8 реле көзөмөлү: wifi жана ир алыскы жана андроид колдонмосу аркылуу nodemcu жана IR кабыл алгычты колдонуп 8 реле өчүргүчтөрүн көзөмөлдөө БУЛ ЖЕРДЕ
Температура жана нымдуулукту көрсөтүү жана маалыматтарды чогултуу Arduino жана иштетүү менен: 13 кадам (сүрөттөр менен)
Температура жана нымдуулукту көрсөтүү жана маалыматтарды чогултуу Arduino жана иштетүү менен: Киришүү: Бул Ардуино тактасын, Sensor (DHT11), Windows компьютери жана Processing (бекер жүктөлүүчү) программасын колдонуп, Температураны, Нымдуулукту санариптик жана тилке графасынын формасы, убакытты жана күндү көрсөтүү жана эсептөө убактысын иштетүү