Часовой показометр

Итак, хватит разговоров, надо сделать что-либо полезное и приятное. А начнем мы с часов, совмещенных с показометром чего-нибудь. Чего именно и конкретно – пока я не определился.

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

Проверка для перехода к следующему шагу – стандартная “мигалка” компилируется, заливается в ардуинку и мигает светодиодиком, как положено.

Теперь подсоединяем индикатор к ардуинке. Ножку индикатора VCC цепляем к выводу +3.3V ардуинки. Не стоит занимать 0 и 1 ножку (там работа с компьютером) и 13й – там светодиодик.

IMG_0061

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

int pinA=2;
int pinB=3;
int pinC=4;
int pinD=5;
int pinE=6;
int pinF=7;
int pinG=8;
int pinDP=9;
int pinPP=10;
int pinDIG1=11;
int pinDIG2=12;
int pinDIG3=A0;
int pinDIG4=A1;

Затем я делаю определение, в каком режиме должны работать порты ардуинки (у нас все работают на вывод)

pinMode(pinA, OUTPUT); //A
pinMode(pinB, OUTPUT); //B
pinMode(pinC, OUTPUT); //C
pinMode(pinD, OUTPUT); //D
pinMode(pinE, OUTPUT); //E
pinMode(pinF, OUTPUT); //F
pinMode(pinG, OUTPUT); // G
pinMode(pinDP, OUTPUT); // DP
pinMode(pinPP, OUTPUT); // PP

pinMode(pinDIG1, OUTPUT); // DIG 1
pinMode(pinDIG2, OUTPUT);
pinMode(pinDIG3, OUTPUT);
pinMode(pinDIG4, OUTPUT); // DIG 4

И переключаю эти порты в соответствующее состояние. По нашей схеме, что бы светодиод загорелся, надо порт включить в режим LOW.
Что бы погас – в HIGH.

Ну и что бы добавить “оживляжа”, зажгем первую и третью цифру

digitalWrite(pinDIG1,LOW);
digitalWrite(pinDIG2,HIGH);
digitalWrite(pinDIG3,LOW);
digitalWrite(pinDIG4,HIGH);

… восьмерками
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
digitalWrite(pinDP,HIGH);
digitalWrite(pinPP,HIGH);

и начнем включать/выключать точки с интервалом в одну секунду
digitalWrite(pinPP,LOW);
delay(1000);
digitalWrite(pinPP,HIGH);
delay(1000);

В итоге в ардуинке должен залиться вот такой вот скетч
int pinA=2;
int pinB=3;
int pinC=4;
int pinD=5;
int pinE=6;
int pinF=7;
int pinG=8;
int pinDP=9;
int pinPP=10;

int pinDIG1=11;
int pinDIG2=12;
int pinDIG3=A0;
int pinDIG4=A1;

void setup() {
Serial.begin(9600);
pinMode(pinA, OUTPUT); //A
pinMode(pinB, OUTPUT); //B
pinMode(pinC, OUTPUT); //C
pinMode(pinD, OUTPUT); //D
pinMode(pinE, OUTPUT); //E
pinMode(pinF, OUTPUT); //F
pinMode(pinG, OUTPUT); // G
pinMode(pinDP, OUTPUT); // DP
pinMode(pinPP, OUTPUT); // PP

pinMode(pinDIG1, OUTPUT); // DIG 1
pinMode(pinDIG2, OUTPUT);
pinMode(pinDIG3, OUTPUT);
pinMode(pinDIG4, OUTPUT); // DIG 4

digitalWrite(pinDIG1,LOW);
digitalWrite(pinDIG2,HIGH);
digitalWrite(pinDIG3,LOW);
digitalWrite(pinDIG4,HIGH);

digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
digitalWrite(pinDP,HIGH);
digitalWrite(pinPP,HIGH);
}

// the loop routine runs over and over again forever:
void loop() {

digitalWrite(pinPP,LOW);
delay(1000);
digitalWrite(pinPP,HIGH);
delay(1000);
}


И этот скетч должен произвести такой результат:

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

Для начала добавим функцию, которая будет рисовать нам циферки
void showDigit(int digit)
{
switch(digit) {
case 0:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,HIGH);
break;
case 1:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 2:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,HIGH);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 3:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 4:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 5:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 6:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 7:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 8:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 9:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
}
}

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

И просто перебираем циферки по порядку:

void loop() {
showDigit(count);
count++;
if(count>9)
{
count=0;
}
digitalWrite(pinPP,LOW);
delay(500);
digitalWrite(pinPP,HIGH);
delay(500);
}

Все просто: зажигаем циферку, затем увеличиваем ее и если она превышает 9, сбрасываем на 0. И затем с меньшим интервалом мигаем. В результате должен получиться вот такой вот скетч
int pinA=2;
int pinB=3;
int pinC=4;
int pinD=5;
int pinE=6;
int pinF=7;
int pinG=8;
int pinDP=9;
int pinPP=10;

int pinDIG1=11;
int pinDIG2=12;
int pinDIG3=A0;
int pinDIG4=A1;

void showDigit(int digit)
{
switch(digit) {
case 0:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,HIGH);
break;
case 1:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 2:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,HIGH);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 3:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 4:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 5:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 6:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 7:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 8:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 9:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
}
}

void setup() {
Serial.begin(9600);
pinMode(pinA, OUTPUT); //A
pinMode(pinB, OUTPUT); //B
pinMode(pinC, OUTPUT); //C
pinMode(pinD, OUTPUT); //D
pinMode(pinE, OUTPUT); //E
pinMode(pinF, OUTPUT); //F
pinMode(pinG, OUTPUT); // G
pinMode(pinDP, OUTPUT); // DP
pinMode(pinPP, OUTPUT); // PP

pinMode(pinDIG1, OUTPUT); // DIG 1
pinMode(pinDIG2, OUTPUT);
pinMode(pinDIG3, OUTPUT);
pinMode(pinDIG4, OUTPUT); // DIG 4

digitalWrite(pinDIG1,LOW);
digitalWrite(pinDIG2,HIGH);
digitalWrite(pinDIG3,LOW);
digitalWrite(pinDIG4,HIGH);

digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
digitalWrite(pinDP,HIGH);
digitalWrite(pinPP,HIGH);
}

int count=0;

// the loop routine runs over and over again forever:
void loop() {
showDigit(count);
count++;
if(count>9)
{
count=0;
}
digitalWrite(pinPP,LOW);
delay(500);
digitalWrite(pinPP,HIGH);
delay(500);
}

С вот таким вот результатом

Ура? Ура конечно. Следующим шагом надо вывести какое-нибудь число. Я взял 1234.

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

Добавляем функцию, которая будет разбивать число на циферки и показывать их по порядку
void showNumber(int num)
{
int divide=0;
for(int c=1;c<5;c++) { switch(c) { case 1: digitalWrite(pinDIG1,LOW); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); divide=1000; break; case 2: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,LOW); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); divide=100; break; case 3: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,LOW); digitalWrite(pinDIG4,HIGH); divide=10; break; case 4: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,LOW); divide=1; break; } // switch String s(int(num/divide)); char c=s.charAt(s.length()-1); showDigit(c-'0'); delay(100); } }

Самым сложным тут является кусок кода
String s(int(num/divide));
char c=s.charAt(s.length()-1);
showDigit(c-'0');

Вся его функция - "выкусить" нужную цифру из числа и затем показать.

скажем, нам нужна цифра 2 из 1234.

int(num/divide) - это "взять целую часть из деления num на divide". В нашем случае 1234/100=12

String(s - это "превратить данное число в строку"

s.length() - узнать длину строки в символах

s.charAt - взять Нный символ из строки

В итоге s.charAt(s.length()-1) значит "взять последний символ из строки". -1 нужен из-за того, что ардуинка считает, что 1й символ имеет "адрес" 0

c-'0' - превращаем символ назад в число. Отнеситесь к этому как к магии, иначе мне надо будет рассказывать вам про то, что такое ASCII

И заставляем ардуинку показать нам циферку

void loop() {
showNumber(1234);
}

Как обычно, скетч целиком

int pinA=2;
int pinB=3;
int pinC=4;
int pinD=5;
int pinE=6;
int pinF=7;
int pinG=8;
int pinDP=9;
int pinPP=10;

int pinDIG1=11;
int pinDIG2=12;
int pinDIG3=A0;
int pinDIG4=A1;

void showDigit(int digit)
{
switch(digit) {
case 0:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,HIGH);
break;
case 1:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 2:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,HIGH);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 3:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 4:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 5:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 6:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 7:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 8:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 9:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
}
}

void setup() {
Serial.begin(9600);
pinMode(pinA, OUTPUT); //A
pinMode(pinB, OUTPUT); //B
pinMode(pinC, OUTPUT); //C
pinMode(pinD, OUTPUT); //D
pinMode(pinE, OUTPUT); //E
pinMode(pinF, OUTPUT); //F
pinMode(pinG, OUTPUT); // G
pinMode(pinDP, OUTPUT); // DP
pinMode(pinPP, OUTPUT); // PP

pinMode(pinDIG1, OUTPUT); // DIG 1
pinMode(pinDIG2, OUTPUT);
pinMode(pinDIG3, OUTPUT);
pinMode(pinDIG4, OUTPUT); // DIG 4

digitalWrite(pinDIG1,HIGH);
digitalWrite(pinDIG2,HIGH);
digitalWrite(pinDIG3,HIGH);
digitalWrite(pinDIG4,HIGH);

digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
digitalWrite(pinDP,HIGH);
digitalWrite(pinPP,HIGH);
}

void showNumber(int num)
{
int divide=0;
for(int c=1;c<5;c++) { switch(c) { case 1: digitalWrite(pinDIG1,LOW); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); divide=1000; break; case 2: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,LOW); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); divide=100; break; case 3: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,LOW); digitalWrite(pinDIG4,HIGH); divide=10; break; case 4: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,LOW); divide=1; break; } // switch String s(int(num/divide)); char c=s.charAt(s.length()-1); showDigit(c-'0'); delay(100); } } // the loop routine runs over and over again forever: void loop() { showNumber(1234); }

Превращается в ...

А теперь уменьшаем задержку, меняя delay(100) на delay(1) и получаем ...

... циферку! Такую, какую я попросил! Очередное ура!

Но если вы приглядитесь к результату ...

IMG_0070

Какая-то фигня, не правда ли? Почему-то вокруг циферок светятся лишние сегменты. Хоть и тускло, но некрасиво же. Почему так?

Дело в скорости работы ардуинки. Скажем, откуда появились лишние сегменты у цифры 1?

Если посмотрите на логику работы скетча, у нас получится следующее

(много пропущено)
1. Включить 4й индикатор
2. Показать цифру 4
3. Включить 1й индикатор
4. Показать цифру 1
(опять пропускаем)

И вот обратите внимание, во время между шагами 3 и 4 на индикаторе горит 4! Да, это время невелико, но хватает, что бы мы заметили это.

Вывод? Надо между шагами 2 и 3 выключить показ циферок.

Добавляем вывод спец-цифры "10"

case 10:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,HIGH);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;

Она просто будет гасить все сегменты. И вставим ее вызов самое начало ShowNumber

for(int c=1;c<5;c++) { showDigit(10);

IMG_0073

Как видим, все получилось. Все красиво и никаких засветов нет. Можно побаловаться с разными циферками, поделать секундомеры.

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

GND к GND,
VCC к +5V (НЕ к 3.3!)
SDA к A4
SCL к A5

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

IMG_0077

Теперь для проверки уже блока часов скачиваем с https://github.com/adafruit/RTClib библиотечку RTC, добавляем ее в проект и заливаем вот такой вот скетч:

#include
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
Serial.begin(57600);
Wire.begin();
RTC.begin();

if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
//RTC.adjust(DateTime(__DATE__, __TIME__));
}

}

void loop () {
DateTime now = RTC.now();

Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

Serial.print(" since 1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");

// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now.unixtime() + 7 * 86400L + 30);

Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();

Serial.println();
delay(3000);
}

Если все в порядке, то в выводе Serial Monitor вы должны увидеть ужас, похожий на

2000/61/120 0:81:4
since 1970 = 1023758464s = 11849d
now + 7d + 30s: 2002/6/18 1:21:34

Теперь меняем кусочек скетча в начале на

if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled

}
RTC.adjust(DateTime(__DATE__, __TIME__));
}

(если кто не понял, строчку одну перенес) И снова заливаем.

Теперь в выводе должно появиться реальное время. Ибо компьютер подставил их вместо __DATE__ и __TIME__, а функция
RTC.ajust "поставила часы" как надо.

Теперь выдыхаем и модифицируем скетч вот так:

#include

#include

int pinA=2;
int pinB=3;
int pinC=4;
int pinD=5;
int pinE=6;
int pinF=7;
int pinG=8;
int pinDP=9;
int pinPP=10;

int pinDIG1=11;
int pinDIG2=12;
int pinDIG3=A0;
int pinDIG4=A1;

RTC_DS1307 RTC;

void showDigit(int digit)
{
switch(digit) {
case 0:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,HIGH);
break;
case 1:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 2:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,HIGH);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 3:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 4:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 5:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 6:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 7:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 8:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 9:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 10:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,HIGH);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
}
}

void showNumber(int num)
{
int divide=0;
float z;
for(int c=1;c<5;c++) { showDigit(10); switch(c) { case 1: digitalWrite(pinDIG1,LOW); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); divide=1000; break; case 2: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,LOW); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); divide=100; break; case 3: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,LOW); digitalWrite(pinDIG4,HIGH); divide=10; break; case 4: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,LOW); divide=1; break; } // switch String s(int(num/divide)); char b=s.charAt(s.length()-1); showDigit(b-'0'); delay(5); } } void setup() { Serial.begin(115200); Wire.begin(); RTC.begin(); pinMode(pinA, OUTPUT); //A pinMode(pinB, OUTPUT); //B pinMode(pinC, OUTPUT); //C pinMode(pinD, OUTPUT); //D pinMode(pinE, OUTPUT); //E pinMode(pinF, OUTPUT); //F pinMode(pinG, OUTPUT); // G pinMode(pinDP, OUTPUT); // DP pinMode(pinPP, OUTPUT); // PP pinMode(pinDIG1, OUTPUT); // DIG 1 pinMode(pinDIG2, OUTPUT); pinMode(pinDIG3, OUTPUT); pinMode(pinDIG4, OUTPUT); // DIG 4 digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); digitalWrite(pinA,LOW); digitalWrite(pinB,LOW); digitalWrite(pinC,LOW); digitalWrite(pinD,LOW); digitalWrite(pinE,LOW); digitalWrite(pinF,LOW); digitalWrite(pinG,LOW); digitalWrite(pinDP,HIGH); digitalWrite(pinPP,HIGH); } long previousMillis = 0; long interval = 1000; DateTime now; // the loop routine runs over and over again forever: void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
now = RTC.now();
if((now.second() % 2) == 0)
{
digitalWrite(pinPP,LOW);
}
else
{
digitalWrite(pinPP,HIGH);
}
}

showNumber(now.hour()*100+now.minute());

}

Кака работает код, в принципе понятно из него самого. Но все-таки прокомментирую.

Система просто смотрит, не прошел ли уже заданный интервал и если прошел, то считывает время из часов точного времени и мигает двоеточием.

Почему я просто не поставил посередине что-нибудь типа delay(995)? Ответ опять же в том, что разные ардуинки имеют разную скорость работы. И код, который выполняется между delay,
выполняется за разный промежуток времени. А значит, в реальности между delay проходит разное количество времени. И чего, мне после каждого изменения кода или логики подбирать
задержку? Бессмысленное занятие при наличии под боком нормальных часов.

Код "now.second() % 2" означает "дробная часть при делении на два". Попросту говоря, я зажигаю светодиод каждую четную секунду (14/2=7.0), а гашу - нечетную (15/2=7.5).

Ну и now.hour()*100+now.minute() из часов и минут делает большое число.

Запускаем!

Ура! Работает! Теперь у нас есть часики. Свои, персональные! Можем танцевать и бросать в воздух чепчики!

Но мне же надо еще и показометр ...

Добавляем в loop

while (Serial.available() > 0) {
s=(char)Serial.read();
if (s == 'n') {
char ca[5];
txtMsg.toCharArray(ca, 5);
number_to_show = atoi(ca);
time_to_show=2;
digitalWrite(pinPP,HIGH); // we do to need dots
txtMsg = "";
} else {
txtMsg +=s;
}
}

if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if(time_to_show > 0)
{
time_to_show--;
}
else
{
now = RTC.now();

Суть кода простая: если компьютер послал что-либо в ардуинку, то тупо собираем все, пока не попадется спецсимвол n - это Enter или Return.
Затем превращаем полученное в число и на две секунды показываем вместо часов. Думаю, что если вы одолели предидущее, то этот будет просто понять.

Вот он целиком (для тех, кто не просто копипастит, внутри сюрприз):

#include

#include

int pinA=2;
int pinB=3;
int pinC=4;
int pinD=5;
int pinE=6;
int pinF=7;
int pinG=8;
int pinDP=9;
int pinPP=10;

int pinDIG1=11;
int pinDIG2=12;
int pinDIG3=A0;
int pinDIG4=A1;

RTC_DS1307 RTC;

void showDigit(int digit)
{
switch(digit) {
case 0:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,HIGH);
break;
case 1:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 2:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,HIGH);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 3:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,LOW);
break;
case 4:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 5:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 6:
digitalWrite(pinA,LOW);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 7:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
case 8:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,LOW);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 9:
digitalWrite(pinA,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinC,LOW);
digitalWrite(pinD,LOW);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,LOW);
digitalWrite(pinG,LOW);
break;
case 10:
digitalWrite(pinA,HIGH);
digitalWrite(pinB,HIGH);
digitalWrite(pinC,HIGH);
digitalWrite(pinD,HIGH);
digitalWrite(pinE,HIGH);
digitalWrite(pinF,HIGH);
digitalWrite(pinG,HIGH);
break;
}
}

void showNumber(int num)
{
int divide=0;
float z;
for(int c=1;c<5;c++) { showDigit(10); switch(c) { case 1: digitalWrite(pinDIG1,LOW); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); divide=1000; break; case 2: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,LOW); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); divide=100; break; case 3: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,LOW); digitalWrite(pinDIG4,HIGH); divide=10; break; case 4: digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,LOW); divide=1; break; } // switch String s(int(num/divide)); char b=s.charAt(s.length()-1); showDigit(b-'0'); delay(5); } } void setup() { Serial.begin(115200); Wire.begin(); RTC.begin(); pinMode(pinA, OUTPUT); //A pinMode(pinB, OUTPUT); //B pinMode(pinC, OUTPUT); //C pinMode(pinD, OUTPUT); //D pinMode(pinE, OUTPUT); //E pinMode(pinF, OUTPUT); //F pinMode(pinG, OUTPUT); // G pinMode(pinDP, OUTPUT); // DP pinMode(pinPP, OUTPUT); // PP pinMode(pinDIG1, OUTPUT); // DIG 1 pinMode(pinDIG2, OUTPUT); pinMode(pinDIG3, OUTPUT); pinMode(pinDIG4, OUTPUT); // DIG 4 digitalWrite(pinDIG1,HIGH); digitalWrite(pinDIG2,HIGH); digitalWrite(pinDIG3,HIGH); digitalWrite(pinDIG4,HIGH); digitalWrite(pinA,LOW); digitalWrite(pinB,LOW); digitalWrite(pinC,LOW); digitalWrite(pinD,LOW); digitalWrite(pinE,LOW); digitalWrite(pinF,LOW); digitalWrite(pinG,LOW); digitalWrite(pinDP,HIGH); digitalWrite(pinPP,HIGH); } long previousMillis = 0; long interval = 1000; DateTime now; String txtMsg = ""; char s; int number_to_show=0; int time_to_show=0; // the loop routine runs over and over again forever: void loop() { unsigned long currentMillis = millis(); while (Serial.available() > 0) {
s=(char)Serial.read();
if (s == 'n') {
//if(txtMsg=="HIGH") { digitalWrite(13, HIGH); }
//if(txtMsg=="LOW") { digitalWrite(13, LOW); }
//Serial.println(txtMsg.charAt(0));

char ca[5];
txtMsg.toCharArray(ca, 5);
number_to_show = atoi(ca);
time_to_show=2;
digitalWrite(pinPP,HIGH); // we do to need dots
txtMsg = "";
} else {
txtMsg +=s;
}
}

if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if(time_to_show > 0)
{
time_to_show--;
}
else
{
now = RTC.now();
if((now.second() % 2) == 0)
{
digitalWrite(pinPP,LOW);
}
else
{
digitalWrite(pinPP,HIGH);
}
number_to_show=now.hour()*100+now.minute();
}
}

showNumber(number_to_show);

}

И в реальности:

Все закадровые звуки принадлежат игрушке на айпадике, в который играет сын.

Ну вот и все. Первый этап завершен. Часики тикают и показывают то, что в них плюнет компьютер.

Но это еще не финал, поэтому паять проводки и собирать полученное в одну кучку я бы не спешил. Хотя дело ваше 🙂

Что и для чего надо взять.

Итак, основа получения результата – это отсутствие заморочек.

Всё, что я использую, можно легко купить в любом магазине, занимающимся электроникой. ЧипИДип, Терраэлектроника, Вольтмастер, Амперка, Электронщик … в общем, поищите, наверняка рядом с вами есть фирмы, которые обеспечивают радиолюбителей полезными штуками.

Повторюсь, для повторения не надо будет даже паяльника. Но лучше с ним.

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

Wisher_WB-102_J_big

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

Главная цель макетной платы это позволить быстро и более-менее надежно собрать схему для проверки работоспособности. И так же быстро ее поправить или разобрать.

Вторым пунктом идет сам микроконтроллер. Я выбрал наиболее широко распространенный: arduino. Этих контроллеров и их клонов в магазинах как грязи по самым разным ценам. Для наших целей подойдет абсолютно любой.

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

Итак, в качестве микроконтроллера я взял CarDuino. Он же Arduino Nano или Nano Duo. Процессор ATmega328, документации очень мало, но есть русскоязычный форум. Использовать всякие “фишки carduino”, типа порта HV12 или SPK не буду (нет документации, не совместимы с другими ардуинками).

carduinov7_mid1

Для показометра я взял набор MP1091 от МастерКит. Четыре семисегментных индикатора, объединенных в один блок. Из документации только одна схема и черезжопу написанная  библиотека.

mp1091

Ну и венцом всего будет MP1095, в который спрятали уже готовую схему часов с батарейкой.

DOC000867115

Отмечу, что хотя везде написано, что это наборы для Arduino, они прекрасно подойдут для других микроконтроллеров и компов.

Думаю, что обычный USB-miniUSB кабель, как и компьютер, вы найдете уж как-нибудь без моих подсказок.

Примерная стоимость набора в самом дорогом магазине Москвы:

Макетная плата с набором проводов – 1400 рублей.

CarDuino – 1180 рублей.

Индикатор MP1091 – 450 рублей

Часы MP1095 – 440 рублей

Итого 3500 рублей, из которых половину можно сэкономить, просто поспрашивав на форумах: многие отдают “макетки” и остальное за пиво-соки.

В дальнейшем в качестве “центрального компьютера” я буду использовать Raspberry Pi. Он точно так же доступен, обладает приличными характеристиками и при желании на нем можно собрать что угодно – от новогодней гирлянды до мультимедийного центра. Стоит ли вам его покупать сейчас, решать вам, но “часики/показометр” можно повторить за пару-тройку вечеров под пиво.

pi1l

 

Опять же, к нему (хотя бы на начальном этапе) надо USB-клавиатуру, мышку, монитор с HDMI или RCA входом и еще один USB-miniUSB шнурок.

В общем, по ходу дела расскажу с фотографиями, что зачем надо и куда что во что включать.

Микроконтроллеры или компьютеры?

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

Собрать стандартную схему “музыку играем, навигатор показываем, в интернет ходим” достаточно легко. Обычный CarPC обходится примерно в 15-20 тысяч рублей и по своему функционалу не напрягаясь переплевывает то, что производители машин предлагают автолюбителям.

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

С другой стороны, микроконтроллеры совершенно не имеют проблем с кнопками, индикаторами и датчиками. А на морозы большинству вообще чихать. Но одновременно они имеют дикие проблемы с высокоуровневым железом типа интернет-свистков или дисплеев. И почему-то обладают налетом этакой элитарности, дескать что бы что-либо на них сделать, надо очень сильно дружить в паяльником и  обладать как минимум кандидатской в области электроники.

Вот, к примеру, моя первая хотелка: обычные маленькие часики в машину. Давайте прикинем, как можно их сделать.

Берем 4 индикатора для циферок и двоеточие для мигания секунд. Берем самое простое, а значит у каждого индикатора 7 ножек (по числу светящихся сегментов), итого 28 ножек. Еще по ножке для “двоеточия” и питания. Итого 30 ножек. Ладно, я знаю как упростить схему до 13 ножек (знание будущего, так сказать).

И? Куда такое количество ножек втыкать в компьютер? Значит надо сидеть придумывать и разрабатывать свою плату расширения.

А затем? Представляете, что будет твориться в компе? “так, надо проиграть следующие 5 секунд музыки, зажечь вон тот индикатор, а вон тот погасить, а там кнопку не нажали? так, надо снова зажечь индикатор, оп-па, GPS чего-то хочет нам рассказать” … Ничего не напоминает? Правильно, мысли новичка за рулем, когда мозг одновременно решает, насколько надо повернуть руль, какую педаль нажать и попытаться вспомнить пункт правил, регламентирующий разъезд на нерегулируемом перекрестке. В большинстве случаев спасает то, что компьютеры все-таки умеют делать это быстро и не свихнувшись при этом.

Но для микроконтроллера задачи позажигать индикторы вообще не стоит. У навороченных контроллеров число ножек для подобных целей измеряется десятками. А с платами расширения их число может легко измеряться сотнями. Зато задачи типа “проиграть mp3” или “показать пользователю картинку” в рамках одного контроллера не решаются никак. Для каждого действия вне установленных рамок требуется свой, отдельный микроконтроллер. В итоге музыку играет один контроллер, голоса типа “поверните налево” обеспечивает второй, а картинки рисует вообще третьий. А все это между собой связано какой-нибудь хитрой шиной … В общем, ужас. И этот ужас старательно поддерживается всеми, кто кормится с этой отрасли. А пользователи недоумевают: как же так, навигатор за 5 тысяч круче и навороченней встроенного в машину, за который отдали 100?

В итоге в реальности нет никакого противостояния между контроллерами и компьютерами. Как и опытный водитель просто не думает, какую педаль и насколько надо нажать, что бы машина поехала или остановилась. Как у него и не возникает мысли вроде “куда и насколько надо повернуть руль, что бы машина повернула?”

Так же поступлю и я. Все тупые задачи будет отрабатывать микроконтроллер. Показать часики, проверить, нажата ли кнопка или замерить напряжение в бортовой сети – все его задачи.

А вот узнать положение машины по GPS, распознать код ошибки или сходить в интернет – этими задачами пусть занимается компьютер.

Мир, дружба и жевачка в одном флаконе.

 

Этим постом мастер начинает новую партию …

Этим постом начинаю новую серию, посвященную электронике.

Не так давно я внезапно обнаружил, что жизнь на самом деле очень замечательная штука. Реально.

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

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

И вот, когда у меня был D2, у меня в нем было аж целых три таких заморочки. Первой были часы. Они располагались неудобно для меня и не умели показывать в 24х часовом формате. И ночью фиг узнаешь, сколько времени, ибо они отображали время на жидкокристаллическом индикаторе. Да, фигня, особенно когда часы есть в навигаторе, смартфоне и везде … Но раздражало.

Второй заморочкой стал спидометр. Вернее, его показания. Он все время врал. Причем врал неравномерно. Чем больше скорость, тем больше врал. Да, я в курсе, зачем так делают, но … раздражало. Лечился с помощью навигатора, он скорость с GPS показывал в уголке. Но стоило солнцу засветить экран … Раздражало!

И наконец, последней заморочкой была температура охлаждающей жидкости. Иногда – напряжение в бортовой сети. Лечился бортовым компьютером от мультитроникса, но последний любил иногда терять связь с машиной и тихо, без каких-либо звуков выключаться.  Раздражало!

Ну, а теперь у меня пока машины нет, но наверняка что-либо подобное будет и там. А оно мне надо? Правильно, оно мне не надо. Значит будем превентивно лечить.

Итак, для начала нам нужно что-то, что в удобном для глаз месте будет отображать время, скорость, температуру и напряжение. А может и еще что-нибудь столь же полезное.

При этом у меня нет миллионов. Как нет и желания работать паяльником, спаивая кучу микросхем в что-либо удобоваримое …

Аккумуляторные мифические страшилки

Недавно наткнулся на один из самых долгоживущих мифов у автомобилистов: если в машину поставить аккумулятор бОльшей емкости, то он будет недозаряжен и быстро выйдет из строя. Как вариант этого мифа есть “правило” типа “если у тебя аккумулятор на 100А, то генератор должен быть на 110А, не меньше” или “генератор на 75А не сможет обслужить аккумулятор на 140Ач”.

Как обычно, я постараюсь не углубляться в разные глубины, а постараюсь объяснить на пальцах.

Итак, мои могучие любители руля, садитесь в кресло поглубже и приготовьтесь прочитать ужасные открытия про аккумулятор. Правда, это нифига не открытия, но все равно, они такие ужасные …

Для начала, что такое аккумулятор? Это хреновина, которая умеет хранить электричество.  Проще всего его представить в виде герметичного бака для воды с двумя трубами.

Screen Shot 2013-08-21 at 10.08.38

 

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

Но вдруг и внезапно кое-что в машине ломается (или автолюбитель ломает специально, начитавшись статей) и генератор начинает вливать в аккумулятор больше, чем ему положено.

Screen Shot 2013-08-21 at 10.13.28

 

Аккумулятор хренеет, швы в баке расходятся и не смотря на внешне больший размер, аккумулятору приходит трындец. Плохо.

Или наоборот, радостный джипер садится в говны по уши и устраивает гонки на лебедке.

Screen Shot 2013-08-21 at 10.16.03

 

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

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

Screen Shot 2013-08-21 at 10.20.51Как обычно вправо уходит время, а вверх уходит напряжение и ток, потребляемый аккумулятором. 13,6 я взял просто для примера.

Итак, что видно на этом графике? Видно то, что напряжение остается постоянным. Ну или почти постоянным. Вольт туда-сюда не считается. За это постоянство отвечает генератор и реле-регулятор в нем.

Зато сила тока как-то взрывообразно растет вверх и потом плавненько так падает. А, надо генератор побольше поставить! Что бы ток этот смог выдать! Нет, надо еще больше генератор поставить! И не миф это, а вовсе правило! Битье в грудь и идем доказывать свою правоту.

Кхм. Давайте разберемся.

Итак, представим, что у нас аккумулятор на 100Ач. Пусть будет бак 100 литров. И даже мы его залили под завязку. Судя по циферкам емкости, он у нас может обеспечить ток в 1А на протяжении 100 часов или наоборот, 100А на протяжении часа.

Теперь поворачиваем ключ зажигания и включаем стартер. Зима, всем холодно, у нас дизель. Стартер радостно включается в работу и крутит целую минуту, высасывая току аж на 300А. Наконец дизель прочихался и радостно взревел, выплевывая черные клубы несгоревшей солярки.

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

Сколько аккумулятора сожрал стартер? 300А*минут (Крутил минуту, жрал 300А). Делим на 60 (в часе же 60 минут). Получаем 5Ач.

У нас 100Ач, один запуск сжирает 5Ач … аж 20 раз можем завести машину, да? Да. Но в идеальных условиях. В реальности идет еще куча потерь, да и способность аккумулятора отдавать заряд с разрядом падает (согласитесь, что когда в баке много воды, струйка из него течет гораздо веселее, чем когда воды в нем на донышке).

Итак, машина завелась, стоит на прогреве, генератор дает … ну скажем 40А. Ибо как ни странно, но максимальный ток он дает на максимальных же оборотах, а их у нас нет.

Эти 40А вливаются в аккумулятор … и практически тут же выливаются из него. На лампочки, вентиляторы, музыку и прочие ништяки.

Не верите? Давайте прикинем.

 

“Мозги” со всякими форсунками потребляют примерно 1-1,5А. Фары ближнего света (у вас же ДХО нет, да?) еще 10А (у вас же пацанские 55Вт лампочки воткнуты). Музыка еще 3-4 ампера сжирает. Вентилятор печки – 20А. В общем, туда-сюда и набегает.

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

Вот и объяснился первый пик. А почему потом ток падает? Опять же проще объяснить на примере бака: чем полнее бак, тем тяжелее в него залить воду.

Вроде бы все просто и понятно. Тут обычно спрашивают “а вот когда все зарядилось, все выключено, а я нажал педаль газа. Куда деваются 110А, которые вырабатывает мой генератор?”. Вынужден огорчить. Он их не вырабатывает. Там внутри хитро так устроено, что пока нет потребителей, он и не вырабатывает ничего …

Теперь вы достаточно подкованны, что бы понять, что замена бака на бОльший вообще ничем таким не грозит. Просто чуть большим временем заряда “с нуля”. Зато плюсов вроде гораздо длительного кручения стартера или лебедки прибавляется.

А теперь первый обещанный ужас. Данная схема зарядки называется “зарядка постоянным напряжением” и при ней аккумулятор всегда недозаряжен. Вообще. Любой. Примерно на 30% емкости. То есть ваш крутой аккумулятор на 110Ач в реальности как 75Ач. Обидно, да? А все еще усуглубляется поездками класса “дом-работа”, когда и в идеальных условиях аккумулятор не успевает зарядиться и “недозаряд” становится еще больше  …

Как вылечить? Поднятием зарядного напряжения. Для 12 вольтовых – примерно до 16 вольт. Какой трындец будет твориться в сети автомобиля можете представить сами.

Но умные люди придумали метод “зарядка постоянным током”. Это когда специальные устройства “льют” в аккумулятор точно дозированное значение тока, не обращая внимание на желание-нежелание аккумулятора принять больше или меньше. Зато данные штуки данным методом способны зарядить аккумулятор на 100%.

В общем, тут хватит знать только пару вещей: дешевые зарядки убивают аккумулятор так же гарантированно и ток заряда должен быть не более 0,1 от его емкости. То есть аккумулятор на 100Ач надо заряжать током не более 10А. Чем меньше ток – тем лучше для аккумулятора, но и дольше.

Теперь вы сами сможете развеять следующий миф: “нельзя объединять два аккумулятора разной емкости. один будет умирать быстрее”. Какая разница: лить в один бак или в две канистры?

А вот другое утверждение вовсе не миф: нельзя объединять два аккумулятора разных конструкций. То есть “кислотный необслуживаемый” с “танковым” или с “гелевым”. Причина простая: у этих аккумуляторов совершенно разные по характеру графики заряда (см выше). Говоря на пальцах, попытка лить  одновременно в железный бак и резиновую грушу ни к чему хорошему не приведет.

PS Все вышенаписанное легко проверяется путем поиска по интернету. Или по книжкам, кому как проще.

Телефонизируй это!

Всё началось с того, что я переехал с семьей на другую квартиру. Сьемная, на километр дальше от метро. Всё бы было хорошо, но сигналы мобильных операторов балансировали на уровнях между “плохо” и “нет вообще”. Соответственно, все прелести пропадающей связи были в комплекте: дозвониться на домашний мобильник иногда было невозможно, а когда дозванивался, то бульки превращали разговор в игру “угадай, что я сказал”. Нет, в квартире есть проводной телефон, но ходить с ним к холодильнику в ответе на вопрос “что купить” совершенно не комильфо …

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

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

Следующим шагом стала мысль поставить на свой сервер VoIP АТС, на смартфоны sip клиентов, настроить все это и начать радоваться жизни.  В принципе задача совершенно реальная для меня, но в последнее время я стал предпочитать отдавать решение задач людям, которые специализируются на решении именно таких задач … В общем, надо идти к телефонным провайдерам.

Первым естественно в голову пришел sipnet. Старейший, толстейший и теде и тепе. Есть как свой клиент, так и наработанная база по подключению всего и всех. Из минусов – какая-то запредельная стоимость телефонного номера.

Дальше поиск привел к YouMagic от МТТ. В свое время я его тестировал и у меня остались двоякие впечатления: с одной стороны все есть, но с другой, это все подано таким винегретом … Но все равно зашел посмотреть что изменилось. Из наиболее видимого стала полная смена клиентов: когда я его тестировал, главным у них был клиент, написанный на java. Все прелести в виде тормозов, ресурсожручести и прочего в комплекте. Сейчас они договорились и сделали брендированную версию Bria (Её делает та же контора, которая делает X-Lite). А самый главный плюс был в том, что МТТ – ну очень толстая контора и владеет своей телефонной сетью, поэтому может позволить себе небольшие цены.

Следующим в списке стал Mango Office. Опять же, я давно его тестировал и он мне понравился. А сейчас у них всякие штучки, дрючки и свистелки с перделками. Я полюбовался на интеграцию их АТС с CRM и практически пошел создавать акканут, но по пути заглянул в раздел “тарифы” … В общем, по мобильникам с Дальнего Востока в Москву звонить дешевле.

Остальные мне не показались достойным упоминания. Они были или тупыми реселлерами кого-нибудь из потолще, либо обладали настолько невнятным сайтом, что я не мог в течении минуты-другой определить, что у них есть и за сколько …

Где-то на этом этапе я пришел к варианту взять номер у МТТ, поднять на своем сервере астериск, купить приличный sip клиент для iOS и Android, sip телефон домой и закрыть эту тему.

Стал читать интернет на предмет подводных камней и прочих заморочек с выбранной схемой. И внезапно обнаружил, что у МТТ есть youmagic.pro. Грубо говоря, виртуальная АТС с минимумом свистелок и перделок. За 300 рублей в месяц я получаю телефонный номер в Москве, 5 аккаунтов к нему, возможность создавать всякие простейшие диалпланы и голосовую почту в емаил.  Почему они не рекламируют эту услугу … в общем, наверняка руководству известно.

Быстрый чёс по интернету показал, что больших подводных камней нет. Есть куча мелочей, которые свойственны большой конторе, но все решаемо.

Ок, “заткнись и возьми мои деньги!”. Регистрация, выбор номера, я внутри. 5 дней на оплату, а то заблокируют.

Первый камешек меня ожидал на страничке оплаты. Она не изменилась с бета-тестовых времен. То есть то что там написано в реальности не применимо. Фигня, метод тыка и система соглашается с тем, что у нее есть этот аккаунт (если что, то валидным для нее является не 8499номер, не номер, а 499номер).

Второй камешек – то, что после оплаты вас пытаются послать на страницу magic.mtt.ru, которой так же нет еще со времен теста.

Но это все мелочи. На счете появились деньги и можно начинать звонить.

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

Но все время так звонить “некузяво”. Надо стационарный sip телефон.

Опрос знакомых в мордокниге ожидаемо вывел на сименс гигасет с суффиксом ip на конце. Первая попытка купить его на горбушке или околометрошных магазинах электроники закончилась провалом: его нигде не было. Только развалы дектовских панасоников.

Вторая попытка была предпринята уже в магазине около работы. Там внезапно было обнаружено аж 3 точки, где наличествовал этот телефон. Методом “да и ну его” был выбран самый дорогой вариант – Siemens C610A IP. Почти четыре тысячи рублей.

Что было получено? Раздельные “стакан” и “база”. Очень удобно – не надо мучаться с выбором места установки. Обычные пальчиковые аккумуляторы – на предидущем телефоне были какие-то свои. В итоге оказалось дешевле выкинуть телефон, чем купить новый аккумулятор. Возможность работы с 5 sip провайдерами одновременно и какое-то слабое подобие диалплана. Ну и для резерва остается обычная телефонная линия, куда его тоже можно воткнуть.

Остальные фиговинки типа клиента электронной почты … в общем, маркетоидный бред, даже смотреть в ту сторону не стал.

Итак, финальная стадия в виде попытки все это собрать в одну кучу.

Базу в розетку, телефонную линию и ethernet в нее. Трубку на место старого телефона и тоже в розетку … Все сверкает и переливается, поэтому тупо понажимал “ок”, пока не прекратилось мельтешение.

Что получил в результате? Телефон с обновленной прошивкой, подключенный в обычную линию, к какому-то gigaset.net и аккаунт sipnet с кучей циферок. С sipnet получилось прикольно: телефон спросил меня, имею ли я какой-нибудь код автонастройки, а вместе с ним была бумажка от сипнета с этим самым кодом. Ну я и ввел его.

Но мне-то надо на МТТ! Пошел читать, как все это настраивать. На wiki от МТТ есть аж три варианта настроек именно этого телефона. Правда, отличаются они только методом “проникновения” на телефон. И опять же, если следовать им, то телефон даже в принципе не будет способен соединиться. Ибо прошивки новые, пункты не совпадают и так далее.

Потом сделал попытку воспользоваться автонастройкой. Толку было столько же, то есть нифига. Registration failed. Спасибо вам, маркетолухи сименса за сокрытие подробностей от пользователя! Ни логов, ни … в общем, вообще ничего нет. Почему оно не может – догадывайся сам. В качестве спасительного круга можно воспользоваться “вызовом мастера настройки АТС”, но это уже крайний случай …

(тут пропущены tcpdump, маты, расколупывание потока и конфигурирование роутера). В общем и если кратко, про хотя бы UPnP оно не в курсе, и надо давать ему “все на всех и везде”.

Наконец в страничке статуса я увидел registered. Тестовый звонок подтвердил, что все работает. Ура! Пошли настраивать дальше.

Тут в принципе можно было бы и завершать рассказку, ибо дальше каждый настраивает все под свой вкус … Но я оставлю резюме.

Итак, что я получил за четыре тысячи единовременных и 300 рублей постоянных затрат?

– Москвовский номер с кодом 499

– Возможность приема звонков с него как на мобильные телефоны (после установки клиентов), так и обратно.

– Стационарный телефон, с которым теперь можно бегать по квартире.

– Голосовую почту и возможность “наберите добавочный номер или дождитесь ответа оператора”. Слабенькое, дохлое, но есть.

– Практически мгновенную связь между внутренними клиентами. С мобильного-3G на стационарный-sip часто даже “гудков вызова” нет.

Что плохо?

– Тормозной сайт. Все выполняется медленно и печально.

– Куча бессистемно сваленной документации в формате “наотеб.сь”. Толку чуть больше нуля.

– На iOS запуск клиента приводит к остановке музыки (запуск, а не звонок!) и пожиранию батарейки. На андроиде не пробовал.

– Сименс страдает тем же, что и МТТ. К примеру, не умеет перерегистрироваться сам, без пинка в виде перезагрузки. Обещает индикацию состояния лампочкой на базе, но не показывает и так далее и тому подобное. Зато регулярно обещает “риск урагана” в Москве.

В общем, больше хорошего, чем плохого.

Этот непонятный КСВ …

Итак, вот вы купили радиостанцию, антенну и прикрутив комплект к машине, с удивлением обнаруживаете, что вас не слышно. Дураки покупают усилитель, а умные настраивают антенну. Вы же умные, да? Поэтому начав разбираться в причинах, первым делом натыкаетесь на слова КСВ или “Коэффициент стоячей волны”.

Итак, что такое КСВ или “коэффициент стоячей волны”? Эта такая циферка, которая характеризует правильность настройки. Чем меньше, тем лучше. Меньше 1 не бывает. Что она означает, вы сможете прочитать в интернете: статей не просто много, а очень много.

Как его измерить? Обычно там же, где продают радиостанции и антенны, можно купить и КСВ-метр. Профессиональный вам совершенно не нужен, берите самый дешевый, он должен стоить 400-500 рублей максимум. В качестве показометра его хватит за глаза.

Первым делом его надо подключить. Обычно все нарисовано на картинках, но если что, то в ANT или ANTENNA надо прикрутить антенну, а в TRANSMITTER или RADIO – выход от радиостанции.

Включаем радиостанцию.

Теперь посмотрите на сам КСВ-метр. Там есть переключатели REF-FWD и/или PWR/SWR. 1. Щелкаем в SWR и FWD.

2. Теперь нажимаем на тангете радиостанции “передача” и крутилкой на КСВ-метре выводим стрелочку на максимум на шкале.

3. Щелкаем на REF.

4. Снова нажимаем “передача” и смотрим на шкалу, которая с буковками SWR. Это и есть искомый КСВ.

Ну вот, получили циферку. Скажем, 2.5 или 3. А везде пишут, что КСВ должен быть 1! Иначе плохо. Чего делать?

Ниже икслюзивная картинка от меня.

swr

 

Как видите, график значений КСВ представляет собой нечто, смахивающее на U или V. Сразу скажу, у всех он разный! У кого-то склоны крутые, а у кого-то пологие. У кого-то левый круче правого или наоборот … У кого-то минимум графика проходит через КСВ=1, а у кого-то и двойка идеалом будет. В общем, ваше – оно только ваше!

Наша задача – поставить минимум графика на тот канал, в котором больше всего общаетесь. Скажем, 15й, где дальнобои общаются.

Первое, что необходимо понять – на каком “склоне” сейчас все настроено. Это просто: ставим станцию на 1й канал, замеряем КСВ, затем на 15й, снова замеряем, затем на 30й, снова замеряем. Смотрим на циферки.

Циферки падают – вы на левом. Антенну надо удлинять.

Цифреки растут – вы на правом склоне. Антенну надо укорачивать.

Циферки в духе “большая-маленькая-большая” – у вас график КСВ очень узкий, уменьшите шаг. Ну или вы очень близко к цели – хватит антенну подвигать в держателе.

Циферки в духе “одинаковая-одинаковая-одинаковая” – у вас график КСВ очень широкий. Длиной антенны изменить крайне маловероятно.

По моему опыту скорее всего придется обрезать антенну. Остальные случаи встречаются очень редко …

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

Как укорачивать? Любыми мощными кусачками по сантиметру от верхушки откусывать. Тут главное не перестараться, ибо удлинять гораздо муторней, чем обрезать.

Как удлинять? Вот тут сложнее. Если не хватает диапазона регулировок самой антенны, то обычно припаивают/прикручивают/приваривают к верхушке кусок с запасом, что бы потом обрезать …

Более продвинутые могут все тоже самое сделать изменением числа витков намотанного на катушку провода (утолщение такое снизу антенны), но продвинутым эта рассказка не нужна 🙂

Какие значения КСВ хорошие, а какие плохие? Грубо говоря все что больше 2,5 это плохо. 1,5-2,5 – потянет. 1,1-1,5 хорошо. 1 – отлично.

У вас большой КСВ и не уменьшается? 99% за то, что очень плохой контакт где-то в цепочке “масса антенны – корпус машины – корпус радиостанции”. Или в антенном проводе и разъемах.

Видите, как все просто?

Первый выезд

Так, родной аккумулятор родной же зарядкой заряжен … Но мало, черт побери, мало будет!

Снова деньги в зубы и в магазин. Там покупается хороший китайский клон чего-то там iMax B6AC, еще один аккумулятор на 4600mAh и на сдачу вентилятор на регулятор.

Несмотря на инструкцию, минут 15 пытался понять, как же правильно заряжать акуумуляторы с помощью этой шайтан-машинки. Нет, основные принципы я знаю, но шайтан-машинка утверждает, что она может делать все и автоматически …

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

Опять интернет. “Силовые заряжать надо током 1С”. М-мать их за ногу. Амперы знаю, а С – это градусы же. Цельсия. Как температурой заряжать аккумуляторы?. Опять жаргон. “С” на ихнем языке – это “емкость”.  Итого моделисты тупо берут циферку с аккумулятора и называют её “С”. У меня аккумулятор на 4600mAh, значит заряжать его можно током аж в 4,6А.

Почесал репу. Нет, зарядник по книжечке такой ток может дать. Но вдувать в эти милипусечки почти 5 ампер? Решил попробовать на 3А. Пока зарядник отсчитывал число “залитых” миллиампер, руками контролировал температуру аккумулятора. Ну стал чуть тепленьким … Значит, запас еще есть. По показометру зарядника “залил” чуть больше 3000. На первый раз хватит, все равно надо “раскачивать” …

Метро, садик, магазин, дом, не раздеваясь модельку в руки и на улицу.

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

Лесными дорожками добираемся до полянки-детской площадки в глубине леса и начинаем  кататься. Для катания я переключил регулятор в режим “тренировка” – в нем машинка развивает всего 50% своей скорости …

В принципе видео позволяет оценить, насколько быстро можно обучиться водить машинку. А на 4:25 – что она может на 50% своей мощности …

Я несу машину, сын – пульт. Сразу в ванную: смывать грязь и выцарапывать намотавшуюся на оси траву. Одновременно общий осмотр машинки.

IMG_0015

Результаты меня порадовали. Царапинки обнаружились только на кузове. Но ему можно – он сделан из какой-то пластиковой “бумаги”. Из неприятного: в 4600 батарейку через миллиметровое отверстие (!!!) насыпалась кучка мелких камешков. Не смертельно, но показывает уровень запыления под капотом. Надо чем-нибудь загерметить … Опять в интернет, форумы читать …

Ставим батарейки на зарядку током в 0.5А (спешить некуда), а машинку в сушку.IMG_0017

На утро родная зарядка горит зелененьким, а iMax отрубился по лимиту “заливаемого”. Ок, повторный старт с контролем. В 4600 “дозалил” еще 350. В 3000й – еще 200. 5-7% не лишние … Задумался о 2х канальной зарядке. И об еще одной 4600й со шнурком-сплиттером, что бы заряжать одновременно можно было … Но потом, все потом: надо машинку собрать назад.

И затюнить! Вроде он особо пока и не нужен, но пусть будет.

IMG_0019

И скорей в лес!

Лес показал: полностью заряженный 3000 высаживается за полчаса. Батарейки к пульту (обычные GP) примерно за полтора. В общем, мы вернулись с почти полной 4600 …

В список покупок:

– еще одну 4600 со сплиттером.

– АА аккумуляторы. 4 штуки. С зарядкой.

Ребенок доволен в сопли

стамп

 

Так, я достаточно взрослый и самостоятельный человек и могу позволить себе купить радиоуправляемую машинку!

Но какую? Первый пробный заход в магазин для хобби привел к легкому шоку: там столько всего непонятного! И все общаются на вроде бы понятном языке, из которого я не понимал абсолютно ничего. Всякие спуры, пиньоны, аппы и прочие заппы. Срочно дайте мне толковый словарь!

Что бы не выглядеть лохом (в любом случае буду выглядеть, но хоть буду понимать), в форсированном режиме устроил набег на форумы моделистов. Сначала на наши, потом на импортные и потом, уже поняв часть лексикона, снова на наши. Стало гораздо понятней. Вот ведь культура: ведущие и ведомые шестерни обозвать спурами и пиньонами …

Теперь настало время определиться с хотелками. Во-первых, хочу “электричку” (модель, работающая на электричестве). У меня сын и давать ему возиться со всякой гадостью совершенно не улыбается. Во-вторых, хочу машинку, которой до определенного момента будет пофиг, где и по чему ездить. Она должна быть кондовой во всех смыслах и не бояться воды. И наконец, она должна доставлять удовольствие. А значит в ближайших магазинах должно быть все необходимое, что бы собрать эту машинку по запчастям.

С ценой решил определиться на месте. Думаю, с ценами на модели действует абсолютно тот же принцип, что и с компьютерными железками: топовое стоит как самолет, а качественное, но с чуть худшими характеристиками – процентов на 30 дешевле. Ну а нижний ценовой диапазон … В общем, кроилово ведет к попадалову!

Открывая дверь магазина во второй раз, я был уже готов к тому изобилию, что свалится на меня … Решив не выставлять себя “всезнающим” (кстати, довольно жалкое зрелище для реально знающих людей. В любой области), я честно сознался, что хочу купить машинку в подарок ребенку. Правда, не уточнил, какому именно 🙂 Ну и намекнул, что они, конечно могут меня развести на бабло, но тогда фиг я к ним больше приду. А у меня планы большие …

Продавщица немного удивилась, но видимо решила попробовать. На пару с каким-то мужиком они довольно быстро ничего не оставили от моих планов на покупку определенной модели (по форумам начитался, да). И начали подбирать модельку под мои требования …

В общем, я теперь владелец Traxxas Stampede 4X4 VXL. Лучший монстр-трак 2011 года, бла-бла-бла и теде и тепе. Вечерний чес по интернету признал правоту продавцов. Народ машинку знает, гадостей про нее не рассказывает, соответствующие топики на форумах живые. Значит, первоначальный выбор был правильный.

С коробкой наперевес я бегом за сыном в детский садик, затем в темпе быстрого шага домой и в четыре руки мы распаковали ее.

Внутри коробки есть практически все необходимое для начала “едючества”. Нету только батареек для пульта. Беда и огорчение.

Тут же были распотрошены игрушки, добыты батарейки и пульт зажег зеленый светодиод. Поминутно сверяясь с картинками из мануала, дрожащими руками соединяю провода и давлю кнопку на машинке. Ура! Машинка отзывается двумя огоньками: красным и зеленым. Все по мануалу!

Нажатие на курок вызывает взвизг раскручивающихся колес  и сын, подпрыгивая, выдирает у меня пульт. Первый удар об стену, первая снесенная табуретка … Тут же волевой приказ: на улицу!

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

Машинку в охапку, домой, помыли колеса, аккумулятор на зарядку, а сами читать. Я инструкцию, а сын – каталог (он с картинками).

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

IMG_0005

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

Время 6:30, до будильника еще 20 минут … Какой-то грохот … Я крадусь в комнату к сыну и застаю следующую картину:

IMG_0009

Опередил!

Ладно, раз опередил, значит надо спасать свое лицо: папа ведь все знает! Провел краткий инструктаж по технике безопасности по обращению с машинкой. Затем совместно отключили все и подключили. Сын снова все отключил и включил, но теперь уже самостоятельно. А мне остается только спросонья вспоминать прочитанную вчера инструкцию и делать вид, что я все это знал тыщу лет.

Все, сборка-разборка завершены, теперь можно снова включить. Я беру машину в руки, сын пульт … Что, вчера был взвизг? Взревев, машина чуть-чуть не вырывается у меня из рук! Сын, подпрыгнув от неожиданности, отпускает курок.

Переглядываемся и снова запускаем. Офигеть. И еще раз. ШИКАРНО! Кошка предусмотрительно блюет прямо на пути предполагаемого трека машины по дому. Пока вытираю, обнаруживаю, что вообще-то пора в садик идти …

Аккуратно выключаем все, ставим машинку, что бы было видно, пока одеваемся …

В общем, “это круче, чем hotwheels!”

 

Новый мир

Вчера мне открылся новый и неизведанный мир. Нет, технически назвать его совершенно новым нельзя, но тем не менее, это так.

Это мир радиоуправляемых моделей. Когда я был маленьким, я читал про схемы радиоуправления для машинок и самолетиков. Потом были покупные из магазина машинки, которые … в общем они слабо были похожи на те, про которые я читал.

Потом я сам стал для сына покупать изредка … Они были не лучше. А более дорогие машинки при ближайшем рассмотрении имели хлипкую конструкцию и кучу ломучей пластмассы.

В общем, у меня как-то отложилось, что это для этаких кулибиных, которые из сковородки, ардуинки и пары моторчиков собирают квадрокоптер на кухне …

Но оказалось, что все это ширма для широких слоев населения. В духе “нате, подавитесь и отвалите”.

В общем, вчера дали покатать машинку. Из ТОГО мира. Обычная, покупная, 1:18, электромоторчик, двухканальное управление.

Первый удар был нанесен качеством и проработкой конструкции. 100% немодифицированная машина отличалась совершенно другим качеством. Все на месте, ничего лишнего или откровенно фигового. Примерно как “китай” и “правильный китай”. И абсолютно ничего общего с магазинными игрушками при той же цене …

Второй удар был нанесен возможностями машинки. Перед поломкой (по глупости, да) эта хреновина весом килограмма в 2 умудрилась разогнаться где-то на 20 метрах километров до 40 в час. И мне было сказано, что это так, фигня. Вот тюнингованные …

И наконец, поначалу презрительный чес по сайтам огорошил меня тем, что есть вполне себе конструкции. С полным приводом (хошь фулл-тайм, хошь awd), с блокировками дифференциалов и прочими штуками типа лебедок. Не хошь в грязи – дрифтуй. Не хошь дрифтовать – прыгай в ралли. Не хочешь ездить – летай или плавай …

Хочешь – покупай готовые комплекты, а хочешь – по кусочкам любого объема (от сборок до шестеренок).

И окончательно меня добили ролики, где здоровые мужики собираются и на своих машинках имитируют реальную деятельность. Скажем, экскаватор копает, скреперы ровняют, машинки возят грунт … Имитация практически полная. Чем не песочница для взрослых?

И цены … начать вливаться в ТОТ мир можно по цене расширительного бачка для ведровера …

Теперь сижу, стиснув зубы. Во мне бушует ребенок.

Рассказки начинающего джипера – 2

“Чего стоим?” и “Зачем они туда поехали?” – два самых частых вопроса, которые возникают на любом мероприятии в котором участвуют более двух машин. Эти вопросы задает сначала первый уткнувшийся в зад стоящей на трассе машины, зачем следующий и последующий … Нет, общение конечно хорошо, но информированность остается нулевой. А как я писал раньше, наша задача – не дать себе испортить настроение.

Итак, нам нужны средства связи. Без них ездить нельзя.

Решение первое, гламурное, но тем не менее вполне себе рабочее.

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

Принцип простой: телефон по нажатию кнопочки записывает звук с микрофона и отправляет его на сервер через интернет. А сервер уже рассылает записанное всем, кто вместе с вами на канале.

Наиболее популярной в моем окружении является программа Zello. Она есть для андроидов, виндовсов и даже блэкберрей.

IMG_0208

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

И можно общаться. Нажали кнопочку, проговорили, отпустили кнопочку, и ваше наговоренное разошлось по всем в канале.

Самый главный минус: необходимо присутствие интернета во всех смартфонах. Ну и сами смартфоны у всех участвующих.

Самый главный плюс: участники могут быть вообще в разных городах и регионах.

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

Решение второе, мобильное.

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

На мой взгляд, сейчас наиболее приемлимый вариант – радиостанция Alan-42 и антенна Sirio MG-27.

i

Знатоки и гуры сейчас презрительно усмехнутся. 4Вт мощности, 40 каналов … Да, все так. Но свою основную функцию она выполняет на пятерку с плюсом.

Во-первых, с рацией в комплекте идет переходник на внешнюю антенну и хвост в прикуриватель. Шлепаете антенну на крышу, капот или крыло (в зависимости что у вас из железа) и вы получаете средство связи с радиусом доступности на дороге в 10-15 километров (в лесу 2-3). Это позволит покрыть 99% всех потребностей.

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

И наконец, других аналогов (мобильное, СВ, батарейки, легкая настройка) попросту на рынке нет.

Лично я с этой рацией отъездил где-то с год. И до продажи пузатерки жены она жила в ней. Свои функции выполняла.

Если у вас чуть больше денег, то можно сделать ход конем: купить стационарную СВ-радиостанцию, самим или с помощью знакомого “паялы” сделать переходник в прикуриватель и купить “большую” антенну на магнитном основании. До недавнего времени я сам так ездил.

Из плюсов: комплект остается мобильным. Его можно переставлять из машины в машину буквально за пару минут.

Этот  комплект будет работать гораздо лучше из-за большей мощности радиостанции и более длинной антенны (на трассе легко можно получить 25-30 километров)

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

Ну и наконец, можно сделать все правильно: установить радиостанцию в укромном месте, пробросить к ней провода питания напрямую от аккумулятора. Антенну купить типа Lemm-2001 turbo и врезать ее прямо в центр крыши. Или смалодушничать и прикрепить к водостоку.

Такой комплект, будучи отстроенным, дает самые лучшие результаты. 30 километров в условиях города получить будет довольно просто.

Какую станцию купить? Лично я сторонник мегаджетов 500й серии. Конкретно megajet-550 и 555. У первого консоль управления очень маленькая и ее можно разместить где угодно. У второго консоли вообще нет, а все управление находится прямо на тангете. Но в любом случае, выбирать вам. Сейчас СВ радиостанции примерно все одинаковые по функционалу и различаются в основном двумя вещами: количеством цветов подсветки и ценой. Только не зарьтесь на старые радиостанции: у них шумоподавитель обычно не спектральный (или вообще ручной), а это на трассе довольно быстро выводит из себя.

С антеннами та же самая история: они примерно все одинаковые по своим классам. То есть “коротышки” ловят примерно одинаково плохо, а “удочки” работают примерно одинаково хорошо. И не верьте всяким гурам с форумов радиогубителей, радиостанции с антеннами даже после “прокачек” не дадут вам идеального качества связи. Не тот диапазон совершенно.

Усилители? Ой, пардон, “компенсаторы антенного тракта” (где-то реально видел). Абсолютно не нужны.  Дело в том, что у 99,99% их нет. И толку с того, что вас будут слышать на 50км, а вы – только тех, кто в 10 км от вас? Лучший усилитель – это правильно установленная антенна.

Итак, радиостанция установлена. Как и куда настраиваться? Вам дают циферки типа С15Ам, которые ни нифига не понятны. Ну или говорят “давай на канал дальнобоев” .. Нутром понимаете, что это одно и тоже, а доказать не можете.

На самом деле ничего сложного. Я тут кратко, интересующиеся могут накопать тонны в интернете. Всякие контролирующие организации выделили кусочки радио-диапазона, где могут бесконтрольно веселиться всякие гражданские люди и куда будут “сливаться” помехи от радиоприборов. Наиболее доступные для нас это 27Мгц и 433Мгц. В первом работают СВ-радиостанции, во втором – LPD и PMR.

И СВ диапазон разделили на 40 каналов. 1й канал оказался на частоте 26.965МГц, а 40й – 27.405МГц

Потом как-то обнаружили свободными еще кусочки рядом. И сделали поддиапазоны от А до F. “Первый диапазон” получил букву С. То, что некоторые частоты в этих диапазонах залазят к воякам, оставили на совесть пользователей. Дескать, мы напишем, что бы не лезли, а там уж сами. Чуете, откуда веет “в нашей станции 400 каналов!” в некоторых рекламах?

Ну и исторически сложилось так, что американские дальнобои общались на 15м канале. Или на частоте 27.135Мгц. С амплитудной модуляцией сигнала (частотную тогда не освоили для портативных раций). Ну и наши привезли сюда это один-к-одному.

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

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

Это я кратко описал радиосвязь на СВ. Есть еще “горох”, он же LPD или PMR. Наверняка вы видели в магазинах в пластиковых блистерах упаковки из двух радиостанций – вот это они. Основное отличие от СВ – они отлично работают там, где можно провести прямую линию между абонентами (в “прямой видимости”). Горы, леса, поля – это их стихия. На 30 километров получить связь можно только в горах, да и то с помощью направленной антенны.

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

Основной минус: каналы LPD и PMR не совпадают. Вообще. Поэтому радиостанции с одними буковками не услышат других.

Основной плюс: размеры, количество каналов и многообразие оборудования.

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

Лично у меня получился следующий комплект:

  1. Yaetsu-VX6R – полупрофессиональная радиостанция. Может слушать диапазон до 1ГГц, и передавать где-то от 144Мгц. Бралась изначально для слушанья переговоров пилотов самолетов, а затем обнаружились другие ее способности типа автосканирования диапазона и прочего. У более современных возможностей еще больше.
  2. Alan-42 с маленькой магниткой. Бралась исключительно для канала дальнобоев на трассе. Сейчас может работать “штурманской”, резервной или для соседнего канала.
  3. megajet-550 c большой магниткой. Магнитка из-за того, что я долго не мог придумать, что же и как мне на крыше размещать.
  4. Пара комплектов “гороха”. Дать знакомым без раций, и для прочих целей типа “что бы не кричать в лесу, когда грибы собираем”.

Данный комплект позволяет полностью закрыть все необходимые потребности в радиосвязи на покатушках, трассе и дома.

Не будьте “глухими”!

 

Рассказки почти начинающего джипера – 1

Предисловие

Почему почти начинающего? Потому что хоть у меня и нет громадного опыта с сотнями тысяч километров за плечами, зато я прекрасно помню свои мучения и вопросы класса “почему?”.

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

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

И вот я решил все эти “помню” перенести в электронный вид, дабы хоть чуть-чуть облегчить жизнь идущим за мной. Ну и поэтому же мои тексты по старой традиции называются “рассказками” или короткими историями из моей личной жизни, приправленные моим же личным опытом. Короче, IMHO.

Как все обычно начинается

Итак, вы внезапно ощутили жжение в пятой точке и решили, что город стал вам тесен. Душа захотела природы, желательно дикой. Выбрав момент, вы садитесь за руль своей машины и пожжужав двигателем через некоторое время приезжаете на дачу, в загородный дом или просто на первую попавшуюся поляну.

И чувствуете, что этого просто мало. Душа просит большего и вы отъезжаете еще дальше. Вам становится гораздо лучше. В следующий раз отъезжаете еще дальше и даже при некотором везении возвращаетесь назад сами, без помощи окружающих. А при невезении вас с шутками вытаскивает трактор или какой-нибудь лохматый и увешанный наклейками внедорожник. И что самое важное, вам это нравится и нет никаких позывов к “какой черт меня суда дернул?”

Все, вас вштырило. Или накрыло. В общем, вы попали.

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

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

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

Шашлыкинг” или “Сосисинг” – выезд на природу поесть шашлыка, пожарить сосисок, по возможности нажраться и отравить жизнь окружающим громкой музыкой и разбросанным мусором. Рекламщики иногда эти действа назвают “активным отдыхом”. Доступно всем слоям населения, имеющим автомобиль. Обычно употребляется в уничижительной или оскорбительной форме, ибо однозначно указывает на никчемность происходящего.  Изредка употребляется самостоятельно про свои поездки, если онные не представляли какого-либо интереса для окружающих.

Асфальт” – дорога, которая проезжается на машине без применения внедорожного арсенала (блокировки, понижайки, лебедки и так далее). Не забывайте, что “асфальт” для машин разного уровня подготовки разный.

Блокировка” – штука, блокирующая какой-либо (передний, задний, межосевой) дифференциал. В итоге оба колеса/обе оси вращаются с одинаковой скоростью.

Понижайка” – понижающая передача в раздаточной коробке автомобиля. Позволяет путем проигрыша в максимальной скорости выиграть в крутящем моменте на колесах.

Говна”, “говнилин” – грязь, песок, торф и прочие субстанции, мешающие проехать.

Копаться в говнах” – использовать что-либо из внедорожного арсенала для преодоления “говен”.

Люстра” – набор фар дальнего, ближнего и рабочего света, установленных на багажнике автомобиля. В основном используется для нарезания понтов, ибо в реальной жизни нужен только рабочий свет.

Большая красная палка” – реечный домкрат HiJack или HiLift. Считается одним из необходимых аттрибутов джипера. В реальности использутся хорошо есть раз в году, да и то в гараже.

Заджечился” – использовал HiJack по назначению.

Муды” – покрышки с протектором класса Mud Terrain, то есть для движения по грязи/снегу. В обычных условиях они шумнее обычных и “ходят” меньше.

Гудрич”, “борис федорович” – Покрышки от фирмы BF Goodrich

Белки” – Покрышки Ф-Бел от тракторной техники. Отличаются очень развитым протектором, что позволяет им очень хорошо “рыть”

Стравился”, “сдулся” – снизил давление в шинах для увеличения пятна контакта

Поймал диагоналку” – при переезде препятствия автомобиль встал так, что колеса, расположенные по диагонали (например, переднее левое и заднее правое) потеряли контакт с поверхностью. В этом случае автомобиль, не оборудованный блокировками, не может самостоятельно двигаться.

Залебедился” – использовал лебедку. К примеру, можно лебедиться за дерево, другую машину или просто за якорь.

Стропа”, “динамка” – динамическая стропа. Применяется при вытаскивании одной машиной другой. Грубо говоря, большая и крепкая “резинка”.

Сел на брюхо” – машина опирается на поверхность не покрышками, а днищем или мостами.

Замылились” – “говна” настолько гнусные, что самоочищающей способности покрышек не хватает и они превращаются в “слики”.

Зарылся”, “закопался” – при неправильной работе педалью газа, “муды” просто выбрасывают из-под себя “говна”. Таким образом, машина движется не вперед, а вниз. Обычно после этого машина “садится на брюхо”

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

Геокешинг” – развлечение, когда одни прячут на природе что-нибудь ненужное, а другие по оставленным описаниям ищут это что-нибудь ненужное. В случае удачи меняют одно на другое и радуются. В реальности совершенно шикарное занятие, позволяющее узнать и увидеть много нового. Геокешеры собираются на сайте geocaching.ru

Покатушка” – общее название для короткого выезда. Съездить взять геокешерскую точку, скататься посмотреть что-нибудь новое или просто устроить встречу. Обычно подразумевает хоть небольшие “говна” и продолжительность 2-3 дня максимум.

Трофи” – берутся машины и роняются в “говна”. Кто быстрее доедет до всех точек, сфотографируется с ними и вернется назад – тот победил.

Ралли“ – берутся машины и разгоняется по бездорожью. Кто быстрее приехал – тот победил.

Орг” – организатор соревнования, покатушки или выезда.

Трамвай” – колея настолько глубокая, что выбраться из нее нет возможности. В итоге машина просто едет туда, куда ведет колея.

Гонки на лебедках” – когда в трофи много машин застревает на одном и том же участке, то народ соревнуется скоростью работы лебедок. У кого быстрее сматывает лебедка, тот быстрее выедет на неразбитое место и таким образом получит преимущество.

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

Силовик” – силовой бампер. Используется чудаками на букву “м” для понторезов и валки мелких деревьев. В реальности ставится из-за того, что стандартные бампера не обладают достаточной прочностью, что бы поднять за них машину, не дают поставить лебедку и попросту рассыпаются от контакта с окружающей природой.

Гламур” – машина, имеющая внешние признаки внедорожника, но в реальности абсолютно беспомощная.

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

Обвес” – общее название видимых снаружи внедорожных примочек и прибамбасов.

Кубок водокачки” – общее название соревнований, выездов и прочих покатушек, с которых привозят наклейки и иногда даже призы. Обычно результаты подобного не интересны никому, кроме участников действа.

Пузатерка” – обычная машина для города.

Не едет” – собирательный термин, указывающий на то, что ездовые характеристики не удовлетворяют рассказывающего. “Не ехать” могут покрышки, машины и что угодно.

С чего начать?

Начитавшись журналов, вы решаете выехать. Но куда и как, у вас пока совершенно нет понимания. Плюс в голове крутится что-либо типа “этим можно заниматься только на …”, хотя в реальности любимое занятие доступно любому автомобилисту. Я например, на “Ситроене С5” как-то весело прокатился за “Дефендерами”. Или обычно нет никаких проблем поучаствовать штурманом в трофи-рейде, приехав в лагерь на “пузатерке”. Или хотя бы зрителем.

Для начала пробегитесь по своим любимым автомобильным форумам. Наверняка там есть подразделы типа “наши выезды”. Пообщайтесь с организаторами, выясните условия и если они походят к вам, то вперед! Если не подходят, то попроситесь “овощем” к кому-нибудь. Обычно внедорожный народ при своей внешней грубости очень душевный и отзывчивый народ (вдали от цивилизации по-другому нельзя). Как говорится, “джипер – это прежде всего ранимая и утонченная натура, а уж потом грязная свинья”.

Если уже совсем никак не получается, то есть “рейды выходного дня”. За деньги вас и вашу машину проведут по заранее разведанной трассе, познакомят с какой-либо достопримечательностью и может быть даже накормят.

Но если вам и этого мало, то есть сайт http://www.calendar4x4.ru, где указываются все более-менее значимые события во внедорожном мире.

Пару-тройку раз съездите, поймете что именно вам надо и тогда уже сможете более адекватно оценивать свои возможности, ибо

“Автоспорт – это очень дорогое занятие”. 

И это правда. Я, пока не нашел необходимое мне сочетание “проходимость-скорость-удобство”, вбубухал в машину три ее стоимости. ТРИ! Я ставил что-то, снимал ненужное, ломал и чинил, затем заменял на более нужное … В общем, набирался опыта.

Конечно, все это в принципе можно прочесть в бортовых журналах, форумах и прочих чатах, но “если бы молодость знала, а старость умела” …

День рождения …

Поздравляем, счастья желаем …

или

Хеппи бездей тую ..

Знакомо? Вот и у меня сегодня тот день, когда я оказываюсь один по сторону баррикад, воздвигнутых из тел сотрудников, согнанных принудительно-добровольно в целях “давайте поздравим его с днем рождения все вместе”!

Хоть убейте, но я абсолютно не верю в искренность подобных затей. Кому-то это делать полагается по долгу службы, кто-то делает это в расчете на халявное угощение, кто-то из-за ложного стыда “все так делают, чем я хуже”, кто-то из-за страха перед начальством (особенно если именно его поздравляют) и так далее и тому подобное.

И вот стоит такая толпа, слушает высосанные из пальца дифирамбы, в нужных местах подхватывает слоганы, улыбается или хлопает. А через 5 минут рассасывается по офису, забывая как про сам факт сбора, так и про все остальное. В особо удачных для толпы случаях рассасывания не происходит, а сразу садяться чего-нибудь поедать.

Парралельно сыпятся смски и емайлы от роботов, где прописаны шаблоны, высранные мозговыми потугами компанейских пиарщиков … Стоит зайти в любую соцсеть, как на тебя накидывается толпа, которым сайт повесил напротив твоего ника звездочку, тортик или еще какую-нибудь херню …

Ну и накой мне такое? Вот и я, поговорив с родственниками, тупо выключаю телефон и игнорирую поздравления. Кому действительно надо или я реально дорог/нужен/важен, найдут способ связаться или вспомнят завтра.

В общем, если вы внезапно решили поздравить кого-либо с днем рождения, особенно не знакомого близко вам, то подумайте, а надо ли?

Сколько нужно интернета домой?

Прочитал на хабре новость о том, что жителям Токио и ближайших префектур стало доступно 2Гбит домой. GPON и прочие страшные слова, но все равно стало завидно.

А потом взял интерес: а сколько реально мне нужно интернета, что бы не чувствовать себя .. ущемленным что ли … Вот сейчас я не ущемленный (80Мб/с днем и 100Мб/с ночью) да и раньше (40/20) тоже не ощущал себя обделенным.

Провайдер у меня билайн с 2009 года, заходим на личную страничку, интернет-статистика, пара (ну хорошо, несколько десятков) пассов руками и у меня табличка, в которой показано потребление и отдача трафика с мая 2009 года. Еще пара пассов и получаем ужасный график

Screen Shot 2013-04-16 at 18.42.52

В легенде используется год{in-скачано,out-залито}. По вертикали – гигабайты, по горизонтали – месяцы.

В принципе, уже по этому страшному графику можно увидеть, что в 2011-2012 году я активно что-то заливал в сеть, иногда в диких  количествах. В принципе, рейтинг на rutracker не дает соврать – мне там ну очень далеко до блокировки …

А теперь отфильтрую заливку и оставлю чистое скачивание

Screen Shot 2013-04-16 at 18.48.46

Уже красивее и можно повыделываться со всякими умными словами. Но мне не надо, в принципе и так видно, что 95% потребляемого трафика укладывается в 300 гигабайт в месяц.

Ну хорошо, если убрать торренты (смотрим на 13in), то получим 150 гигабайт в месяц. То есть 5-10 гигабайт в день.

Если честно, то я нахожусь в полном удивлении: аналогичное исследование, но времен 2000-2001 года, давало мне цифры 30-35 мегабайт в день.

Но какие скорости нужны для этих гигабайтов в день? Понятно, что чем больше скорость, тем больше я скачаю …

Если принять, что я качаю равномерно, то хватит скорости 10-15 килобайт в секунду. Но вообще-то, я качаю только днем, значит уже 30-40 надо. А если учесть, что день у меня не 12 часов и активно я пользую интернет скажем часа 3-4 в сутки, то 180-200 надо. Если обратите внимание, я увеличивал скорость непропорционально, ибо всякие потери и прочие штуки …

То есть скорости в 200 килобайт в секунду мне теоретически должно хватить. Это всего-навсего 2 мегабита в секунду. То есть в принципе уже даже мобильники такое выдают …

Но не хватает. Как ни странно, основная причина – в низких скоростях у остальных и непостоянстве у меня. Потому что стоит мне зайти на тот же youtube, как он начинает кешировать в расчете на то, что “сейчас-то может у тебя и 2 мегабита, а через 15 секунд скорость может упасть и до 10 килобит, а ты будешь жаловаться”. Такова природа интернета …

В итоге вроде если замахнуться и за глаза взять 10 мегабит, то должно наступить счастье. А я зачем-то взял 80 … почему?

Давайте глянем на потребителей этого трафика.

Сотовый телефон iPhone 4S. По speedtest он умеет переваривать трафик в 20Мбит/с. В реальности, когда надо что-то с этим трафиком делать – 2-3Мбит максимум.

Ноутбук. Оба сидят по WiFi, поэтому скорости выше 30-40Мбит не поднимутся никогда, несмотря на всякие 802.11an, разделение каналов и прочие многоантенные заморочки.

Стационарный комп. Способен переварить очень тяжелый трафик в 150-160Мбит. Но 99% на нем или смотрят фильмы в онлайне или играют в онлайновые игрушки. В общем, 10 хватит за глаза.

Итого, когда вся семья садится и утыкается в свои коробочки, то для комфортного утыкания, а не “чего-то оно не работает” надо максимум всё что есть, а в среднем 30-40 мегабит.

Вывод? Мне бы хватило и 60 мегабит, но у билайна была акция, и поэтому у меня 80. Но теоретически хватит 10 🙂

 

Мониторинг – великая вещь!

chart-1

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

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

Не так давно в арсенал моих программ попала Runtastic HeartRate. У нее одна-единственная функция – измерять пульс или по-научному частоту сердечных сокращений (ЧСС).

Screen Shot 2013-04-03 at 12.08.40

Есть для всех устройств, для работы требует только одного: что бы камера на смартфоне располагалась рядом со “вспышкой”/фонариком. Так, что бы можно было закрыть одним пальцем.

Принцип работы прост: яркий светодиод от “вспышки” светит в палец, а кровоток в такт пульсу меняет поток света, попадающий в камеру смартфона. Остается только это зафиксировать и подсчитать.

Но просто так показывать не интересно. Во-первых, HeartRate заинтегрирована с основным порталом runtastic, куда сливает информацию и там позволяет рисовать всякие графики. Это мелочь, так много программ умеют.

А во-вторых, у HeartRate есть полезная функция ежедневного “теребления” пользователя о необходимости померить пульс. С учетом того, что сам процесс измерения занимает 15-20 секунд, это совершено не создает неудобств. Главное, что бы измерения происходили примерно в одном и тоже время в одном и том же состоянии.

И наконец, результатом этого стало  изобретение велосипеда: теперь когда я болею, я получаю не только субъективные подтверждения болезни, но и объективные. Если кому интересно, то по графику можете прикинуть, когда за последние два месяца моей тушке было плохо (Hint: ЧСС больше 90).

Ну и вдруг в случае чего, для врача однозначно не будет лишним такой график.

Теперь бы найти точно такое же ненапряжное решение для измерения давления …

 

Как я живу без Google Reader

.. и даже не подозреваю, что я теряю.

Скажу честно, я до сих в некотором удивлении, наблюдая в сети форменную истерику о невозможности жить без Google Reader. Расскажу, как я сам живу. И вроде даже комфортно.

К сожалению, это доступно только OS X пользователям. Ибо в основе всего лежит iCloud, OS X и Safari. Это одна из немногих штук, которые у Apple получились не просто хорошо, а так, что ими можно пользоваться. Хотя наверняка можно аналогичного собрать их дополнений к другим браузерам.

Взглянем на левую верхнюю панель моего бразуера.

ыфафкш

 

Для начала первая иконка во втором ряду. Reading List. Сохраняет страницы, которые вы решили прочитать попозже. Подчеркну, safari сохраняет целиком страницы, а не ссылки на них. То есть их можно будет читать без доступа к сети и так далее. Почти как у evernote с его web clipper, только в браузере.

Затем иконка облачка.

safari iCloud

 

Эта штука показывает открытые табы на всех устройствах, зацепленных под одной учеткой в iCloud. Минус только в том, что куки (а значит всякие авторизации обычно) не перемещаются. И положение на странице.

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

Это так сказать, инструменты одноразового пользования. В смысле я их использую по необходимости, а не регулярно.

И наконец, закладки. Основной функционал в сафари абсолютно точно такой же, как и у всех браузеров. Нажал Cmd-D, урл попал в закладки. Открыл редактор закладок (он в виде книжечки открытой), рассовал закладки куда и как надо. Но есть и одно большое преимущество. Поглядите на “Утренняя почта”

tabs

Казалось бы, такое есть во всех браузерах. Но обратите внимание на последнюю строку “Open in Tabs”. При ее выборе браузер закрывает все открытые вкладки и открывает новые с адресами из закладки.

В итоге “чтение новостей” у меня происходит так:

– Пришел, открыл все вкладки в текущем окне. Ну или если во вкладках что-то нужное осталось со вчера, Cmd-N и в новом окне.

– Читаем сайты по порядку. Ссылки на интересное открываются в новых табах того же окна.

– Если сайт не обновлялся (чем грешил Бобук в последнее время) – Cmd-W и вкладка закрыта. Если уже надоедает необновление – пара жестов на тачпаде и сайт вынесен в другую категорию.

– Переходим следующей вкладке, закрывая текущую тем же Cmd-W. Если интересно – читаем сразу. Интересно и надо бы перечитать – заносим в Reader List. Совсем интересный сайт – в закладки.

– Вкладки кончились и браузер закрылся? Значит все, новости тоже кончились и можно начинать работать.

Изредка по выходным я делаю ревизию закладок и рассовываю их по группам. Сейчас у меня их три:

– “утренняя почта”. Сайты которые я открываю каждое утро.

– “Обычное”. Сайты, которые я открываю под настроение или использую в текущей работе.

– Остальное. Так, мусорка с кучей когда-то нужных сайтов. Регулярно чистится.

Ну и зачем мне какой-то агрегатор RSS?

Видео в машину

Довольно долгое время я ездил без регистратора. Попав в свою первую аварию, потом я очень долго жалел, что не было съемки “как это было”. Во-первых, для восстановления “что я сделал не так”, а во-вторых, просто что бы было.

Как только программы для смартфонов подтянулись, я тут же купил держалку для смартфона и начал использовать свой Samsung Galaxy S. Но сразу же возникло несколько неприятных моментов:

– Смартфон летом попросту перегревался. Выдавал сообщение о недопустимой температуре аккумулятора и начинал выключаться.

– Постоянно приходилось его ставить-снимать и включать-выключать. Муторно.

– И в самые волнующие моменты он оказывался занят другим: карту показывал или работал телефоном.

– И наконец, его “держалка” была … не жесткой и все вибрации машины еще больше увеличивались.

Но все, равно, он работал. В качестве примера вот вам видео (это и следующее просто ссылки на youtube). Обратите внимание на вторую половину: как сильно трясет смартфон относительно кромки капота.

Потом как-то я стал ездить редко, да и опять же, все моменты происходили как раз в тот момент, когда смартфон был занят.

Но недавно мне опять был подан знак, что пора все-таки обзавестись нормальным видеорегистратором: прямо передо мной на дорогу вывалилась без огней пузатерка. Он дескать с первого раза заехать на стоянку не смог …

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

– очень жесткое крепление. Никаких “шаровых” опор и прочих извращений. Ибо они потом разболтаются и будут добавлять еще больше расколбаса в картинку.

– Видеорегистратор должен быть выполнен единым блоком. Никаких поворотных камер и прочего. Причины такие же, как и в предидущем пункте.

– Честные FullHD. Люблю красоту, даже если в 99% она не нужна.

– Наличие GPS. Что бы скорость и координаты записывал. Я не гоняю, поэтому мне стесняться нечего.

Быстрый чес по магазину привел меня к видеорегистратору sho-me hd-150G. Чистый китай, поэтому описание не соответствует возможностям, а инструкция менюшке. Но это относительно честный китай, поэтому свою основную функцию он выполняет.

Купил его, в добавок карточку microSD на 16Гб, собрал все это в одну кучу и прикрепил в машине. Сразу обнаружился маленький недостаток: нет даже слабого поворота влево-вправо. А у меня стекло изогнутое. Вышел из положения просто: чуть его наклонил, что бы он захватывал углы. Еще один недостаток: родной кабель зарядки/питания цепляется за барашек крепления. Мелочь, но пусть поработает “антиоткручивателем”.

И пошел опять работу работать. За это время аккумулятор внутри успешно потерял весь заряд и видеорегистратор сбросился на установки по умолчанию, так что видео будет с ними.

Итак, поездка ночью домой. Как видно, GPS у него хреновый. Засвет от фар машин есть, но контуры можно разобрать даже когда все светят “в лоб”. Номера читаются только если подъехать близко. В общем, на троечку с плюсом (ибо вытянуть кадр при необходимости можно).

Теперь с дневного света в тоннель со светом Сразу видно, что автоматика не справляется и на картинке появились шумы. Но опять же, видно все. Номера читаются все, но очень плохо.

И совсем днем. Все видно, все читается. Но это и не удивительно: практически идеальные условия.

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

Как видно из вышеприведенных видео, в принципе регистратор оправдывает возложенные на него обязанности. Снимает, иногда даже хорошо и иногда даже умеет скорость записывать.

И последнее: разрыв между кусками видео на мicroSD clаss 4. Тут можно и скриншотик показать:

Screen Shot 2013-02-19 at 12.52.11

 

Слева кусок последнего кадра предидущего видеофайла, справа – кусок первого следующего. На GPS стоит 26км/ч. Встречный поток идет около 60км/ч – там дальше радар стоит.

В общем, субъективно задержка в районе 0,3-0,5 секунд. На смартфоне я меньше 1-1,5 секунды не смог добиться.

И наконец, все это я купил за 4 тысячи рублей.

Облачные мифы: перезагрузка

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

Итак, будем опять сравнивать обычный сервер: 16 гигов памяти, работает 100%. Рассчитывать будем на 3 года, ведь мы не просто так пришли на рынок …

Для амазона это m3.extralarge. Идем на страничку с ценами

На 3х годичном периоде мы должны будем заплатить $2640 сразу для получения стоимости $0.052 за час работы. Считаем сколько нам придеться заплатить:

365 дней * 24 часа * $0.115 * 3 года = $3022 + $2640 предоплата = $5662 за три года.

Для сравнения, подсчитаем, сколько мы потратим на простой on-demand:

365 дней * 24 часа * $0.500 * 3 года = $13140

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

Для начала сравним с аналогичными тазиками от hetzner EX4

43 евро за установку + 43 евро в месяц * 12 месяцев * 3 года = 1591 евро * 1.34 курс = $2131

Берем аналогичный сервер от softlayer – $499 в месяц. Или $17964 за три года.

Rackspace даже смотреть не буду, там и так цены выше небес …

iWeb: $369 в месяц или $13284 за три года. Почти как on-demand у амазона!

Согласитесь, цифры говорят сами за себя. Это мы считали для тех серверов, которые должны быть доступны всегда. Но ведь есть сервера, которые должны быть доступны только в рабочее время. Скажем, сервер 1C. Кто-нибудь видел работающую ночью бухгалтерию?

Считаем:

У амазона это medium utilization сервера

365 дней * 24 часа * $0.167 * 3 года * 50% работы = $2154 + $2200 предоплата = $4354 за три года. А если заплатить как за heavy?

365 дней * 24 часа * $0.115 * 3 года * 50% работы = $1511 + $2640 предоплата = $4151 за три года.

И тут можно $200 на пиво сэкономить … Сравнивать с обычными серверами тут бессмысленно – выключай/не выключай их – сумма все равно будет одинаковой …

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

365 дней * 24 часа * $0.5 * 3 года * 10% работы = $1314

light:

365 дней * 24 часа * $0.272 * 3 года * 10% работы = $714 + $935 предоплаты = $1649

medium:

365 дней * 24 часа * $0.167 * 3 года * 10% работы = $438 + $2200 предоплата = $2638

heavy:

365 дней * 24 часа * $0.115 * 3 года * 10% работы = $302 + $2640 предоплата = $2942 за три года.

Как видим, в этом случае дешевле просто заплатить по on-demand плану.

Что там у нас осталось против облаков? Низкая пропускная способность? И тут меня ткнули носом в то, что у амазона появились машинки, у которых есть гарантированные I/O. Есть даже те, у которых диски на ssd размещены. Да, они дороже, но ведь и в обычной жизни такие машинки нужны далеко не всегда …

Итак, что у нас в резюме? Всё тоже самое: надо считать и считать правильно.

На данный момент с облаком от амазона могут конкурировать только бюджетные провайдеры типа того же hetzner. Остальные в 2-3 раза (а в особо исключительных случаях и в 10 раз) дороже.

Где же всё-таки засада? А засады нет. Так, мелкие заподлянки. Скажем, если вы организуете сервер закачек. У обычных провайдеров обычно планы в духе “до 100Гб трафика в месяц на сервер бесплатно”. У амазона – за 100Гб заплатите 99 * $0.12 = $11.88 сверху. Надо много дисков? $0.10 за гигабайт в месяц (или $102 за терабайт  в месяц). Плюс столько же за миллион операций с ними …

Но есть и куда более сильные заподлянки. Это сервисы амазона. Нет, они шикарны, а в некоторых местах даже идеальны. Но проблема в том, что заподлянки с этими сервисами нигде не описаны …

Скажем, если вы пожелаете разместить свой почтовый сервер у амазона, то тут же столкнетесь с тем, что весь адресный диапазон амазона сидит в перманентных блок-листах против спамеров. Вытаскивать оттуда адреса можно, но дико муторно … Зато у амазона есть сервис SES.  $0.10 за тысячу прошедших через него сообщений. Плюс еще немного за трафик … Поинтересуйтесь в логах своего почтового сервера, сколько он сообщений наружу отправляет. У меня получилось примерно 200 на аккаунт в месяц.

В общем, копеечка к копеечке и амазону хорошо. А вам – калькулятор в руки и считать 🙂

На этой ноте позвольте и завершить свой текст.

Облачные мифы

Что-то в моем окружении стало все больше и больше слов про то, какие “облачные технологии” крутые, какие “облака” дешевые и как станет всем хорошо, как только вы переведете свои сервера в “облака”.

Для начала немного о том, что же такое облака.

Давным-давно VMWare выпустила свой первый продукт для виртуализации одного компьютера на другом. Вы запускали программу, а в ее окошке – еще одну операционную систему. А если ресурсов у компьютера хватало, то и две. И при этом все системы могли быть разными.

Данный подход на “ура” восприняли разработчики, администраторы и прочий компьютерный люд. Ведь теперь можно было без боязни нарушить что-то в работе поразбираться с новыми продуктами. Что-то пошло не так – восстанавливаем предидущий образ и продолжаем работу с прерванной точки.

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

Ну дальше начался взрывной рост виртуализированных систем всех возможных направлений. Xen, VirtualBox, Parallels на слуху у всех, поэтому повторяться не буду.

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

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

Все радовались возросшим возможностям, пока какому-то гениальному идиоту не пришла в голову идея, как еще можно заработать на этом. Придумали название “облачные вычисления”, дескать вы отдаете свое в некое безразмерное облако, а там выделяется сколько надо ресурсов … В общем, коммунизм, только в области ИТ.

И тут, как обычно, пришли маркетологи и совершенно не разбираясь в том, что они маркетят, начали обвешивать лозунгами всё, до чего они могут дотянуться. Я встречал утверждения в духе “теперь 99,999% надежности не предел”, “сервера сами адаптируются под нагрузку и вы платите только за то, что реально надо”, “сервера в облаке стоят гораздо дешевле” и прочий бред.

Почему бред? Ну давайте буду разбирать по пунктам. Начну с последнего. “Облачные сервера дешевле”. Для примера могу дать документ по TCO от самого Амазона:

Там одна из первых картинок:

AWS Price

 

Казалось бы, ура! Даже в самом плохом случае выигрыш аж 68%! Срочно надо заводить аккаунт и платить деньги.

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

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

Итак, почта. 200 ящиков, кучка списков рассылки и так далее. Никаких лимитов не ставится принципиально. Сначала диски:

root@mail:~# LANG=C df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 7.9G 3.4G 4.2G 45% /
tmpfs 2.0G 0 2.0G 0% /lib/init/rw
udev 2.0G 128K 2.0G 1% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
/dev/vdb2 194G 182G 2.4G 99% /opt

Как видим, 8Гб под систему и 200Гб под почту. Теперь память.

root@mail:~# free -go
total used free shared buffers cached
Mem: 3 3 0 0 0 0
Swap: 3 1 2

4Гб и еще один в свопе.

Про процы – там 4 ядра от ксеончика на 2,2ГГц откушено.

В общем-то ничего такого.

Теперь идем на амазоновский калькулятор и считаем, во сколько нам обойдется такая виртуалка. Немного подыграем амазону и выберем m1.medium:

M1 Medium Instance

3.75 GiB memory
2 EC2 Compute Unit (1 virtual core with 2 EC2 Compute Unit)
410 GB instance storage
32-bit or 64-bit platform
I/O Performance: Moderate
EBS-Optimized Available: No
API name: m1.medium

Как видим, почти один-в-один. Считаем:

AWSMedium

 

Как видим, амазон предположил, что при данных условиях нам наш почтовый сервер обойдется в 300 долларов за месяц. Э-э-э-э …

Ну у нас вообще-то не одна машина, а много (поглядел – порядка десятка крутятся на хосте) … Но все равно, давайте попробуем сравнить.

С демосом (закроем глаза на то, что там больше диска, процессоров и памяти, просто меньше не было).

Demos

Ну … можем сказать, что примерно тоже самое. А теперь возьмем самого дорогого буржуйского провайдера – RackSpace.

Rackspace

Ура! Цена-то офигеть какая! Ну и пофиг, что опять проца, памяти и диска больше. Но цифры-то практически приближаются к тем, о которых говорит амазон!

Сделаем шаг в сторону iWeb.

Screen Shot 2013-02-06 at 13.14.28

Упс … Как-то не вяжется, да? 100 баксов супротив 300 … Но это для дохлых машинок, они изначально дороже в эксплуатации …

Ладно, давайте поглядим, сколько будет стоить машинка с теми же характеристиками, которые используются хост-машиной. 2 ксеона, 16Гб памяти, 1Тб в рейде …

Амазоновский m1.extralarge – $654 в месяц

Демос: 11677 рублей в месяц.

RackSpace: $1089 в месяц

iWeb: $559 в месяц

И что бы закопать, Hetzner EX-4 – 49 евро в месяц

При этом необходимо учитывать, что у виртуальных машин амазона есть два больших недостатка: Во-первых, в них невозможно сделать никакой другой виртуализации, кроме пара-. То есть максимум OpenVZ. И во-вторых, скорость работы с амазоновскими дисками на порядок (тестировал с год назад) меньше работы с локальными в серверах.

Итак, время подводить итоги. Во всех случаях, кроме RackSpace, амазон оказался дороже. И ни о каких “на 68% дешевле” даже речь идти не может.

Почему же так получилось с RackSpace? Просто это хостер так называемого “премиум”-сегмента. Когда я с ними работал, они присылали мне счета на офигенно приятной бумаге и шоколадку на новый год. Конечно, приятно, но я вполне удовлетворюсь счетом в окне почтового клиента, а шоколада за такие цены я смогу купить гораздо больше.

Но ведь не могут же быть люди настолько тупыми, что бы платить больше за меньшее? Да еще и в 2-3 раза больше … Могут, ибо велика сила маркетолухов! Но к счастью такие не все.

“облака” совершенно шикарно перебивают по всем параметрам обычные сервера в одном типе задач: класс “прибежал-посчитал-убежал”. То есть 100% работы сервера совершенно не нужно. Яркие примеры: системы видеоконференций (нужно поговорить – поднял. поговорили – опустил), системы для обсчета чего-либо громоздкого (скажем, спер образ блюрейного диска – включил, задавил в нужные форматы и выключил). Так что в той самой картинке уровень “правдивости” повышается к правой стороне 🙂

Перейдем к следующему лозунгу: “сервера могут размножиться для обработки большого потока обращений и потом лишние выключатся”.

Да, все так: создание нового сервера в амазоне занимает минуты две-три. У самых “быстрых” провайдеров – минут 30 минимум. И у амазона сервер можно создать из заранее созданного образа, а у обычного провайдера придется еще настраивать голуйю операционку …

Где засада? Засада в приложениях. Они как-то крайне фигово относятся к тому, что внезапно где-то появляется еще одна их копия, которая обрабатывает те же данные, что и они. А ведь эта копия практически точно так же может и внезапно пропасть … Почитайте, сколько волос админы вырвали себе из разных мест, когда пытались заставить что-либо работать в кластере …

В итоге опять почти правда – “саморазмножение” серверов удобно использовать, когда поток информации следует в одном направлении: сервера закачек к примеру. Вышел новый релиз, сервера размножились, что бы всех обработать, а потом самоуничтожились. Правда, в связи с развитием торрентов пример несколько натянутый, но тем не менее.

Или небольшой и несложный веб-сайт. Там тоже довольно легко размножить сервера. Но проблема в том, что на небольшие сайты не ходит столько народу, а на больших сайтах такие технологии не нужны ….

Опять провал.

Теперь про надежность. Я открою страшную тайну: сами по себе виртуалки падают точно так же, как и физические сервера. Абсолютно точно так же. И про надежность может идти речь только в области инфраструктуры: числе каналов наружу, числе резервного оборудования и так далее. И тут опять же разницы нет между обычными и “облачными” провайдерами. И я точно получу гораздо большую надежность у тоже же hetzner’а, попросту купив несколько серверов в разных датацентрах …

Вывод? Не ведитесь на модные слова и все новое – это хорошо забытое старое …

Битва двух якодзун

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

У меня давно есть и переодически продлевается лицензия на RealBasic. Да, простой как грабли тот самый бэйсик, который обвешали гуем и сделали кросс-платформенным.

А тут субботний вечер, всякие мысли лезут в голову и одна из них почему-то проколупала мне дырку в черепе “А какова скорость обработки всяких UI элементов?”

Фигня вопрос, устраиваем битву. В одном углу ринга ставим RealBasic, а в другой – QT5. Делаем простую формочку:

Кнопка запуска, прогресс-бар и поле для отображения текста. И пишем очень сложный код:

RB:

  for i as integer =0 to 100
    ProgressBar1.Value=i
    TextArea1.Text=str(i)
    for q as integer =0 to 1000
      dim p as integer =0
      p=p+q*i
      TextArea1.Text=TextArea1.Text+" "+str(p)
    next
  next
  

QT:

   for(int i=0;i<=100;i++)
    {
        ui->progressBar->setValue(i);
        QTextDocument * d;
        d=new QTextDocument(ui->plainTextEdit);
        QPlainTextDocumentLayout *layout = new QPlainTextDocumentLayout(d);
        d->setDocumentLayout(layout);

        d->setPlainText(QString("%1").arg(i));
        ui->plainTextEdit->setDocument(d);

        for(int q=0;q<=1000;q++)
        {
            int p =0;

        p=p+q*i;
        d->setPlainText(d->toPlainText()+" "+QString("%1").arg(p));
        ui->plainTextEdit->setDocument(d);
      }
    }

Результаты меня убили: RB выполнился за 1:20, QT5 на 12 секунд дольше. Плюс RB не вывесило флаг “Application Not Responding” и где-то по середине сумело один раз обновить UI.

PS Я знаю, что код кривой/неоптимальный и там и там.
PSS Пооптимизировал код. При использовании стандартных виджетов результаты еще хуже: RB 8 секунд, QT5 35. Проблема именно в навороченности стандартных виджетов QT: он там судя по всему простой текст в html рендрит, а только потом его уже отображает. Ибо если поставить вместо поля редактирования label, то скорость резко увеличивается. Но тогда нечестно 🙂