Пользователь
0,0
рейтинг
18 ноября 2012 в 20:45

Счетчик скорости вращения колеса белкой из песочницы

Поселилась у меня дома обычная аналоговая белка.
Жила в клетке, жила себе жила, крутила свое колесо. С разной скоростью. С утра, обычно, энергичнее, к вечеру, подустав, помедленнее. И все это время не давал мне покоя один вопрос. А с какой скоростью бежит белка в колесе?
Я долго думал и однажды…
Решил я сделать счетчик скорости вращения колеса.

На фото — прототип. Поэтому не все еще сделано аккуратно.

image

Сорцы, видео и итоговые результаты измерений под катом.


Компоненты.


  1. Arduino Uno.
  2. Экран LKM-1638.
  3. Датчик Холла (подойдет любой).
  4. Плата расширения.
  5. Бонусом — Датчик температуры и влажности DHT11.


В принципе, все, что мне было нужно — микроконтроллер на плате, экран LKM-1638 и простой датчик Холла, но, выбирая все это, взял еще датчик влажности и температуры DHT11, чтобы уж сразу прокачать беличью клетку до «умной»! Заказывал на dx.com.

Все делал сам, своими руками.

Выбрал готовую плату Arduino Uno, чтоб не тратить время на разводку, протравку, программаторы и т.д., а сразу приступать к выполнению задуманного. Экран взял LKM-1638, потому что он яркий, чотке, с большими и понятными цифрами.

Попутно пригодились кнопки на дисплее для вывода статистической информации.

Нажатие соответствующей кнопки выводит:


  1. Общий пробег в километрах.
  2. Максимальная скорость круга.
  3. Среднесуточных пробег в километрах.
  4. Среднюю скорость за круг.
  5. UpTime в сутках
  6. Общее количество оборотов круга
  7. Текущую влажность.
  8. Текущую температуру.


Получилось почти как в Формуле-1. Если бы белок было несколько, можно было бы устроить свой блэкджек тотализатор.

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

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

Логика работы счетчика скорости очень простая.
Датчик Холла прикреплен к клетке в точке, наиболее приближенной к колесу. На колесе стоит маленький, но очень сильный неодимовый магнит, который я вытащил из головки старого DVD -привода.
Когда колесо вращается, с каждым целым его оборотом магнит на короткое время изменяет магнитное поле в радиусе измерения датчика Холла, меняя в последнем состояние с 1 на 0. При обратном расположении датчика, значение бы менялось с 0 на 1 (что, вероятно, более правильно), но тогда датчик хуже бы держался на клетке.
Разница во времени между двумя появлениями магнита в зоне действия датчика признается за целый круг. Дальше, зная внутреннюю длину окружности колеса, можно легко рассчитать скорость круга и вывести ее на дисплей, что я и сделал.
Здесь необходимо отметить, что у такого способа измерения есть нюансы:
  1. Считается только полный оборот колеса. Если белка прокрутила, к примеру, 0.9 оборота и выскочила из него, то этот оборот не учитывается вообще. Или если она провернула колесо на 1.9, 2.9, 3.9 ...n.9 оборотов и так повторила много раз в процессе тестирования устройства, то набегает большая погрешность в вычислении общего пробега, и скорость этих неполных кругов не учитывается в расчете средней скорости.
  2. Когда белка выпрыгивает из еще вращающегося колеса в сторону, противоположную вращению, то противоходом, если магнит в это время только что прошел мимо датчика, магнит проходит мимо датчика еще раз в другую сторону, ошибочно фиксируя целый полный оборот колеса.

Погрешности измерений в этих случаях можно минимизировать, увеличив количество датчиков, к примеру, до 4 и расположив
их по разные стороны круга (через ?/2 радиана или 90 градусов). Тогда можно учитывать не только каждую четверть оборота, что определенно повысит точность измерений, но и знать направление вращения колеса (Т. е. куда белка бежит — домой или из дома к соседке).

Текущую скорость колеса выводил в режиме реального времени на дисплей в километрах/час.

Далее — сам код. Замечу, что код вполне рабочий, но версия не окончательная. По наличии времени, буду его еще оптимизировать.

Весь код
/*
скетч для подсчета оборотов колеса
и вывода значений на 8-ми цифровой экран
плюс вывода текущей температуры и влажности
релиз
*/

/************** Для цифрового датчика DHT11 ****************/
#define dht_dpin A2

byte bGlobalErr;

byte dht_dat[5];
/************** Конец для цифрового датчика DHT11 **********/

/******* переменные для цифрового мдуля*****************/

//библиотека для 8-сегментного цифрового модуля
#include «TM1638.h»
// определеям пины в модуле data pin 5, clock pin 4 and strobe pin 6
TM1638 module(5, 4, 6);
#define Red TM1638_COLOR_RED
#define Green TM1638_COLOR_GREEN
#define Red_green TM1638_COLOR_GREEN + TM1638_COLOR_RED

/************конец переменных для модуля***************/

/********* переменные для датчика Холла *******************/

//длина окружности колеса в метрах (необходимо уточнить)
static float One_round = 0.91;

//определяем порт для подключения датчика Холла
#define Hall_port 2
#define Max_led_light_speed 8
//интервал 10 секунд, если больше колесо признано только остановившимся,
//если меньше, то считается, что оно крутицца
#define Wait_interval 10000
//интервал после которого выключается экран
#define Do_sleeping_interval 60000
//пауза в опросах датчика в обычном режиме
#define Delay_in_work 5
//пауза в опросах датчика в спящем режиме
#define Delay_in_sleep 50

//счетчик количества оборотов колеса
unsigned long Round_counter = 0;
//здесь храним предыдущее время для подсчета скорости
unsigned long Prev_time = 0;
//здесь храним предыдущее время для постоянного мониторинга
unsigned long Prev_time_mon = 0;
//здесь данные для мониторинга пауз для обнуления и выключения экрана и т.д
unsigned long time_span_mon = 0;
//предыдущее значение датчика
byte PrevValue = 1;
//текущая скорость вращения колеса cм/c
double Curr_speed = 0;
//максимальная скорость вращения колеса м/c
double Max_speed = 0;
//общий пробег в метрах для подсчета по нажатиям кнопок
double Total_run = 0;
//скорости всех кругов сюда кладем для подсчета средней
double All_speeds = 0;
//сколько прошло дней
double Day_passed = 0;
//переменная для хранения состояния системы
//0- система в режиме экономии энергии и ожидания — колесо давно не крутицца — экран выключен
//1- колесо только что перестало крутицца
//2- колесо крутицца
byte Sys_status = 0;

/***************конец переменныъх для Холла******************/

void setup() {

Serial.begin(9600);
InitDHT();//инициализиреум датчик DHT11
Serial.println(«Run!»);

//включаем дисплей, выводя на него 0
module.setDisplayToString(«0.», 0, 7);
delay(1000);

}

void loop() {

if(Sys_status == 0)
{
//если спящий режим то реже опрашиваем датчик
delay(Delay_in_sleep);
}
else
{
//если рабочий режим то чаще опрашиваем датчик
delay(Delay_in_work);
}
/************** начало кнопок ****************************************/

//слушаем кнопки
byte keys = module.getButtons();

//если нажата кнопка и время больше таймаута то включаем диспей
if(keys!=0 && Sys_status ==0)
{
module.setupDisplay(true, 7);
}

switch (keys){
//если нажата крайняя левая
case 0b00000001:

//мигаем соот-щим диодом остальные гасим
module.setLEDs(0);
module.setLED(Red, 0);
module.clearDisplay();
//выводим на дисплей общий пробег в километрах
Total_run = Round_counter * (double)One_round / 1000.00;

DoubleToDisp(Total_run);
//module.setDisplayToDecNumber(Total_run, 1, false);
delay(1000);
//если статус нулевой то выключаем экран
if(Sys_status ==0)
{
module.setupDisplay(false, 0);
}

break;

//если нажата 2-я слева
case 0b00000010:
//мигаем соот-щим диодом остальные гасим
module.setLEDs(0);
module.setLED(Red, 1);
module.clearDisplay();
//выводим на дисплей максимальную скорость
DoubleToDisp(Max_speed);
//module.setDisplayToDecNumber(Max_speed, 1, false);
delay(1000);
if(Sys_status ==0)
{
module.setupDisplay(false, 0);
}
break;

//если нажата 3-я слева
case 0b00000100:
//мигаем соот-щим диодом остальные гасим
module.setLEDs(0);
module.setLED(Red, 2);
module.clearDisplay();
//сколько прошло дней щитаем с момента старта
Day_passed = millis()/86400000.00;
//если сутки целые прошли
if(Day_passed > 1)
{

//считаем общий пробег в километрах
Total_run = Round_counter * (double)One_round / 1000.00;
//выводим среднесуточный прбег
DoubleToDisp(Total_run / Day_passed);
delay(1000);
module.clearDisplay();
}
else //если целые сутки еще не прошли
{
module.setDisplayToString(«0», 0);
}
if(Sys_status ==0)
{
module.setupDisplay(false, 0);
}

break;

//если нажата 4-я слева
case 0b00001000:
//мигаем соот-щим диодом остальные гасим
module.setLEDs(0);
module.setLED(Red, 3);
module.clearDisplay();
//считаем и выводим на дисплей среднюю скорость за круг :)
DoubleToDisp(All_speeds/Round_counter);

delay(1000);
if(Sys_status ==0)
{
module.setupDisplay(false, 0);
}
break;

//если нажата 5-я слева
case 0b00010000:
//мигаем соот-щим диодом остальные гасим
module.setLEDs(0);
module.setLED(Red, 4);
module.clearDisplay();
//сколько прошло дней щитаем с момента старта
Day_passed = millis()/86400000.00;
DoubleToDisp(Day_passed);

delay(1000);
if(Sys_status ==0)
{
module.setupDisplay(false, 0);
}
break;

//если нажата 6-я слева
case 0b00100000:
//мигаем соот-щим диодом остальные гасим
module.setLEDs(0);
module.setLED(Red, 4);
module.clearDisplay();
//выводим кол-во кругов
module.setDisplayToDecNumber(Round_counter, 0, false);

delay(1000);
if(Sys_status ==0)
{
module.setupDisplay(false, 0);
}
break;

//если нажата 1-я справа
case 0b10000000:
//мигаем соот-щим диодом остальные гасим
module.setLEDs(0);
module.setLED(Red, 7);
module.clearDisplay();
//выводим на дисплей текущую влажность
ReadDHT();//читаем датчик
//если нет ошибок
if(bGlobalErr ==0)
{
byte humidity = dht_dat[0];
module.setDisplayToDecNumber(humidity, 0, false);
//DoubleToDisp(humidity);
}
delay(1000);
if(Sys_status ==0)
{
module.setupDisplay(false, 0);
}
break;

//если нажата 2-я справа
case 0b01000000:
//мигаем соот-щим диодом остальные гасим
module.setLEDs(0);
module.setLED(Red, 6);
module.clearDisplay();
//выводим на дисплей текущую температуру
ReadDHT();//читаем датчик
//если нет ошибок
if(bGlobalErr ==0)
{
byte temperature = dht_dat[2];
module.setDisplayToDecNumber(temperature, 0, false);
}
delay(1000);
if(Sys_status ==0)
{
module.setupDisplay(false, 0);
}
break;
}
//конец кнопок
/**************** конец кнопок **************************************/

/****************здесь вся логика считывания инфы**************************/

//считываем данные — датчик холла подключаем на 3 цифровой порт
int sensorValue = digitalRead(Hall_port);

//если изменилось состояние датчика
if(sensorValue != PrevValue)
{
PrevValue = sensorValue;
//если сенсор дает 0 т.е. магнит тут
if (!sensorValue)
{
Sys_status = 2;

//включаем дисплей если пауза была больше слипинг интервала и он уже выключился
if(time_span_mon > Do_sleeping_interval)
{
module.setupDisplay(true, 7);
}
//прибавляем счетчик
Round_counter++;

//текущее время берем в милисеках
unsigned long time_now = millis();

//считаем разницу в мсек во времени между текущим и предыдущим
unsigned long time_span = time_now — Prev_time;
//текущее пишем в предыдущее
Prev_time = time_now;
//если пауза меньше 10 секунд то признаем, что колесо крутицца
if(time_span < Wait_interval)
{
if(Curr_speed > 10.00)
{
module.clearDisplay();
}

Curr_speed = One_round/time_span*1000*3,6; //километры в час получаем скорость
All_speeds += Curr_speed;//для подсчета средней

//на максимум проверяем
if(Curr_speed > Max_speed)
Max_speed= Curr_speed;

byte led_speed = map(Curr_speed, 0, Max_led_light_speed, 0, 7);
//вызываем подсвет ледов
Led_speed_light(led_speed);

// отладка
// Serial.print(" Round_counter= ");
//Serial.println(Round_counter);
//Serial.print(" curr_speed(km/h)= ");
//Serial.println(Curr_speed, 4);

//выводим на дисплей текущую скорость
DoubleToDisp(Curr_speed);

}
//если пауза больше 10 секунд то считаем, что колесо стояло до этого
// и данные предыдущего времени не учитываем, а начинаем
//разницу считать сначала
else
{
Prev_time = time_now;

//отладка
//Serial.print(" time_span reset ");
}

}

}

else //если не изменилось состояние датчика
{
//текущее время берем
unsigned long time_now = millis();

//разницу во времени между текущим и предыдущим для пост мониторинга в мсек считаем
time_span_mon = time_now — Prev_time;

//если промежуток между касаниями больше 10 секунд — то считаем, что колесо
//остановилось и выводим 0 (интервал необходимо уточнить)
if(time_span_mon > Wait_interval && Sys_status!=1)
{
Sys_status = 1;
Curr_speed = 0;
module.clearDisplay();
module.setDisplayDigit(0, 7, true);
module.setLEDs(0);
}

//если пауза больше 60 секунд то гасим экран
//если промежуток между касаниями больше 10 секунд — то считаем, что колесо
//остановилось и выводим 0 (интервал необходимо уточнить)
if(time_span_mon > Do_sleeping_interval && Sys_status !=0)
{
Sys_status=0;
module.setupDisplay(false, 0);
}

}

}
///подсветка диодов в зависисимости от скорости вращения колеса
// функция
void Led_speed_light(byte led_speed)
{
constrain(led_speed, 0, 7);

switch (led_speed){
case 0:
module.setLEDs(0);
module.setLED(Green, 0);
delay(100);
module.setLED(0, 0);
break;
case 1:
module.setLEDs(0);
module.setLED(Green, 0);
module.setLED(Green, 1);
delay(100);
module.setLED(0, 1);
break;
case 2:
module.setLEDs(0);
module.setLED(Green, 0);
module.setLED(Green, 1);
module.setLED(Green, 2);
delay(100);
for(int i=2; i > 0;i--){
module.setLED(0, i);
delay(50);
}
break;
case 3:
module.setLEDs(0);
module.setLED(Green, 0);
module.setLED(Green, 1);
module.setLED(Green, 2);
module.setLED(Green, 3);
delay(100);
for(int i=3; i > 0;i--){
module.setLED(0, i);
delay(50);
}
break;
case 4:
module.setLEDs(0);
module.setLED(Green, 0);
module.setLED(Green, 1);
module.setLED(Green, 2);
module.setLED(Green, 3);
module.setLED(Green, 4);
delay(100);
for(int i=4; i > 0;i--){
module.setLED(0, i);
delay(50);
}
break;
case 5:
module.setLEDs(0);
module.setLED(Green, 0);
module.setLED(Green, 1);
module.setLED(Green, 2);
module.setLED(Green, 3);
module.setLED(Green, 4);
module.setLED(Red, 5);
delay(100);
for(int i=5; i > 0;i--){
module.setLED(0, i);
delay(50);
}
break;
case 6:
module.setLEDs(0);
module.setLED(Green, 0);
module.setLED(Green, 1);
module.setLED(Green, 2);
module.setLED(Green, 3);
module.setLED(Green, 4);
module.setLED(Red, 5);
module.setLED(Red, 6);
delay(100);
for(int i=6; i > 0;i--){
module.setLED(0, i);
delay(50);
}
break;
case 7:
module.setLEDs(0);
module.setLED(Green, 0);
module.setLED(Green, 1);
module.setLED(Green, 2);
module.setLED(Green, 3);
module.setLED(Green, 4);
module.setLED(Red, 5);
module.setLED(Red, 6);
module.setLED(Red, 7);
delay(100);
for(int i=7; i > 0;i--){
module.setLED(0, i);
delay(50);
}

break;
}

}

//функция выводит на экран LKM1638 дробные значения (точность — 2 зн)
void DoubleToDisp (double num)
{
double mult_num = (double)num * 100.00;
long int_mult_num = (long)mult_num;
String string_mult_num = String(int_mult_num);
int length = string_mult_num.length();
char str[length+1];

string_mult_num.toCharArray(str, length+1);

//если число было меньше 1 то колхозим затычку для выведения правильной дроби
if(num < 1)
{
module.setDisplayDigit(0, 5, true);
module.setDisplayDigit(str[0], 6, false);
module.setDisplayDigit(str[1], 7, false);
}

else//если больше 1 то так выводим
{
for (int i=0; i<length; i++)
{
if (i==length — 3) {
module.setDisplayDigit(str[i], i+8-length, true);
}
else
{
module.setDisplayDigit(str[i], i+8-length, false);
}
}
}

}

/****** функции для DHT11 ***/

void InitDHT(){

pinMode(dht_dpin,OUTPUT);

digitalWrite(dht_dpin,HIGH);

}

void ReadDHT(){

bGlobalErr=0;

byte dht_in;

byte i;

digitalWrite(dht_dpin,LOW);

delay(20);

digitalWrite(dht_dpin,HIGH);

delayMicroseconds(40);

pinMode(dht_dpin,INPUT);

//delayMicroseconds(40);

dht_in=digitalRead(dht_dpin);

if(dht_in){

bGlobalErr=1;

return;

}

delayMicroseconds(80);

dht_in=digitalRead(dht_dpin);

if(!dht_in){

bGlobalErr=2;

return;

}

delayMicroseconds(80);

for (i=0; i<5; i++)

dht_dat[i] = read_dht_dat();

pinMode(dht_dpin,OUTPUT);

digitalWrite(dht_dpin,HIGH);

byte dht_check_sum =

dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3];

if(dht_dat[4]!= dht_check_sum)

{
bGlobalErr=3;
}

};

byte read_dht_dat(){

byte i = 0;

byte result=0;

for(i=0; i< 8; i++){

while(digitalRead(dht_dpin)==LOW);

delayMicroseconds(30);

if (digitalRead(dht_dpin)==HIGH)

result |=(1<<(7-i));

while (digitalRead(dht_dpin)==HIGH);

}

return result;

}

/****** конец функций для DHT11 ****/



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



Результаты, интересные факты и выводы



  1. С раннего утра белка бежит обычно со средней скоростью ~5-6 км/ч (видимо, в поисках еды и лучшей доли).
  2. После обязательного дневного сна и приема калорийных орехов беличья скорость падает до 3-4 км/ч (еду уже нашла, все важное по жизни сделала).
  3. При работающем рядом пылесосе скорость ВНЕЗАПНО увеличивается до 12-14 км/ч! Хотя я и встречал где-то на зарубежных ресурсах про максимальную скорость белок в 30 км/ч, могу ответственно заявить, что все это враки. Ну или моя белка не относится к породе гончих (африканских олимпийских).
  4. Максимальная скорость круга 18 км/ч.
  5. Среднесуточный пробег у белки, измеряемый в течение двух месяцев, ~ 15 километров.

Эти данные можно использовать в качестве ТЭО проекта по созданию генерирующих мощностей — мини электростанции для обогрева беличьего домика в зимнее время или освещения в темное время суток. Или для школьного проекта по информатике.
@misa77
карма
19,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (99)

  • +3
    Проделайте опыт, повесив за клеткой, но перед кольцом орешков, когда белка еще не поела. Любопытно было бы узнать ее скорость в таких условиях!
    • +2
      или приспособить какой-нибудь диспенсер для орешков: чем быстрее бежит — тем больше орехов сыпется…
      • +5
        Не сработает, ей одного ореха хватит. У меня был дегу (зверек такой), так что проходили это. Начнет или кушать, или заныкает где-нибудь.
  • +4
    Для ТЭО очень не хватает массы белки!
  • +9
    есть планы подцепить к оси колеса генератор и сделать зарядку аккумулятора для питания схемы?
    • 0
      Можно сделать зарядку для андройдотелефона и везде носить с собой в клетке этого милого зверька, на случай севшей батареи.
    • –6
      а проявить оригинальность и задать менее банальный вопрос?
    • +17
      Ну я тут прикинул (схема несовершенна, так что, господа физики, не пинаемся):

      В общем, при параметрах, указанных в статье (и смартфоне, кушающем 5В 2,5Вт, как от USB) белка должна весить не менее 180 г (при фантастическом угле белки в 45 градусов)
      • +10
        Белку надо одеть в кольчугу
        • +18
      • 0
        Возьмем несколько белок на одно колесо?
      • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        У вас КПД = 100%?
        • 0
          Да, конечно, я не стал заморачиваться, всё равно всё в полушутку) К тому же в последней формуле не масса а момент импульса (стрелочка вводит в заблуждение, да, это я уже понял: имелось ввиду что туда входит масса), который для такой системы я сходу не возьмусь посчитать. А первая формула (по которой я и считал) слишком приближенная, ведь белка всё время изменяет свой угол относительно перпендикуляра, и по-хорошему надо интегрировать.
          Правда и скорость я взял 1,1 м/с (4 км/ч) — минимальную.
      • 0
        А какой уголь у белок обычно? =)
    • 0
      Уже есть аналоги.
      http://www.homaphone.ru/
  • +18
    Теперь я хочу домой белку…
    • +1
      С корыстными целями? Электричество вырабатывать? :)
      • –2
        Ибо няши. Умильный грызун. Хотя колесом можно будет мобильник заряжать ночью :-)
        • +2
          Няша — болотная жижица, в словаре Даля, если не ошибаюсь
  • +1
    Вот бы генератор туда и возможность кластеризации белок:)
    • 0
      Так можно и небольшой датацентр запитать)
      • +1
        Белки запитывают кластер одноплатных компьютеров.
        Надо сосчитать сколько нужно белок для, к примеру, рапсберри пи.
        Из новостей — закрыт очередной пиратский зоопарк с торрентами.
  • +15
    А можно побольше видео с белкой? Она такая няша прям!
  • –1
    Зачем нужен Arduino, если такую вещь можно реализовать на элементарной логике?
    • +2
      Можно, конечно, но иногда быстрее воткнуть несколько проводов в макетку и написать пару строк кода, чем ехать за нужной логикой, или ПЛИС, и разбираться с ней. А время — оно ценнее всего.
      • +1
        Ну не знаю, если использовать готовые блоки для такого проекта, то и делать вообщем-то нечего. Написал три строчки простого кода, подключил шлейф, и все. Интереснее собрать такую штуку без всяких микроконтроллеров и готовых плат.
    • +10
      В каждом посте где описана Arduino просто обязан быть подобный комментарий. А если изделие достаточно сложное и его нельзя сделать на простой логике, то будут возмущаться почему бы не купить голую атмегу/тини ))
      • 0
        На самом деле просто некоторым приятно сделать всё своими руками. Это же хобби. Я, например, не стал бы использовать готовые библиотеки для каких-то модулей типо дисплей или какие-либо датчики потому что хотел бы продлить удовольствие от написания кода :) Понятное дело, если у меня уже есть моя библиотека для работы с этим модулем, то второй раз переписывать её не буду. Не приятно когда ардуино используется в конечном продукте, а когда так, просто посмотреть что будет, или когда удовольствия больше получаешь не от процесса, а от результата, то ардуино неплохой вариант.
    • +25
      Можно вообще сделать чисто механический спидометр в стиле стим-панк:

      • +7
        Белке будет тяжелее бежать, что скажется на точности измерений, но зато впоследствии получим более быструю белку.
        • +1
          Можно ввести поправку на потери в механизме.
      • +1
        По сравнению с первой белкой в топике у вас более высокии скилы в рисовании белок.

        Если первая белка была похожа на ленивого обожравшегося кота, то тут явно белка из антирекламы алкоголя(узнал по хвосту), подвела только голова-луковица.
    • 0
      если на то пошло, то можно использовать и велосипедный спидометр за $1 =)
  • +3
    Arduino — это и есть простая логика 21-века.

    Надо бы на stm32\ARM\Atom\Intel, главное реализация и опыт хоть проект и уровня just for fun.
  • +11
    При работающем рядом пылесосе скорость ВНЕЗАПНО увеличивается до 12-14 км/ч! Хотя я и встречал где-то на зарубежных ресурсах про максимальную скорость белок в 30 км/ч, могу ответственно заявить, что все это враки. Ну или моя белка не относится к породе гончих


    Не, у вас просто пылесос слабый.
    • +1
      А если поближе поднести?
      • +5
        А для этого уже у белки сердце слабое, не надо.
    • +1
      можно ещё попробовать подвести напряжение, через большой резистор и плавно изменять значение, думаю на хороших значениях она все 50 км/ч сделает и войдёт в книгу рекордов =) не гуманно правда
  • +1
    Реальная скорость белки будет несколько выше измеренной, так как в данном случае белке приходится еще и крутить колесо, на что расходуется часть её энергии.
    • 0
      Есть подозрение, что наоборот. Мне кажется, что в колесе, которое к тому же легко крутится, легче бежать, чем по нашей грешной земле. Но экспериментально доказать пока не могу…
      • +2
        Э? Как насчет закона сохранения энергии? Если колесо крутится, значит энергия белки расходуется на его вращение, также коэффициент сцепления белки с землей явно больше, чем с колесом, которое проворачивается в противоположную сторону.
        • 0
          на вращение колеса энергия тратится, а на перемещение в пространстве — нет.
          • +3
            Перемещение в пространстве без затрат энергии! Белки совершили революцию!
            • 0
              Имеется ввиду, что не надо преодолевать камешки, прутики, не надо останавливаться на поиск еды. К тому же, однообразное движение на комфортной для белки скорости явно повышает кпд.
            • +1
              Вы будете удивлены, но для перемещения в пространстве не нужно тратить энергию. Сначала энергия тратится на ускорение, переходя в кинетическую, но при остановке её можно будет вернуть. Конечно, это в общем случае, без учёта сил трения и изменения высоты над уровнем моря.

              Коэффициент сцепления с поверхностью играл бы роль, если бы она буксовала. А она просто бежит. Он не нужен.

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

              Бежать в колесе белке тяжелее. Потому что в нём её бег аналогичен бегу по наклонной вверх. Угол наклона зависит от того, на сколько высоко белка заберётся в колесе.
              • 0
                Про сопротивление воздуха забыли. В колесе белка статична, но надо учитывать, что на колесо воздух тоже сопротивление оказывает, правда кмк меньше, чем на белку бегущую вне колеса. Поэтому вопрос спорный, где труднее ей бежать, на воле или в колесе.
          • 0
            А как быть с усилием, передаваемым нашему шарику, которое понемногу, но меняет скорость и направление его вращения?

            Я считаю, что надо всех белок загнать в колёса, пока они не натворили чего-нибудь непоправимого!
  • +9
    Кажется вы забрались на хлебное поле британских ученых :)
  • 0
    Нужно сделать сохранение измеряемой инфы в виде графиков, будет гораздо нагляднее и интересней.
  • +1
    Мне кажется было бы неплохо делать такое из оптических датчиков старой мыши.
    Можно мышиное колесо к белкиному колесу прижать, мышь в usb и написать небольшую софтину — пробег считать =)
    • +1
      Или как в велокомпьютерах сделать )
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Нет в велокомпьютерах значенний таких маленьких окружностей =)
          • 0
            Смотря какие компьютеры. Но вообще есть лазерные тахометры для таких вещей, там можно коэфф. на один оборот выставить, и показывать хоть в виде скорости, хоть в виде расстояния.
  • НЛО прилетело и опубликовало эту надпись здесь
  • +5
    Представьте видео с реакцией белки на пылесос!
  • +1
    Глупый вопрос, наверное, но… Где вы взяли белку? Ни разу не видел их в продаже.
    • +23
      Мы же из России. У нас медведь под каждым вторым окном валяется, а вы белке удивляетесь…
      • +3
        Белки в Москве на Птичке свободно продаются, но покупать не спортивно, да и наш лес — наше главное богатство. Так что, эту белку мы добыли в лесу.
        • 0
          СЗАО?)

          Знаю я один парк…
        • 0
          Как вы ее поймали?
          • +2
            Мы не ловили, а нашли младенца белки, выпавшего из гнезда. Подобрали, откормили детским молоком и взяли к себе жить :)
      • 0
        Вопреки расхожим стереотипам, в России в черте города я видел белку один раз в огромном парке. А когда жил во Франкфурте в центре города, то каждое утро из окна здоровался со своей соседкой (кликабельно):

        Да и медведей на улицах Берлина гораздо больше, чем в Москве. Ну и что, неживых ;)
    • 0
      В окрестностях ГЗ МГУ на яблонях их несметные полчища. Мои знакомые, не мудрствуя лукаво, одну такую поймали.
  • +2
    Мой ёж в колесе бегать отказывается наотрез. Лентяй.

    С учётом наличия датчика температуры-влажности можно было бы полезный девайс собрать, который поддерживал бы в террариуме эти показатели в заданном диапазоне. Ежам\белкам это не слишком критично, а всяким рептилиям и насекомым — достаточно важно.

    Упала температура — включился термошнурок на дне.
    Упала влажность — тоже можно придумать как водой побрызгать внутрь :)
    • +1
      Белке без колеса нельзя. Она зачахнет. Да и бегает она в нем с удовольствием.
    • 0
      Пшикать можно автомобильной форсункой или моторчиком омывателя стекла. Сам разрабатывал террариум :)
      • 0
        Ну да, первое что в голову приходит. В случае с террариумами не обязательно даже прыскать — можно просто подлить немного воды (на вату или губку, находящуюся в террариуме).
    • 0
      Я тоже думал о подобном, но ужаснулся от мысли, что где-то что-то может сломаться и изжарятся питомцы заживо.
  • 0
    Очень было прикольно почитать и посмотреть видео, спасибо!
    На самом деле немного удивился, думал, что белки на много быстрее бегают. Получается, что белка в среднем бегает так, как человек ходит… А в парках они на порядок быстрее людей бегают. Может на короткие дистанции.
    • 0
      Ну она и по квартире бегает не намного быстрее человека, но поймать ее в этом ограниченном пространстве очень трудно без вспомогательных средств, если она сама не захочет вернуться в клетку…
      • +7
        Напомнило (все закончилось хорошо, хотя, мне было сложно в это поверить).

  • +1
    В общем-то первое нормальное применение Ардуино которое я увидел.
  • +7
    Сделайте веб-камеру и автообновляемые онлайн графики, как на БАКе.
  • 0
    А что, если к колесу приделать генератор и его подключить к плате в качестве источника питания? )))
    • 0
      На велосипедных тренажерах именно такая система. Можно выяснить хватит ли работы белочки для питания платы?
      • 0
        Можно взять msp430 с низким потреблением и обынчый ЖК дисплей, на это все с лихвой хватит белки )
  • +1
    А где же самая главная надпись?
    «Во время экспериментов ни одна белка не пострадала»
    Или сколько у вас их побывало в колесе? ))
  • +1
    На открытой местности белка сможет быстрее бежать, так как она будет преодолевать расстояние большими прыжками, кроме того, в прыжке она будет отдыхать. А сейчас ей приходится чаще работать. Т.е. если вы просто возьмете колесо, которое будет значительно большего диаметра, и сохраните тот же вес, как сейчас, белка будет разгоняться сильнее.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      Присоединюсь к вопросу — кусается? сильно?
    • +2
      Тоже интересно.
      Если выпускать из клетки, то:
      — еду ворует?
      — гадит где попало?
      — царапает-кусает мебель?
      — любит понежиться на руках хозяина?
    • 0
      В качестве домашнего питомца очень даже подходит. У нас уже второй год как живет. Маленькая пока была — по рукам и штанам и по голове человеческой бегала, с детьми играла и по квартире скакала. Детям — чистый восторг.
      Любопытная очень. Окна обязательно нужно закрывать и форточки. Временами кажется, что по вертикальной поверхности ей даже легче перемещаться, чем по горизонтальной. Стремится все выше и выше и выше.
      Повзрослей стала посерьезней, может и тяпнуть. То ль нарочно, то ль заигрывается. А если тяпает, то сильно. Зубки оооочень острые.
      Проблем особо с ней никаких, как, наверное, и с любым домашним питомцем (да и человеком :)), если ухаживать, любить и почаще клетку мыть, то все идет ровно.
      • 0
        А самое главное — тискать то себя дает? Одна из причин, по которой кошки правям миром как раз таки в том что они заставляют своих рабов гладить их и чесать.
        • 0
          Нет. Один раз заигралась — тяпнула. Теперь сами не хотим тискать. Здесь котэ по-прежнему рулят.
  • 0
    Если немного отвлечься от обсуждения самой белки — а вы ускорение не пытались?
    Насколько быстро выходит на крейсерскую скорость?
    • 0
      На крейсерскую скорость выходит в первом же круге. Чтобы ускорение мерять, вероятно, надо как минимум 4 датчика ставить, потому что при одном датчике первый же круг обычно проходит с уже крейсерской скоростью.
      • 0
        Так можно не датчики ставить, а к колесу прицепить ещё магнитиков. Намного выгоднее, чем датчики ставить.
  • 0
    Ваша белка не пытается сгрызть провода, идущие к датчику? Если да, как решили проблему?
    Мы хотели нашим песчанкам соорудить подобный измеритель, но как защитить провода, пока не придумали. Эти звери без отдыха грызут всё, до чего могут дотянуться.
    • 0
      Да, провода грызть — это ее самое любимое занятие. Даже если не касается провод клетки — коготком его подтягивает и грызет так нагленько. Решили — скотч наклеили между проводом и клеткой и провод подальше от клетки оттянули.
  • 0
    Знала бы белка куда она попала
  • 0
    В школьные годы решил бы эту задачу катушкой ниток…
  • 0
    Ïîñåëèëàñü ó ìåíÿ äîìà îáûчíàÿ àíàëîãîâàÿ áåëêà.

    Эта фраза вырубила меня на несколько минут.
  • 0
    Зверюшку не жалко, в клетке держать?
    • +1
      Выпустить ее нельзя, так как в дикой природе она не выживет. Ее загрызут или свои же в борьбе за пищу, либо вороны.
      У белки в естественной среде много врагов, а наша одомашнена и приручена.
      У нее все есть: теплый и комфортный дом, чистота и уют, любимое колесо, любимый счетчик скорости на нем, достаток пищи и воды. Нет только одного — свободы. Но если она получит свободу, она не будет знать, как это часто бывает, что с ней делать. И достаточно быстро она ее вновь потеряет, но уже вместе с жизнью.
      «Мы в ответе за тех, кого приручили».
      • 0
        У самого кошка в квартире. На улицу не гуляет. Но хотя бы не в клетке. А дикое животное видеть в клетке как то жалко. Особенно всяких черепашек/ящериц.
        • +1
          Как я писал выше, белку эту в младенческом возрасте мы нашли на земле в лесу. Она ходить еле-еле только могла. Ее братья-сестры или выкинули из клетки, или сама выпала. Т.е она по-любому не жилец была. Мы ее выкормили детским питанием, она выросла большая и красивая, другой жизни не знает и не знает, что она несвободна.
          Мы продлили ей жизнь.
          Так что, здесь вопрос стоит так: Что лучше небытие или такое бытие?
          • 0
            Понятно. Тогда, главное что любите ее. :)

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