10 заметок с тегом

LED

Электроника продолжается.

15 июня 2015, 12:58

Медленно, но верно Фёдор продолжает совершенствоваться в электронике и работе на камеру :)
В этот раз разбираемся с подключением потенциометра, для регулировки освещенности.

Продолжаем заниматься электроникой

26 мая 2015, 20:00

Сегодня продолжили с Фёдором занятия электроникой. Решили для начала повторить пройденное. Я хотел сделать пару фото, но Федя предложил сделать видео. Я нажал «запись», а вот то, что было потом, я никак не ожидал. Это не было отрепетировано!

Фёдор и диоды.

18 апреля 2015, 21:18

Сегодня Фёдор (5 лет) научился подключать светодиоды.

Научился вставлять батарейки в блок питания. Познакомился с макеткой. В итоге самостоятельно по схеме подключил светодиод через резистор. Спросил, что мы будем делать в следующий раз. Я сказал, что будем подключать много диодов сразу. Фёдор решил, что не может ждать следующего раза и прямо сейчас готов подключить много диодов. Затем самостоятельно подключил все диоды, что были.

Когда все подключенные диоды заработали, были очень интересно наблюдать как они светят в темноте под кроватью.

Паяем LOL shield

11 апреля 2013, 0:00

Человек, умеющий что-то делать своими руками, обычно вызывает симпатию и уважение у родных и близких. Можно бесконечно долго собирать проекты на макетных платах. Можно даже собирать очень сложные схемы. Например такие:

Но для того, чтобы сделать законченное устройство, скорее всего, придется паять. Не обязательно «травить» плату.

Можно использовать монтажную плату типа такой:

Вобщем пришло время обзавестись паяльником и овладевать навыками. Мы приобрели небольшой набор для паяния со всем необходимым:

А также небольшой конструктор типа DIY, чтобы было на чем тренироваться. Состоит он из небольшой печатной платы, на которую надо припаять светодиод, кнопочку и батарейку. В собранном виде выглядит вот так:
 

Но самое интересное было дальше. После того, как несколько таких штук было успешно спаяны и раздарены бабушке с дедушкой мы решились на нечто грандиозное. Есть такой интересный проект LOL Shield для Arduino. На одной плате 126 светодиодов.  Плата подключается с Arduino использует все его выходы, кроме двух. Получается такая свето-диодная матрица. Можно на ней бегущую строку делать, можно мультики рисовать или игрушки делать. Вобщем со всех сторон полезная вещь. Распространяется она в виде набора деталей, которые надо самостоятельно спаять.

Вот все детали, которые предстоит соединить вместе с помощью паяльника и припоя:

Поначалу объем работ пугает: припаять на плату 126 диодов, это 252 контакта. Но глаза боятся...

Вставляем первый ряд:

Переворачиваем плату и понеслась:

Пять часов прошли незаметно, шаг за шагом, светодиодная панель готова:

Пока мы с Арсением паяли, Фёдор успел поспать, а рядом пристоился котик:

К LOL Shield есть несколько бибилиотек для вывода текста, бегущей строки, картинок. Есть даже тетрис. Мы немного допилили программу для тетриса, так что стало можно с помощью потенциометров управлять фигурками. На некоторое время это стало любимой игрой Федора:

А вот небольшой ролик, который демонстрирует некоторые возможности этой игрушки:

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

Blinking LED, dimming LED.

6 марта 2013, 18:35

Ещё две схемы Арсений собрал и запрограммировал самостоятельно.

Первая: управление частотой моргания диода при помощи потенциометра.

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

int led1=3;
int onoff=A0;//потенциометр
int onoffVal=0;

void setup(){
  pinMode(led1,OUTPUT);
}

void loop(){
  onoffVal= analogRead(onoff);//считываем данные с потециометра
  delay(onoffVal);//делаем паузу длинной в зависимости от потециометра
  digitalWrite(led1,HIGH);//включаем диод
  delay(onoffVal);//делаем паузу в зависимости от потециометра
  digitalWrite(led1,LOW);//выключаем диод
}

Слово Арсению:

Вторая схема — модифицированный вариант первой, добавили еще один светодиод и при помощи ШИМ (использованной в предыдущем опыте) регулируем его яркость. В схему добавилось еще два элемента:

В прогамму две строки: в функцию инициализации:

  pinMode(led2,OUTPUT);

И в конец основной программы:

  analogWrite(led2,onoffVal/4);

Поскольку с аналогового входа (от потенциометра) мы получаем значение в диапазоне от 0 до 1023, а на выход можем подавать значение от 0 до 255, мы отправляем на выход значение в четыре раза меньшее чем на входе.

И снова Арсений:

Лампа хамелеон (color mixing lamp)

1 марта 2013, 18:01

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

Arduino не может менять напряжение на выходах, оно может быть либо 0, либо 5 вольт. Однако для плавного изменения яркости светодиода можно использовать технику под названием широтно-импульсная модуляция (ШИМ). ШИМ с высокой частотой включает и выключает напряжение на выходе. Это происходит так быстро, что при подключении к такому выходу светодиода человеческих глаз не может это различить. Когда вы бысто меняете на выходе  HIGH и LOW, это как если бы вы меняли напряжение. Часть времени, когда на выходе HIGH, называется рабочим циклом. Чем больше рабочий цикл, тем ярче светится светодиод.

Для проекта мы использовали фоторезисторы (сенсоры, которые меняют свое сопротивление в зависимости от количества света, которое на них попадает). Если эти фоторезисторы подсоединить к Arduino, то можно измерять изменение сопротивления, измеряя напряжение на входе Arduino, к которому подключен сенсор.

Вот схема, которую мы будем собирать:

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

Трехцветный светодиод состоит из трех раздельных элементов (красный, зеленый и синий), которые имеют общий катод (минус). Подавая напряжение на контакты светодиода, которые подсоединены к аналоговым (ШИМ) выходам Arduino (обозначены на плате ~), мы будем плавно изменять его цвет. Для включения режима ШИМ на выходах Arduino используется команда analogWrite().
Макет готов:

После долгих трудов мы с Арсений получили вот такую программу:

int redSens=A0;//красный фоторезистор pin
int greenSens=A1;//зелёный фоторезистор pin
int blueSens=A2;//синий фоторезистор pin
int redLed=11;//красный диод
int blueLed=10;//синий диод
int greenLed=9;//зелёный диод
int redVal=0;//выводим накрасный диод
int greenVal=0;//выводим на зелёный диод
int blueVal=0;//выводим на синий диод
int redSensVal=0;//показания красного фоторизистора
int blueSensVal=0;//показания синего фоторизистора
int greenSensVal=0;//показания зелёного фоторизистора

void setup(){
  pinMode(redLed,OUTPUT);
  pinMode(blueLed,OUTPUT);
  pinMode(greenLed,OUTPUT);
  Serial.begin(9600);
}

void loop(){
  //считываем показания фоторизисторов
  redSensVal=analogRead(redSens);
  delay(5);
  greenSensVal=analogRead(greenSens);
  delay(5);
  blueSensVal=analogRead(blueSens);

  redVal=redSensVal/4;
  greenVal=greenSensVal/4;
  blueVal=blueSensVal/4;

  //выводим значения на экран компьютера
  Serial.print(«sensor Values \t Red: „);
  Serial.print(redSensVal);
  Serial.print(“ „);
  Serial.print(redVal);
  Serial.print(“\t Green: „);
  Serial.print(greenSensVal);
  Serial.print(“ „);
  Serial.print(greenVal);
  Serial.print(“\t Blue: „);
  Serial.print(blueSensVal);
  Serial.print(“ „);
  Serial.println(blueVal);

  analogWrite(redLed,redVal);
  analogWrite(greenLed,greenVal);
  analogWrite(blueLed,blueVal);
}

Здесь надо прокомментировать, что с аналоговых сенсоров мы получаем значения в диапозоне от 0 до 1023, а выводить на аналоговые выходы может значения от 0 до 254, по этому предварительно значения из одного диапазона надо «привести» к значениям из другого диапазона, в данном случае мы просто делим на 4.

Для большей зрелищности на светодиод мы надели шарик для пинпонга и получили такой небольшой светильник:

Heat-o-Meter (измерение температуры).

25 февраля 2013, 18:26

Arduino можно использовать для измерения температуры.
Переключатели и кнопки — замечательно, но реальный мир вокруг не всегда можно описать двумя состояниями (вкл. и выкл.)

Немного теории:

Несмотря на то, что Arduino  — это цифровое устройство, оно может получать информацию с аналоговых сенсоров для измерения температуры или освещенности. Для этих целей необходимо использовать встроенный в Arduino аналого-цифровой перобразователь (АЦП). Аналоговые входы A0-A5 выдают значение от 0 до 1023, что соответствует напряжению от 0 до 5-ти вольт.

Для измерения температуры мы использовали температурный сенсор (TMP 36).

Термосенсор (TMP36)

Этот компонент изменяет напряжение на выходе в зависимости от температуры окружающей среды. Датчик имеет три контакта: один подсоединяется на «ground», второй  — на «power», а третий, который выдает изменяющееся напряжение, подсоединяется к Arduino. В программе для этого проекта мы будем считывать значения, которые выдает сенсор, и использовать их для включения и выключения светодиодов для индикации температуры.

Теперь к практике. Как обычно, сначала рисуем «схему»:

В собранном виде на макетной плате, она выглядит так:

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

Вот такая получилась программа, для считывания и вывода информации с сенсора:

int spin = A0; //датчик температуры
void setup(){
  Serial.begin (9600);//для вывода на экран компьютера
}
void loop(){
  int sVal = analogRead(spin);//Считываем информацию с сенсора
  Serial.print(«Sensor Value: „);//выводим значение на экран компьютера
  Serial.print(sVal);
  //конвертируем значение в вольты
  float v=(sVal/1024.0)*5.0;
  Serial.print(“, Volts: „);
  Serial.print(v);
  Serial.print(“, degrees C: „);
  //переводим вольты в градусы
  float t=(v-0.5)*100;
  Serial.println(t);
}

В этой программе использована команда Serial.begin(9600), с помощью неё открывается соединение между Arduino и компьютером. Функция analogRead() считывает значение с аналогового входа и возвращается значение от 0 до 1024, в зависимости от напряжения. Функция Serial.print() отправляет информацию с Arduino на компьютер, затем эта информация отображается в терминале.

Как расчитывается температура? Сначала необходимо понять сколько вольт получается на выходе термосенсора. Поскольку всего может быть 1024 значения (от 0 до 1023), а напряжение от 0В до 5В, используется формула [значение на аналоговом входе]* 5В/1024. Затем по документации на этот термосенсор переводим выдаваемое им напряжение в градусы по шкале Цельсия t=(v-0.5)*100.

Вот как выглядят результаты работы программы:

Теперь программируем работу светодиодов. Базовой температурой будем считать 23 градуса (такая температура была у нас в комнате). Если термосенсор нагревается на 2 градуса — загорается первый диод, еще на 2 (всего на 4) — второй диод, затем еще на 4 градуса (всего на 8) — третий диод.

Параллельно а работой над программой мы решили, что будет интереснее сделать светодиоды разноцветными:

Макет с разноцветными диодами

Вот наша программа:

int spin = A0; //датчик температуры
float basetemp= 23.0; //комнатная температура
int led1 = 2;//красный
int led2 = 3;//жёлтый
int led3 = 4;//зелёный

void setup(){
  Serial.begin (9600);//для вывода на экран компьютера
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  digitalWrite(led1,LOW);
  digitalWrite(led2,LOW);
  digitalWrite(led3,LOW);
}

void loop(){
  int sVal = analogRead(spin);
  Serial.print(«Sensor Value: „);//выводим информацию на экран компьютера
  Serial.print(sVal);
  //конвертируем значение в вольты
  float v=(sVal/1024.0)*5.0;
  Serial.print(“, Volts: „);
  Serial.print(v);
  Serial.print(“, degrees C: „);
  //переводим вольты в градусы
  float t=(v-0.5)*100;
  Serial.println(t);
  if(t<basetemp){//температура поднимается на 2 градуса — ничего не горит
    digitalWrite(led2,LOW);
    digitalWrite(led3,LOW);
    digitalWrite(led1,LOW);
  }
  else if( (t>=basetemp+2)&&(t<basetemp+4) ){//температура подниамется от 2 до 4 градусов горит только зеленый
    digitalWrite(led2,LOW);
    digitalWrite(led3,HIGH);
    digitalWrite(led1,LOW);
  }
  else if( (t>=basetemp+4)&&(t<basetemp+8) ){
    digitalWrite(led2,HIGH);
    digitalWrite(led3,LOW);
    digitalWrite(led1,LOW);
  }
  else if (t>=basetemp+8){
    digitalWrite(led2,LOW);
    digitalWrite(led3,LOW);
    digitalWrite(led1,HIGH);
  }
}

Результаты работы программы:

Ctrl + ↓ Ранее