This shows you the differences between two versions of the page.
pm:prj2024:iotelea:dragos.filipescu [2024/05/28 15:13] 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. | ||
+ | {{ :pm:prj2024:iotelea:seismograf_-_kahan_summation.png?direct&600 |}} | ||
- | ''float sum_x = 0.0;'' | + | 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. |
- | ''float sum_y = 0.0;'' | + | {{ :pm:prj2024:iotelea:seismograf_-_timer.png?direct&600 |}} |
- | + | ||
- | ''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:'' | + | |
- | + | ||
- | ''for (int i = 0; i < SAMPLE_SIZE; i++) {'' | + | |
- | + | ||
- | '' read_data();'' | + | |
- | + | ||
- | '' 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 112: | 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 ===== |