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

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Тима
Почётный участник
Почётный участник
Сообщения: 3140
Зарегистрирован: 01 мар 2012, 20:47
Репутация: 1088
Настоящее имя: Тимур
Откуда: КБР
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Тима »

:good:
Дорогу осилит идущий!
Я все пойму, Вы только дайте денег!!!
2cme
Почётный участник
Почётный участник
Сообщения: 1043
Зарегистрирован: 24 янв 2012, 13:18
Репутация: -209

Re: Мои проекты на Ардуино

Сообщение 2cme »

aftaev писал(а):далее когда термофилы расплодились
а они какието породистые, или уже "олл инклюзив" природой?
aftaev
Зачётный участник
Зачётный участник
Сообщения: 32213
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 5755
Откуда: Казахстан. Шымкент
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

2cme писал(а):а они какието породистые, или уже "олл инклюзив" природой?
это природа. от разны параметров таких как О2, рН, влажность температура будет зависить что вырастит нужные культуры иль не нужные.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Тима
Почётный участник
Почётный участник
Сообщения: 3140
Зарегистрирован: 01 мар 2012, 20:47
Репутация: 1088
Настоящее имя: Тимур
Откуда: КБР
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Тима »

Может чуть опоздал, тут говорится о значениях после запятой... http://habrahabr.ru/post/110610/
Дорогу осилит идущий!
Я все пойму, Вы только дайте денег!!!
aftaev
Зачётный участник
Зачётный участник
Сообщения: 32213
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 5755
Откуда: Казахстан. Шымкент
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Пришла еще одна ардуина :) Пришлось малость повозиться чтоб она заработала. Продавец дает примеры под другу плату и экран :hehehe:
DSCN0986.jpg <a class='original' href='./download/file.php?id=9573&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (253.46 КБ)</a>
С таким экраном куды приятней :cheesy:
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Rafiq »

Ардуино конечно хорошо для быстрого старта, но устройства на них клепать дороговато будет.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 32213
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 5755
Откуда: Казахстан. Шымкент
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

для меня это дешево.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 32213
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 5755
Откуда: Казахстан. Шымкент
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Следующий проектик нужно сделать

односевой ЧПУ

Задача:
Задаем направление, длину пути, скорость. Пуск - ось проехала.
Ось должна разогнаться - выйти на нужную скорость - торможение.
Контроллер на базе Ардуино выдает сигналы step/dir

Задаем в настройках(константах) как в ЧПУ:
1. кол-во шагов/мм
2. макс. скорость
3. ускорение

Вот как то так :P
Сложность расчет разгона и торможения. Нашел статейку как это все просто делается :lol: http://fab.cba.mit.edu/classes/MIT/961. ... rofile.pdf

Нашел какую то библиотеку http://www.open.com.au/mikem/arduino/AccelStepper/
рою дальше :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 32213
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 5755
Откуда: Казахстан. Шымкент
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Написал за пол часика простой осциллограф для Ардуины 2560 с TFT экраном.
Осциллограф чувствительный, но до 5в , но очень медлительный. Весь экран прорисовывается за 15 сек, что не очень быстро :hehehe: . Если убрать вывод цифровых чисел и передачу данных в СОМ будет шустрее работать шустрее намного, примерно 1-3 сек заполняться экран.

Код здесь
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

// UTFT_ViewFont (C)2012 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
// Описание для Экрана http://www.henningkarlsen.com/electronics/resource/UTFT/UTFT.pdf
//экран 239х319 
//myGLCD.lcdOff(); // выключить экран (неработает)
//myGLCD.setContrast(10); // выключить экран (неработает)
//myGLCD.clrScr(); // очистить экран (работает)
//myGLCD.fillScr(255,125,0); // закрасить экран цветом (работает)
//myGLCD.setColor(255,0,0); // цветом текста (работает)
//myGLCD.setBackColor(255,250,0); // цветом фона (работает)

//графика
//myGLCD.drawPixel(200,200); // рисуем пиксель (работает)
//myGLCD.drawLine(200,200,50,60); // рисуем линию (работает)
//myGLCD.drawRect(50,50,110,100); // рисуем квадрат (работает)
//myGLCD.fillRect(20,20,150,160); // рисуем закрашенный квадрат (работает)
//myGLCD.drawRoundRect(20,20,150,160); // рисуем скругленный квадрат (работает)
//myGLCD.fillRoundRect(20,20,150,160); // рисуем скругленный закрашенный квадрат (работает)
//myGLCD.drawCircle(100,100,50); // рисуем круг (работает)
//myGLCD.fillCircle(100,100,50); // рисуем круг (работает)

//текст
//myGLCD.setFont(BigFont); // большие буквы
//myGLCD.setFont(SmallFont); // маленькие буквы
//myGLCD.setFont(SevenSegNumFont); // семигментные цифры
//myGLCD.print("text",100,50,0); // выводим текст,х,у, поворот  (работает)
//myGLCD.printNumI(235.5,100,50,2,1); // выводим число Integer,х,у, знаков после запятой, фильтр  (работает)
//myGLCD.printNumF(235.5,100,50,2,1); // выводим число (работает)




#include <UTFT.h>

// Declare which fonts we will be using
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

int analogPin = 3;     // номер порта к которому подключен потенциометр
int val = 0;           // переменная для хранения считываемого значения
int x=0;
int y=239;
int xx=1;
int yy=238;
float voltage ;


// Uncomment the next line for Arduino Mega
UTFT myGLCD(ITDB32S,38,39,40,41);   // Remember to change the model parameter to suit your display module!

void setup()
{
  myGLCD.InitLCD();

  myGLCD.clrScr();
  Serial.begin(9600);
//рисуем сетку
  myGLCD.setColor(0, 255, 0);
  myGLCD.setBackColor(0, 0, 0);

  myGLCD.setFont(BigFont);

 Grid();

  
}

void loop()
{

  while(1) {
  //myGLCD.print("@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", CENTER, 132);
  //myGLCD.print("`abcdefghijklmnopqrstuvwxyz{|}~ ", CENTER, 144);

 //через сколько выводить на экран (БОЛЬШЕ ПИШЕМ В ПОРТ)
//  for (int i = 0; i < 3; i++) {
  val = analogRead(analogPin);     // считываем значение
  voltage = val * (5.0 / 1023.0);
  myGLCD.print("        ", 220, 10);
  myGLCD.printNumF(voltage,3, 220, 10);
//  Serial.println(voltage);
  //delay(1); 
// }


//ВЫВОД ЛИНИЕЙ МЕДЛЕННО
  yy = 230-voltage*50;
  //myGLCD.drawLine(x++,yy,xx++,y); // У,Х рисуем линию (работает) 
  myGLCD.drawLine(x,y,xx,yy); // У,Х рисуем линию (работает)
  x = xx;
  y = yy;
  xx++;

//ОЧИСКА ЭКРАНА
    if (x >= 319) {
     x=0;
    // y=239;
     xx=1;
    // yy=238;
      Grid();
      }
  
  };



  while(1) {};
}


void Grid()
{
  myGLCD.clrScr();
  myGLCD.setColor(100, 125, 0); // ЦВЕТ СЕТКИ
  myGLCD.drawLine(0,0,0,230); // рисуем линию (работает)
  myGLCD.drawLine(0,230,319,230); // У,Х рисуем линию () 
  myGLCD.drawLine(0,180,319,180); // У,Х рисуем линию () 
  myGLCD.drawLine(0,130,319,130); // У,Х рисуем линию () 
  myGLCD.drawLine(0,80,319,80); // У,Х рисуем линию ()   
  myGLCD.drawLine(0,30,319,30); // У,Х рисуем линию ()  
  myGLCD.setColor(0, 255, 0);  // цвет графика
}  
Написал для медленных процессов, а именно отладки THC на плазму :)
DSCN1516.JPG <a class='original' href='./download/file.php?id=14401&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (256.45 КБ)</a>
DSCN1518.JPG <a class='original' href='./download/file.php?id=14402&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (258.69 КБ)</a>
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Impartial
Мастер
Сообщения: 925
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 31
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Impartial »

aftaev писал(а):Осциллограф чувствительный, но до 5в , но очень медлительный. Весь экран прорисовывается за 15 сек,
Ты точками рисуй. Будет быстрее.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 32213
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 5755
Откуда: Казахстан. Шымкент
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Impartial писал(а):Ты точками рисуй. Будет быстрее.
С начало сделал именно точками. Если точками, то график рваный получается при скачках напряжения и не понятно как напруга прыгала.
Сравнивал что точками, что линиями разницы большой нет для моих задач. Когда амплитуда сигнала растет экран медленнее прорисовыет конечно. Больше всего времени занимает вывод значений вольт на экран, и передача в СОМ (если их закоментить будет шустро).
Мне нужно чтобы линия на экране Ардуины рисовалась примерно с той же скоростью что режим на плазме. Скорость резки в опытах 1000мм/мин :)
Шустро мне как раз не нужно :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Impartial
Мастер
Сообщения: 925
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 31
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Impartial »

Точками конечно, рваная будет. Но понять можно.
aftaev писал(а):Мне нужно чтобы линия на экране Ардуины рисовалась примерно с той же скоростью что режим на плазме.
А какой режим? Как ездит или какие то параметры дуги?
aftaev
Зачётный участник
Зачётный участник
Сообщения: 32213
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 5755
Откуда: Казахстан. Шымкент
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Impartial писал(а):А какой режим?
Пока занимаемся измерениями. Мне нужно было записывать вольты после делителя/фильтров и писать в файл чтобы посмотреть что происходит на краю листа, когда дуга через рез проходит, разный ток, разные расходники, старые/новые расходники итд..
Осциллограф Что я урвал, хвастаемся покупками, завидуем и облизываемся #66 такие чудеса рисует :)
Есть 4 разных плазмы, с разным принципом работы, будем обкатывать.
Impartial писал(а):Как ездит или какие то параметры дуги?
На портал прицепили и он таскает плазматрон. Испытываем на ровном и гнутом листе.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Kopyloff
Мастер
Сообщения: 386
Зарегистрирован: 28 мар 2013, 07:40
Репутация: 117
Настоящее имя: Сергей
Откуда: Первоуральск
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Kopyloff »

Подниму-ка старую, но интересную тему :)
aftaev - с Вашего позволения напишу свой пост здесь, отдельную тему поднимать не вижу смысла. Если против - можете выделить в новую тему.
Итак, предлагаю вашему вниманию новую модель относительно быстрого осциллографа - частота снятия показаний - до 280 микросекунд.

Сразу скажу, что собирать именно осциллограф на ардуино я не собирался, но раз уж попались мне все ингредиенты- почему не попробовать?
Хочу собрать систему а-ля "Умный дом". Задача минимум на данный момент - собрать статистику энергопотребления в доме и на её базе автоматизировать управление электроприборами (в автомат. режиме или удалённо, через веб-морду). Ну - это в обозримом будущем. Не о том сейчас.

Вот эти ингредиенты:
- ардуино мега 2560
- TFT LCD экранчик, 2.4", на контроллере st7783:
2015-02-02 17.52.02.jpg <a class='original' href='./download/file.php?id=42456&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (568.21 КБ)</a>
- датчик тока на элементе ACS712-20А (вот тут брал: http://www.ebay.com/itm/1pcs-new-20A-ra ... 51c48706bb)

Ну и для тестов - нагрузка в виде утюга и автомобильного зарядного с аккумулятором :)

Получился такой вот код:

Код: Выделить всё

#include <Adafruit_GFX.h>    // Core graphics library
#include "SWTFT.h" // Hardware-specific library
#include <TimerOne.h> //используем Timer1 для прерываний по времени

// Assign human-readable names to some common 16-bit color values:
#define	BLACK     0x0000
#define	BLUE      0x001F
#define	RED       0xF800
#define	DARKRED   0x2020
#define	GREEN     0x07E0
#define	DARKGREEN 0x2121
#define CYAN      0x07FF
#define MAGENTA   0xF81F
#define YELLOW    0xFFE0
#define WHITE     0xFFFF

SWTFT tft;

int ACS712 = A8; // select the input pin for an ACS712-20 
int Uopornoe;// = A15; // select the input pin for a reference voltage
const int k=160; // k - кол-во записей в массив.
const int numReadings = 30; // numReadings - кол-во данных в фильтре.
boolean trig, resize;

volatile long PintTic=0; // счетчик периодов
volatile int CurA0; // Ток текущий
volatile int CurA0max; // Ток маскимальный
volatile long CurA0calcMax; // Ток маскимальный за весь период
volatile int CurA0min; // Ток минимальный
volatile long CurA0calcMin; // Ток минимальный за весь период
volatile int ymax=256, ymin=-256; // значения для масштабирования графика и сетки
float CurA0calcMid; // Ток средний (среднеквадратичное от CurA0calcMax и CurA0calcMin)

volatile int val_a[501]; //Массив значений A0 в прерываниях
volatile int val_a2[501]; //Массив значений времени в прерываниях
volatile int val_Uo[501]; //Массив значений опорного напряжения прерываниях
volatile long val_t[501]; //Массив значений времени в прерываниях

volatile int nb[501]; //Массив для учета номера итерации
volatile int i, z, c, v;
int scr_out, x1=0, x2=1, y1=120, y2=120;

// Переменные для фильтра
float readings[numReadings];      // the readings from the analog input
float total = 0;                  // the running total
float average = 0;                // the average

float A0_current;

unsigned long previousMillis = 0;        // will store last time LED was updated
const long interval = 6000;           // interval at which to blink (milliseconds)


void setup(void) {
  Serial.begin(9600); //поднимаем соединение для передачи на терминал   

  // Инициализация данных в массиве фильтра в 0: 
  for (int thisReading = 0; thisReading < numReadings; thisReading++)
    readings[thisReading] = 0;          

  tft.reset();

  uint16_t identifier = tft.readID();

  Serial.print(F("LCD driver chip: "));
  Serial.println(identifier, HEX);

  tft.begin(identifier);

  tft.setRotation(1);
  
//рисуем сетку
  Grid();

   // Запуск таймера
  Timer1.initialize(400);              // Интервал срабатывания таймера в мкс 
  Timer1.attachInterrupt(current_meter);   //будет вызываться каждый раз при отсчете заданного времени
    
}


void loop(void) {
  
  // Закрашиваем чёрным предыдущее значение тока:
  tft.setCursor(96, 4);
  tft.setTextColor(BLACK);  tft.setTextSize(1);
  tft.println(A0_current,2);
  tft.setCursor(222, 4);
  tft.print(average,2);

  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;   

    Grid();
    scr_out = 0;
    x1=0; x2=1; y1=120,y2=120;
    while (scr_out <= k) {
  // Ноль координат - в верхнем левом углу экрана!!! Вынос мозга...
      y2 = map(val_a2[scr_out], ymin, ymax, 240, 0);
      tft.drawLine(x1, y1, x2, y2, GREEN);
      x1 = x2;
      y1 = y2;
      x2 = x2 + (tft.width()/k);
/*
      Serial.print(scr_out);//  
      Serial.print(" , ");//  
      Serial.print(val_a2[scr_out]);//  
      Serial.println("");//  
*/
      scr_out++;
    }
  // Данный триггер сбросится только после заполнения буфера новыми данными в прерывании current_meter
  trig = true;
  }
  
  CurA0calcMid = sqrt((sq(CurA0calcMax)+sq(CurA0calcMin))/2);
/*
Измеряем максимальный и минимальный пики синусоиды. Затем находим их среднеквадратичное значение.
                  пик = sqrt( ( (пик мин)^2 + (пик макс)^2 )/2 )  [маш.ед.]
Далее это значение (в машинных единицах - 0-1023) переводим в напряжение:
                  напряж. = (пик / 1023)*5  [Вольт]
Чувствительность ACS712-20 равна 100 милиВольт/Ампер = 0,1В/А (см. даташит на ACS), отсюда:
                  ток ампл. = напряж. / Чувствит. = напряж / 0,1 = напряж * 10  [Ампер]
Ток средний - это ток ампл., поделенный на корень из 2:
                  ток средний = ток ампл. / sqrt(2) = ток ампл. * 0,707  [Ампер]
Итого:
                  Ток = 0,707*ток ампл. = 0,707 * напряж / чувствит. = 0,707 * напряж. * 10 = 7,07 * напряж. =
                      = 7,07 * пик * 5 / 1023 = 35,35 * пик / 1023
*/  
  A0_current = 35.35 * CurA0calcMid / 1023.0;

//=================== Фильтр сглаживающий: ================
  // передвигаем данные в массиве:
  v = numReadings;
  while (v > 0) {
    readings[v]=readings[v-1];
    v--;
  }
  readings[0] = A0_current; 
//  Serial.print("A0_current = "); Serial.print(A0_current); Serial.print(" ; ");
  c = 0;
  total = 0;
  while (c < numReadings) {
    total += readings[c];
//    Serial.print(readings[c]); Serial.print(" ; ");
//    Serial.print(total); Serial.println("");
    c++;
  }
  // calculate the average:
  average = total / numReadings;         
// ======================================================

  // Выводим на экран значение тока:
  tft.setCursor(60, 4);
  tft.setTextColor(WHITE);  tft.setTextSize(1);
  tft.print("Iact= "); tft.print(A0_current,2); tft.print(" A");
  // Среднее значение тока (после фильтра)
  tft.setCursor(180, 4);
  tft.print("Iaver= "); tft.print(average,2); tft.print(" A");
  
//  Serial.print("Free memory size: "); // печать количества свободной оперативной памяти
//  Serial.println(memoryFree()); // печать количества свободной оперативной памяти
}


//********************обработчики прерываний******************************* 
void current_meter()  //прерывания таймера 
{ 
  PintTic++;  //счетчик периодов  
  Uopornoe = analogRead(A15);
  CurA0 = analogRead(ACS712)-(Uopornoe/2);
  CurA0max = max(CurA0,CurA0max);
  CurA0min = min(CurA0,CurA0min); 
  val_a[PintTic] = CurA0;
//  val_Uo[PintTic] = Uopornoe;
//  nb[PintTic] = PintTic;
//  val_t[PintTic] = micros();

    if(PintTic==k)
    {   
      if (trig == true) { 
        z = 0;
        while (z <= k) { val_a2[z] = val_a[z]; z++; }
//        ymax = CurA0max; ymin = CurA0min; // Сохраняем макс. и мин. значения в массиве
      }
      trig = false;
      PintTic=0;  //обнуляем счетчик 
      CurA0calcMax=CurA0max;
      CurA0calcMin=CurA0min;
      CurA0max=0;
      CurA0min=0;
   }

}
//************************************************************************* 



void Grid()
{
  tft.fillScreen(BLACK);
  //  tft.drawLine(x1, y1, x2, y2, color);
  // Ноль координат - в верхнем левом углу экрана!!! Вынос мозга...
  tft.drawLine(0, 0, 0, 240, BLUE); // Ось ординат
  // 120*75%=90.
  tft.drawLine(0, (120-(90*(1024/(ymax-ymin)))), 319, (120-(90*(1024/(ymax-ymin)))), DARKGREEN); // 75%
  // 120*50%=60.
  tft.drawLine(0, (120-(60*(1024/(ymax-ymin)))), 319, (120-(60*(1024/(ymax-ymin)))), DARKGREEN); // 50%
  // 120*25%=30.
  tft.drawLine(0, (120-(30*(1024/(ymax-ymin)))), 319, (120-(30*(1024/(ymax-ymin)))), DARKGREEN); // 25%
  // В пикселях по оси Y: 240/2=120 пикселей - это середина экрана.
  tft.drawLine(0,120,319,120, BLUE); // Ноль
  // 120 пикселей - это 100% сигнала. 120*25%=30.
  tft.drawLine(0, (120+(30*(1024/(ymax-ymin)))), 319, (120+(30*(1024/(ymax-ymin)))), DARKGREEN); // -25%
  // 120 пикселей - это 100% сигнала. 120*50%=60.
  tft.drawLine(0, (120+(60*(1024/(ymax-ymin)))), 319, (120+(60*(1024/(ymax-ymin)))), DARKGREEN); // -50%
  // 120 пикселей - это 100% сигнала. 120*75%=90.
  tft.drawLine(0, (120+(90*(1024/(ymax-ymin)))), 319, (120+(90*(1024/(ymax-ymin)))), DARKGREEN); // -75%
}  

// Переменные, создаваемые процессом сборки,
// когда компилируется скетч
// extern int __bss_end;
// extern void *__brkval;
 

/*
// Функция, возвращающая количество свободного ОЗУ (RAM)
int memoryFree()
{
   int freeValue;
   if((int)__brkval == 0)
      freeValue = ((int)&freeValue) - ((int)&__bss_end);
   else
      freeValue = ((int)&freeValue) - ((int)__brkval);
   return freeValue;
}
*/
Собирался использовать тачскрин - сделать кнопки для обновления и для масштабирования графика по высоте, но тачскрин не захотел работать в том же чипе, что и прерывание по таймеру TimerOne. Точнее - если делать прерывание больше 1000 микросекунд - тогда тач начинает кое-как работать, но тут уже лучше кнопками пожертвовать, чем частотой измерений.

Ну и фото того что получилось:
2015-02-04 20.46.32.jpg <a class='original' href='./download/file.php?id=42457&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (4.79 МБ)</a>
Сначала в качестве нагрузки - утюг:
2015-02-04 20.54.59.jpg <a class='original' href='./download/file.php?id=42458&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (4.69 МБ)</a>
2015-02-04 20.55.13.jpg <a class='original' href='./download/file.php?id=42459&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (5.17 МБ)</a>
Где-то читал, что современные импульсные блоки питания (компы и прочая бытовая техника) срезают верхушку синусоиды. Здесь на маленьком экранчике не очень хорошо видно, а в экселе когда график строишь из полученных данных - видно срезанную верхушку.

Далее в качестве нагрузки - автомобильное зарядное с аккумулятором:
2015-02-04 21.05.07.jpg <a class='original' href='./download/file.php?id=42460&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (5.11 МБ)</a>
2015-02-04 21.06.08.jpg <a class='original' href='./download/file.php?id=42461&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (4.97 МБ)</a>
2015-02-04 21.07.05.jpg <a class='original' href='./download/file.php?id=42462&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (5.17 МБ)</a>
Аватара пользователя
Serg
Мастер
Сообщения: 20682
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 4911
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Serg »

Kopyloff писал(а):Задача минимум на данный момент - собрать статистику энергопотребления в доме
Так?
pwr.png <a class='original' href='./download/file.php?id=42476&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (150.85 КБ)</a>
;)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Kopyloff
Мастер
Сообщения: 386
Зарегистрирован: 28 мар 2013, 07:40
Репутация: 117
Настоящее имя: Сергей
Откуда: Первоуральск
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Kopyloff »

UAVpilot писал(а):Так?
Примерно так, только у меня будет 13 групп электроприемников (читай - 13 автоматов после счетчика) :)
А эти графики откуда?
Аватара пользователя
Serg
Мастер
Сообщения: 20682
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 4911
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Serg »

С моего домашнего электросчётчика. :)

У меня ещё много подобных графиков есть... :)
input.png <a class='original' href='./download/file.php?id=42497&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (15.67 КБ)</a>
bath.png <a class='original' href='./download/file.php?id=42495&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (25.12 КБ)</a>
hum.png <a class='original' href='./download/file.php?id=42496&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (19.51 КБ)</a>
pres.png <a class='original' href='./download/file.php?id=42498&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (18.95 КБ)</a>
temp.png <a class='original' href='./download/file.php?id=42499&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (22.23 КБ)</a>
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Kopyloff
Мастер
Сообщения: 386
Зарегистрирован: 28 мар 2013, 07:40
Репутация: 117
Настоящее имя: Сергей
Откуда: Первоуральск
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Kopyloff »

Круто! За RRDtool отдельное спасибо - я хотел базу данных на sqlite делать, но не знал как организовать закольцовывание базы. А тут уже готовое решение, да ещё и под OpenWRT есть. А можно вкратце описать систему? Какие датчики, кто с них данные собирает и в базу пишет? Где графики отображаются?
Аватара пользователя
Serg
Мастер
Сообщения: 20682
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 4911
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Serg »

По электричеству опрашивается домашний счётчик Меркурий-200, он много чего умеет рассказывать.
Другие датчики и исполнительные устройства - это в основном устройства 1-wire, для работя с ними применяется [url=hhttp://owfs.org/]OWFS[/url] (в разработке которой я принимаю скромное участие :)).
Ещё на компе (домашнем сервере) работает программка, отслеживающая разнообразные события и выполняющая разннобразные запрограммированные действия. Для примера кусок её конфига:

Код: Выделить всё

init 12.646A26000000 /usr/local/lib/oweventd/bathfan init
init 26.0A3026000000 /usr/local/lib/oweventd/bathfan init
event ow 26.0A3026000000/VAD * /usr/local/lib/oweventd/bathfan check

init 12.8C4229000000 /usr/local/lib/oweventd/doormonitor init
init 12.90D21C000000 /usr/local/lib/oweventd/doormonitor init
event ow uncached/12.8C4229000000/latch.A 1 /usr/local/lib/oweventd/doormonitor start
Это управление вентилятором в ванной в зависимости от влажности и температуры и включение изображения на мониторе в прихожей с дверной камеры, если в дверь позвонили.
event - при появлении указанного события выполняется соотв. команда, init - если датчик оторвать, а потом снова прицепить, то прога это обнаружит и зальёт в датчик начальные настройки.
А графики - это так, побочный эффект. Да и для отлова глюков полезно - если вдруг система непонятно на что среагирует, то по графиками можно посмотреть "что это было?". :)

P.S. домашний датацентр (в туалете) ;)
20150205_083118.jpg <a class='original' href='./download/file.php?id=42502&sid=2983ff9bcb475471065c0e8070487567&mode=view'>Загрузить оригинал (1.68 МБ)</a>
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Kopyloff
Мастер
Сообщения: 386
Зарегистрирован: 28 мар 2013, 07:40
Репутация: 117
Настоящее имя: Сергей
Откуда: Первоуральск
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Kopyloff »

Это кошмарный сон электрика - куча разных проводов вперемешку :) А сколько этот датацентр в общем энергии потребляет? Столько потребителей в розетки воткнуто.. А что за штука слева на стене вертикально висит?
Ответить

Вернуться в «Электроника»