я ничего не коллекционирую)) я делаю полезные устройства... щас доделываю приложения для звонков по интернету... точнее по бесплатному Wi-Fi... экономя деньги)) приложение уже работает... переходим к натурным испытаниям))
Добавлено after 16 minutes 56 seconds: когда делал умный дом...
в схеме использовал роутер и интернет модуль... кабель (витуха) приходил от провайдера на роутер... а с роутера на интернет модуль.
если роутер зависал то МК автоматом переключал кабель (витуха) от провайдера напрямую на интернет модуль... при этом роутер исключался из общей схемы...
для переключения кабеля (витуха) я использовал обычную релюшку... можно поляризованную...
аналогично можно сделать с ПЛК... да и любым другим устройством с интернет.
например есть куча ПЛК включённых последовательно... все ПК мониторят дург друга... как в самолёте... 5 бортовых компьютеров мониторят друг друга)) в случае отказа одного из ПЛК соседний ПЛК выкидывает отказавший ПЛК из схемы... с помощью простой релюшки... питание релюшки можно сделать по той же витухе... как в PoE. всё очень просто и надёжно.))
вместо реле можно использовать диодный коммутатор... будет ещё надёжней)) кой какие опыты уже делались с диодным коммутатором... над диодным коммутатором надо ещё поработать...
Добавлено after 1 minute 50 seconds: сейчас работаю по оптике...
Да, про реле я думал, просто не знал практические реализации. ПЛК с Ethernet пока не разбирал.
Ваша схема умного дома на витых парах мне понравилась. Я у себя в квартире в каждую розетку вывел по 2 Ethernet кабеля на всякий случай. Предусмотрел такую разводку до ремонта. Теперь могу везде по проводному умному устройству вставлять.
все нормальные люди закладывают витуху на этапе ремонта... кроме меня)) потому я ремонт ещё не делал))
разбирать ПЛК в принципе и не обязательно... можно прицепить внешний коммутатор на реле... на ту же DIN рейку... и управлять этой релюшкой удалённо по той же витухе... разницы нет))
первое что приходит на ум... добавить в программу сканер IP )) т.к. количество IP у провайдера ограничено... то передрать все IP провайдера и найти свой... не займёт много времени)) 159.194.0.2 159.194.0.3 159.194.0.4 ... 159.194.255.254 правда там несколько пулов )) 27.24.0.2 27.24.0.3 27.24.0.4 ... 27.24.255.254 и т.д. ))
пипец... озадачили))
добавить в программу сканер IP )) теперь найти свой IP... можно в один клик )) 1 минута по времени))
не знаю как отнесётся провайдер к тому что кто-то постоянно сканирует все его IP адреса...)) а платить 150 рублей за статический IP... жаба душит))
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
По интернету работает идеально)) звук идеальный )) 22050 семплов * 16 бит = 352.800 бит/с. только иногда проскакивают щелчки - это потеря пакетов... видимо сигнал Wi-Fi был слабый... надо ещё потестить... в разных условиях... на разных Wi-Fi...))
Добавлено after 26 minutes 34 seconds: а впереди у нас ещё самая сложная задача... 1- берём старый телефон 2- подключаем к ардуино 3- звоним по интернету ))
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52 Сообщений: 2957 Откуда: Беларусь
Рейтинг сообщения:0
Решил таки я еще раз , после значительного перерыва попробовать пропихнуть звук 8кгц 8бит через GPRS модем SIM800. вернулся к тестированию канала и пропускной способности. Первый делом вывел звук через сериал ардуины (115200) и получил отличный результат. Выводил в лог программы putty. Т.е 115200 достаточная скорость порта,что собственно неудивительно. Потом я решил заново протестить пропускную способность модема. Заполнил массив разного размера 256, 512, 1024байт данными от 0 до 9 и стал толкать этот массив в порт модема и в java программе Романа смотреть сколько удается получить.
Добавлено after 1 minute 31 second: На ардуине при начале отправке зажигаю pin13, при окончании отправки заданного количества пакетов гашу.
Добавлено after 42 minutes 33 seconds:
Код:
for (int i = 0; i < 512; i++) { buf00[i] = i % 10; // остаток от деления на 10 даёт числа от 0 до 9 } digitalWrite(ledStart, HIGH);
Добавлено after 14 minutes 24 seconds: к сожалению добится 100% получения пакетов удалось лишь если делать задержку больше 100мс (delay(100)) и еще приходится делать задержку для комманды указания передачи и размера пакета AT+CIPSEND=512 В этом случает отсылая 512 пакетов по 512 байт мне удалсь получить файл 262 144 байт (512*512) при уменьшении задержки между пакетами до 50мс приходит файл размером 250 880 байт при уменьшении задержки между пакетами до 20мс приходит файл размером 203 264 байт c задержкой близкой к приемлемой delay(20) удается пропихнуть без потерь лишь первые 16 пакетов по 512 байт. Дальше , как я понял начинаются потери. С задержкой в 5 мс даже и эти 16 пакетов были получены с потерями.
Последний раз редактировалось olegue Чт янв 11, 2024 15:28:34, всего редактировалось 1 раз.
у тебя ПОТОКОВАЯ передача ! требования к потоковой передачи: -высокая скорость (в идеале от 10 Мбит/с и выше). -минимальные задержки (в идеале < 1 мс). -стабильный пинг.
опять ты пытаешься впихнуть невпихуемое)) сам GPRS модем SIM800 не предназначен для таких экспериментов)).
тут надо или Wi-Fi или LTE или 5G )) а лучше всё вместе))
c задержкой близкой к приемлемой delay(20) удается пропихнуть без потерь лишь первые 16 пакетов по 512 байт. Дальше , как я понял начинаются потери. С задержкой в 5 мс даже и эти 16 пакетов были получены с потерями.[/b]
olegue, если из старых, то точно не подойдёт. И рассчитай требуемый канал. Романдотком хоть и дурачок, но отчасти прав. 10 мбит/с, конечно, нафиг не надо, это полнейший бред, а не неотъемлемое свойство потоковой передачи, но какое-то значение должно быть.
к сожалению добится 100% получения пакетов удалось лишь если делать задержку больше 100мс (delay(100)) и еще приходится делать задержку для комманды указания передачи и размера пакета AT+CIPSEND=512
получается,что для того что бы пропихнуть 512байт я должен подождать 100мс, а это пропускная способность равная 5120б/с или 41000 bps, а мне по минимуму надо 8кб/c. Тем не менее хочу ппробовать протащить поток с сэплрейтом хотя бы 4кгц и потом уже успокоится.
Добавлено after 16 minutes 11 seconds: Да, все получилось. Так как у меня ардуинка была на LGT8f328 , то поставил в IDE делитель на 2 и в впрограмме оцифровки больше ничего не менял. Полученный файл завел в Sound Force и уменьшил битрейт до 4кгц внизу в панельи. Получил в итоге звук качества 4кгц. Приложу файл, там спектакл на бел. языке поэтому разборчивость так себе. Ну эт неважно. Важно что разобрался
Добавлено after 6 minutes 27 seconds: Еще важный момент , модем перевел в прозрачный режим myGsm.println("AT+CIPMODE=1");
и отправлял мелкими пакетами по 32байта, но это не имеет особого значения потому как в прозрачном режиме модем исходят из особеннстей подлкючения определяет какими пакетами отправлять, а то что ему даешь собирает в буфер.
Добавлено after 1 minute 27 seconds: задержки delay() тоже все убрал. С ними только хуже было
Добавлено after 5 minutes 20 seconds: нужно теперь в заголовке файла показать что 4кгц и будет нормально
хватит уже мучать GPRS на изернет переходи... там 10 мбит/с... всё летает без проблем))
скорее наоборот, вот допустим есть 8кгц pcm, что если сжать его на лету пускай потерями,но оптимизировав для уха и отправить уже 4кгц звук, вот такая затея.
Добавлено after 2 minutes 7 seconds: например убрать паузы
Добавлено after 14 seconds: или сделать их короче
Добавлено after 14 minutes 29 seconds: ерунда, конечно, но это так, лишь начало рассуждений
Добавлено after 1 hour 19 minutes 1 second: Короче, буду пытаться вернуться к 8кгц, но уберу повторяющиеся сэмплы, не буду писать их в буфер. Потом попробую +-1 тоже не писать. Надо пробовать.
как уже говорил выше... на ардуине сильно не разгонишься)) скорость маленькая... врятли ты напишешь нормальный кодек)) хотя если взять пачку ардуин... то можно подумать))
ну можно немного поколдовать... ))
1. если не писать +-1 то будет искажение типа "ступенька". лучше тогда уменьшить динамический диапазон... не писать старшие разряды... я вместо 8 бит писал 7 бит... и даже 6 бит... на семпл )) получил pcm-128... pcm-64... pcm-32... соответственно. звук как у рации - срезает громкие звуки. но разобрать можно)) это ардуина может.
2. ещё можно писать не абсолютные значения... а относительные... +1+2-1-3+2... это ардуина может. но посчитав внимательно... заметного выигрыша не получается)) хотя если снизить частоту на входе... короче надо посчитать)) или сделать как в IP-камере... там сначала передаётся опорный кадр... а потом передаются только те пиксели которые изменились в следующем кадре...
3. убрать паузы тоже можно... будет опять же как в рации VOX... пока говоришь в микрофон - идёт передача... не говоришь - нет передачи)) это ардуина может.
4. что ещё ардуина может ? сделать БПФ (быстрое преобразование Фурье) и разложить звук на спектры ... и отфильтровать не нужные гармоники...(как в телефоне GSM)... это ардуина не может. хотя если взять пачку ардуин... то можно подумать))
лучше тогда уменьшить динамический диапазон... не писать старшие разряды... я вместо 8 бит писал 7 бит... и даже 6 бит... на семпл )) получил pcm-128... pcm-64... pcm-32... соответственно. звук как у рации - срезает громкие звуки. но разобрать можно)) это ардуина может.
зацепился за эту фишку.
допустим я обьявил массив для накопления сэплов buf00[32] если я буду сохранять только 7 битные сэмплы: buf01[bufByteCount] = ADCH & 0x7F;
значит ли это что размерр массива перед отправкой будет не 32 байта (32*8=256 бит), а 32*7=224 бита ?
Добавлено after 2 minutes 44 seconds: Если это так, то получается что мне нужно будет лишь поприседать с "декодированием" получившегося кода, а для лучше юзабильности наверно стоит на выходе вернуть файлу 8битный формат, что бы можно было играть его на плейерах, а не майстерить свой
сдвигаем весь массив на 1 бит buf00[0] = (buf00[0]>>1); buf00[1] = (buf00[1]>>1); ... buf00[31] = (buf00[28]>>1);
получаем массив 32 байт по 8 бит buf00[32]
вернули файл в 8 битный формат
экономия трафика 12,5 % (100/8=12,5)
недостаток - динамический диапазон уменьшился в 2 раза (!).
Вопрос: имеет ли смысл уменьшать динамический диапазон в 2 раза (!) ради экономия трафика 12,5 %... ???
для себя я ответил на этот вопрос уже давно - нет, не имеет)) потому что у меня всё работает по бесплатному Wi-Fi... )) у тебя всё работает по платному GPRS модем SIM800.
Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52 Сообщений: 2957 Откуда: Беларусь
Рейтинг сообщения:0
попробовал удалять паузы квадратичным методом. Если энергия буфера меньше Тресхолда, то не отправляют его. Поигрался с этим значением, толку мало. Вырезание всех пауз, даже там где они формируют речь, это тоже не дело. Попрбую 7 бит. По крайней мере есть с чем сравнить.
Код:
const int THRESHOLD = 24500; // Пороговое значение энергии
// Функция для определения энергии в заданном буфере int calculateEnergy(const uint8_t* buffer, int size) { int energy = 0; for (int i = 0; i < size; ++i) { energy += buffer[i] * buffer[i]; } return energy; }
void loop() { if (digitalRead(btnStart) == LOW){ digitalWrite(ledStart, HIGH); if (bufByteCount == 32 && bufWrite == 1) { int energy = calculateEnergy(buf01, sizeof(buf01)); //Serial.print (energy);Serial.print ("THRESHOLD");Serial.println (THRESHOLD); if (energy > THRESHOLD) { // Если энергия выше порога, отправляем пакет myGsm.write(buf01,sizeof(buf01)); }} if (bufByteCount == 32 && bufWrite == 0) { int energy = calculateEnergy(buf00, sizeof(buf00)); //Serial.print (energy);Serial.print ("THRESHOLD");Serial.println (THRESHOLD); if (energy > THRESHOLD) { // Если энергия выше порога, отправляем пакет myGsm.write(buf00,sizeof(buf00)); }}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 50
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения