#1 Re: Різне » Лазерная резка » 2016-03-14 11:03:43

anandr, ви звідки?
У Львові замовляв порізку і гравіювання акрилу тут: rizakom.in.ua
Три панельки 15х15 см + одна 5х5 + гравійована емблема обійшлися в 120 грн. Хлопці самі конструювали моделі по чорновому ескізу.

Якщо ви з Києва чи Харкова, я б в першу чергу звернувся в місцевий хакер-спейс.

#2 Re: Апаратні питання » Електромагнітна котушка, потрібні розрахунки... » 2016-01-23 11:14:10

В результаті вибрав простий шлях - купив соленоїд на 6В, 4Вт, 1000 витків, опір 9 Ом, силу тяги заявляють 2.6кг. Маркування EMA-0837S-06, якщо комусь ще буде потірбно. Соленоїд зі своєю задачею справляється, стукає в дзвін досить голосно smile

#3 Re: Апаратні питання » Електромагнітна котушка, потрібні розрахунки... » 2016-01-17 21:44:14

Nefreemen, дякую за підказку щодо індуктивності. Глянув на Вікіпедії, виходить така закономірність: E ~ N^2 * I^2. Якщо ми розмотуємо котушку, то виросте сила струму, але зменшиться к-сть витків, тобто магнітне поле в результаті залишиться таким самим. Вихід лишається тільки перемотати котушку товстішим проводом.

Інтерес більше академічний ніж практичний. Маю такий дзвінок: ZAMEL DNS-971 і хочу, щоб він дзвонив від ардуінки.

#4 Re: Апаратні питання » Електромагнітна котушка, потрібні розрахунки... » 2016-01-17 15:41:57

vvr, живлення буде від блока паралельно з мікроконтролером.

Nefreemen, міряв, рахував... Якщо підключити наявні котушки паралельно і до 12В, струм виходить 40мА. Тобто в принципі є простір для нарощування потужності. Я тільки не знаю, як саме її нарощувати (розкрутити півобмотки, перемотати товстішим проводом... ???) - саме в цьому і є моє питання тут на форумі. Щодо змінного струму, то це не проблема. Оригінальний дзвінок "тарабанив" під 50Гц, я хочу, щоб він стукав раз в пару секунд.

#5 Апаратні питання » Електромагнітна котушка, потрібні розрахунки... » 2016-01-17 10:57:39

brigadir
відповідей: 8

Така ситуація: маю електродзвінок - механізм такий, яким колись дзвонили в школах. В ньому котушка примагнічує металеву пластину з "молотком", і цей молоток стукає по дзвінку. Він працює від 220В. Всередині 2 котушки з 5650 витками 0.22мм дроту, з’єднані послідовно.

Я хочу прикрутити цей механізм до Ардуіно, і перш за все хотів би, щоб він працював від 5В, щоб не тягнути окреме живлення. Наскільки я розумію, котушки треба замінити. Підкажіть, хто розбирається в цій темі, які оптимальні параметри котушки, щоб від 5В була якнайбільша сила намагнічення. Блок живлення видає до 800мА.

Якщо в принципі 5В 800мА недостатньо, щоб стукати "молотком", маю ідею використати імпульсний множник напруги на конденсаторах, який би заряджався протягом секунди-двох і тоді пробивав імпульс (стукати потрібно не частіше). Але, наскільки розумію, простих схем такого множника для постійного струму нема...

#6 Re: Проекти » Сделал что-то интересное? Не держи в себе, расскажи сообществу! » 2015-09-21 09:16:44

zim, респект! Красиво зроблено. Розкажіть будь ласка, як ви визначили оптимальний інтервал між імпульсами на сусідні котушки? По ідеї це має бути момент, коли снаряд підлітає до котушки, тому після імпульсу в першій котушці має бути довша пауза, ніж після імпульсу в другій...
P. S. Модератори, цей проект заслуговує окремої теми smile

#7 Re: Програмування Arduino » Таймер для двух функций или интервал внутри интервала??? » 2015-08-11 23:37:16

fastudio4, вашу задачу можна рішити таким підходом: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
Це в принципі те саме, про що пише NoName. Тут: http://playground.arduino.cc/Code/SimpleTimer ця ідея реалізована. Вам лишається прив’язати по таймеру до shoot, shootStep і menu. stepper хай лишається, як є, оскільки там важливі точні інтервали часу.

#8 Re: Програмування Arduino » Считывание скорости автомобиля с датчика скорости. » 2015-08-11 23:20:56

Максим, давайте напишемо вашу функцію по іншому smile
Будемо читати датчик на кожному проході loop().
Оскільки у вас імпульс аналоговий, будемо ловити його вершину.
Будемо дивитися, скільки часу пройшло між двома імпульсами.
По цьому часу будемо рахувати "миттєву" швидкість.

void loop()
{
	int impulseValue = analogRead(IMPULSE_PIN);
	static int prevImpulseValue = impulseValue;
	bool impulseRaises = (impulseValue > prevImpulseValue);
	static bool prevImpulseRaises = impulseRaises;
	static long prevImpulseTime = millis();
	if (prevImpulseRaises && !impulseRaises)		// зловили вершину імпульсу
	{
		long impulseTime = millis();
		long impulseDuration = impulseTime - prevImpulseTime;		// impulseDuration в мілісекундах
		long speed = 602 / impulseDuration;							// 602 = 1000 / 1.66
		Serial.print("speed: "); Serial.println(speed);
		prevImpulseTime = impulseTime;
	}
	prevImpulseValue = impulseValue;
	prevImpulseRaises = impulseRaises;
}

Декілька ремарок:
static змінні ініціалізуємо поточними значеннями.
Обчислення ведемо в цілочисельному форматі, оскільки операції з float дорого коштують. speed можна було б писати в метрах/годину для більшої точності, для цього замість 602 впишемо 602000.
Можливо, значення з датчика шумлять, тоді прийдеться згладжувати сигнал. Або реалізувати інший варіант: замість вершини ловимо момент, коли сигнал проходить коридор, наприклад 200-800.
Я код не перевіряв. Якщо буде глючити, варто писати лог (Serial.print) починаючи зі значень сигналу і поступово доходячи до значень швидкості.

#9 Re: Проекти » LED лента з автоматичною підсвіткою » 2015-06-17 16:49:32

Саня Паскаль пише:

А ви впевнені, що точність ШІМ(PWM) є 10 біт ?? Мені здається, що точність ШІМ - 8 біт(0-255). Якщо Ви в тому впевнені, напишіть, як коирстуватися такою фішкою.

Стандартний PWM 8-бітний. Тому я шукав альтернативу.
Ось що пишуть про Timer1::pwm(pin, duty, period)
Generates a PWM waveform on the specified pin. Output pins for Timer1 are PORTB pins 1 and 2, so you have to choose between these two, anything else is ignored. On Arduino, these are digital pins 9 and 10, so those aliases also work. Output pins for Timer3 are from PORTE and correspond to 2,3 & 5 on the Arduino Mega. The duty cycle is specified as a 10 bit value, so anything between 0 and 1023. Note that you can optionally set the period with this function if you include a value in microseconds as the last parameter when you call it.

Фізично timer1 підтримує 16-бітний лічильник.

Тут пояснюють, як користуватися цією фішкою: http://sphinx.mythic-beasts.com/~markt/ … imers.html

#11 Re: Програмування Arduino » Помогите исправить код - ато незнаю уже что делать... » 2015-04-10 09:21:00

Пораджу, як програміст smile
Постав логи після кожної дії. Наприклад,

    myservo.write(coef * (distance_sm - dead_zone));
    Serial.print("distance_sm: "); Serial.println(distance_sm);
    Serial.print("servo: "); Serial.println(coef * (distance_sm - dead_zone));

І заміни unsigned int на long - можливо проблеми з діапазоном чисел.

#12 Re: Програмування Arduino » Нужна помощь в программе » 2015-03-30 23:52:53

Викладіть тут код сирого скетча, щоб ми мали від чого "плясати".

#13 Re: Апаратні питання » Как измерять количество водьі в колодязе? » 2015-03-25 12:08:10

Як щодо датчика тиску? По теорії, тиск в стані спокою прямопропорційний глибині (1атм. на кожні 10м). На е-беї є датчики для тиску рідини http://www.ebay.com/bhp/water-pressure-sensor
По теорії, все просто smile опускаємо датчик на дно, переводимо тиск в глибину...

#14 Проекти » LED лента з автоматичною підсвіткою » 2015-03-12 10:58:31

brigadir
відповідей: 7

На старті в мене була світодіодна лента, захована під тажерками на кухні. Коли потрібно, вона підсвічувала кухонний стіл. Включалася переключателем на ланцюжку. Щоб розкрити мотив цього проекту, опишу для прикладу таку ситуацію: стоїмо на кухні, заварюємо чай. Кладемо сито в кружку, насипаємо зілля і усвідомлюємо, що було б краще, якби ми бачили, скільки зілля насипали. Згадуємо, що є лента під тажерками, кладемо зілля на стіл, тягнемо бурульку на ланцюжку і продовжуємо заварювати чай. Вкінці ще раз тягнемо за бурульку. Якщо підсумувати ці всі дії, то вийде, що КПД нашої праці під час заварювання чаю менше 50%. В 21 столітті така трата ресурсів недопустима :)

Задачу проекту поставив так: зробити світодіодну ленту адаптивною, щоб користувач в принципі не тягнувся до виключателя, і навіть не думав, що йому потрібно більше світла.

Лента живиться від 12В, тому для Arduino (а саме Pro Mini from China) беремо стабілізатор напруги на 5В L7805CV.
Слідкувати за обстановкою під тажерками будемо PIR датчиком руху HC-SR501.
Контроль ленти покладемо на мосфет IRLZ14 і підключимо його до PWM піна Arduino.
Щоб наше творіння виглядало красиво, розміщуємо всі компоненти на білому картоні (взяв, що було під рукою) і прив’язуємо капроновою ниткою.
2.jpg

Завдяки порадам тутешнього форумчанина CJ, добавив до мосфета пару резисторів: 500 Ом між затвором і Arduino і 47 кОм між затвором і витоком.

Переходимо до логіки.
Рівень яскравості регулюється через PWM. Коли датчик бачить рух, включається режим накопичення, в протилежному випадку - режим спаду. Щоб світло на гасло зразу, як тільки користувач перестав рухатися, додамо буферний діапазон.

Спрощений скетч виглядає так:

void loop() 
{
  int motionDetected = digitalRead(PIR_PIN);
  if (motionDetected == HIGH)
    motionBuffer++;
  else
    motionBuffer--;

  if (motionBuffer > THRESHOLD_LEVEL)
    brightness = min(brightness + 1, PWM_CAPACITY - 1);
  else
    brightness = max(brightness - 1, 0);

  analogWrite(LED_PIN, brightness);
  delay(TIMER_DELAY);
}

В бойових умовах я зустрівся таким моментом: коли brightness спадає до нуля, світло гасне скачками. Виявилося, що глибини PWM недостатньо на малих значеннях: якщо міняємо brightness з 0 на 1 - лента засвічується забагато. Спочатку я проводив різні магічні ритуали над резисторами мосфета, але не досяг результату. Основна причина в тому, що я зелений в електроніці. Тому рішив цю проблему програмно: PWM на Arduino має точність в 10 біт (0-1023) на деяких пінах. Використати цю фішку нам допоможе бібліотека Timer1. Взяв форк PaulStoffregen/TimerOne на GitHub, оскільки її автор пише, що оптимізував стандартний код.
Для нашого випадку точність brightness зросла в 4 рази. Перевірив на тестовому стенді - перфектно.

На цьому етапі проект досягнув зрілості і можна вважати його закінченим.
5.jpeg

Робочий скетч:

#include <TimerOne.h>

const int LED_PIN = TIMER1_A_PIN;    // 9 onATMega328P
const int PIR_PIN = 12;
const int LED_TEST_PIN = 13;
const int TIMER_DELAY = 10;
const int PWM_CAPACITY = 1024;    // 10 bit
const int THRESHOLD_LEVEL = 10;    // motion buffer must reach threshold level to fade LEDs on
const int SATURATION_LEVEL = (30 * 1000 / TIMER_DELAY);  // 30 seconds
int motionBuffer = 0;
int brightness = 0;

void setup()
{
  pinMode(LED_PIN, OUTPUT);
  pinMode(PIR_PIN, INPUT);
  pinMode(LED_TEST_PIN, OUTPUT);
  Timer1.initialize(5000);      // 5000 ns => 200Hz
  Timer1.pwm(LED_PIN, PWM_CAPACITY/2);
  Serial.begin(9600);

  // test on start-up:
  Serial.println("Start-up test...");
  for (int i = 0; i < PWM_CAPACITY; i++)
  {
    //analogWrite(LED_PIN, i);
    Timer1.setPwmDuty(LED_PIN, i);
    delay(1);
  }
  for (int i = (PWM_CAPACITY - 1); i >= 0; i--)
  {
    //analogWrite(LED_PIN, i);
    Timer1.setPwmDuty(LED_PIN, i);
    delay(1);
  }
  Serial.println("...test finished");
}

void loop() 
{
  int motionDetected = digitalRead(PIR_PIN);
  if (motionDetected == HIGH)
  {
    motionBuffer++;
    digitalWrite(LED_TEST_PIN, HIGH);
    if (motionBuffer > THRESHOLD_LEVEL)
      motionBuffer = SATURATION_LEVEL;
  }
  else
  {
    motionBuffer--;
    motionBuffer = max(motionBuffer, 0);
    digitalWrite(LED_TEST_PIN, LOW);
  }
  if (motionBuffer > THRESHOLD_LEVEL)
    brightness = min(brightness + 1, PWM_CAPACITY - 1);
  else
    brightness = max(brightness - 1, 0);

  //analogWrite(LED_PIN, brightness);
  Timer1.setPwmDuty(LED_PIN, brightness);
  Serial.print("Motion buffer: ");
  Serial.println(motionBuffer);
  delay(TIMER_DELAY);
}

Відео з чайником:

#15 Re: Апаратні питання » Скачки з ШІМ після мосфета IRLZ14. Як побороти? » 2015-03-12 00:06:48

CJ, ще раз вдячний за поради. Поставив "правильні" резистори, підключив бібліотеку Timer1 - тепер все загорається і гасне плавно.

Щодо лампового ефекту - наскільки я уявляю, так і зробив: значення яскравості в loop() плавно "біжить" від 0 до 1024 з delay(10) між ітераціями.
На днях попробую це все оформити в звіт wink

#16 Re: Апаратні питання » Скачки з ШІМ після мосфета IRLZ14. Як побороти? » 2015-03-05 11:39:02

Дякую за розгорнуту відповідь. Глянув ВАХ світодіода і мосфета, дійсно є над чим подумати.
В моєму випадку скачок освітлення замітний, коли значення в analogWrite відрізняється на 1 на низькому діапазоні (наприклад 3 -> 2 -> 1). Поки-що вставив резистор на управляючий вхід до бази на 47кОм, і ще один між базою і емітером на 220кОм - скачки стали менш замітні.
Оскільки в електроніці я зелений, попробую ще програмне рішення з більш точним ШІМ ( http://forum.arduino.cc/index.php?topic=41964.0 ), якщо вийде... Плата - китайська репліка Pro Mini.

Якщо все запрацює перфектно, викладу проект на форум smile

#17 Апаратні питання » Скачки з ШІМ після мосфета IRLZ14. Як побороти? » 2015-03-04 10:14:52

brigadir
відповідей: 5

Зробив дімер світодіодної ленти, в ролі транзистора даний мосфет. Коли "гашу" світло, світодіоди затухають скачками (саме вкінці, на мінімальній яскравості).
Є підозра, що напруга з ШІМа Ардуіно плавна, а лагає мосфет - коли тестував прототип світодіодом, підключеним напряму до Ардуіно, скачків не було.
Ще з деталей можу сказати, що між базою мосфета і Ардуіно стоїть резистор на 10 Ом. Крім того, пробував ставити 22 кОм резистор між базою і емітером (кажуть, що гасить паразитивний заряд) - ніяких змін.

Підкажіть будь ласка, хто шарить в електроніці, як рішаються такі проблеми. Чи є сенс міняти мосфет на інший транзистор?
Наперед вдячний.

Підвал форуму