Новичок
Регистрация: 22.05.2009
Сообщений: 18
Репутация: 10
|
Есть автоматы для приёма пластиковых бутылок и алюминевых банок на утилизацию. Я решил по аналогии сделать АСУ для приёма использованных элементов питания (батареек). Внешне это будет выглядеть, как выдвижная коробочка с ячейками под батарейки. Также будет мусорная корзина с задвижкой, подобной печной заслонки, но которая способна выдвигаться и задвигаться автоматически в зависимости от команды микроконтроллера. Предполагается, что пользователь должен выполнить следующие действия:
1. Выдвинуть коробочку. 2. Вставить туда батарейку. 3. Задвинуть коробочку. АСУ, проверив, что пользователь действительно вставил батарейку, которая уже разрядилась и не годна, должна 1. Выдвинуть заслонку-защёлку, чтобы батарейка упала в мусорную корзину. 2. Подождать некоторое время (например, 2 сек), чтобы батарейка успела упасть. 3. Снова задвинуть защёлку. Вот точное описание алгоритма работы АСУ: // Данная программа может распространяться свободно на условиях "копилефтной" лицензии //файл BatteryLib.h int GetBoxPos(); // возращает положение коробочки const int BoxPosOut=1000; // положение коробочки, когда она выдвинута bool BoxOut(); // возвращает ненулевое значение, если коробочка выдвинута, и 0, если задвинута void BoxIsMoving(); // ждём, когда пользователь выдвинет коробочку и опять задвинет const double LightMin=0.00001; // минимальная допустимая освещённость в корзине double GetLight(); // возвращает значение с датчика освещённости double GetTemprVoltage(); // возращает значение напряжения теплового шума, вычисляемого по формуле Найквиста //const double VoltageMin=0.00001; // минимальное напряжение на батарейке double GetBatteryVoltage(); // возвращает напряжение на контактахн батарейки bool IsBattery(); // возвращает ненулевое значение, если объект, лежащий в коробочке, является батарейкой, и 0 в противном случае bool NoPower(); // возвращает ненулевое значение, если батарейка уже разрядилась, и 0 в противном случае const int ObjectIsNotBattery=2; // код ошибки "Объект не явяется батарейкой" const int BatteryIsNotNoPower=1; // код ошибки "Батарейка ещё не разрядилась" const int BatteryIsOK=0; //успешное принятие батарейки const int PAUSE=2000; // время ожидания между открытием и закрытием защёлки bool OutTextToLCDDisplay(char * Text); // вывод текста на ЖК-дисплей bool OpenLock(); // открыть защёлку bool CloseLock(); // закрыть защёлку bool InsertToDatabase(); // добавить в базу данных информацию о принятой батарейке int Working (); // алгоритм работы АСУ const char * Texts[3]={"Элемент питания принят успешно. Спасибо за участие!","Уважаемый пользователь. Этот элемент питания ещё не разрядился. => его рано сдавать на утилизацию. Если он Вам не нужен, найдите, кого-нибудь, кому он нужен, и ПОДАРИТЕ.","Данный объект не является батарейкой."}; // тексты для вывода на ЖК-дисплей int TestBattery (); // проверка батарейки, пора ли её сдавать const int BacketIsFull=3; const int MemoryIsFull=4; bool TestBacketFull(); // возвращает ненулевое значение, если корзина наполнена до отказа, и 0 в противном случае bool TestMemoryFull(); // возвращает ненулевое значение, если память заполнена, и 0 в противном случае // файл BatteryLib.cpp #include "BatteryLib.h" void BoxIsMoving() // ждём, когда пользователь выдвинет коробочку и опять задвинет { while (!BoxOut()){} // ждём, когда коробочка будет выдвинута while (BoxOut()){} // теперь ждём, когда она будет задвинута } bool BoxOut() // возвращает ненулевое значение, если коробочка выдвинута, и 0, если задвинута { return (GetBoxPos()>BoxPosOut); } bool TestBacketFull () // проверка наполнена ли корзина до отказа { // } bool IsBattery() // возвращает ненулевое значение, если объект, лежащий в коробочке, является батарейкой, и 0 в противном случае { //return (GetBatteryVoltage()>=VoltageMin); return (GetBatteryVoltage()>=10*GetTemprVoltage()); } int TestBattery () // проверка батарейки, пора ли её сдавать { if (!IsBattery()) { return ObjectIsNotBattery; // объект не является батарейкой } if (!NoPower()) { return BatteryIsNotNoPower; // батарейка ещё не разрядилась } return BatteryIsOK; // тест пройден успешно } bool TestBacketFull() // возвращает ненулевое значение, если корзина наполнена до отказа, и 0 в противном случае { return (GetLight()<LightMin); } int Working () // алгоритм работы АСУ { if (TestBacketFull()) // если корзина наполнилась до отказа { return BacketIsFull; // возвращаем значение, предупреждающее об этом } if (TestMemoryFull()) // если память заполнена { return MemoryIsFull; // возвращаем значение, предупреждающее об этом } OutTextToLCDDisplay("Вставьте батарейку."); // выводим на ЖК-дисплей подсказку пользователю BoxIsMoving(); // ждём, когда пользователь выдвинет коробочку, чтобы что-то положить и опять задвинет int Tst=TestBattery(); // проверяем то, что положил пользователь OutTextToLCDDisplay(Texts[Tst]); // выводим на дисплей результат проверки if (Tst) // если батарейка не прошла тест { BoxIsMoving(); // ждём, когда пользователь выдвинет коробочку, чтобы забрать обратно то, что положил, и опять задвинет } else // иначе { OpenLock(); // открываем защёлку Delay(PAUSE); // ждём, чтобы батарейка успела упасть в корзину CloseLock(); // закрываем защёлку InsertToDatabase(); // добавить в базу данных информацию о принятой батарейке } return Tst; // возвращаем код ошибки или успешного завершения } // файл WORK.CPP #include "BatteryLib.h" int main () { while (((tmp=Working())!=BacketIsFull)&&(tmp!=MemoryIsFu ll)) // продолжаем работать до тех пор, пока корзина не будет заполнена (до отказа) и в памяти есть свободное место {} return 0; } Необходимо приобрести вот что: 1. Обязательно 1) Микроконтроллер AVR со встроенной памятью. 2) Таймер (чтобы в базе данных можно было дату/время фиксировать) 3) 2 АЦП а) для измерения напряжения на нагрузке в цепи батарейки. б) для датчика положения коробочки 4) Цифровой ввод/вывод в виде TTL-сигналов (например, для соединения микроконтроллера с защёлкой). 5) COM-порт (для подключения к базе данных) 6) ЖК-дисплей 7) Защёлка-задвижка, которая выдвигается/задвигается автоматически по команде, поступившей от микроконтроллера 8) Датчик положения коробочки с ячейками под батарейки: выдвинута/задвинута 2. Необязательно, но желательно 1) ЦАП 2) Расширитель ввода/вывода 3. Не помешает 1) USB-порт 2) Клавиатура На самом деле почти всё вышеперечисленное можно приобрести, купив отладочную плату наподобие демонстрационного набора Atmel ATAVRBFLY (см. www.fulcrum.ru/LineCard/DevTools/2_1_Atmel.htm). Точнее сказать, всё... Всё, кроме одного. Это защёлки-задвижки. Не знаю, где взять защёлку, то есть задвижку наподобие печной заслонки, которую можно открывать/закрывать автоматически по команде микроконтреллера (для чего я использую функции OpenLock() и CloseLock()). Как знаете, CD/DVD-дисковод. Он может автоматически выдвигаться/задвигаться по команде процессора. Вот так и моя задвижка должна автоматически выдвигаться/задвигаться о команде микроконтроллера. Уважаемые участники форума, если кто-нибудь из Вас знает, где взять такую заслонку, просьба сообщить мне об этом. И ещё. Помогите, пожалуйста, разобраться с AVR Studio. А то там всё по-английски, а у меня с английским туго... Также прошу помочь разобраться, как программировать AVR-микроконтроллеры и какая у них система команд. А то я раньше этим не занимался, столкнулся с этим впервые, поэтому прошу помощи, как новичок.
Последний раз редактировалось Admin; 22.12.2012 в 19:14.
|
||
Оценка
|
Специалист
|
Странно, что за довольно большое время никто не ответил. По эл.механике в целом всё очень просто. Вытаскиваете из "однорукого бандита" (свежий закон Вам помогает) жетоноприёмник, и приспосабливаете для своих нужд. Ход ярма электромагнита там приличный - до 10-15 мм. Усилие - зверское, поэтому если хочется больший ход заслонки - рычаг.
|
||
Оценка
|
Новичок
Регистрация: 22.05.2009
Сообщений: 18
Репутация: 10
|
Спасибо за совет, Рафаил! Но, к сожалению, я не знаю, что такое "однорукий бандит"... Только что нашёл вот это: *** Вы случайно не это имеете в виду под "одноруким бандитом"? А что Вы имеете в виду под фразой "свежий закон Вам помогает"? То, что так долго никто не отвечал, действительно странно... Кстати, за такое большое время я и сам смог найти решение, только несколько иное. Я решил взять CD-привод и использовать его выдвижную часть в качестве "задвижки". Может быть, не очень удачное решение, но для 1-го раза подойдёт.
Последний раз редактировалось Admin; 22.12.2012 в 19:14.
|
||
Оценка
|
Специалист
|
Да, это именно игровой автомат, ну и надеюсь про закон о месте их использовании вы слышали, проследите судьбу конфискованных - и возможно Вам скажут: "Да бери сколь хочешь!". Уточню: Вам нужен не жетоноприемник, а наоборот, "выкидыватель". Представляет собой эл.магнит, мощно выбивающий из под высокой стопы монет нижнюю, в лоток. Совет - не зацикливайтесь именно на игровых автоматах, эл.магниты широко применяются везде, в Вашем случае даже можно приспособить эл.магнитные пускатели (для макетирования идеи).
Почему именно эл.магнит? Просто, крепко, быстро! Кажется, такие качества нужны для надежности Вашего аппарата.
Последний раз редактировалось рафаил; 25.10.2009 в 16:56.
|
||
Оценка
|
Новичок
Регистрация: 22.05.2009
Сообщений: 18
Репутация: 10
|
Электропитание
Ну, а теперь я бы хотел поговорить об источнике элекропитания для своей АСУ. Наше тело излучает инфракрасный свет мощностью 24 Вт. Можно поставить фотоэлементы, чувствительные к ИК-диапазону. Когда подойдёт пользователь, чтобы сдать батарейки, он своим ИК-светом осветит фотоэлементы. Они дадут ЭДС, которую можно использовать для питания моего АПК (аппаратно-программный комплекс). Только я не уверен, что хватит мощности. Как Вы думаете, хватит ли мощности этих фотоэлементов (которая в самом лучшем теоретически возможном случае будет равна мощности излучения, то есть 24 Вт, а на практике, скорей всего, даже ниже из-за того, что не все лучи ИК-света будут попадать на фотоэлементы, КПД которых, к тому же, необязательно равен 1) для питания моего АПК?
Последний раз редактировалось 245; 25.10.2009 в 23:09.
Причина: Добавление пояснения
|
||
Оценка
|
Новичок
Регистрация: 22.05.2009
Сообщений: 18
Репутация: 10
|
Я знаю, что есть множество других вариантов, это не секрет для меня. Просто я думал, что такой источник питания имеет ряд достоинств. Питание ВСЕГДА будет, когда есть пользователь. А когда нет пользователя питание просто не нужно. Не нужно подводить провода, думать о подзарядке аккумулятора и т. д. и т. п. Этот источник питания абсолютно экологически чист, неисчерпаем. К тому же в отличии от городской электросети, где за каждый 1 кВт*ч энергии нужно платить, этот источник даёт абсолютно бесплатную энергию. Почему Вы назвали эту идею негодной я не знаю. Недостаток у него только один: маленькая мощность: не больше 24 Вт. А какая мощность для моего АПК требуется я вообще не знаю. Если бы я знал, какая мощность требуется моему АПК, я бы не задавал этот вопрос, а сам сравнил бы мощность и сделал бы вывод, подойдёт мне такой источник питания или нет. Но поскольку требуемая мощность мне неизвестна, я и задаю такие вопросы. А что Вы имеете в виду под "отработков узлов"?
|
||
Оценка
|
Специалист
|
К сожалению, я не представляю, в каком классе Вы учитесь. Знание этого момента облегчит моё общение с Вами. Так же любопытно, с какой целью Вы занимаетесь сей идеей?
Последний раз редактировалось рафаил; 27.10.2009 в 11:53.
|
||
Оценка
|
Новичок
Регистрация: 22.05.2009
Сообщений: 18
Репутация: 10
|
Я уже ни в каком классе не учусь, так как закончил школу. "Сей идеей", то есть использования энергии ИК-излучения человеческого тела для питания АСУ я занимаюсь по причинам, указанным в моём предыдущем сообщении. Я там перечислил достоинства этой энергии. Указал и недостаток (малую мощность). А если Вы под "сей идеей" имеете в виду саму идею моей АСУ, то она нужна для того, чтобы можно было централизовано собирать старые батарейки. Когда батарейки уже не годны к использованию, куда их девать? Должно быть место для централизованного сбора негодных батареек, как и любых отходов, с последующей их переработкой (рециклингом). При этом желательно их сортировать, то есть РАЗДЕЛЬНО собирать РАЗНЫЕ виды отходов, так как это сильно облегчает рециклинг. Иногда для сортировки отходов ставят специальные мусорные контейнеры и пишут на каждом из них что-нибудь вроде "для бумаги", "для стекла", "для батареек", "для металла" и т. д. и т. п. Но это решение не очень надёжно, так как кто-то, не обращая внимания на надпись, может (случайно или намеренно) бросить то, для чего не предназвачен данный контейнер. Для большей надёжности, на мой взгляд, желательно сделать специальные АПК, автоматически сортирующие мусор, простейший из который я представил Вашему вниманию. Этот АПК позволяет отделить батарейки от остального мусора, принимая только батарейки, и давая понять пользователю, что другие виды отходов нужно отправлять в другие места.
Последний раз редактировалось 245; 28.10.2009 в 22:46.
Причина: Исправление ошибок
|
||
Оценка
|
Специалист
|
Продолжать учиться надо! Или в школе надо было всё-таки учиться.
Цитата:
Наше тело излучает инфракрасный свет мощностью 24 Вт.
Цитата:
Если бы я знал, какая мощность требуется моему АПК,
Я спрашиваю повторно: сами то с какой целью занялись ЭТОЙ ИДЕЕЙ? Изготовить аппарат или ... .
Последний раз редактировалось рафаил; 29.10.2009 в 18:11.
|
||
Оценка
|
Обратная связь РадиоЛоцман Вверх |