This shows you the differences between two versions of the page.
pm:prj2024:iotelea:dragos.filipescu [2024/05/28 15:10] dragos.filipescu [Software Design] |
pm:prj2024:iotelea:dragos.filipescu [2024/05/28 21:07] (current) dragos.filipescu [Software Design] |
||
---|---|---|---|
Line 55: | Line 55: | ||
Pentru o precizie mai buna, am folosit algoritmul [[https://en.wikipedia.org/wiki/Kahan_summation_algorithm#The_algorithm|Kahan Summation]] pentru a face media primelor ''SAMPLE_SIZE'' valori masurate de accelerometru, astfel incat masuratorile ulterioare sa aiba un punct de referinta cat mai precis. | Pentru o precizie mai buna, am folosit algoritmul [[https://en.wikipedia.org/wiki/Kahan_summation_algorithm#The_algorithm|Kahan Summation]] pentru a face media primelor ''SAMPLE_SIZE'' valori masurate de accelerometru, astfel incat masuratorile ulterioare sa aiba un punct de referinta cat mai precis. | ||
- | ''float sum_x = 0.0; | + | {{ :pm:prj2024:iotelea:seismograf_-_kahan_summation.png?direct&600 |}} |
- | float sum_y = 0.0; | + | |
- | float sum_z = 0.0; | + | |
- | float c_x = 0, c_y = 0, c_z = 0; | + | |
- | float y_x = 0, y_y = 0, y_z = 0; | + | |
- | float t_x = 0, t_y = 0, t_z = 0; | + | |
- | // Kahan summation, courtesy of Wikipedia: https://en.wikipedia.org/wiki/Kahan_summation_algorithm#The_algorithm | + | Pe langa procesul de calibrare, in setup se initializeaza si timer-ul 1, care va emite o intrerupere software la fiecare secunda, iar la ''FILE_SAVE_INTERVAL'' secunde, se vor scrie date in cardul SD. |
- | for (int i = 0; i < SAMPLE_SIZE; i++) { | + | |
- | read_data(); | + | {{ :pm:prj2024:iotelea:seismograf_-_timer.png?direct&600 |}} |
- | + | ||
- | y_x = x_out + c_x; | + | |
- | t_x = sum_x + y_x; | + | |
- | c_x = (t_x - sum_x) - y_x; | + | |
- | sum_x = t_x; | + | |
- | + | ||
- | y_y = y_out + c_y; | + | |
- | t_y = sum_y + y_y; | + | |
- | c_y = (t_y - sum_y) - y_y; | + | |
- | sum_y = t_y; | + | |
- | + | ||
- | y_z = z_out + c_z; | + | |
- | t_z = sum_z + y_z; | + | |
- | c_z = (t_z - sum_z) - y_z; | + | |
- | sum_z = t_z; | + | |
- | } | + | |
- | + | ||
- | x_initial = sum_x / SAMPLE_SIZE; | + | |
- | y_initial = sum_y / SAMPLE_SIZE; | + | |
- | z_initial = sum_z / SAMPLE_SIZE;'' | + | |
- | + | ||
- | Pe langa procesul de calibrare, in setup se initializeaza si timer-ul 1, care va emite o intrerupere software la fiecare secunda, iar la ''FILE_SAVE_INTERVAL'' secunde, se vor scrie date in cardul SD. | + | |
LED-ul se va aprinde pentru a semnala scrierea datelor pe card, pentru ca acesta sa nu fie scos din slot, ceea ce ar risca coruperea cardului. LED-ul se va stinge cand datele au fost scrise si fisierul inchis. | LED-ul se va aprinde pentru a semnala scrierea datelor pe card, pentru ca acesta sa nu fie scos din slot, ceea ce ar risca coruperea cardului. LED-ul se va stinge cand datele au fost scrise si fisierul inchis. | ||
Line 93: | Line 65: | ||
In vederea scrierii datelor in cardul SD, masuratorile sunt pastrate in 4 buffere de 20 de valori fiecare, care vor stoca valorile acceleratiilor pe cele 3 axe, precum si magnitudinea vectorului V = X + Y + Z, unde X, Y si Z sunt vectorii ce reprezinta acceleratiile pe cele 3 axe. | In vederea scrierii datelor in cardul SD, masuratorile sunt pastrate in 4 buffere de 20 de valori fiecare, care vor stoca valorile acceleratiilor pe cele 3 axe, precum si magnitudinea vectorului V = X + Y + Z, unde X, Y si Z sunt vectorii ce reprezinta acceleratiile pe cele 3 axe. | ||
+ | {{ :pm:prj2024:iotelea:seismograf_-_buffere.png?direct&600 |}} | ||
===== Concluzii ===== | ===== Concluzii ===== |