Мазмұны:
Бейне: Arduino Digital Compass жобасы: 3 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Сәлеметсіз бе! Бұл нұсқаулықта сіз Arduino мен Processing IDE көмегімен цифрлық компасты қалай жасауға болатынын көресіз. Бұл өте қарапайым, бірақ қызықты және керемет көрінетін Arduino жобасы.
Сіз бұл оқулықтың демо үлгісін жоғарыдағы бейнеден көре аласыз. Сіз әрқашан менің YouTube каналымда осындай қызықты бейнелерді таба аласыз, сонымен қатар HowToMechatronics.com веб -сайтында электроника бойынша көптеген жобалар мен оқулықтарды таба аласыз.
1 -қадам: қажет бөлшектер
Бұл жоба үшін сізге жердің магнит өрісін өлшеуге арналған Arduino тақтасы мен MEMS магнитометрі қажет. Мен MC5883L 3 - осьті магнитометрі бар GY - 80 үзіліс тақтасын қолданамын.
Жобаның бастапқы кодын жалғастырмас бұрын, егер сізге MEMS магнитометрінің қалай жұмыс істейтіні, сондай -ақ G2 - 80 байланыс тақтасын I2C байланысы арқылы қосу және пайдалану туралы толығырақ ақпарат қажет болса, бұл үшін менің арнайы оқулықтарымды тексеруге болады.
2 -қадам: Arduino бастапқы коды
Бізге бірінші кезекте қажет нәрсе - эскизді Arduino тақтасына жүктеу, ол магнитометрден деректерді оқиды және оны Processing IDE -ге жібереді. Міне Arduino бастапқы коды:
/ * Arduino Compass * * Дежан Неделковский, * www. HowToMechatronics.com * */
#қосу // I2C Arduino кітапханасы
#анықтайтын магнитометр_mX0 0x03
#define Magnetometer_mX1 0x04 #define Magnetometer_mZ0 0x05 #define Magnetometer_mZ1 0x06 #define Magnetometer_mY0 0x07 #define Magnetometer_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;
float heading, headingDegrees, headFiltered, declination;
өзгермелі Xm, Ym, Zm;
#dexine магнитометрі 0x1E // HMC5883 I2C 7 биттік мекенжайы
жарамсыз орнату () {
// Serial.begin сериялық және I2C байланыстарын баптандыру (115200); Wire.begin (); кешіктіру (100); Wire.beginTransmission (магнитометр); Wire.write (0x02); // Wire.write режимінің регистрін таңдаңыз (0x00); // Үздіксіз өлшеу режимі Wire.endTransmission (); }
void loop () {
// ---- X-Axis Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y осі
Wire.beginTransmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X осі mX1 = mX1 << 8; mX_out = mX0+mX1; // Шикі деректер // Деректер кестесінен: 0,92 мГ/сан Xm = mX_out*0,00092; // Гаусс бірлігі //* Жердің магнит өрісі 0,25 -тен 0,65 Гаусске дейін ауытқиды, сондықтан бұл шамамен бізге қажет мәндер.
// ---- Y осі
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0.00092;
// ---- Z осі
mZ1 = mZ1 <0,073 радтық ауытқу = 0,073; тақырып += бейімділік; // Белгілер реверсивті болған кезде түзету, егер (<0 тақырыбы) += 2*PI тақырыбы;
// Қатысу бұрышының қосылуы есебінен түзету
if (позиция> 2*PI) тақырып -= 2*PI;
headingDegrees = * 180/PI тақырыбы; // Дәрежелер бірлігіндегі тақырып
// Шығу бұрышын тегістеу / Төмен өту сүзгісі
headFiltered = headFiltered*0.85 + headDegrees*0.15;
// Тақырып мәнін Сериялық порт арқылы IDE өңдеуге жіберу
Serial.println (тақырыпFiltered);
кешіктіру (50); }
3 -қадам: IDE бастапқы кодын өңдеу
Алдыңғы Arduino эскизін жүктегеннен кейін, біз деректерді Processing IDE -ге алуымыз керек және Digital Compass сызуымыз керек. Компас фондық суреттен, жебенің бекітілген кескінінен және циркуль денесінің айналатын кескінінен тұрады. Жерді магнит өрісі үшін Arduino көмегімен есептелген мәндер компасты айналдыру үшін қолданылады.
Міне Processing IDE бастапқы коды:
/ * Arduino Compass * * Дежан Неделковский, * www. HowToMechatronics.com * */ импортты өңдеу.сериал. *; java.awt.event. KeyEvent импорттау; java.io. IOException импорттау;
Сериялық myPort;
PImage imgCompass; PImage imgCompassArrow; PI суретінің фоны;
Жолдық деректер = «»;
өзгермелі тақырып;
жарамсыз орнату () {
өлшемі (1920, 1080, P3D); тегіс (); imgCompass = loadImage («Compass.png»); imgCompassArrow = loadImage («CompassArrow.png»); background = loadImage («Background.png»); myPort = жаңа сериялық (бұл, «COM4», 115200); // myPort.bufferUntil ('\ n') сериялық байланысын бастайды; }
жарамсыз жеребе () {
сурет (фон, 0, 0); // Фондық суретті жүктейді pushMatrix (); аудару (ені/2, биіктігі/2, 0); // Координат жүйесін экранның ортасына айналдырады, осылайша айналу дәл rotateZ орталығында болады (radians (-позиция)); // Компасты Z айналдырады -ось суреті (imgCompass, -960, -540); // Компас кескінін жүктейді және координаттар жүйесі басқа жаққа ауыстырылған кезде суретті -960x, -540y (экран өлшемінің жартысы) popMatrix () мәніне қою керек; // Координат жүйесін қайтарады 0, 0, 0 кескін бастапқы күйіне оралады (imgCompassArrow, 0, 0); // popMatrix () функциясы textSize (30) арқасында rotateZ () функциясына әсер етпейтін CompassArrow кескінін жүктейді; мәтін («Тақырып:» + тақырып, 40, 40); // Экрандағы тақырыптың мәнін басып шығарады
кешіктіру (40);
}
// деректерді сериялық порттан оқи бастайды
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // деректерді сериялық порттан оқиды және оны «деректер» String айнымалысына қояды. тақырып = өзгермелі (деректер); // String мәнін Float мәніне түрлендіру}
Сізге бұл жоба ұнайды деп сенемін. Егер солай болса, сіз менің веб -сайтқа кіріп, керемет жобаларды көре аласыз.
Ұсынылған:
Digital Ludo Dice Arduino 7 сегментінің дисплей жобасы: 3 қадам
Digital Ludo Dice Arduino 7 сегментінің дисплей жобасы бар: Бұл жобада 7 сегментті дисплей басу түймесін басқан кезде кездейсоқ 1 -ден 6 -ға дейінгі санды көрсету үшін қолданылады. Бұл әркімге ұнайтын керемет жобалардың бірі. 7 сегментті дисплеймен жұмыс істеуді үйрену үшін мына жерді басыңыз: -7 сегмент
LM386 көмегімен Arduino мәтінді сөйлеу түрлендіргіші - Talking Arduino жобасы - Talkie Arduino кітапханасы: 5 қадам
LM386 көмегімен Arduino мәтінді сөйлеу түрлендіргіші | Talking Arduino жобасы | Talkie Arduino кітапханасы: Сәлеметсіздер ме, балалар, біз жобаның көп бөлігінде arduino -дан сөйлесуді талап етеміз, мысалы, сағаттар немесе кейбір мәліметтерді айту, біз мәтінді Arduino көмегімен сөйлеуге айналдырамыз
Arduino көмегімен радар қалай жасауға болады - Arduino жобасы: 4 қадам
Arduino көмегімен радар қалай жасауға болады | Arduino жобасы: Бұл мақалада мен сізге arduino көмегімен қарапайым радар жасауды үйретемін. Толық бейне оқулықты мына жерден қараңыз: Мені басыңыз
Matrix пернетақтасын қолдану арқылы Arduino Digital Code Lock жобасы: 9 қадам
Matrix пернетақтасын қолдану арқылы Arduino цифрлық кодты құлыптау жобасы: Zio M Uno және Hex 4x3 матрицалық пернетақтаны пайдаланып Arduino және Qwiic жүйесімен цифрлық кодты құлыптау құрылғысын жасаңыз. Жобаға шолу Бұл жоба үшін біз пайдаланушыларға енгізуге және енгізуге болатын қарапайым цифрлық кодты құруды құрамыз. Бұл оқулықта біз қолдануды көрсетеміз
Digital Dice: Arduino жобасы.: 4 қадам
Digital Dice: Arduino жобасы. Адамдар «жоғары технологиялық» ойындарды жақсы көреді. Мысалы: менің елімде «Монополия» деген ойын бар. Бұл ойында ақшаны сатып алу арқылы «көшелерді» жинау керек. Бұл ойын жақында қағазбен емес, несиемен төлейтін нұсқасын шығарды