Разное о выращивании табака на Алтае
Вы не вошли.
Наши китайские "друзья", круто обнаглели/пользуются промышленной некоторой слабостью России в данный момент. Китаёзы, дважды утроили ценник на свой низкокачественный товар для нас. Ладно, будем импортозамещать. Со временем, заменим и китайцев.
Пытался недавно купить дубликатор домофонных ключей приятелю. Ценники - конские!!! 100 баксов, за примитивное устройство на элементарном микропроцессоре? Вспомнил свои старые разработки, сделал девайс сам.
http://tabak.aaa22.ru/viewtopic.php?id=74
Раньше, просто не было смысла городить подобные/примитивные устройства самостоятельно в больших количествах. Купить было дешевле. Сделал свой дубликатор, только ради спортивного интереса. Экспериментировал с Rfid картами/брелками на 125 kHz, тоже всё работало.
Не в сети
Не в сети
Как видим, особого смысла городить плату даже нет. Весь девайс, состоит из четырёх деталей. Можно, всё навесным монтажём сделать и вклеить в любой корпус термоклеем.
Детали нужны такие.
1) Esp8266.
2) резисотор на 6,8К.
Остальные две детали не обязательны.
3)Холдер для батарейки CR2032, в качестве контактов для считывания/записи rw1990.
Такой держатель батарейки, можно выпаять с любой старой материнки ПК.
4) Бузер на 5В, тоже не обязателен. На Esp8266 есть светодиоды, показывающие режимы работы дубликатора.
Не в сети
Не в сети
Не в сети
Старый код.
#include <OneWire.h>
#define pin 14
OneWire ibutton (pin); // Пин D14 для подлючения iButton (Data)
byte addr[8];
//byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F
byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x9B };
const int buttonPin = 4;
const int ledPin = 12;//ЗЕЛЁНЫЙ
const int ledPinB = 13;//СИНИЙ
const int ledPinR = 15;//красный
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
int val = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPinB, OUTPUT);
pinMode(ledPinR, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(115200);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinR, LOW);
}
void loop() {
buttonState = digitalRead(buttonPin);
//if (buttonState == HIGH) {
if (buttonState == LOW) {
readflag = 1;
writeflag = 1;
//digitalWrite(ledPin, HIGH);
digitalWrite(ledPinR, HIGH);
val++;
if (val > 6) val = 6;
Serial.print(val);
Serial.print("button1");
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinR, HIGH);
delay(1000);
// digitalWrite(ledPinR, LOW);
}
else {
val = 0;
}
if (!ibutton.search (addr)) {
ibutton.reset_search();
delay(50);
if (val <= 5) return;
val = 0;
Serial.print("button");
}
digitalWrite(ledPin, HIGH);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinR, LOW);
delay(500);
digitalWrite(ledPinB, HIGH);
for (byte x = 0; x < 8; x++) {
Serial.print(addr[x], HEX);
if (readflag == 0) {
ReadID[x] = (addr[x]);
}
Serial.print(":");
}
byte crc; // Проверка контрольной суммы
crc = ibutton.crc8(addr, 7);
Serial.print("CRC: ");
Serial.println(crc, HEX);
digitalWrite(ledPin, LOW);
if ((writeflag == 1) or (Serial.read() == 'w')) {
ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
Serial.print(" ID before write:");
for (byte x = 0; x < 8; x++) {
Serial.print(' ');
Serial.print(ibutton.read(), HEX);
}
// send reset
ibutton.skip();
ibutton.reset();
// send 0xD1
ibutton.write(0xD1);
// send logical 0
digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
Serial.print('\n');
Serial.print(" Writing iButton ID:\n ");
byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) };
ibutton.skip();
ibutton.reset();
ibutton.write(0xD5);
for (byte x = 0; x < 8; x++) {
writeByte(newID[x]);
Serial.print('*');
}
Serial.print('\n');
ibutton.reset();
// send 0xD1
ibutton.write(0xD1);
//send logical 1
digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
writeflag = 0;
readflag = 0;
digitalWrite(ledPin, LOW);
}
}
int writeByte(byte data) {
int data_bit;
for (data_bit = 0; data_bit < 8; data_bit++) {
if (data & 1) {
digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
delayMicroseconds(60);
pinMode(pin, INPUT); digitalWrite(pin, HIGH);
delay(10);
} else {
digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
pinMode(pin, INPUT); digitalWrite(pin, HIGH);
delay(10);
}
data = data >> 1;
}
digitalWrite(ledPinB, HIGH);
tone(12,25,4000);
return 0;
}
Не в сети
Не в сети
Синий светодиод светится в режиме считывания. Если мы приложили/подключили ключ к прибору, загорается зелёный.
Был зелёный, значит код ключа хранится уже в памяти. Для копирования кода, нажимаем кнопку на плате, загорается красный.
Красный - режим записи. Прикладываем заготовку. На заготовку записывается ранее считанный код.
Если вы включили прибор и сразу нажали кнопку записи, на заготовку будет записан универсальный код.
В строке 6, мы задаём код универсального ключа.
byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x9B };
В моём городе, такой универсальный ключ, самый распространённый.
Не в сети
Не в сети
По сути, 250 руб за дубликатор с моим кодом.
253,65 руб. | ESP8266 ESP-12F последовательный WIFI модуль мини макетная плата для Arduino Nodemcu CH340 Micro USB модуль для Arduino Witty Cloud
https://a.aliexpress.com/_9wwIzJ
Не в сети
В последних фото, участвовал профессиональный дубликатор домофонных ключей KeyMasterPro 4RF. Такой прибор у меня есть уже больше 10 лет, нареканий к нему нет. Но! Ценник - почти 8 тыров!!!
https://www.rmxlabs.ru/products/keymaster_pro_4_rf/
Я понимаю, прибор разрабатывался 15 лет назад и хрен его знает на чём... Думаю, они и сейчас его в том же железе выпускают. Но вот уже появились SoС микропроцессоры... ESP32, имеет 2 ядра на 240 мГц, в три раза круче Пентиум 1. Я бы сделал такой же прибор, в 2..3 раза дешевле и сильно круче. Уже сделал...
Не в сети
Не в сети
Не в сети