Arduino Uno SD карта памяти
Мне интересно хранить данные акселерометра на SD-карте. Поскольку потребление энергии является главным соображением моего проекта, важно сделать как можно меньше записей на SD, потому что SD требует большого тока, а также занимает много времени, чтобы быть записанным, не давая моему MCU спать.
- Данные, которые будут храниться, составляют около 50 бит данных при 10 Гц, поэтому мне нужно хранить 500 бит в секунду, или около 63 байт в секунду. Arduino uno EEPROM составляет 1024 байта, что может дать мне около 16 секунд данных, хранящихся перед тем, как получить доступ к моей SD-карте. Однако я видел, что EEPROM имеет ограниченные циклы записи (100000). Таким образом, каждый байт может быть записан 100000 раз, что дает нам в общей сложности 1000*100000=100000000 байт для записи.В результате при записи там 63 байта в секунду, что дало бы мне 1587301 секунд=441hours=18days срока службы EEPROM, что недопустимо. Правильно ли это?
- Если (1) верно и использование внутреннего eeprom не является возможным решением, то какие еще рекомендации у вас есть? Есть ли альтернатива SD-хранилищу, которая требует меньше энергии и меньше времени записи, так что это дешевле по мощности? Общий объем хранилища должен составлять около 200 МБ.
@NickG, 👍2
Обсуждение2 ответа
Что касается 1, то верно, что EEPROM имеет ограниченные циклы записи. В основном это может быть гораздо больше, но гарантированно только до этого числа, так что я могу себе представить, что вы не хотите рисковать, чтобы вам повезло.
Что касается 2, другими решениями могут быть внешние SRAM, которые могут быть намного больше, чем просто 1 КБ, но также добавляют некоторые дополнительные компоненты, что повышает стоимость и, что более важно, мощность. Когда SRAM заполнится (может быть много КБ), вы можете перенести его на SD-карту.
Еще одно (добавленное) улучшение, о котором вы могли бы подумать (если вы еще этого не сделали), - это сжатие данных (попытка сохранить 50 бит в меньшем количестве битов), но это потребует некоторой "вычислительной" мощности.
Чтобы начать с правил потребления энергии, Arduino отключается, поэтому вам понадобится устройство, способное (в глубоком) спящем режиме. Устройства, такие как ESP8266 или ESP32. В таблице ниже показаны различия между каждым режимом (информация из спецификации ESP8266).
Item Modem-sleep Light-sleep Deep-sleep
Wi-Fi OFF OFF OFF
System clock ON OFF OFF
RTC ON ON ON
CPU ON Pending OFF
Substrate current 15 mA 0.4 mA ~20 uA
Avg. current (DTIM = 1) 16.2 mA 1.8 mA –
Avg. current (DTIM = 3) 15.4 mA 0.9 mA –
Avg.current (DTIM = 10) 15.2 mA 0.55 mA
Эти модули имеют по 4 МБ флэш-йой, который можно использовать для хранения данных (SPIFFS/LittleFS) так что 1 МБ для программы и 3 МБ для хранения на борту, после чего сохранить в SD и заполнить бортовой ФС снова или вы посылаете сведения через WLAN в интернет-хранилище или базу данных или на сервер в локальной сети (в зависимости от вашего сценария) эти устройства стоят столько же, сколько Ардуино Уно клон (5-7$) и может быть запрограммирован с той же Иды как ардуино и в том же (языка C/)в C++ производная. Поэтому, если проблема в потреблении энергии, посмотрите на эти устройства интернета вещей
Однако Uno можно спать в чем-то вроде < 10uA, однако, при использовании низкой мощности. Я согласен, что ESP был бы лучшим выбором только из-за памяти и оперативной памяти, но ардуино могут глотать, когда им это нужно!, @Dave Newton
- SD-Card-Module не работает с внешним источником питания
- Как запомнить значения переменных после перезагрузки платы Arduino Uno R3
- SD-карта не инициализируется
- Что означают эти контакты? Куда мне их подключить?
- Понимание того, почему следует избегать «String» и альтернативных решений
- Arduino: как записать значение переменной в текстовый файл и изменить его на SD-карте?
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Как запитать Arduino и 1 цветную светодиодную ленту от одного источника питания
Почему вы хотите использовать EEPROM? Почему бы не создать простой буферный массив?, @chrisl
@chrisl Это хорошая идея, но в какой памяти будет храниться буферный массив?, @NickG
Буфер будет храниться в оперативной памяти. Обычно EEPROM используется только тогда, когда вам нужно постоянное хранилище, которое сохраняет значения в течение циклов питания или сброса. Но, похоже, к тебе это не относится. Хотя вам все равно нужно посмотреть, насколько большим вы можете сделать буфер (это зависит от использования памяти и библиотеки вашего скетча), @chrisl