Data Logging. Write variables to the microSD drive
HTML-код
- Опубликовано: 6 сен 2024
- Hello! Very often it is necessary to log the various data for later processing. In this video, we will record the data of the Micro SD card and open them in Excel.
Device schematic and sketch: drive.google.c...
Useful links:
Micro SD Shild: ali.pub/2q5evz
RTC real-time clock: ali.pub/2q5f5w
DFrobot Starter Kit: www.dfrobot.co...
The cheapest Arduino Pro Mini for crafts: ali.pub/1ny2z4
Solar panel 5V 4.5W: ali.pub/2gllam
Solar panels: ali.pub/2glli0
Servo drives: ali.pub/2glm6p
Colored smoke bomb: ali.pub/2ov8gp
Display 1602: ali.pub/2oum8r
Matrix keyboard 4x4: ali.pub/2k005u
Cheapest Arduino Pro Mini for crafts: ali.pub/1ny2z4
The most convenient cash back:
LetyShops: goo.gl/Ev5XgI
The most profitable cash back on aliexpress:
Ecomerce: goo.gl/3dDc2w
Friends, support the channel!
R340967932571
Z422687519909
U139735106020
4149625807630874 The bank card of Privat Bank (Ukraine)
вместо запятой можно просто поставить точку с запятой ( ; ) и кавычек не нужно. Еще одна проблема в температуре разделителем разрядов у Вас стоит точка ( . ) для Excel это строковое значение, а не цифровое. Т.е. диаграмму Вы уже не построите. Нужно сразу в коде заменить точку на запятаю
Ну прям точь в точь как я хотел...
Удивительно как идентичны бывают мысли у людей.
Железный ЛАЙК
:))
То что я искал. Спасибо. Лаконично, понятно и музыка не мешает.
Лучше использовать точку с запятой в качестве разделителя, тогда это будет соответствовать региональным настройкам и открываться файл Экселем просто двойным щелчком.
Я TAB использовал для разделения, и файл просто .txt использовал. Потом все скопировал и вставил в новую таблицу. TAB он распознает как разделитель. Точки можно на запятые заменить в самом ексель, через ctrl+f найти и заменить, после замены точек можно будет графики строить.
Проверять размер файла и, если он нулевой, только тогда фигачить заголовок не принято? :) А, если внутри кавычек в текстовом поле тоже кавычка (зараза) окажется? :)
подскажите а как считать цифры в переменную обратно с флэшки?. Хочу записывать количество шагов на флэшку для шагового двигателя.
Полезно. Спс.
Класс!!!
Лайк лайк ещё раз лайк !!!
А флэшка не сдохнет от частого перезаписывания? Можно как-то оперативку использовать для хранения промежуточных данных или хотя бы не писать повторяющиеся значения?
Очень интересно, жаль только что ничего не понимаю.Нитому я учился
Я тоже не тому учился :))
А это так, хобби.
Вы, главное не бойтесь что-то делать, экспериментировать, задавать вопросы и у вас все получится!
Спасибо, понемногу пробую.
Все классно и просто. Где программировать учился? или самоучка?
Самоучка, хобби такое :))
Но на самом деле все уже сделано до нас, главное уметь находить в гугле нужную информацию. Но и самообразование никто не отменял :)))
Я тоже самоучка. Купил стартовый набор и поехали. На этом уровне все понятно, но дальше расти уже вряд ли получиться(наверное). СД читалку точно приобрету. Жаль на хобби остаётся не много времени =( работа понимаешь.
А где вы такие схемы рисуете? Просто у всех ютуберов такие схемки, в какой проге это делать?
Программа называется Fritzing.
Она подходит для простых, наглядных схем с минимумом компонентов. Большие схемы в ней создавать невозможно, потому что очень сложно будет понять что куда идет и с чем подключается.
Рекомендую программу EasyEDA. Она обладает гораздо большим функционалом
@@UCanDo спасибо что ответили! Да, мне для простых наглядных визуальных схемок и нужна программа. А изи идеа я и так пользуюсь)
Подскажите, а если данные нужно записать через секунду с этого устройства: aliexpress.ru/item/32988456496.html?spm=a2g0s.8937460.0.0.3c262e0eLuCY18&_ga=2.240816580.619359768.1613641863-672613960.1609148115&sku_id=66853750254 . Такое ведь тоже можно сделать? Только будет текстовая строка?
Записывать можно с большой скоростью. Я делал 11000 записей в секунду.
Записывать на флешку можно абсолютно любые данные и значения. Все данные хранятся в файле в текстовом виде.
File_Write перезаписывает файл стирая старые данные. File_Append спасет. Не раскрыт вопрос отказа и извлечения флешки. Это очень важные моменты.
File_Write не перезаписывает файл, а записывает данные в конец файла ранее открытого командой SD.open()
А команда File_Append вообще отсутствует: www.arduino.cc/reference/en/libraries/sd/
Возможно вы используете какую-то иную, стороннюю библиотеку, а не ту, которая идет с составе Ардуино ИДЕ.
На счет отказа и извлечения: можно просто проверять на существование ранее открытого (созданного) файла. Если его нет - значит с флешкой проблемы. А вообще есть масса способов проверить подключена ли флешка. Пример можно взять из примера «Card Info»
@@UCanDo esp32. Возможно на ней по другому нежели как на видео.
А просто открыть файл без импорта в excel не судьба, да?)
А можно массивы выгружать?
Массив - это по сути строка переменных, просто программа «знает» где конец одной строки переменных и начало следующей. Так что не вижу проблем в том чтобы сохранить массив
Напишите пожалуйста какой объём SD-карточки поддерживает данный модуль и в какая файловая система карты может работать с этим модулем?
Сложно сказать какой максимальный объем поддерживается. Я пробовал максимум на 16 Гб, все работает. Файловая система: FAT (8, 16 или 23).
Модуль - это всего лишь конвертер уровней. То есть карта работает по SPI 3.3 вольт. Если Ардуино будет работать от 3.3 вольт, то этот модуль не нужен, можно карту подключать напрямую.
@@UCanDo Спасибо!!! В архиве нет библиотеки для работы с RTC и в библиотеке онлайн в среде её тоже нет, где взять чтоб скомпилировать код?
Я сейчас в отъезде, не могу посмотреть. Напишите комментарий ещё раз в четверг-пятницу, тогда посмотрю код
Все сделал как у вас, но записывается через запятую, 1,2,3 - примерно так. не отступает строчку почему-то
В самом файле отступа не должно быть. Отступы и разбитие на ячейки формирует Exel.
Температурный датчик трогал, светочувствительный закрывал, а показания не поменялись. Как так ? И кстати OpenOffice Calc куда как более грамотно импортирует данные чем майкрософтовское убожество.
Сохранение данных происходит через определенные промежутки времени? Скорее всего вы попали между записями. попробуйте все данные выводить в сериал в реальном времени. Так вы точно увидите, проблема в датчиках или в сохранении данных.
Делал подобный логер на STM32, заинтересовался ресурсом на перезапись SD карт. Прямой информации от производителей не нашел, на в среднем по больнице 100 тыс. При записи раз в 5 сек с закрытием файла карточка сдохнет через пару месяцев.
Пришлось на всё свободное озу STM32F407 делать буфер данных... И сделать кнопку для сброса буфера на карту для изьятия, типа Eject.
Вам ведь не нужна флешка на 16 гигабайт. Подойдёт и на 128 мегабайт. Пойдите на рынок, поспрашивайте, таких флешек вы купите кучку за копейки. Я так когда-то сделал. У торгашей выкупил больше 10 самых мелких флешек, а заплатил меньше чем за одну 8-мигиговую флешку
а как буфер делали?
@@alexbanzay1519 кольцевой буфер, основу нашел на гитхабе, под себя подправил. Статически выделенный массив, при заполнении на 95% открывается файл, дописуется и закрывается. Есть кнопка принудительного сброса буфера в файл, чтобы флешку вытащить
А можна вести логгирование чаще? Скажем 2 раза в секунду по всем каналам ацп?
Да, конечно можно. Я записывал со скоростью 11000 раз в секунду. Больше скорость на Ардуино у меня не получалось.
Спасибо за ответ!
и в этом случае перерыв обычным delay делали?
профессор скажите а как организовать бинарный поиск в упорядоченоом массиве щаписанном на флешку средствами ардуины?
Поиск есть поиск. И файл - просто файл. Без разницы чем он был записан. Тем более что запись идет без фрагментации. А сделать побайтовое чтение (поиск) не сложно: arduino.ru/forum/programmirovanie/pobaitovo-chtenie-s-sd
@@UCanDo
пардон не там запятую поставил
средствами ардуины нужно организовать поиск в базе данных по порядковому номеру номера идут упорядочено
@@UCanDo
мерси за ссылочку
Там в теме этот вопрос задавался. Вот пример:
myFile = SD.open("LOG.log");
if (myFile) {
symbol = myFile.read();
}
myFile.close();
При каждом вызове myFile.read(); будет происходить смещение на 1 байт. То есть будет происходить поочередное чтение байтов начиная с 0-го.
Для смещения на конкретное число байтов есть команда:
myFile.seek (n);
где "n" - номер байт, на который нужно переместить "курсор".
@@UCanDo
ага спасибо
у меня тхт файл также без проблем откр. разделитель только - *
Все верно. Главное правильно сделать запись, и правильно потом экспортировать.
только пару дней как додумался как отследить время работы компрессора на холодильнике - прицепил датчик темп к радиатору, а потом по графику в экселе все классно видно , оказалось что целый день работал не выкл.
Здравствуйте
Ответил вам на почту.
Чтобы каждый раз заголовок не переписывался, достаточно одного ИФа.
Приведите пример.
Для того что бы не записывать заголовок Ардуино должна открыть файл на флешке и проверить содержимое. По-другому никак.
"Для того что бы не записывать заголовок Ардуино должна открыть файл на флешке и проверить содержимое. По-другому никак."
Или просто проверить наличие данного файла ;)
Наличие файла не говорит о его содержимом. Может от пустой, а может остался от предыдущих тестов.
Ну остался от предыдущих, какая разница если пишется дата и время? более того можно генерировать новое имя файла которое будет датой и временем начала отсчета. Нужно сразу показывать правильный код новичкам, даже если вы рассказываете не про весь код, а только про его часть. тем более сложности это не добавляет не "иф есть ли файл?" не "милс прошло ли время?". Преподавание это тоже профессия и раз уж взялись за это дело, то хотя бы азы нужно знать, что бы не научит плохому.
*Жирный текст* нормальный текст
Это SD карточка, а не флэшка. И даже не флэш карта. Называйте вещи своими именами, не утрируйте до простых понятий. У любого устройства может быть два слота - для SD карточки и для флэшки. И в инструкции грамотный инженер называет их правильно.
Сд флеш карта ! Не придерайся !! Юсб флешка это юсб обломись и отстань
И вообще раз такой умный а сам нечего умного не предложил!
Флешка флешка, EEPROM если точнее. Я прав?
Задержки делаем это самая плохая идея! Забудьте эту команду навсегда и никогда про неё не вспоминайте!
То есть гнать данные на флешку непрерывно? Со скоростью работы Ардуино?
Если у вас неприязнь именно к delay() то вас никто не заставляет ее использовать. Возьмите, millis() или по таймеру.
именно милс или таймер, но никак не делай, особенно если претендуете на обучение.
надеюсь в следующим уроке объясите вашим "ученикам" почему нельзя использовать delay().
В данном видео говорится не об паузах и таймерах, а о записи данных.
Пересмотрите мои видео и перечитайте мои комментарии - я всегда был против delay(). Применяю его в данном случае только для упрощения понимания кода. Одно видео - одна тема. А если еще рассказывать о паузах, о том что такое SPI, о согласовании уровней питания.... то толку от такого видео не будет.
Но опять же, каждой команде свое место. Если цель всего устройства - 1 раз в секунду считать данные с датчиков и записать на флешку, то не вижу никакой причины вместо delay() использовать millis или, тем более, таймер.
Почему в этом примере нельзя использовать delay? Боюсь внятного ответа от мы не получим)
потому как делай можно использовать в одном примере, в котором рассказывается, что его юзать в нормальных программах нельзя.
Внятный ответ, потому что delay БЛОКИРУЮЩАЯ функция которая ПОЛНОСТЬЮ останавливает выполнение программы на заданное время, и процессор(контроллер) в это время НИЧЕГО НЕ ДЕЛАЕТ кроме пожирания электричества! Как вам это ещё объяснить я не знаю.