Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:ddosaru:alexandru.manole02 [2024/05/24 21:00]
alexandru.manole02 [Software Design]
pm:prj2024:ddosaru:alexandru.manole02 [2024/05/26 22:50] (current)
bogdan.manaila [Rezultate Obţinute]
Line 47: Line 47:
 == Diagrama circuit == == Diagrama circuit ==
  
-{{:​pm:​prj2024:​ddosaru:​sch_el_am.png?​1000|}}+{{:​pm:​prj2024:​ddosaru:​man_sch_02.png?​1000|}}
  
 == Implementare == == Implementare ==
Line 56: Line 56:
    
 <note tip> <note tip>
-Codul aplicatiei a fost scris in Arduino IDE. Voi detalia mai jos detalii ​importante legate de acesta+Codul aplicatiei a fost scris in Arduino IDE. Voi detalia mai jos cateva aspecte ​importante legate de firmware.
 </​note>​ </​note>​
- + 
 +== Biblioteci folosite == 
 +  * LiquidCrystal_I2C.h 
 +  * I2Cdev.h 
 +  * MPU6050_6Axis_MotionApps20.h 
 +<file cpp main.cpp>​ 
 + 
 +#include "​I2Cdev.h"​ 
 +#include "​MPU6050_6Axis_MotionApps20.h"​ 
 +#include <​LiquidCrystal_I2C.h>​ 
 + 
 +MPU6050 mpu; 
 + 
 +bool dmpReady = false; ​ // set true if DMP init was successful 
 +uint8_t devStatus; ​     // return status after each device operation (0 = success, !0 = error) 
 +uint16_t packetSize; ​   // expected DMP packet size (default is 42 bytes) 
 +uint8_t fifoBuffer[64];​ // FIFO storage buffer 
 +uint32_t total_sleep_movement;​ 
 +uint32_t time_periods_elapsed;​ 
 +uint32_t average_sleep_movement;​ 
 +const int buttonPin = 2; 
 +const int ledPin = 13;  
 + 
 +Quaternion q;           // quaternion container 
 +VectorInt16 aa;         // accel sensor measurements 
 +VectorInt16 aaReal; ​    // gravity-free accel sensor measurements 
 +VectorFloat gravity; ​   // gravity vector 
 +LiquidCrystal_I2C lcd(0x27, 16, 2); 
 +void setup() { 
 +    total_sleep_movement = 0; 
 +    time_periods_elapsed = 0; 
 +    pinMode(buttonPin,​ INPUT_PULLUP);​ 
 +    pinMode(ledPin,​ OUTPUT); 
 +    lcd.init();​ 
 +    // Turn on the backlight 
 +    lcd.backlight();​ 
 +    // Print a message to the LCD 
 +    lcd.print("​Hello,​ world!"​);​ 
 +    Wire.begin();​ 
 +    Serial.begin(115200);​ 
 +    mpu.initialize();​ 
 +    Serial.println(mpu.testConnection() ? F("​MPU6050 connection successful"​) : F("​MPU6050 connection failed"​));​ 
 +    devStatus = mpu.dmpInitialize();​ 
 +    mpu.setXGyroOffset(220);​ 
 +    mpu.setYGyroOffset(76);​ 
 +    mpu.setZGyroOffset(-85);​ 
 +    mpu.setZAccelOffset(1788);​ 
 +    if (devStatus == 0) { 
 +        mpu.CalibrateAccel(6);​ 
 +        mpu.CalibrateGyro(6);​ 
 +        mpu.setDMPEnabled(true);​ 
 +        // attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN),​ dmpDataReady,​ RISING); 
 +        dmpReady = true; 
 +        packetSize = mpu.dmpGetFIFOPacketSize();​ 
 +    } 
 +
 + 
 +void ShowSleepSituation() { 
 +  lcd.clear();​ 
 +  average_sleep_movement = total_sleep_movement / time_periods_elapsed;​ 
 +  if (average_sleep_movement > 1000) { 
 +    digitalWrite(ledPin,​ HIGH); // Turn on the LED 
 +  } else { 
 +    digitalWrite(ledPin,​ LOW);  // Turn off the LED 
 +  } 
 +  if (digitalRead(buttonPin) == LOW) { 
 +    lcd.print("​Avg move: "); 
 +    lcd.print(average_sleep_movement);​  
 +  } else { 
 +  if(average_sleep_movement < 100) { 
 +    lcd.print("​Very Good Sleep"​);​ 
 +  } else if(average_sleep_movement < 500) { 
 +    lcd.print("​Good Sleep"​);​ 
 +  } else if (average_sleep_movement < 1000) { 
 +    lcd.print("​Decent Sleep"​);​ 
 +  } else{ 
 +    lcd.print("​Bad Sleep"​);​ 
 +  } 
 +  Serial.println(average_sleep_movement);​ 
 +  }  
 +
 + 
 +void loop() { 
 +    if (!dmpReady) return; 
 +    if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) { 
 +        mpu.dmpGetQuaternion(&​q,​ fifoBuffer);​ 
 +        mpu.dmpGetAccel(&​aa,​ fifoBuffer);​ 
 +        mpu.dmpGetGravity(&​gravity,​ &q); 
 +        mpu.dmpGetLinearAccel(&​aaReal,​ &aa, &​gravity);​ 
 +        Serial.print("​areal\t"​);​ 
 +        Serial.print(aaReal.x);​ 
 +        Serial.print("​\t"​);​ 
 +        Serial.print(aaReal.y);​ 
 +        Serial.print("​\t"​);​ 
 +        Serial.println(aaReal.z);​ 
 +    } 
 +    if(abs(aaReal.x) > abs(aaReal.y)) { 
 +      total_sleep_movement += abs(aaReal.x);​ 
 +    } else { 
 +      total_sleep_movement += abs(aaReal.y);​ 
 +    } 
 +    time_periods_elapsed++;​ 
 +    if(time_periods_elapsed % 5 == 0) { 
 +      ShowSleepSituation();​ 
 +    } 
 + 
 +    delay(500);​ 
 +
 + 
 +void dmpDataReady() { 
 +    // MPU interrupt function - this just sets a flag in the main code 
 +
 +</​file>​ 
 + 
 +Show Sleep Situation este functia folosita pentru a afisa informatii la LCD si LED, atunci cand este chemata (o data la 2.5secunde). 
 + 
 +Functiile din setup sunt folosite pentru a stabiliza accelerometrul. 
 + 
 +In loop sunt afisate si calculate datele senzorului. ​
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
    
-<note tip> +<html
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +<iframe width="​700"​ height="​435"​ src="​https://​www.youtube-nocookie.com/​embed/​XHiyo1kj0qg?​si=cRgzBRX6V5LCHonV"​ title="​YouTube video player"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share"​ referrerpolicy="​strict-origin-when-cross-origin"​ allowfullscreen></​iframe>​ 
-</note> +</​html>​ 
-  +
-===== Concluzii =====+
    
 +
 ===== Download ===== ===== Download =====
-  +{{:pm:prj2024:ddosaru:zipbomb.zip|}}
-<note warning>​ +
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +
-  +
-Fişierele se încarcă pe wiki folosind facilitatea *Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul *:​pm:​prj20??:​c?​* sau *:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). *Exemplu:* Dumitru Alin, 331CC -> *:pm:prj2022:cc:dumitru_alin*. +
-</​note>​ +
- +
 ===== Jurnal ===== ===== Jurnal =====
    
pm/prj2024/ddosaru/alexandru.manole02.1716573657.txt.gz · Last modified: 2024/05/24 21:00 by alexandru.manole02
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0