Проблемы с подключением клавиатуры к arduino

Подключаем кнопки к ардуино, а они нормально не работают. Обязательно проверяйте пины после покупки, не повторяйте моей ошибки! Сами кнопки понятное дело были в порядке. Это 2 часть видео дневника про умный аквариум В этом видео дневнике я покажу процесс разработки устройства для автоматизации акваса с нуля.

1 часть https://youtu.be/NSsk6gA53W8

0 часть https://youtu.be/aGsA9zkOoGY

Ультрафиолетовая подсветка для аквариума https://youtu.be/ZIK3Y9wEEbA

✅ Такой Дисплей на али https://vk.cc/bVyPbO

✅ Модуль реле на али https://vk.cc/bVyQzV

✅ Ардуино нано Проверенный продавец https://vk.cc/bVyTl5

✅ Набор кнопок как у меня http://alii.pub/5pswa6

#arduino #electronics #электроника #SmartAqua

Аппаратное обеспечение платы Arduino Uno и назначение ее компонентов

В настоящее время платформа Arduino стала по настоящему синонимом простого освоения микроконтроллерной техники, позволяя всем желающим, даже далеким от технических терминов, конструировать и программировать электронные устройства. Благодаря огромному сообществу и обилию уже готовых наработанных программных решений и библиотек она позволяет с минимальными усилиями реализовать проекты, на создание которых обычными способами уйдут долгие часы. Поэтому ее часто рекомендуют в качестве первой платформы для изучения принципов работы микроконтроллеров и устройств на их основе.

Так что же такое Arduino? Говоря простыми словами, Arduino – это платформа разработки, состоящая из аппаратной и программной частей. В данной статье мы достаточно подробно рассмотрим ее аппаратную часть. Как и другие платы разработки (отладочные платы), плата Arduino состоит из ряда основных компонентов, их назначение мы и рассмотрим в этой статье.

Структура аппаратной части платы Arduino Uno

Что представляет собой аппаратное обеспечение платы Arduino? Это микроконтроллер и другие компоненты, установленные на макетной плате, которые можно использовать для простых ежедневных задач, математических вычислений, прототипирования, тестирования и многого другого. Плата разработки Arduino состоит из центрального микроконтроллера с дополнительными окружающими его компонентами и цепями для взаимодействия с компьютером, которые можно также использовать для программирования микроконтроллера. Для подключения и компьютеру и программирования микроконтроллера в плату Arduino Uno встроен преобразователь интерфейса USB в логику TTL (USB to TTL converter). Структура аппаратной части платы Arduino Uno показан на следующем рисунке.

Назначение компонентов платы Arduino Uno

Рассмотрим основные компоненты платы Arduino Uno. Их внешний вид и местоположение на плате показаны на следующем рисунке.

Основным компонентом платы Arduino Uno является микроконтроллер ATMega328P. Можно сказать что он является “сердцем” платы. Рядом с микроконтроллером расположен кварцевый резонатор на 16 МГц, который обеспечивает микроконтроллеру необходимую тактовую частоту для его работы. Рядом с ним расположен разъем под названием ICSP – он предназначен для внутрисистемного программирования/”программирования в системе” (In System Programming). Также же через него в микроконтроллер записывается загрузчик (bootloader) Arduino.

Если вы посмотрите на другую сторону платы Arduino Uno, то там вы увидите еще один микроконтроллер в корпусе QFN. Это микроконтроллер ATMega16U – он используется в качестве USB –TTL конвертера.

На левой стороне платы расположены USB порт и разъем постоянного тока (DC barrel jack). Вы можете подавать питание на плату Arduino Uno через USB порт или данный разъем постоянного тока – на него можно подавать питающее напряжение в диапазоне 7-12V. Далее по схеме за разъемом постоянного тока расположены два регулятора напряжения – на 5V и 3.3V.

Рассмотрим более подробно назначение компонентов платы Arduino Uno.

Разъем USB B-типа

Разъем USB на плате Arduino Uno выполняет две основные функции. Одна из них – коммуникационная, с помощью данного разъема осуществляется взаимодействие (обмен данными) платы с компьютеров и загрузка прошивки в плату при помощи загрузчика (bootloader). Вторая его функция – подача питания на плату. Вы можете использовать USB порт непосредственно для подачи питания на плату Arduino Uno.

Контакты ISCP

На плате Arduino Uno расположены два 6-контактных разъема ISCP. Один из них расположен около чипа USB – TTL, а другой – в конце платы. Эти контакты используются для внутрисистемного программирования двух микроконтроллеров платы – ATMgega16U, используемого в качестве конвертора USB-TTL, и ATMega328.

Кнопка сброса (Reset Button)

Как следует из ее названия, данная кнопка используется для сброса микроконтроллера ATMega328. Она подключена к контакту PC6/Reset pin с помощью подтягивающего резистора на 10 кОм. При нажатии кнопки контакт “подтягивается” к земле и происходит сброс микроконтроллера.

Чип интерфейса USB-TTL

Для взаимодействия с компьютером плата Arduino использует USB-TTL интерфейс. В плате Arduino Uno его роль выполняет микроконтроллер ATMega16U.

Кварцевый генератор/керамический резонатор

Для работы микроконтроллера ему необходим источник тактовой частоты, который определяет скорость работы микроконтроллера. Именно от тактовой частоты зависит количество инструкций, которые микроконтроллер может исполнять за одну секунду. Микроконтроллеры серии ATMega могут использовать два типа источника тактовой частоты. Первым из них является внутренний (встроенный в микроконтроллер) RC генератор. Но его максимальная частота ограничена и ее стабильность не очень высока.

Вторым способом является использование внешнего генератора тактовой частоты. Для этих целей мы можем использовать кварцевый генератор или керамический резонатор. На представленном ниже рисунке выделены оба этих элемента в составе платы Arduino Uno. Первый из них – это кварцевый генератор 16 МГц, используемый для чипа ATMega16U2, а второй – резонатор 16 МГц, используемый для микроконтроллера ATMega328P.

Управление подачей питающего напряжения (Power Path control)

Если вы внимательно посмотрите на плату Arduino Uno, то вы обнаружите на ней микросхему LM358. У вас может возникнуть вопрос зачем она здесь нужна. Данная микросхема играет роль компаратора для управления подачей питающего напряжения. Когда питание на плату Arduino Uno подается через разъем постоянного тока или контакт Vin, данная схема управления подачей питающего напряжения отключает цепь подачи питания через USB порт и, таким образом, предохраняет его от возможного повреждения.

Регулятор напряжения

Микроконтроллеры ATMega328 и ATmega16U2 имеют максимальное входное напряжение около 5V, а большинство модулей и периферийных устройств работает от напряжения 5V или 3.3V. Через разъем постоянного тока или контакт Vin на плату Arduino Uno может подаваться питающее напряжение в диапазоне 7-12V, поэтому для его понижения используются два регулятора напряжения. Один из них (обозначенный на представленном ниже рисунке цифрой 1, используется для понижения напряжения до 5V, а второй – для понижения напряжения до 3.3V, которое подается на контакт 3.3V платы.

Разъем постоянного тока (DC Barrel Jack)

Может использоваться для подачи питания на плату Arduino Uno. Поскольку подаваемое через него питающее напряжение может находиться в диапазоне 7-12V, то к нему мы можем подключить адаптеры на 12V DC или 9V DC. Также к нему можно подключить батарейку 9 В через специальный переходник.

Цифровые и аналоговые контакты ввода/вывода (I/O)

Плата Arduino Uno содержит 14 цифровых контактов ввода/вывода (I/O) и 6 аналоговых входов, которые также можно использовать в качестве цифровых контактов ввода/вывода. Цифровые контакты платы работают с логическими уровнями напряжения 5V. Плата содержит 6-канальный 10-битный АЦП (аналого-цифровой преобразователь), каналы которого подключены к аналоговым входам A0-A5 платы.

Светодиоды

Плата Arduino Uno содержит 4 встроенных светодиода, расположение которых на плате показано на рисунке ниже. Один из этих светодиодов используется для индикации подачи питания на плату, еще два – для индикации активности на контактах Rx и Tx последовательного порта. А четвертый светодиод подключен к контакту 13 платы и никакой специальной роли не выполняет – его можно запрограммировать на индикацию любых событий.

Микроконтроллер ATMega328P

Главным компонентом платы Arduino Uno является микроконтроллер ATMega328P. На плате Arduino Uno используется 28-контактная версия данного микроконтроллера в корпусе DIP. При производстве платы в микроконтроллер Atmega328P загружается специальная программа-загрузчик (bootloader), которая позволяет загружать программы в платы Arduino Uno непосредственно через USB порт, без использования каких либо внешних программаторов.

Схема платы Arduino Uno

Принципиальная схема платы Arduino Uno показана на следующем рисунке.

А на следующем рисунке показана часть схемы платы Arduino Uno, отвечающая за подачу на нее питающего напряжения. На ней показаны разъем постоянного тока (DC barrel jack), регуляторы напряжения на 5V и 3.3V и схема управления подачей питающего напряжения на основе компаратора LM358.

подключен к разъему постоянного тока через диод M7, который в данном случае выполняет роль защиты от смены полярности питающего напряжения. Выход данного регулятора подключен к остальной части цепи 5V, а также ко входу регулятора напряжения 3.3V LP2985-33DBVR.

Другим источником напряжения 5V является контакт VCC, который подключен к стоку транзистора FDN340P, представляющего собой P-канальный MOSFET. Исток данного транзистора подключен к цепи 5V, а затвор – к выходу операционного усилителя LMV358, используемого в качестве компаратора. Он осуществляет сравнение между 3V3 и Vin/2. Когда на Vin/2 уровень напряжения больше это приводит к уровню high на выходе компаратора и P-канал MOSFET закрывается. Когда на плату не подается никакого напряжения Vin, выход V+ компаратора подтягивается к уровню GND и на его Vout будет уровень low. Соответственно, транзистор будет открыт и USB VCC подключается к цепи 5V.

На следующем рисунке показана структурная схема подачи питания на плату Arduino Uno.

А теперь рассмотрим часть схемы платы Arduino Uno, отвечающую за преобразование USB-TTL. Как мы уже отмечали, главным компонентом этой части схемы является микроконтроллер ATMega16U2. Данная часть схемы платы Arduino Uno содержит ICSP разъем, внешний кварцевый генератор с нагрузочными конденсаторами (CL) и конденсатор для фильтрации питающего напряжения. Варисторы (VDRs) Z1 и Z2 используются для защиты схемы от электростатического разряда. Также схема содержит два резистора, подключенных к контактам D+ и D-, они используются для корректного формирования импеданса линий данных интерфейса USB.

А на следующем рисунке показана главная часть схемы платы Arduino Uno, содержащая микроконтроллер ATMega328P и дополнительные компоненты для его работы.

Источник https://microkontroller.ru/arduino-projects/apparatnoe-obespechenie-platy-arduino-uno-i-naznachenie-ee-komponentov/

Arduino решение проблемы с точностью millis

Я делал спортивный таймер. и Arduino отставала на десятки секунд в час. Проблему не удалось решить ни с помощью таймеров ни с помощью библиотек и прерываний, так как они все отталкиваются от внешнего тактирования микроконтроллера.

Читать далее «Arduino решение проблемы с точностью millis»

Raspberry Pi Pico VS Arduino. Сравнение

Недавно Raspberry выпустила чип собственный разработки в форм факторе Arduino. Впервые новинка близка по цене к платам итальянской кампании. Сравним устройство с сопоставимой по цене/характеристикам платой от Arduino.

Поправки У меги не 1 а 4 UART. Arduino IDE (C, C++) PS Да. Пи Пико :)

Плата на али http://ali.pub/5i2d5l

Минимальная схема подключения ATmega328

И так, рассмотрим, что нам надо, что бы с минимальной объвязкой запустить ATmega328?

Да всего ничего, совсем немножко деталюшек: 4 резистора, 3 конденсатора, 1 кварц на 16 МГц, светодиод, и, конечно же, сам микроконтроллер.

Вот почти самая простая схема подключения:

Читать далее «Минимальная схема подключения ATmega328»

Подключение модуля часов реального времени ds3231 mini Arduino

Часы подключаются по двухпроводной шине IIC (Inter-IntegratedCircuit) через выводы SDA и SCL к SDA и SCL Arduino соответственно. Также необходимо подключить питание +5В и GND. Остальные выводы специфичны для DS3231 и не поддерживаются библиотеками для DS1307, да и не часто используются. Модуль работает как от 5 так и от 3.3 вольт.

Читать далее «Подключение модуля часов реального времени ds3231 mini Arduino»

Вольтамперметр для блока питания на Arduino

Вольтамперметр для блока питания на Arduino

Цифровой вольтамперметр предназначенный для установки в блок питания для отображения выходного напряжения и тока. Дополнительно используется отключение нагрузки когда ток нагрузки превышает допустимый порог. Допустимый порог устанавливается кнопками «+» и «-» с шагом 0,01 А. При превышении допустимого тока срабатывает реле и отключает нагрузку на 10 секунд, на индикаторе (1602 на базе контроллера HD44780) появляется надпись «10sOFF». Если ток нагрузки не превышает допустимый предел, на индикаторе высвечивается надпись «ON». При изменении уставки максимальной нагрузки на индикаторе высвечивается надпись «REG». Значение максимально допустимого тока сохраняются в энергонезависимой памяти при каждом его изменении.

Для обеспечения высокой точности измерения тока до 10 А и напряжения до 30 В используется АЦП-модуль ADS1115 который представляет собой 16-битный аналого-цифровой преобразователь, он имеет 4 входа для преобразования аналогового сигнал в цифровой.

При измерении напряжения от 0 до 30 множитель АЦП равен 1, при этом максимальное измеряемое напряжение равно  4.096 В с разрешением 1 bit = 0.125 мВ, но с учетом делителя напряжения на резисторах R2 R3 (8 раз) разрешение падает до 2 мВ при измерении напряжения до 30 В.

При измерении тока от 0 до 10 А множитель АЦП равен 16, а максимальное измеряемое напряжение равно 0.256 В с разрешением 1 bit = 0.0078125 мВ. Но на шунте при токе 10 А (практически можно измерять ток до 25,6 А, но в данном варианте, на индикатор выводится ток до 10 А) возникает падение напряжения 100 мВ, поэтому измерение тока производится с минимальным разрешением 0,001 А (0,78125 мА).

Как видно на схеме R4 R6 замыкают входы на землю, это сделано для измерения дрейфа нуля АЦП, эти измерения вносят поправку на результаты измерения тока и напряжения. Дополнительно используется программная коррекция измерений при падении напряжения на шунте.

При каждом цикле программы измерения напряжения и тока производятся по 10 раз, далее выводится среднее значение тока и напряжения.

При подключении шунта, следует обратить внимание на порядок подключения: минус питания ИП подключается к шунту, а затем из точки соединения шунта с ИП идет подключение к земле платы Arduino. Далее коротким проводом второй конец шунта подключается к нагрузке.

Шунт (до 10 А) и делитель напряжения R1 R2 (0,25 Вт и выше) могут иметь достаточно большую погрешность, во время калибровки в скетче необходимо указать калибровочные значения для тока и напряжения.

#include <Wire.h>
#include <Adafruit_ADS1015.h> // Adafruit_ADS1X15-master.zip
#include <EEPROM.h>//#include <EEPROMex.h>
Adafruit_ADS1115 ads;
#include <LiquidCrystal.h>
  LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
 
  int u0,u1,a2,a3,i;
  byte w,stop;
  float u_0,u_1,u_ob0,u_ob1,a_2,a_3,a_ob2,a_ob3,i_reg;
  unsigned long time=millis();
  const float kalib0=7.970;// калибровка вольтметра А0 по максимальному напряжению 30V I=0
  const float kalib2=1.000;// калибровка амперметра А2 по максимальному току 10 А
 
void setup(void){
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(12,INPUT);pinMode(11,INPUT);pinMode(10,OUTPUT);
  i_reg = EEPROM.read(0)+(float)EEPROM.read(1)/100;// reg eeprom
  ads.begin();delay(100);
}
 
void loop(){
  if(digitalRead(12)==HIGH){i_reg=i_reg+0.01;if(i_reg>=9.99){i_reg=9.99;}time=millis();delay(200);w=1;}
  if(digitalRead(11)==HIGH){i_reg=i_reg-0.01;if(i_reg<0){i_reg=0.01;}time=millis();delay(200);w=1;}
  if(millis()-time>3000){
////////////////////////////////// вольтметр //////////////////////////////////////////// 
 while(i<10){i++;ads.setGain(GAIN_ONE);
   u0 = ads.readADC_SingleEnded(0);u_0 = u0*0.125*kalib0/1000;delay(20);
   u1 = ads.readADC_SingleEnded(1);u_1 = u1*0.125*kalib0/1000;delay(5);
   u_ob0=u_ob0+u_0;u_ob1=u_ob1+u_1;}
   u_0=u_ob0/10;u_ob0=0;u_1=u_ob1/10;u_ob1=0;i=0;  u_0=u_0-u_1;
  ///////////////////////////////// амперметр /////////////////////////////////////////////
 while(i<10){i++;ads.setGain(GAIN_SIXTEEN);
   a2 = ads.readADC_SingleEnded(2);a_2 = a2*0.0078125*kalib2/10;
   if(a_2>=i_reg){digitalWrite(10,LOW);stop=1;break;}else{digitalWrite(10,HIGH);}delay(20);
   a3 = ads.readADC_SingleEnded(3);a_3 = a3*0.0078125*kalib2/10;delay(5);
   a_ob2=a_ob2+a_2;a_ob3=a_ob3+a_3;}
   a_3=a_ob3/10;a_ob3=0;a_2=a_ob2/10;a_ob2=0;i=0;a_2=a_2-a_3; 
    ///////////////////////////////// вывод на экран ///////////////////////////////////////
   if(a_2<0.005){a_2=0;}if(u_0<0.005){u_0=0;}// измерения начинаются с 0,005 В и с 0,005 А
   u_0=u_0-(a_2/100);// компенсация напряжения шунта
  }
   lcd.setCursor(0,0);if(u_0<=9.999){lcd.print(" ");}lcd.print(abs(u_0),3);lcd.print(" B");
   if(millis()-time<3000){lcd.print("  REG    ");}
   lcd.setCursor(0,1);lcd.print(" ");lcd.print(abs(a_2),3);lcd.print(" A  ");lcd.print(i_reg,2);lcd.print(" A ");
   if(stop==1){lcd.setCursor(9,0);lcd.print(" 10sOFF ");stop=0;delay(10000);}
   if(stop==0&&millis()-time>3000){lcd.setCursor(9,0);lcd.print(" ON    ");}
 
   if(w==1){EEPROM.update(0,(int)i_reg);EEPROM.update(1,i_reg*100-(int)i_reg*100);w=0;}
}

Библиотека — https://github.com/addicore/ADS1115/archive/master.zip