Florydzialski Napisano 28 Lipca 2015 Autor Udostępnij Napisano 28 Lipca 2015 Aktualizacja - napisałem nawet mikro instrukcję obsługi do mojego mikro rozwiązania /* * This solution has 10 slots for codes (0-9) and 10 slots for cards (0-9). * Slot 9 is special - in addition to opening door, it is also used * as a programming code/card. * * Commands: * L - change code length (resets all codes) - example L5 * D - delete code - example D1 * S - set code - example D1202030 * G - get code - example G1 * C - get card - example C1 * A - add card - example A1544370 * B - delete card - example B1 * P - ping - example P * E - write cards and codes to EEPROM - example E * R - read cards and codes from EEPROM - example R * * Commands respond with OK: [command][some extra data if required] or ERROR: [comand][some extra data] if there was an error: * L[length] responds with OK: L[length] * D[slot] responds with OK: D[slot] * S[slot][code] responds with OK: S[slot][code] or ERROR: S[slot][code] if code length is <> preset length * G[slot] responds with OK: G[slot][code at this slot - may be empty] * C[slot] responds with OK: C[slot][card # or 0 if no card] * A[slot][card #] responds with OK: A[slot][card #] if card # was parsed to long or ERROR: A[slot][card #] if card # was not parsable * B[slot] responds with OK: B[slot] * P responds with OK: PONG * E responds with OK: E: BYTES :[number of bytes written] * R responds with OK: R: BYTES :[number of bytes read] * * Programming via keyboard/card: * - press ENT * - enter code (slot 9) or scan card (slot 9) * - press ENT * - enter slot (0-9) * - press ENT * - enter code or scan card to remember * - press ENT * Delete code/card via keyboard/card: * - press ENT * - enter code (slot 9) or scan card (slot 9) * - press ENT * - enter slot (0-9) * - press ENT * - press ESC */ Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
mayster_tcz Napisano 29 Lipca 2015 Udostępnij Napisano 29 Lipca 2015 Zazdraszczam umiejętności programowania... no i taniej elektroniki w USA... u nas jakby ktoś chciał nakupować zabawek na start, to z 500 PLN nie jego... Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Florydzialski Napisano 29 Lipca 2015 Autor Udostępnij Napisano 29 Lipca 2015 Zazdraszczam umiejętności programowania... no i taniej elektroniki w USA... u nas jakby ktoś chciał nakupować zabawek na start, to z 500 PLN nie jego... Cała elektronika przyszła z Chin koszty są naprawdę niewielkie - Arduino z kabelkiem $5, płytka przekaźników $4, przetwornik 12V -> 5V 3A $4, ta klawiatura była najdroższa - $17. No i oczywiście Pi - z obudowa, zasilaczem (bezużytecznym), modułem WiFi i radiatorami na scalaki zapłaciłem chyba $45 albo coś koło tego. Ale jak na razie Pi jest mało przydatne a docelowo pewnie użyje Pi model A+ za $24. A napisanie tego programu to żadna sztuka, dzisiaj wkleję źrodła dla pokazania ze to nic strasznego... Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
mayster_tcz Napisano 29 Lipca 2015 Udostępnij Napisano 29 Lipca 2015 Próbowałem Bascoma, C, C++, coś tam liznąłem PHP, HTML i CSS - tyle, co potrzebowałem do danego zadania, więc raczej niewiele.Chciałbym się rozwinąć, ale jakoś tak w życiu wychodzi, że czasu brakuje. Może, jak w końcu skończę remont domu i się wprowadzę na swoje, to poświęcę czas na hobby, a pomysłów jest sporo Mam paru kolegów, którzy kodzą ostro - krew mnie zalewa, że ja kminię coś pół dnia, a któryś z nich podejdzie, ponapierdziela kodem i voilla Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Florydzialski Napisano 29 Lipca 2015 Autor Udostępnij Napisano 29 Lipca 2015 Obiecany kod, to nadal nie skończone rozwiązanie (nie mam jeszcze dopracowanego otwierania i zamykania drzwi garażowych oraz obsługi czujników odległości); #include <Wiegand.h> #include <EEPROM.h> WIEGAND wg; // keyboard support String code = ""; byte index = 0; byte maxIndex = 6; // Serial support String inputString = ""; boolean stringComplete = false; // card and code storage String codes[10] = { String( " " ), String( "" ), String( "" ), String( "" ), String( "" ), String( "" ), String( "" ), String( "" ), String( "" ), String( "" ) }; unsigned long cards[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // ten slots for cards // programming variables byte programmingMode = 0; byte programmingSlot = 0; String enteredProgrammingCode = ""; String enteredNewCode = ""; unsigned long enteredProgrammingCard = 0; unsigned long enteredNewCard = 0; // persistence byte serialized[141]; /* * This solution has 10 slots for codes (0-9) and 10 slots for cards (0-9). * Slot 9 is special - in addition to opening door, it is also used * as a programming code/card. * * Serial Port Commands: * L - change code length (resets all codes) - example L5 * D - delete code - example D1 * S - set code - example D1202030 * G - get code - example G1 * C - get card - example C1 * A - add card - example A1544370 * B - delete card - example B1 * P - ping - example P * E - write cards and codes to EEPROM - example E * R - read cards and codes from EEPROM - example R * * Commands respond with OK: [command][some extra data if required] or ERROR: [comand][some extra data] if there was an error: * L[length] responds with OK: L[length] * D[slot] responds with OK: D[slot] * S[slot][code] responds with OK: S[slot][code] or ERROR: S[slot][code] if code length is <> preset length * G[slot] responds with OK: G[slot][code at this slot - may be empty] * C[slot] responds with OK: C[slot][card # or 0 if no card] * A[slot][card #] responds with OK: A[slot][card #] if card # was parsed to long or ERROR: A[slot][card #] if card # was not parsable * B[slot] responds with OK: B[slot] * P responds with OK: PONG * E responds with OK: E: BYTES :[number of bytes written] * R responds with OK: R: BYTES :[number of bytes read] * * Programming via keyboard/card: * - press ENT * - enter code (slot 9) or scan card (slot 9) * - press ENT * - enter slot (0-9) * - press ENT * - enter code or scan card to remember * - press ENT * Delete code/card via keyboard/card: * - press ENT * - enter code (slot 9) or scan card (slot 9) * - press ENT * - enter slot (0-9) * - press ENT * - press ESC */ void setup() { inputString.reserve(20); resetLength(); for ( byte i = 0; i < 141; i++ ) { serialized[i] = 0; } Serial.begin(9600); wg.begin(); pinMode(4, OUTPUT); // keypad LED pinMode(5, OUTPUT); // keypad annnoying speaker pinMode(6, OUTPUT); // garage door opener pinMode(7, OUTPUT); // garage door light pinMode(8, OUTPUT); pinMode(9, OUTPUT); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); Serial.println( "STARTED:"); } void loop() { if (wg.available()) { unsigned long input = wg.getCode(); if ( input == 10 ) { processESC(); } else if ( input == 11 ) { processENT(); } else if ( input >= 0 && input < 10 ) { processKey(input); } else { processCard(input); } } if ( stringComplete ) { processSerial(); } } // handles asynchronous serial input void serialEvent() { while (Serial.available()) { // get the new byte: char inChar = (char)Serial.read(); if (inChar == '\n') { stringComplete = true; } else { if ( inputString.length() < 20 ) { inputString += inChar; } } } } // make error sound void beepError() { for ( byte i = 0; i < 3; i++ ) { digitalWrite(5, LOW); delay(100); digitalWrite(5, HIGH); delay(100); digitalWrite(5, LOW); delay(50); digitalWrite(5, HIGH); delay(50); digitalWrite(5, LOW); delay(50); digitalWrite(5, HIGH); delay(50); } } // make OK sound and blink green void beepOk() { digitalWrite(4, LOW); digitalWrite(5, LOW); delay(100); digitalWrite(5, HIGH); delay(500); digitalWrite(4, HIGH); } // make escape key sound void beepEscape() { for ( byte i = 0; i < 3 ; i ++) { digitalWrite(5, LOW); delay(50); digitalWrite(5, HIGH); delay(50); } } // resets everything and reports beeping error void resetError() { beepError(); reset(); } // resets everything (programming mode, keyboard input) void reset() { resetInput(); programmingMode = 0; enteredNewCode = ""; enteredProgrammingCode = ""; enteredProgrammingCard = 0; enteredNewCard = 0; } // resets keyboard input void resetInput() { index = 0; code = ""; } // call after maxLength is changed to adjust memory storage void resetLength() { index = 0; code = ""; code.reserve(maxIndex); for ( byte i = 0; i < 10; i++ ) { codes[i] = ""; codes[i].reserve( maxIndex ); } enteredProgrammingCode = ""; enteredProgrammingCode.reserve(maxIndex); enteredNewCode = ""; enteredNewCode.reserve(maxIndex); } byte saveToEEPROM() { byte eIdx = 0; serialized[ eIdx++ ] = maxIndex; for ( byte i = 0; i < 10; i++ ) { if ( codes[i] == "" ) { serialized[ eIdx++ ] = 0; } else { for ( byte j = 0; j < maxIndex; j++ ) { serialized[ eIdx++ ] = byte( codes[i].charAt(j) ); } } } for ( byte i = 0; i < 10; i++ ) { serialized[ eIdx++ ] = (byte)cards[i]; serialized[ eIdx++ ] = (byte) (cards[i] >> 8 ); serialized[ eIdx++ ] = (byte) (cards[i] >> 16 ); serialized[ eIdx++ ] = (byte) (cards[i] >> 24 ); } EEPROM.put( 0, serialized ); return eIdx; } byte readFromEEPROM() { for ( byte i = 0; i < 141; i++ ) { serialized[i] = 0; } EEPROM.get( 0, serialized ); byte eIdx = 0; maxIndex = serialized[ eIdx++ ]; resetLength(); for ( byte i = 0; i < 10; i++ ) { byte eval = serialized[ eIdx++ ]; if ( eval == 0 ) { codes[i] = ""; } else { String c = String( (char)eval ); for ( byte j = 1; j < maxIndex; j++ ) { c += (char) serialized[ eIdx++ ]; } codes[i] = c; } } for ( byte i = 0; i < 10; i++ ) { byte c0 = serialized[ eIdx++ ]; byte c1 = serialized[ eIdx++ ]; byte c2 = serialized[ eIdx++ ]; byte c3 = serialized[ eIdx++ ]; cards[i] = (unsigned long)(c3 << 24) | (unsigned long)(c2 << 16) | (unsigned long)(c1 << 8) | (unsigned long)c0 ; } return eIdx; } void processESC() { if ( programmingMode == 4 ) { if ( enteredProgrammingCard > 0 ) { cards[programmingSlot] = 0; Serial.print( "OK: CARD REMOVED FROM SLOT " ); Serial.println( programmingSlot ); } else { codes[programmingSlot] = ""; Serial.print( "OK: CODE REMOVED FROM SLOT " ); Serial.println( programmingSlot ); } beepOk(); beepOk(); beepEscape(); beepEscape(); reset(); } else { beepEscape(); reset(); } } void processENT() { if ( programmingMode == 0 ) { Serial.println( "OK: PROGRAMMING MODE 1" ); programmingMode = 1; programmingSlot = 0; resetInput(); } else if ( programmingMode == 1 ) { Serial.println( "ERROR: DOUBLE ENTER IN PROGRAMMING MODE 1" ); resetError(); } else if ( programmingMode == 2 ) { if ( enteredProgrammingCode == codes[9] ) { Serial.println( "OK: PROGRAMMING MODE 3" ); beepOk(); beepOk(); programmingMode = 3; resetInput(); } else { Serial.print( "ERROR: INVALID PROGRAMMING CODE: " ); Serial.println( enteredProgrammingCode ); resetError(); } } else if ( programmingMode == 3 && index == 1 ) { programmingSlot = code.charAt(0) - '0'; if ( programmingSlot >= 0 && programmingSlot < 10 ) { Serial.println( "OK: PROGRAMMING MODE 4" ); programmingMode = 4; beepOk(); resetInput(); } else { Serial.print( "ERROR: INVALID PROGRAMMING SLOT: " ); Serial.println( code ); resetError(); } } else if ( programmingMode == 4 ) { Serial.println( "ERROR: DOUBLE ENTER IN PROGRAMMING MODE 4" ); resetError(); } else if ( programmingMode == 5 ) { Serial.print( "OK: CODE: " ); Serial.print( enteredNewCode ); Serial.print( " PROGRAMMED INTO SLOT " ); Serial.println( programmingSlot ); codes[programmingSlot] = enteredNewCode; beepOk(); beepOk(); beepOk(); beepOk(); reset(); } else if ( programmingMode == 6 ) { if ( enteredProgrammingCard == cards[9] && enteredProgrammingCard > 0) { Serial.println( "OK: PROGRAMMING MODE 3" ); beepOk(); beepOk(); programmingMode = 3; resetInput(); } else { Serial.print( "ERROR: INVALID PROGRAMMING CARD: " ); Serial.println( enteredProgrammingCard ); resetError(); } } else if ( programmingMode == 7 && enteredNewCard > 0) { Serial.print( "OK: CARD: " ); Serial.print( enteredNewCard ); Serial.print( " PROGRAMMED INTO SLOT " ); Serial.println( programmingSlot ); cards[programmingSlot] = enteredNewCard; beepOk(); beepOk(); beepOk(); beepOk(); reset(); } else { Serial.println( "ERROR: UNKNOWN PROGRAMMING MODE" ); resetError(); } } void processKey(unsigned long input) { code += (char)( '0' + input ); index++; if ( index == maxIndex ) { if ( programmingMode == 1 ) { Serial.println( "OK: PROGRAMMING MODE 2" ); programmingMode = 2; enteredProgrammingCode = code; resetInput(); } else if ( programmingMode == 4 ) { Serial.println( "OK: PROGRAMMING MODE 5" ); programmingMode = 5; enteredNewCode = code; resetInput(); } else if ( programmingMode != 0 ) { Serial.println( "ERROR: CODE ENTRY IN UNKNOWN PROGRAMMING MODE" ); resetError(); } else if ( programmingMode == 0 ) { boolean correctCode = false; for ( byte i = 0; i < 10; i++ ) { if ( code == codes[i] ) { correctCode = true; break; } } if ( correctCode ) { Serial.print("CODE: "); Serial.println(code); beepOk(); resetInput(); programmingMode = 0; triggerDoor(); } else { Serial.print("INV: "); Serial.println(code); resetError(); } } } else if (index > maxIndex ) { Serial.println( "ERROR: TOO MANY CHARS" ); resetError(); } } void processCard(unsigned long input) { if ( programmingMode == 1 ) { Serial.println( "OK: PROGRAMMING MODE 6" ); programmingMode = 6; enteredProgrammingCard = input; resetInput(); } else if ( programmingMode == 4 ) { Serial.println( "OK: PROGRAMMING MODE 7" ); programmingMode = 7; enteredNewCard = input; resetInput(); } else if ( programmingMode != 0 ) { Serial.println( "ERROR: CARD ENTRY IN UNKNOWN PROGRAMMING MODE" ); resetError(); } else if ( programmingMode == 0 ) { boolean correctCode = false; for ( byte i = 0; i < 10; i++ ) { if ( input == cards[i] ) { correctCode = true; break; } } if ( correctCode ) { Serial.print("CARD: "); Serial.println(input); beepOk(); resetInput(); programmingMode = 0; triggerDoor(); } else { Serial.print("INVCARD: "); Serial.println(input); resetError(); } } } void processSerial() { digitalWrite(4, LOW); boolean processed = false; if ( inputString.length() > 0 ) { if ( inputString.charAt( 0 ) == 'L' && inputString.length() == 2 ) { maxIndex = inputString.charAt( 1 ) - '0'; if ( maxIndex > 0 && maxIndex < 10 ) { resetLength(); processed = true; } } else if ( inputString.charAt( 0 ) == 'D' && inputString.length() == 2 ) { int codeIndex = inputString.charAt( 1 ) - '0'; if ( codeIndex >= 0 && codeIndex < 10 ) { codes[codeIndex] = "" ; processed = true; } } else if ( inputString.charAt( 0 ) == 'S' && inputString.length() == 2 + maxIndex ) { int codeIndex = inputString.charAt( 1 ) - '0'; if ( codeIndex >= 0 && codeIndex < 10 ) { codes[codeIndex] = inputString.substring(2); processed = true; } } else if ( inputString.charAt( 0 ) == 'G' && inputString.length() == 2 ) { int codeIndex = inputString.charAt( 1 ) - '0'; if ( codeIndex >= 0 && codeIndex < 10 ) { inputString += codes[codeIndex] ; processed = true; } } else if ( inputString.charAt( 0 ) == 'C' && inputString.length() == 2 ) { int codeIndex = inputString.charAt( 1 ) - '0'; if ( codeIndex >= 0 && codeIndex < 10 ) { inputString += cards[codeIndex] ; processed = true; } } else if ( inputString.charAt( 0 ) == 'A' ) { int codeIndex = inputString.charAt( 1 ) - '0'; if ( codeIndex >= 0 && codeIndex < 10 ) { cards[codeIndex] = inputString.substring(2).toInt(); if ( cards[codeIndex] > 0 ) { inputString = String( "A" ) + String( inputString.charAt( 1 ) ) + String( cards[codeIndex], DEC ); processed = true; } } } else if ( inputString.charAt( 0 ) == 'B' && inputString.length() == 2 ) { int codeIndex = inputString.charAt( 1 ) - '0'; if ( codeIndex >= 0 && codeIndex < 10 ) { cards[codeIndex] = 0 ; processed = true; } } else if ( inputString.charAt( 0 ) == 'P' && inputString.length() == 1 ) { inputString += "ONG" ; processed = true; } else if ( inputString.charAt( 0 ) == 'E' && inputString.length() == 1 ) { byte eIdx = saveToEEPROM(); inputString += ": BYTES :" + String( eIdx, DEC) ; processed = true; } else if ( inputString.charAt( 0 ) == 'R' && inputString.length() == 1 ) { byte eIdx = readFromEEPROM(); inputString += ": BYTES :" + String( eIdx, DEC) ; processed = true; } } if ( processed ) { Serial.print( "OK: " ); Serial.println(inputString); } else { Serial.print( "ERROR: " ); Serial.println(inputString); } // clear the string: delay(500); digitalWrite(4, HIGH); inputString = ""; stringComplete = false; } void triggerDoor() { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); delay( 500 ); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); } Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Florydzialski Napisano 31 Lipca 2015 Autor Udostępnij Napisano 31 Lipca 2015 Dziś był dzień prób integracji. Najpierw nic mi nie działało. Okazało sie ze zasilacz 5V jest zepsuty i daje 2.5V. Zmieniłem. Potem zaczęło trochę działać ale głośnik dziwnie szumiał. Dołożyłem kondensatory na 12V, 5V i 3.3V. Szumienie ustąpiło. Potem Pi nie była w stanie ruszac przekaźnikami przez scalak zmieniający poziomy logiczne. Okazało sie ze to zimny lut. Potem okazało sie ze Pi nie ma wyprowadzonego PINu 'reset'. Dolutowałem. Na chwile obecna zarówno Arduino jak i Pi mogą sterować przekaźnikami i Arduino gada przez serial do Pi. Niestety w odwrotna stronę nie idzie. Podejrzewam ze brakuje opornikow podnoszących - jutro je wlutuje. Całe rozwiazanie w tej chwili używa Pi 2 Model B, ale planuje przejść na Pi A+, dlatego chce gadać przez PINy a nie USB (usb bedzie potrzebne do WiFi). Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Florydzialski Napisano 3 Sierpnia 2015 Autor Udostępnij Napisano 3 Sierpnia 2015 Aktualizacja negatywna. Od kilku dni walczę próbując zmusić Pi do komunikacji z Arduino. O ile w jedną stronę (Arduino -> Pi) idzie znakomicie, o tyle w drugą za nic nie chce iść. Nie wiem za bardzo dlaczego. Po drodze jest TXB 0104 - próbowałem już wszystko - kondensatory na liniach doprowadzających napięcie, oporniki podciągające i opuszczające po obu stronach. Nic nie pomaga. Więc się poddałem i zakupiłem takie coś: http://www.amazon.com/gp/product/B00XVZ78XI Mam nadzieję że to będzie działało i będą gadały ze sobą... P.S. Udało mi się na eBay;u za $5 kupić Pi model A+ :)) Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Florydzialski Napisano 4 Sierpnia 2015 Autor Udostępnij Napisano 4 Sierpnia 2015 Dziś z innej beczki - jako że czekam na części do Pi, to zacząłem się bawić ESP 8266. AT+GMR 00200.9.5(b1) compiled @ Dec 25 2014 21:40:28 AI-THINKER Dec 25 2014 OK AT+CWMODE? +CWMODE:2 OK AT+CWMODE=3 OK AT+CWLAP +CWLAP:(3,"Marek's Guest Network",-29,"8a:bc:35:37:a1:10",1) +CWLAP:(3,"1368TipperaryDrive",-29,"88:1f:a1:37:35:bc",1) +CWLAP:(3,"1368TipperaryDrive",-83,"00:25:4b:0a:2b:df",1) +CWLAP:(4,"tomatoplant",-90,"ec:1a:59:58:c3:36",6) +CWLAP:(3,"NETGEAR88",-91,"20:4e:7f:9c:c1:10",7) +CWLAP:(3,"Batson",-93,"c4:04:15:57:dd:93",11) +CWLAP:(3,"Savinon",-91,"14:cf:e2:82:96:b0",11) OK AT+CIFSR +CIFSR:APIP,"192.168.4.1" +CIFSR:APMAC,"1a:fe:34:f9:35:4a" +CIFSR:STAIP,"192.168.1.75" +CIFSR:STAMAC,"18:fe:34:f9:35:4a" OK AT+CIPSTART="TCP","api.thingspeak.com", 80 CONNECT OK AT+CIPSEND=70 > GET /update?api_key=QNI517W61UOC40KF&field1=12&field2=19&field3=94 SEND OK +IPD,3:413 OK CLOSED Edycja - ten scalak jest N I E S A M O W I T Y ! ! ! connecting to www.adafruit.com Requesting URL: /testwifi/index.html HTTP/1.1 200 OK Date: Tue, 04 Aug 2015 20:36:25 GMT Server: Apache Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Authorization, Referer, User-Agent Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Credentials: true Access-Control-Max-Age: 1728000 Accept-Ranges: bytes X-Mod-Pagespeed: 1.9.32.3-4448 Vary: Accept-Encoding Cache-Control: max-age=0, no-cache Content-Length: 74 Connection: close Content-Type: text/html This is a test of the CC3000 module! If you can read this, its working closing connection Tak, kilka linii kodu i można z niego zrobić mikro kontroler z dostępem do internetu. Hmm, tyle ciekawych pomysłów! Np. sterownik żaluzji... Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Florydzialski Napisano 5 Sierpnia 2015 Autor Udostępnij Napisano 5 Sierpnia 2015 No dobra, następna aktualizacja - po zamontowaniu tej płytki konwertującej napięcia wszystko działa jak malinki Arduino i Pi gadają ze sobą bez żadnych problemów. Wygląda na to że rozwiązanie jest prawie gotowe. Teraz tylko przydało by się jeszcze zrobić oprogramowanie do watchdog'ów + REST interface do kontrolowania tego przez internet. Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Krisker Napisano 6 Sierpnia 2015 Udostępnij Napisano 6 Sierpnia 2015 Zazdraszczam umiejętności programowania... no i taniej elektroniki w USA... u nas jakby ktoś chciał nakupować zabawek na start, to z 500 PLN nie jego... Ja kupuję te zabawki na aliexpress. Ceny takie, jak Marek podał i to bez kosztów przesyłki. Tylko przy większych (pewnie grubo powyżej 100zł) zakupach jednorazowych mogą dowalić cło. Ale przy mniejszych (dotąd zamawiałem kilkanaście razu) nie ma problemu. Czas dotarcia przesyłki od 8 do 30 dni. Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Krisker Napisano 6 Sierpnia 2015 Udostępnij Napisano 6 Sierpnia 2015 Edycja - ten scalak jest N I E S A M O W I T Y ! ! ! Używam ESP8266 w domu do komunikacji pomiędzy czujnikami pogodowymi i alarmem na arduino. Są niezawodne, maleńkie i całkiem mocne (co z kolei generuje wymóg dobrego zasilania). Niestety z arduino gada przez konwerter poziomów, ale nie jest źle. Tobie polecam jednak przy docelowych zastosowaniach użycie firmware NodeMCU - bardziej samodzielny i wymagający mniej działań po stronie arduino/rPi. Na trzy moduły wifi na dwóch mam właśnie nocemcu, a w jednym jadę na AT. Żeby pogadać z nimi w arduino w przypadku AT trzeba sporo kodu, a w przypadku nodemcu sprawa się znacznie upraszcza. Poza tym część funkcji można przypisać modułowi bezpośrednio (wysyłanie i odbieranie danych z www, odczyt stanów wejść GPIO modułu wifi). Zaletą AT jest to, że z arduino gada mi na 115200, a przy nodemcu na 9600. Jeśli zaś chodzi o dobór wersji esp, to w moim przypadku lepiej działa ESP12 niż ESP01. Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Florydzialski Napisano 6 Sierpnia 2015 Autor Udostępnij Napisano 6 Sierpnia 2015 Zainstalowałem nodeMCu na 8266 - rzeczywiscie wygodniej. Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Krisker Napisano 6 Sierpnia 2015 Udostępnij Napisano 6 Sierpnia 2015 Jeśli nie zmieniasz za często konfiguracji wifi tam, gdzie ma ten moduł pracować, to polecam ustawienie konfiguracji wifi właśnie w pliku init w nodemcu. Można tam również zaprogramować akcje na wypadek rozłączenia z wifi itp. Nie wiem jak jest z rPi, ale w adruino z jednym serialem nie powinno się wgrywać programów z podłączonym modułem esp. To samo co na arduino leci wówczas na wifi i może spowodować różne nieprzewidziane sytuacje. Tam, gdzie projektowałem sobie PCB do wykorzystania esp zastosowałem rozłączalne zworki, żeby szybko i wygodnie rozłączać linię komunikacyjną. Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Florydzialski Napisano 10 Sierpnia 2015 Autor Udostępnij Napisano 10 Sierpnia 2015 Dostałem dzis w końcu z Chin te ultradźwiękowe czujniki odległości. Sa genialne. Dzialaja idealnie - od mniej-wiecej 3 cm do jakichś 3, 3.5 metra. Obsługa banalna, podłącza sie cztery kabelki i gotowe. Z Arduino dzialaja az miło. W planach mam zainstalowanie ich na suficie - jeden tak by zasłaniała go brama jak jest całkiem otworzona, a drugi tak by zasłaniała go brama jak jest troche otwarta. W ten sposob bede wiedział czy jest całkiem otwarta, cześciowo otwarta lub zupełnie zamknięta. Dodałem obsługę tego do kodu Arduino, teraz największym wyzwaniem jest zapakowanie wszystkiego w pudełka, zrobienie kabelków (bede używał do łączenia gniazdek i wtyków telefonicznych bo sa najtansze) i montaż tego na miejscu. Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
sherif Napisano 10 Sierpnia 2015 Udostępnij Napisano 10 Sierpnia 2015 Jaka jest rozdzielczość odleglości, da się postawić barierę w odl ok 0.5m i tolerancji +/- 5cm ? Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Krisker Napisano 11 Sierpnia 2015 Udostępnij Napisano 11 Sierpnia 2015 Induction Angle: not more than 15 degrees Detection range: 2cm-450cm High precision: up to 0.3cm Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
sherif Napisano 11 Sierpnia 2015 Udostępnij Napisano 11 Sierpnia 2015 Dzięki, wygląda to dobrze !! Poratujecie jeszcze linkiem ? Chcę założyć czujniki do garażu, które by pozwalały precyzyjnie dojechać samochodem. Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Florydzialski Napisano 11 Sierpnia 2015 Autor Udostępnij Napisano 11 Sierpnia 2015 http://m.ebay.com/sch/i.html?_nkw=arduino+ultrasonic+sensor&isNewKw=1&isRefine=true&mfs=KWCLK&acimp=0&_trksid=&sqp=ultrasonic+arduino Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Krisker Napisano 11 Sierpnia 2015 Udostępnij Napisano 11 Sierpnia 2015 http://www.aliexpress.com/item/Free-shipping-1pcs-Ultrasonic-Module-HC-SR04-Distance-Measuring-Transducer-Sensor-for-Arduino-Samples-Best-prices/1967936408.html Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.