Сообщество - Arduino & Pi
Добавить пост

Arduino & Pi

1 378 постов 20 571 подписчик

Популярные теги в сообществе:

Перенос системы на Raspberry Pi 4B

Здравствуйте.

Может кто делал собственно сабж?

Имеется малина, к ней по USB подключен внешний HDD на котором лежат торренты. Хочу подключить к ней же по USB M2 SSD и перенести туда систему. И если вопрос собственно в клонировании microSD на SSD не стоит (утилит масса, как и виндовых так и линуксовых), то как малина поймёт, что система находится на SSD, а не на HDD?

Я бутлоадер обновил и в raspi-config есть пункты в меню, где можно выбрать с чего загрузка будет в будущем. В оффициальной документации написано, что эти настройки хранятся в EEPROM. Но в этой же документации не написано, что делать, если USB-устройств хранения больше одного. То ли не предусмотрено такое (что вряд ли), то ли я не понимаю нюансов (что скорее всего).

Может у кого был подобный опыт? Поделитесь, пожалуйста.

Raspberry и eeprom 24 серии (вопрос)

Ни и гуглил и яндексил и даже рамблернур. Но не нашел . как читать записывать данные в еепром 24 серии размером 8К ну можно и не 8К.  Подскажите дайте примерчик на питоне

Подключение энкодера к Ардуино и полнофункциональный код обработки для него

Энкодер - это устройство преобразования механического перемещения или угловых изменений положения в цифровой сигнал. В статье рассматривается самый популярный в DIY сообществе инкрементальный энкодер EC11 с кнопкой. При его вращении на выходах A и B формируются TTL сигналы в виде импульсов сдвинутые между собой по фазе на 90 градусов. Таким образом с его помощью, можно определить направление и скорость вращения, а так же рассчитать угол поворота. В отличие от потенциометров, энкодер KY-040 гораздо надежней и долговечный.

Подключение энкодера к Ардуино и полнофункциональный код обработки для него Arduino, Энкодер, Своими руками, Видео, Длиннопост

Немного подробностей

Собирая один из проектов с использованием encoder. Я не смог найти код для Ардуино выполняющий все мои условия. Так как для проекта нужно обрабатывать следующие команды: "Вращение без нажатия", "Вращение с нажатием", "Нажатие" и "Длинное нажатие", а так же требуется стабильная работа энкодера. Скетчи использующие один пин с прерыванием INT0 или INT1, работают отвратительно и при вращении вала энкодера вылетает очень много ошибок. Код без использования прерываний работает стабильно, но он не работает в фоновом режиме, его нужно встраивать в тело основной программы, что в свою очередь приводит к не своевременному срабатыванию обработчика и пропускам при вращении энкодера. Еще хуже обстоят дела с обработкой нажатия с вращением вала энкодера и обычным с нажатием. Пришлось написать свой код обработки, который исключает описанные выше проблемы. С дребезгом контактов я не стал бороться программно, так как это приводит к задержкам обработки. Проще и надежней использовать керамические конденсаторы.

Схема подключения энкодера к Ардуино

Для считывания сигналов с выходов EC-11, нужно использовать три цифровых входа Arduino. В схеме подключения я использовал редко используемые мной в своих проектах выводы Arduino(A1, A2 и A3). Внешние подтягивающие резисторы отсутствуют, так как я использовал внутреннюю подтяжку микроконтроллера. Конденсаторы нужны для гашения импульсов дребезга контактов. Если у вас новый и хороший энкодер, то можно обойтись и без них. Но на кнопку в любом случае потребуется конденсатор, так как ее дребезг неизбежен.


Используемые в схеме компоненты:

Arduino nano - 1 шт.

Энкодер EC11 -1 шт.

Соединительные повода - 4 шт.

Керамические конденсаторы 0,1 мкФ - 3 шт.

Подключение энкодера к Ардуино и полнофункциональный код обработки для него Arduino, Энкодер, Своими руками, Видео, Длиннопост

Скетч для Ардуино

Для того что бы отслеживать изменение положения энкодера в фоновом режиме, я использую прерывание PCINT1. Обработка всех функций происходит в прерывании, обработчик в зависимости от произошедшего действия изменяет переменную enc_state. Если значение переменной enc_state=0 - ничего не произошло, enc_state=1 - экодер вращался без нажатия, enc_state=2 - экодер вращался с нажатием, enc_state=3 - было нажатие на кнопку, enc_state=4 - было длинное нажатие на кнопку, Прерывание будет срабатывать каждый раз по изменению состояния входов, как с высокого уровня на низкий, так и наоборот. То есть при одном щелчке энкодера прерывание сработает 4 раза. Или по 2 раза для каждого из входов. Но обработчик выдаст сигнал поворота только 1 раз на все 4 прерывания.

Код обработчика при каждом срабатывании записывает в переменную lastcomb состояние входов, к которым подключен энкодер. И ждет состояние когда выходы A и B будут замкнуты на GND, это гарантированный сигнал того, что энкодер вращается. После того как этот сигнал получен, обработчик проверяет в какую сторону было вращение. Для этого он сравнивает его предыдущее значение из переменной lastcomb и в зависимости от фазы сдвига определит в какую сторону был поворот ротора. Как я писал ранее, сложнее всего отслеживать нажатие кнопки.

Так как использовать определенные тайминги я не планировал, потому, что они неизбежно приводят длительным задержкам работы обработчика и основной программы, или требуют использование таймера, которых в микроконтроллере всего 3 шт. их, как правило никогда не хватает. Собственно проблема состояла в том, чтобы разделить "нажатие с последующим вращением" от простого нажатия. В итоге как вы уже можете убедиться, я решил эту задачу. Оптимизацией кода я не стал заниматься, потому как все работает и меня все устраивает. Для наглядности в коде все действия с энкодером, отображаются в Serial мониторе программы Adruino IDE.

/*
При публичном размещении кода ссылка на первоисточник обязательна.
*/
#define btn_long_push 1000 // Длительность долинного нажатия кнопки
volatile uint8_t lastcomb=7, enc_state, btn_push=0;
volatile int enc_rotation=0, btn_enc_rotate=0;
volatile boolean btn_press=0;
volatile uint32_t timer;
//********************************
void setup()
{
pinMode(A1,INPUT_PULLUP); // ENC-A
pinMode(A2,INPUT_PULLUP); // ENC-B
pinMode(A3,INPUT_PULLUP); // BUTTON
PCICR = 0b00000010; // PCICR |= (1<<PCIE1); Включить прерывание PCINT1
PCMSK1 = 0b00001110; // Разрешить прерывание для A1, A2, A3
Serial.begin(115200);
}
//****************************************

void loop()

{

switch (enc_state)

{

case 1: {

Serial.print("Вращение без нажатия ");

Serial.println(enc_rotation);

}

break;

case 2: {

Serial.print("Вращение с нажатием ");

Serial.println(btn_enc_rotate);

}

break;

case 3: Serial.println("Нажатие кнопки ");

break;

case 4: Serial.println("Длинное нажатие кнопки ");

break;

}

enc_state=0; //обнуляем статус энкодера

}


//****************************************
ISR (PCINT1_vect) //Обработчик прерывания от пинов A1, A2, A3
{
uint8_t comb = bitRead(PINC, 3) << 2 | bitRead( PINC, 2)<<1 | bitRead(PINC, 1); //считываем состояние пинов энкодера и кнопки
if (comb == 3 && lastcomb == 7) btn_press=1; //Если было нажатие кнопки, то меняем статус
if (comb == 4) //Если было промежуточное положение энкодера, то проверяем его предыдущее состояние
{
if (lastcomb == 5) --enc_rotation; //вращение по часовой стрелке
if (lastcomb == 6) ++enc_rotation; //вращение против часовой
enc_state=1; // был поворот энкодера
btn_enc_rotate=0; //обнулить показания вращения с нажатием
}
if (comb == 0) //Если было промежуточное положение энкодера и нажатие, то проверяем его предыдущее состояние
{
if (lastcomb == 1) --btn_enc_rotate; //вращение по часовой стрелке
if (lastcomb == 2) ++btn_enc_rotate; //вращение против частовой
enc_state=2; // был поворот энкодера с нажатием
enc_rotation=0; //обнулить показания вращения без нажатия
btn_press=0; //обнулить показания кнопки
}
if (comb == 7 && lastcomb == 3 && btn_press) //Если было отпускание кнопки, то проверяем ее предыдущее состояние
{
if (millis() - timer > btn_long_push) // проверяем сколько прошло миллисекунд
{
enc_state=4; // было длинное нажатие
} else {
enc_state=3; // было нажатие
}
btn_press=0; //обнулить статус кнопки
}
timer = millis(); //сброс таймера
lastcomb = comb; //сохраняем текущее состояние энкодера
}

Заключение

Результат работы кода меня порадовал и теперь я могу продолжить работу над своим новым проектом, который скоро здесь выложу. Надеюсь эта короткая статья вам понравилась и вы сможете воспользоваться моей наработкой в своих самоделках.

Если у Вас остались вопросы и замечания, пишите их в комментариях. Я с удовольствием на них отвечу.

Показать полностью 2

Делаем сенсорную клавиатуру для компьютера своими руками

Для удобства использования бывает, нужно сделать выносную компьютерную клавиатуру с различным набором функций. Сегодня рассмотрим, как можно сделать сенсорную клавиатуру для компьютера своими руками.

Понятно, что использовать дисплей Nextion приемлемо в том случае, если вы делаете красивую внешнюю клавиатуру для вашего бизнеса, где вашему клиенту нужно вводить пароль, например, полученный по СМС или другую информацию.

Делаем сенсорную клавиатуру для компьютера своими руками Клавиатура, Горячие клавиши, Видео, Своими руками, Видеоблог, Длиннопост, Arduino

Но для домашнего применения дисплей Nextion дороговат. Поэтому вместо дисплея можно использовать более дешёвые сенсорные дисплеи или матричную клавиатуру 4х4, как с ней работать читайте тут.

Делаем сенсорную клавиатуру для компьютера своими руками Клавиатура, Горячие клавиши, Видео, Своими руками, Видеоблог, Длиннопост, Arduino

Результат получаем вот такой.

Делаем сенсорную клавиатуру для компьютера своими руками Клавиатура, Горячие клавиши, Видео, Своими руками, Видеоблог, Длиннопост, Arduino

Количество клавиш и их функционал можно изменять. Или сделать что-то на подобии этого.

Делаем сенсорную клавиатуру для компьютера своими руками Клавиатура, Горячие клавиши, Видео, Своими руками, Видеоблог, Длиннопост, Arduino

Скачать исходные материалы к проекту можно тут.


Надеюсь моя информация будет полезной.

Спасибо! Всем добра!

Показать полностью 4

Ардуино. Нужна помощь

Здравствуйте. Любители ардуино, проконсультируйте пожалуйста по подбору компонентов (платы, драйверы и т.п) для проекта робота состоящего из :
- 8 сервоприводов 6 в
- 8 мотор редукторов 6в
- 8 актуаторов линейных 6в
Необходимо подключить все эти компоненты с беспроводным управлением (желательно каждым в отдельности)

Строим графики. Nextion Display waveform tutorial

Продолжаем изучать работу с Nextion Display. В предыдущем посте рассказывал, как сделать красивое оформление интерфейса. Сегодня рассмотрим, как строить графики с использованием элемента waveform.

Используя всего 3 компонента интерфейса можно построить график на дисплее без использования внешнего микроконтроллера.

Строим графики. Nextion Display waveform tutorial Arduino, Дисплей, Lcd дисплей, Жк-дисплей, Урок, Видео, Своими руками, Видеоблог, Длиннопост, График

Можно поиграть с настройками и вывести максимальное количество графиков.

Строим графики. Nextion Display waveform tutorial Arduino, Дисплей, Lcd дисплей, Жк-дисплей, Урок, Видео, Своими руками, Видеоблог, Длиннопост, График

Также можно построить график по данным полученным с Arduino.

Строим графики. Nextion Display waveform tutorial Arduino, Дисплей, Lcd дисплей, Жк-дисплей, Урок, Видео, Своими руками, Видеоблог, Длиннопост, График

Внимание! Нужно учитывать 2 основных ограничения, про которые написано в документации по дисплею.

Строим графики. Nextion Display waveform tutorial Arduino, Дисплей, Lcd дисплей, Жк-дисплей, Урок, Видео, Своими руками, Видеоблог, Длиннопост, График

Ограничение диапазона выводимой информации от 0 до 255. И одно значение это 1 столбец пикселей на дисплее. Соответственно, чем больше у вас дисплей, тем больше информации вы сможете вывести на график.

Строим графики. Nextion Display waveform tutorial Arduino, Дисплей, Lcd дисплей, Жк-дисплей, Урок, Видео, Своими руками, Видеоблог, Длиннопост, График

Материалы к уроку доступны тут


Надеюсь моя информация будет полезной.

Спасибо! Всем добра!

Показать полностью 5

Управление нагрузкой с помощью Digispark ATtiny85. "Arduino для чайников"

Второе обучающее видео про работу с Digispark, а именно — управление нагрузкой с его помощью. Приятного просмотра!


Скетчи к видео: https://disk.yandex.ru/d/XSxQDKH-fU2MzA

Первая часть здесь: https://www.youtube.com/watch?v=KZ3M71AEXlA


Приятного просмотра, друзья! И не забудьте подписаться на канал (https://www.youtube.com/arturostv), чтобы не пропускать полезные видео!

Знакомство с Digispark ATtiny85. "Arduino для чайников"

Обучающее видео про начало работы с Digispark и управление нагрузкой с помощью этого контроллера. Самая маленькая Arduino-плата уже на канале! Приятного просмотра!


Скетчи к видео: https://disk.yandex.ru/d/XSxQDKH-fU2MzA


Приятного просмотра, друзья! И не забудьте подписаться на канал (https://www.youtube.com/arturostv), чтобы не пропускать полезные видео!

Отличная работа, все прочитано!