Как сделать маяк из глиняных горшков для сада/дачи: ландшафтный дизайн


Глиняные горшки протрите влажной тряпкой

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

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

Подключение модуля к Arduino

Подготовим программатор для прошивки:

Затем в Нано зашиваем этот скетч:

Дополнительная информация

// ArduinoISP // Copyright © 2008-2011 Randall Bohn // If you require a license, see // https://www.opensource.org/licenses/bsd-license.php // // This sketch turns the Arduino into a AVRISP using the following Arduino pins: // // Pin 10 is used to reset the target microcontroller. // // By default, the hardware SPI pins MISO, MOSI and SCK are used to communicate // with the target. On all Arduinos, these pins can be found // on the ICSP/SPI header: // // MISO °. . 5V (!) Avoid this pin on Due, Zero… // SCK . . MOSI // . . GND // // On some Arduinos (Uno,…), pins MOSI, MISO and SCK are the same pins as // digital pin 11, 12 and 13, respectively. That is why many tutorials instruct // you to hook up the target to these pins. If you find this wiring more // practical, have a define USE_OLD_STYLE_WIRING. This will work even when not // using an Uno. (On an Uno this is not needed). // // Alternatively you can use any other digital pin by configuring // software (‘BitBanged’) SPI and having appropriate defines for PIN_MOSI, // PIN_MISO and PIN_SCK. // // IMPORTANT: When using an Arduino that is not 5V tolerant (Due, Zero, …) as // the programmer, make sure to not expose any of the programmer’s pins to 5V. // A simple way to accomplish this is to power the complete system (programmer // and target) at 3V3. // // Put an LED (with resistor) on the following pins: // 9: Heartbeat — shows the programmer is running // 8: Error — Lights up if something goes wrong (use red if that makes sense) // 7: Programming — In communication with the slave // #include «Arduino.h» #undef SERIAL #define PROG_FLICKER true // Configure SPI clock (in Hz). // E.g. for an ATtiny @ 128 kHz: the datasheet states that both the high and low // SPI clock pulse must be > 2 CPU cycles, so take 3 cycles i.e. divide target // f_cpu by 6: // #define SPI_CLOCK (128000/6) // // A clock slow enough for an ATtiny85 @ 1 MHz, is a reasonable default: #define SPI_CLOCK (1000000/6) // Select hardware or software SPI, depending on SPI clock. // Currently only for AVR, for other architectures (Due, Zero,…), hardware SPI // is probably too fast anyway. #if defined(ARDUINO_ARCH_AVR) #if SPI_CLOCK > (F_CPU / 128) #define USE_HARDWARE_SPI #endif #endif // Configure which pins to use: // The standard pin configuration. #ifndef ARDUINO_HOODLOADER2 #define RESET 10 // Use pin 10 to reset the target rather than SS #define LED_HB 9 #define LED_ERR 8 #define LED_PMODE 7 // Uncomment following line to use the old Uno style wiring // (using pin 11, 12 and 13 instead of the SPI header) on Leonardo, Due… // #define USE_OLD_STYLE_WIRING #ifdef USE_OLD_STYLE_WIRING #define PIN_MOSI 11 #define PIN_MISO 12 #define PIN_SCK 13 #endif // HOODLOADER2 means running sketches on the ATmega16U2 serial converter chips // on Uno or Mega boards. We must use pins that are broken out: #else #define RESET 4 #define LED_HB 7 #define LED_ERR 6 #define LED_PMODE 5 #endif // By default, use hardware SPI pins: #ifndef PIN_MOSI #define PIN_MOSI MOSI #endif #ifndef PIN_MISO #define PIN_MISO MISO #endif #ifndef PIN_SCK #define PIN_SCK SCK #endif // Force bitbanged SPI if not using the hardware SPI pins: #if (PIN_MISO != MISO) || (PIN_MOSI != MOSI) || (PIN_SCK != SCK) #undef USE_HARDWARE_SPI #endif // Configure the serial port to use. // // Prefer the USB virtual serial port (aka. native USB port), if the Arduino has one: // — it does not autoreset (except for the magic baud rate of 1200). // — it is more reliable because of USB handshaking. // // Leonardo and similar have an USB virtual serial port: ‘Serial’. // Due and Zero have an USB virtual serial port: ‘SerialUSB’. // // On the Due and Zero, ‘Serial’ can be used too, provided you disable autoreset. // To use ‘Serial’: #define SERIAL Serial #ifdef SERIAL_PORT_USBVIRTUAL #define SERIAL SERIAL_PORT_USBVIRTUAL #else #define SERIAL Serial #endif // Configure the baud rate: #define BAUDRATE 19200 // #define BAUDRATE 115200 // #define BAUDRATE 1000000 #define HWVER 2 #define SWMAJ 1 #define SWMIN 18 // STK Definitions #define STK_OK 0x10 #define STK_FAILED 0x11 #define STK_UNKNOWN 0x12 #define STK_INSYNC 0x14 #define STK_NOSYNC 0x15 #define CRC_EOP 0x20 //ok it is a space… void pulse(int pin, int times); #ifdef USE_HARDWARE_SPI #include «SPI.h» #else #define SPI_MODE0 0x00 class SPISettings { public: // clock is in Hz SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) : clock(clock) { (void) bitOrder; (void) dataMode; }; private: uint32_t clock; friend class BitBangedSPI; }; class BitBangedSPI { public: void begin() { digitalWrite(PIN_SCK, LOW); digitalWrite(PIN_MOSI, LOW); pinMode(PIN_SCK, OUTPUT); pinMode(PIN_MOSI, OUTPUT); pinMode(PIN_MISO, INPUT); } void beginTransaction(SPISettings settings) { pulseWidth = (500000 + settings.clock — 1) / settings.clock; if (pulseWidth == 0) pulseWidth = 1; } void end() {} uint8_t transfer (uint8_t b) { for (unsigned int i = 0; i < 8; ++i) { digitalWrite(PIN_MOSI, (b & 0x80) ? HIGH : LOW); digitalWrite(PIN_SCK, HIGH); delayMicroseconds(pulseWidth); b = (b << 1) | digitalRead(PIN_MISO); digitalWrite(PIN_SCK, LOW); // slow pulse delayMicroseconds(pulseWidth); } return b; } private: unsigned long pulseWidth; // in microseconds }; static BitBangedSPI SPI; #endif void setup() { SERIAL.begin(BAUDRATE); pinMode(LED_PMODE, OUTPUT); pulse(LED_PMODE, 2); pinMode(LED_ERR, OUTPUT); pulse(LED_ERR, 2); pinMode(LED_HB, OUTPUT); pulse(LED_HB, 2); } int error = 0; int pmode = 0; // address for reading and writing, set by ‘U’ command unsigned int here; uint8_t buff[256]; // global block storage #define beget16(addr) (*addr * 256 + *(addr+1) ) typedef struct param { uint8_t devicecode; uint8_t revision; uint8_t progtype; uint8_t parmode; uint8_t polling; uint8_t selftimed; uint8_t lockbytes; uint8_t fusebytes; uint8_t flashpoll; uint16_t eeprompoll; uint16_t pagesize; uint16_t eepromsize; uint32_t flashsize; } parameter; parameter param; // this provides a heartbeat on pin 9, so you can tell the software is running. uint8_t hbval = 128; int8_t hbdelta = 8; void heartbeat() { static unsigned long last_time = 0; unsigned long now = millis(); if ((now — last_time) < 40) return; last_time = now; if (hbval > 192) hbdelta = -hbdelta; if (hbval < 32) hbdelta = -hbdelta; hbval += hbdelta; analogWrite(LED_HB, hbval); } static bool rst_active_high; void reset_target(bool reset) { digitalWrite(RESET, ((reset && rst_active_high) || (!reset && !rst_active_high)) ? HIGH : LOW); } void loop(void) { // is pmode active? if (pmode) { digitalWrite(LED_PMODE, HIGH); } else { digitalWrite(LED_PMODE, LOW); } // is there an error? if (error) { digitalWrite(LED_ERR, HIGH); } else { digitalWrite(LED_ERR, LOW); } // light the heartbeat LED heartbeat(); if (SERIAL.available()) { avrisp(); } } uint8_t getch() { while (!SERIAL.available()); return SERIAL.read(); } void fill(int n) { for (int x = 0; x < n; x++) { buff[x] = getch(); } } #define PTIME 30 void pulse(int pin, int times) { do { digitalWrite(pin, HIGH); delay(PTIME); digitalWrite(pin, LOW); delay(PTIME); } while (times—); } void prog_lamp(int state) { if (PROG_FLICKER) { digitalWrite(LED_PMODE, state); } } uint8_t spi_transaction(uint8_t a, uint8_t b, uint8_t c, uint8_t d) { SPI.transfer(a); SPI.transfer(b); SPI.transfer©; return SPI.transfer(d); } void empty_reply() { if (CRC_EOP == getch()) { SERIAL.print((char)STK_INSYNC); SERIAL.print((char)STK_OK); } else { error++; SERIAL.print((char)STK_NOSYNC); } } void breply(uint8_t b) { if (CRC_EOP == getch()) { SERIAL.print((char)STK_INSYNC); SERIAL.print((char)b); SERIAL.print((char)STK_OK); } else { error++; SERIAL.print((char)STK_NOSYNC); } } void get_version(uint8_t c) { switch © { case 0x80: breply(HWVER); break; case 0x81: breply(SWMAJ); break; case 0x82: breply(SWMIN); break; case 0x93: breply(‘S’); // serial programmer break; default: breply(0); } } void set_parameters() { // call this after reading parameter packet into buff[] param.devicecode = buff[0]; param.revision = buff[1]; param.progtype = buff[2]; param.parmode = buff[3]; param.polling = buff[4]; param.selftimed = buff[5]; param.lockbytes = buff[6]; param.fusebytes = buff[7]; param.flashpoll = buff[8]; // ignore buff[9] (= buff[8]) // following are 16 bits (big endian) param.eeprompoll = beget16(&buff[10]); param.pagesize = beget16(&buff[12]); param.eepromsize = beget16(&buff[14]); // 32 bits flashsize (big endian) param.flashsize = buff[16] * 0x01000000 + buff[17] * 0x00010000 + buff[18] * 0x00000100 + buff[19]; // AVR devices have active low reset, AT89Sx are active high rst_active_high = (param.devicecode >= 0xe0); } void start_pmode() { // Reset target before driving PIN_SCK or PIN_MOSI // SPI.begin() will configure SS as output, so SPI master mode is selected. // We have defined RESET as pin 10, which for many Arduinos is not the SS pin. // So we have to configure RESET as output here, // (reset_target() first sets the correct level) reset_target(true); pinMode(RESET, OUTPUT); SPI.begin(); SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); // See AVR datasheets, chapter «SERIAL_PRG Programming Algorithm»: // Pulse RESET after PIN_SCK is low: digitalWrite(PIN_SCK, LOW); delay(20); // discharge PIN_SCK, value arbitrarily chosen reset_target(false); // Pulse must be minimum 2 target CPU clock cycles so 100 usec is ok for CPU // speeds above 20 KHz delayMicroseconds(100); reset_target(true); // Send the enable programming command: delay(50); // datasheet: must be > 20 msec spi_transaction(0xAC, 0x53, 0x00, 0x00); pmode = 1; } void end_pmode() { SPI.end(); // We’re about to take the target out of reset so configure SPI pins as input pinMode(PIN_MOSI, INPUT); pinMode(PIN_SCK, INPUT); reset_target(false); pinMode(RESET, INPUT); pmode = 0; } void universal() { uint8_t ch; fill(4); ch = spi_transaction(buff[0], buff[1], buff[2], buff[3]); breply(ch); } void flash(uint8_t hilo, unsigned int addr, uint8_t data) { spi_transaction(0x40 + 8 * hilo, addr >> 8 & 0xFF, addr & 0xFF, data); } void commit(unsigned int addr) { if (PROG_FLICKER) { prog_lamp(LOW); } spi_transaction(0x4C, (addr >> 8) & 0xFF, addr & 0xFF, 0); if (PROG_FLICKER) { delay(PTIME); prog_lamp(HIGH); } } unsigned int current_page() { if (param.pagesize == 32) { return here & 0xFFFFFFF0; } if (param.pagesize == 64) { return here & 0xFFFFFFE0; } if (param.pagesize == 128) { return here & 0xFFFFFFC0; } if (param.pagesize == 256) { return here & 0xFFFFFF80; } return here; } void write_flash(int length) { fill(length); if (CRC_EOP == getch()) { SERIAL.print((char) STK_INSYNC); SERIAL.print((char) write_flash_pages(length)); } else { error++; SERIAL.print((char) STK_NOSYNC); } } uint8_t write_flash_pages(int length) { int x = 0; unsigned int page = current_page(); while (x < length) { if (page != current_page()) { commit(page); page = current_page(); } flash(LOW, here, buff[x++]); flash(HIGH, here, buff[x++]); here++; } commit(page); return STK_OK; } #define EECHUNK (32) uint8_t write_eeprom(unsigned int length) { // here is a word address, get the byte address unsigned int start = here * 2; unsigned int remaining = length; if (length > param.eepromsize) { error++; return STK_FAILED; } while (remaining > EECHUNK) { write_eeprom_chunk(start, EECHUNK); start += EECHUNK; remaining -= EECHUNK; } write_eeprom_chunk(start, remaining); return STK_OK; } // write (length) bytes, (start) is a byte address uint8_t write_eeprom_chunk(unsigned int start, unsigned int length) { // this writes byte-by-byte, page writing may be faster (4 bytes at a time) fill(length); prog_lamp(LOW); for (unsigned int x = 0; x < length; x++) { unsigned int addr = start + x; spi_transaction(0xC0, (addr >> 8) & 0xFF, addr & 0xFF, buff[x]); delay(45); } prog_lamp(HIGH); return STK_OK; } void program_page() { char result = (char) STK_FAILED; unsigned int length = 256 * getch(); length += getch(); char memtype = getch(); // flash memory @here, (length) bytes if (memtype == ‘F’) { write_flash(length); return; } if (memtype == ‘E’) { result = (char)write_eeprom(length); if (CRC_EOP == getch()) { SERIAL.print((char) STK_INSYNC); SERIAL.print(result); } else { error++; SERIAL.print((char) STK_NOSYNC); } return; } SERIAL.print((char)STK_FAILED); return; } uint8_t flash_read(uint8_t hilo, unsigned int addr) { return spi_transaction(0x20 + hilo * 8, (addr >> 8) & 0xFF, addr & 0xFF, 0); } char flash_read_page(int length) { for (int x = 0; x < length; x += 2) { uint8_t low = flash_read(LOW, here); SERIAL.print((char) low); uint8_t high = flash_read(HIGH, here); SERIAL.print((char) high); here++; } return STK_OK; } char eeprom_read_page(int length) { // here again we have a word address int start = here * 2; for (int x = 0; x < length; x++) { int addr = start + x; uint8_t ee = spi_transaction(0xA0, (addr >> 8) & 0xFF, addr & 0xFF, 0xFF); SERIAL.print((char) ee); } return STK_OK; } void read_page() { char result = (char)STK_FAILED; int length = 256 * getch(); length += getch(); char memtype = getch(); if (CRC_EOP != getch()) { error++; SERIAL.print((char) STK_NOSYNC); return; } SERIAL.print((char) STK_INSYNC); if (memtype == ‘F’) result = flash_read_page(length); if (memtype == ‘E’) result = eeprom_read_page(length); SERIAL.print(result); } void read_signature() { if (CRC_EOP != getch()) { error++; SERIAL.print((char) STK_NOSYNC); return; } SERIAL.print((char) STK_INSYNC); uint8_t high = spi_transaction(0x30, 0x00, 0x00, 0x00); SERIAL.print((char) high); uint8_t middle = spi_transaction(0x30, 0x00, 0x01, 0x00); SERIAL.print((char) middle); uint8_t low = spi_transaction(0x30, 0x00, 0x02, 0x00); SERIAL.print((char) low); SERIAL.print((char) STK_OK); } ////////////////////////////////////////// ////////////////////////////////////////// //////////////////////////////////// //////////////////////////////////// void avrisp() { uint8_t ch = getch(); switch (ch) { case ‘0’: // signon error = 0; empty_reply(); break; case ‘1’: if (getch() == CRC_EOP) { SERIAL.print((char) STK_INSYNC); SERIAL.print(«AVR ISP»); SERIAL.print((char) STK_OK); } else { error++; SERIAL.print((char) STK_NOSYNC); } break; case ‘A’: get_version(getch()); break; case ‘B’: fill(20); set_parameters(); empty_reply(); break; case ‘E’: // extended parameters — ignore for now fill(5); empty_reply(); break; case ‘P’: if (!pmode) start_pmode(); empty_reply(); break; case ‘U’: // set address (word) here = getch(); here += 256 * getch(); empty_reply(); break; case 0x60: //STK_PROG_FLASH getch(); // low addr getch(); // high addr empty_reply(); break; case 0x61: //STK_PROG_DATA getch(); // data empty_reply(); break; case 0x64: //STK_PROG_PAGE program_page(); break; case 0x74: //STK_READ_PAGE ‘t’ read_page(); break; case ‘V’: //0x56 universal(); break; case ‘Q’: //0x51 error = 0; end_pmode(); empty_reply(); break; case 0x75: //STK_READ_SIGN ‘u’ read_signature(); break; // expecting a command, not CRC_EOP // this is how we can get back in sync case CRC_EOP: error++; SERIAL.print((char) STK_NOSYNC); break; // anything else we will return STK_UNKNOWN default: error++; if (CRC_EOP == getch()) SERIAL.print((char)STK_UNKNOWN); else SERIAL.print((char)STK_NOSYNC); } }

После этого выбираем Ваш контроллер Pro Mini, указываем программатор ArduinoISP и шьем контроллер, используя команду Скетч -> Загрузить через программатор

и нажимаем кнопку Reset на Pro mini, пойдет прошивка контроллера (у меня проходит только со второй попытки, нужно набраться терпения):

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

мое желание не обошло стороной.

Что нам для всего этого потребуется:

В общем, собрал весь хлам, который валялся без дела:

1. SD card module, очень огромный, поэтому я старался как можно скорее избавится от него.

2. Дисплей на базе контроллера PCD8544, всем известный нокиа дисплей.

3. Карта памяти на 1Гб, с не популярным стандартом MiniSD, вообще был без идеи куда ее воткнуть, а хочется все пустить в дело, вот и пускай поработает на благо навигации.

4. Потребуется мозг, большой такой мозг Pro Mini на чипе 328P.

Как писал выше, будем шить через Arduino Nano с прошитым в нее загрузчиком.

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

5. Конечно же, сам модуль + антенна, как писал выше можно изготовить самому.

6. Ах да, чуть не забыл, потребуется еще корпус иначе, что за устройство без корпуса.

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

Когда все комплектующие есть в наличии, можно все это подключить и запрограммировать.

Подключаем к Pro Mini по следующей схеме:

Дисплей:

RST — D6 CE — D7 DC — D5 DIN — D4 CLK — D3 VCC — 5V (опционально в моем случае, в остальных 3.3В ) Light — GND GND — GND

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

SD карта:

CS-D10 MOSI-D11 MISO-D12 SCK-D13 GND — GND 5V — VCC (опционально в моем случае, в некоторых при наличии преобразователя подключаем на 3.3В)

GPS модуль:

RX-D8 TX-D2 GND — GND VCC-3.3 (3.3 это предел!)

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

Примерный вид:

Код прост и незамысловат, для использования Вам понадобится, пожалуй самая легкая библиотека для дисплея. Далее библиотека для GPS. Остальные являются встроенными. По коду, строка — time*0.000001+5, по сути я привел время в удобоваримый вид и добавил часовой пояс. Можно этого не делать и получать чистые результаты.

Ещё один нюанс по библиотеке дисплея заключается в следующем у дисплея, включая с нулевой строкой, всего влезет 6 строк. Что довольно мало, поэтому нужно сразу решать, какую информацию выводить, что-то придется выводить символами, экономя место. Дисплей перерисовывается каждую секунду, при этом обновляя и записывая информацию, поступающую со спутников.

При ошибке чтения файла или отсутствия доступа до карты SD будет выводиться сообщение SD-

, в остальных случаях
SD+
.

Скетч

#include #include #include #include //CS-D10, MOSI-D11, MISO-D12, SCK-D13, GND — GND, 5V — VCC (опционально в моем случае, в некоторых при отсутствии преобразователя подключаем на 3.3В) File GPS_file; TinyGPS gps; SoftwareSerial gpsSerial(2, 8);//RX — 8 pin, TX — 2 pin static PCD8544 lcd; //RST — D6, CE — D7, DC — D5, DIN — D4, CLK — D3, VCC — 5V (опционально, при наличии преобразователя на 3.3В линии), Light — GND, GND — GND bool newdata = false; unsigned long start; long lat, lon; unsigned long time, date; void setup() { lcd.begin(84, 48); gpsSerial.begin(9600); Serial.begin(9600); pinMode(10, OUTPUT); if (!SD.begin(10)){ lcd.setCursor(0, 0); lcd.println(«SD-«); return;} lcd.setCursor(0, 0); lcd.println(«SD+»); GPS_file = SD.open(«GPSLOG.txt», FILE_WRITE); if (GPS_file){ Serial.print(«Writing to test.txt…»); GPS_file.print(«LATITUDE»); GPS_file.print(«,»); GPS_file.print(«LONGITUDE»); GPS_file.print(«,»); GPS_file.print(«DATE»); GPS_file.print(«,»); GPS_file.print(«TIME»); GPS_file.print(«,»); GPS_file.print(«ALTITUDE»); GPS_file.println(); GPS_file.close(); Serial.println(«done.»); }else{ Serial.println(«error opening test.txt»); } lcd.setCursor(0,3); lcd.print(«ALT: «); lcd.setCursor(0,2); lcd.print(«SPD: «); lcd.setCursor(0,4); lcd.print(«LAT: «); lcd.setCursor(0,5); lcd.print(«LON: «); } void loop() { if (millis() — start > 1000){ newdata = readgps(); if (newdata){ start = millis(); gps.get_position(&lat, &lon); gps.get_datetime(&date, &time); lcd.setCursor(50,1); lcd.print(date); lcd.setCursor(55,0); lcd.print(time*0.000001+5); lcd.setCursor(22, 4); lcd.print(lat); lcd.setCursor(22, 5); lcd.print(lon); lcd.setCursor(22, 2); lcd.print(gps.f_speed_kmph()); lcd.setCursor(22, 3); lcd.print(gps.f_altitude()); } } GPS_file = SD.open(«GPSLOG.txt», FILE_WRITE); if(GPS_file){ GPS_file.print(lat); GPS_file.print(«,»); GPS_file.print(lon); GPS_file.print(«,»); GPS_file.print(date); GPS_file.print(«,»); GPS_file.print(time*0.000001+5); GPS_file.print(«,»); GPS_file.print(gps.f_altitude()); GPS_file.println(); GPS_file.close(); }else{ lcd.setCursor(0, 0); lcd.println(«SD-«); } } bool readgps(){ while (gpsSerial.available()){ int b = gpsSerial.read(); if(‘\r’ != b){ if (gps.encode(b)) return true;}} return false;}

После прошивки Вы увидите нечто подобное (в скетче вывод даты отредактирован к правому краю под временем):

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

Что делать дальше? Собирать в корпус, можно на клей, можно на двухсторонний скотч все разместить, мне же захотелось все разместить на макетной плате:

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

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

Используя макетную плату, собираем все воедино:

На корпус для карты памяти наклеил кусок изоленты, тк он соприкасается с контактами зарядника для батареи. Карту памяти прошиваем в FAT16.

Потом запускаем и проверяем, не забыв поставить выключатель:

Мастерим декоративный маяк

Мастер-класс для тех, кто любит эксперименты, не боится молотка, а также творческой, но кропотливой работы!

1. Материалы, которые вам понадобятся:

  • деревянная панель толщиной 15-20 мм
  • карандаш, линейка, листок плотной бумаги (для изготовления трафарета маяка)
  • акриловые краски двух цветов, кисти, вода
  • молоток, черные гвозди 10-12мм, несколько гвоздей с декоративными шляпками
  • искуственная нить и сизаль
  • зажигалка, ножницы
  • 2. Покрываем деревянную основу краской с 2-х сторон и даем ей просохнуть примерно 1-1,5 часа, покрывать нужно тонким слоем, нанося краску поперек структуры дерева, чтобы сохранить фактуру.
  • 3. Вырезаем из плотной бумаги форму маяка, прикладываем, так, чтобы середина трафарета и деревянной заготовки совпали, обводим контур и намечаем полосы. Окрашиваем полосы в контрастный цвет, нанося краску легкими мазками, оставляя ее неравномерной, чтобы цвет основы проявлялся, даем краске высохнуть 30-40 мин.
  • 4. Берем гвозди и прибиваем по контуру неокрашенных полос, прямоугольником прибиваем площадку на верхнем ярусе маяка. Можно добавить несколько декоративных гвоздиков с необычной резной шляпкой на те секции, которые заполняться плетением не будут. Важно постараться прибивать гвозди как можно ровнее относительно друг друга с одинаковым между ними расстоянием. Вбивать нужно на 2-4 мм.
  • 5. Берем синтетическую нить, привязываем один конец нити к крайнему гвоздику (сверху или снизу секции) на 2-4 узелка, обрезаем на расстоянии 1см и краешек осторожно поджигаем, нить синтетическая, она оплавится и зафиксирует узелок. Создаем крестообразное плетение, второй конец нити крепим так же.
  • 6. Берем более толстую, фактурную веревку — сизаль и крепим ее по контуру маяка на 4 гвоздика, края завязываем и обрезаем, дополнительно создаем простое плетение на секциях, где уже есть плетение нитью. Крепить такой декоративный маяк можно на металическую петельку, прикрутив ее с оборотной стороны. Тот, кто владеет искусством обращения с дрелью, может просверлить с оборотной стороны небольшое, несквозное отверстие!

Использование смартфона для GPS-слежения

Чтобы использовать смартфон с функцией GPS в качестве GPS-трекера или маяка, нужно немного поработать с программным обеспечением. Сделать своими руками GPS-трекер из телефона на базе Android, Windows Mobile или iOS очень просто, никакого вмешательства в его конструкцию не понадобится. Если смартфон будет применяться как автомобильный трекер, придется выполнить несложные манипуляции по его подключению к электросети ТС.

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

  • автозапуск;
  • уведомления (по желанию);
  • внешнее питание (использование альтернативных настроек при подключении к внешнему источнику питания);
  • полное пробуждение (по желанию);
  • обработка команд.

Для навигации (определения местоположения) рекомендуется установить интервал обновления данных один раз в минуту, для отсылки SMS-сообщений при исчезновении связи с сервером ограничение по времени – 5 минут. Настройки в разделе «События» осуществлять в соответствии с собственными потребностями.

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

Также для Android можно использовать приложение GPShome Tracker, а для Windows Mobile – GpsGate Client for Pocket PC. Превращая смартфон в трекер или маячок, крайне важно правильно настроить часовой пояс.


Настройки GPShome Tracker

Для определения координат через сети Wi-Fi и GSM, устройство должно иметь доступ к безлимитному мобильному интернету, так что нужно выбрать тариф, позволяющий оптимизировать затраты. Если телефон будет использоваться исключительно как трекер, лучше установить SIM-карту только для выхода в интернет, а не для звонков. Использование GPS-приемника, повышающего точность определения координат, – весьма энергоемкий процесс, так что следует позаботиться об обеспечении питания самодельного трекера. Для этого нужно обрезать нижний конец автовилки (штекера прикуривателя) и вставить шнур зарядного устройства телефона в USB-разъем. Для подключения трекера напрямую к бортовой системе нужно купить понижающий конвертер постоянного тока. А те, кто немного разбирается в электронике, могут собрать аналог конвертера из пары конденсаторов и стабилизатора.

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

Мастер-класс

каждый из нас – Мастер

Маяк . Декор в морском стиле из бросовых материалов.

ХОТИМ ВЫБРОСИТЬ: банки из-под кофе, газету (или бумажные яичные упаковки)

БУДЕМ ДЕЛАТЬ:
декоративную фигурку «Маяк»
Морской сезон, вроде бы, закончился, а идеи остались. И я вам предлагаю копить жестяные банки, чтоб к новому сезону соорудить путеводный маяк. На фото — небольшая конструкция из кофейных банок для дома, но можно соорудить подобную из более крупных банок — для сада .

Поделка на «морскую» тему. И, конечно, используем всё ненужное. Эта поделка может быть просто декоративным элементом дома или в саду. А может быть игрушкой для детей. Но при желании можно превратить её в светильник: только осторожно, с участием электрика и используя специальную «ненагревающуюся» лампочку. Ну, или использовать светодиодную свечу.


«Маяк» своими руками.

НАМ ПОНАДОБИТСЯ:

1. Акриловые краски + лак. 2. «Жидкие гвозди» для соединения банок. 3. Кисти. 4. Проволока от «Шампанского» — для поручней.

ХОД РАБОТЫ:

1-2.Банки чистим наждачной бумагой. Подгоняем конструкцию: где надо вырезаем отверстия. 3.Недостающие части — крышу, спасательные круги, камни- лепим из бумажного теста (папье-маше). Сушим. 4.Красим. 5.Собираем, декорируем. Не забываем о лаке, а для использования в саду — о яхт-лаке.

Примечание: «флюгер» можно вырезать из жестяной консервной банки.

ДЛЯ ТЕХ, КТО ЛЮБИТ ПОПРОЩЕ:

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

Источник

Идея для украшения загородного дома у моря. Создаём маяк своими руками: красиво, трудоёмко, надёжно

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

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

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

Покупаем пластиковую канализационную трубу длиной 2 м и диаметром 160 мм.

Отрезаем от трубы 0,5 м (необходима труба длиной 1,5 м).

С хорошим настроением на берегу собираем 3 кг морских камушков белого и серого цвета.

Прикрепляем камушки и деревянные окошки к трубе с помощью клея-герметика Sika.

Подготавливаем растворы белого и серого цемента.

С помощью шприца с цементной смесью заполняем щели между камнями.

Рейтинг
( 2 оценки, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]