Người đọc biết các trinh sát - tương tự của những người tiên phong của chúng tôi, nhưng hóa ra cũng có những hình khối - tương tự của tháng mười của chúng tôi. Được chấp nhận ở họ từ năm tuổi. Con trai của tác giả Hướng dẫn với biệt danh mr_fid đã được thông qua, và anh ta sẽ phải tham dự một sự kiện lớn cho xe taxi và trinh sát, một trong số đó sẽ là mã Morse. Để tiếp tục quan tâm đến đứa trẻ, ông chủ đã cho nó một món đồ chơi khác thường.
Nó được thực hiện trên
Arduino Nano và tạo ra 12 từ khác nhau cho tiếng bíp với bộ tạo tích hợp (có thể chuyển đổi bằng công tắc cơ học) và đèn LED RGB. Chu kỳ có thể được điều chỉnh trong khoảng từ 100 đến 1100 mili giây. Để chuyển từ, một công tắc tinker được cung cấp. Thiết kế được cung cấp bởi pin lithium-polymer 1000 mAh. Bộ điều khiển sạc được tích hợp sẵn. Nhưng ở đây vẫn chưa có:
Mr_fid cảm ơn Simon Monk cho cuốn sách Lập trình Arduino, mà anh đã mua cách đây vài năm. Khi vẽ phác thảo, ông đã dựa vào các ví dụ từ cuốn sách này.
Bắt đầu làm việc trên
tự làm, ông chủ chỉ biết về mã Morse rằng có tín hiệu SOS. Tôi đã phải học tài liệu và phát hiện ra rằng điểm là một thước đo, dấu gạch ngang là ba, khoảng cách giữa các ký tự trong chữ là một thước đo, giữa các chữ cái là ba, giữa các từ là bảy.
Khi đánh dấu nhựa mr_fid sử dụng băng che. Nhờ vậy, dấu vết đánh dấu được nhìn rõ hơn nếu nhựa bị tối. Ngoài ra, băng dính này mờ, và mũi khoan không bị trượt khi nhắm vào mục tiêu.
Cần phải ước tính trước vị trí của các thành phần của cấu trúc, sao cho mọi thứ phù hợp và không một trong các thành phần chạm vào các thành phần lân cận, bao gồm các bộ phận nhô ra. Mr_fid không quên bất cứ thứ gì ngoài ... pin. Chà, trường hợp khá rộng rãi, và sau đó một nơi cho nó đã được tìm thấy. Trong lúc đó ...
Mặc dù chủ nhân có một mũi khoan băng ghế nhỏ, nhưng ngay cả với nó, anh ta đã sử dụng một mũi khoan bước cho thuận tiện, nó cũng là một mũi cá trích xương cá hay củ cà rốt.
Khi trục công tắc núm được xoay bằng tay cầm, bản thân công tắc phải đứng yên. Đối với điều này, ngoài trục, phía trước nó là một chốt nhỏ yêu cầu một lỗ bổ sung trên bảng điều khiển phía trước.
Do đó, trước tiên mr_fid đã khoan một lỗ cho trục, sau đó dán băng keo vào mặt sau, đặt công tắc cờ lê vào vị trí và ấn nó. Các pin để lại một dấu trên băng che, nó vẫn còn để khoan một lỗ ở đó.
Sơ đồ mà không tính đến pin, bộ điều khiển sạc và bộ chuyển đổi trông như thế này:
Trên bảng điều khiển phía trước, nơi đặt công tắc bánh quy và điện trở thay đổi, chủ kết hợp những kết luận của các thành phần này được kết nối với cùng một điểm của mạch trong trường hợp (trong trường hợp này là dây cộng và dây chung). Điều này chỉ cho phép bốn dây được rút ra giữa bảng điều khiển phía trước và nhà ở.
Công tắc cờ lê cũng được biến thành một loại điện trở thay đổi, chỉ có một bước một, trong đó 11 điện trở trên 1 kOhm được hàn vào nó, như trong các bức ảnh. Arduino xác định vị trí của nó bằng một điện áp thay đổi từng bước, với một đầu vào tương tự là đủ.
Lớn hơn:
Để điều khiển đèn LED RGB, mr_fid đã chọn các chân Arduino có số 9, 10 và 11. Đây là các đầu ra PWM, trong phần sụn tiếp theo sẽ cho phép nhận được nhiều bit trên mỗi màu hơn ba.
Anh ta kết nối một điểm cộng và một dây chung ở cực ngược với một điện trở thay đổi, sao cho vị trí tối thiểu tương ứng với chu kỳ của thời lượng tối đa, nghĩa là tốc độ tối thiểu.
Ví dụ từ sách giáo khoa Simon Monk, rất đơn giản và đơn chức năng: nó lấy dữ liệu đến qua cổng nối tiếp và chuyển nó thành mã Morse với chu kỳ 200 mili giây. Các chức năng bổ sung được thêm bởi trình hướng dẫn cung cấp điều chỉnh thời gian tùy thuộc vào điện áp đến từ động cơ biến trở, cũng như từ chối cổng nối tiếp có lợi cho việc lưu trữ 12 từ cố định được chọn bởi công tắc quay số. Cũng thêm các thói quen để điều khiển nút chuyển đổi chế độ RGB-LED, và với một tweeter có bộ tạo tích hợp, chương trình có thể điều khiển ban đầu.
Khi lập trình Arduino, mr_fid hoàn toàn quên rằng đồ chơi cần được cho ăn từ thứ gì đó, bởi vì bảng đã được cấp nguồn từ USB mọi lúc. Khi anh nhớ ra, ý nghĩ đầu tiên là cung cấp năng lượng cho tất cả từ chiếc máy bay Krona 'thông qua bộ ổn định. Nhưng nó không vừa, và lúc đầu, ông chủ muốn đặt nó bên ngoài, nhưng sau đó quyết định sử dụng pin lithium-polymer mỏng với 3,7 V và 1000 mAh.
Với pin mới được sạc, điện áp đạt 4.2 V, đủ cho tất cả các tinh thể của đèn LED RGB, bao gồm cả màu xanh. Nhưng khi nó phóng điện, nó giảm xuống và mặc dù 3,3 V là đủ, độ sáng của ánh sáng xanh có thể giảm đáng kể. Tôi đã phải sử dụng một bộ ổn định tăng áp với năm volt ổn định ở đầu ra. Và để không tháo pin ra khỏi vỏ khi sạc, tác giả đã thêm bộ điều khiển sạc và công tắc đảo ngược hai cực kết nối pin với cả hai cực với Arduino hoặc bộ điều khiển này. Bây giờ bạn có thể sạc đồ chơi từ USB.
Ông kết nối tất cả những thứ này lại với nhau theo cách như vậy, không quên sự phân cực và phòng ngừa ngắn mạch:
Bằng cách thay đổi vị trí của công tắc bánh quy, bạn có thể chọn mã Morse cho các kết hợp chữ cái sau: HHH (một dấu chấm), OOO (một dấu gạch ngang), CAT (mèo), DOG (chó), ANT (kiến), FLY (bay), RAT (chuột), OWL (cú), PIG (lợn), HEN (gà), FOX (cáo) và EMU (emu). Nút cho phép bạn chuyển đổi các chế độ hoạt động của đèn LED RGB trên vòng: các màu không đổi - đỏ, xanh dương, xanh lục, xanh lục, vàng, mâm xôi, trắng, cũng như một chấm đỏ và dấu gạch ngang màu xanh lá cây, thay đổi màu sau mỗi chữ, thay đổi màu sau mỗi chữ cái .
Trong Arduino, mr_fid đã tải lên một bản phác thảo như vậy:int dotDelay = 200;
int ledPinRed = 11; // đỏ
int ledPinBlue = 10; // màu xanh
int ledPinGreen = 9; // xanh
int oldAI = 15;
int vỗ;
int i = 1;
int j = 0;
bool chuyển đổi = sai;
nút int = 8;
int buzzer = 7;
cờ int = 1;
int chọnWord;
int động vật = 1;
int potValue = 0;
int maxVol thếBits = 1023;
int splitBits = maxVol voltBits / 22;
const int pot = A4;
const int quayInput = A5;
char ch;
ký tự char [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. ",
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
số char [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "--- ..", "----."};
char * động vật3 = "hhhooocatdogantflyratowlpighenfoxemu";
thiết lập void ()
{
pinMode (ledPinBlue, OUTPUT);
pinMode (ledPinRed, OUTPUT);
pinMode (ledPinGreen, OUTPUT);
pinMode (nồi, INPUT);
pinMode (rotationInput, INPUT);
pinMode (nút, INPUT);
pinMode (buzzer, OUTPUT);
kỹ thuật sốWrite (ledPinRed, CAO);
kỹ thuật sốWrite (ledPinBlue, CAO);
kỹ thuật sốWrite (ledPinGreen, CAO);
kỹ thuật sốWrite (ledPinRed, THẤP);
độ trễ (500);
kỹ thuật sốWrite (ledPinRed, CAO);
độ trễ (100);
kỹ thuật sốWrite (ledPinBlue, THẤP);
độ trễ (500);
kỹ thuật sốWrite (ledPinBlue, CAO);
độ trễ (100);
kỹ thuật sốWrite (ledPinGreen, THẤP);
độ trễ (500);
kỹ thuật sốWrite (ledPinGreen, CAO);
độ trễ (100);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (100);
kỹ thuật sốWrite (buzzer, THẤP);
int buttonValue = digitalRead (nút);
if (buttonValue == 1)
{
selectWord = analogRead (rotationInput);
selectorSwitch1 (selectWord);
}
khác
{
cờ = 1;
}
}
vòng lặp void ()
{
Wait_for_enter ();
selectWord = analogRead (rotationInput);
bộ chọnSwitch (selectWord);
potValue = analogRead (pot);
dotDelay = potValue + 100;
i = (động vật * 3) -3;
trong khi (j & lt; 3)
{
ch = động vật3 [i];
if (ch & gt; = 'a' && ch & lt; = 'z')
{
flashSequence (chữ cái [ch - 'a']);
}
khác nếu (ch & gt; = '0' && ch & lt; = '9')
{
flashSequence (chữ cái [ch - '0']);
}
khác nếu (ch == '')
{
độ trễ (dotDelay * 7);
}
i = i + 1;
j = j + 1;
}
độ trễ (dotDelay * 7);
// chuyển đổi =! chuyển đổi; // chuyển màu mỗi từ (không cần thiết)
j là 0;
}
void Wait_for_enter ()
{
int buttonValue = digitalRead (nút);
while (buttonValue == 0)
{
buttonValue = digitalRead (nút);
}
}
void flashSequence (chuỗi char *)
{
int k = 0;
while (chuỗi [k]! = '\ 0')
{
flashDotOrDash (chuỗi [k]);
k = k + 1;
}
//Serial.print ("");
độ trễ (dotDelay * 3);
chuyển đổi =! chuyển đổi; // chuyển đổi màu sắc giữa các chữ cái
}
void flashDotOrDash (char dotOrDash)
{
if (dotOrDash == '.')
{
if (cờ == 1)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
}
khác nếu (cờ == 2)
{
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinBlue, CAO);
}
khác nếu (cờ == 3)
{
kỹ thuật sốWrite (ledPinGreen, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinGreen, CAO);
}
khác nếu (cờ == 4)
{
kỹ thuật sốWrite (ledPinGreen, THẤP);
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinGreen, CAO);
kỹ thuật sốWrite (ledPinBlue, CAO);
}
khác nếu (cờ == 5)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (ledPinGreen, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
kỹ thuật sốWrite (ledPinGreen, CAO);
}
khác nếu (cờ == 6)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
kỹ thuật sốWrite (ledPinBlue, CAO);
}
khác nếu (cờ == 7)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (ledPinGreen, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
kỹ thuật sốWrite (ledPinBlue, CAO);
kỹ thuật sốWrite (ledPinGreen, CAO);
}
khác nếu (cờ == 8)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
}
khác nếu (cờ == 9)
{
if (chuyển đổi! = 0)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
}
khác
{
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinBlue, CAO);
}
}
}
khác
{
if (cờ == 1)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
}
khác nếu (cờ == 2)
{
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinBlue, CAO);
}
khác nếu (cờ == 3)
{
kỹ thuật sốWrite (ledPinGreen, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinGreen, CAO);
}
khác nếu (cờ == 4)
{
kỹ thuật sốWrite (ledPinGreen, THẤP);
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinGreen, CAO);
kỹ thuật sốWrite (ledPinBlue, CAO);
}
khác nếu (cờ == 5)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (ledPinGreen, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
kỹ thuật sốWrite (ledPinGreen, CAO);
}
khác nếu (cờ == 6)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
kỹ thuật sốWrite (ledPinBlue, CAO);
}
khác nếu (cờ == 7)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (ledPinGreen, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
kỹ thuật sốWrite (ledPinBlue, CAO);
kỹ thuật sốWrite (ledPinGreen, CAO);
}
khác nếu (cờ == 8)
{
kỹ thuật sốWrite (ledPinGreen, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinGreen, CAO);
}
khác nếu (cờ == 9)
{
if (chuyển đổi! = 0)
{
kỹ thuật sốWrite (ledPinRed, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinRed, CAO);
}
khác
{
kỹ thuật sốWrite (ledPinBlue, THẤP);
kỹ thuật sốWrite (buzzer, CAO);
độ trễ (dotDelay * 3);
kỹ thuật sốWrite (buzzer, THẤP);
kỹ thuật sốWrite (ledPinBlue, CAO);
}
}
}
độ trễ (dotDelay); // giữa các chữ cái
// toggle =! toggle; // chuyển đổi giữa các nguyên tử
}
void selectorSwitch1 (int AI)
{
if ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // xem giá trị đã thay đổi chưa?
{
if (AI & gt; 11 * splitBits) // phải là 7,8,9,10,11,12.
{
if (AI & gt; 17 * splitBits) // phải là 10,11,12.
{
if (AI & gt; 21 * splitBits) // phải là 12.
{
cờ = 12;
}
khác // phải là 10.11.
{
if (AI & gt; 19 * splitBits) // phải là 11.
{
cờ = 11;
}
khác // phải là 10.
{
cờ = 10;
}
}
}
khác // phải là 7,8,9.
{
if (AI & gt; 15 * splitBits) // phải là 9.
{
cờ = 9;
}
khác // phải là 7.8.
{
if (AI & gt; 13 * splitBits) // phải là 8.
{
cờ = 8;
}
khác // phải là 7.
{
cờ = 7;
}
}
}
}
khác // phải là 1,2,3,4,5,6.
{
if (AI & gt; 5 * splitBits) // phải là 4,5,6.
{
if (AI & gt; 9 * splitBits) // phải là 6.
{
cờ = 6;
}
khác // phải là 4,5.
{
if (AI & gt; 7 * splitBits) // phải là 5
{
cờ = 5;
}
khác // phải là 4.
{
cờ = 4;
}
}
}
khác // phải là 1,2,3.
{
if (AI & gt; 3 * splitBits) // phải là 3.
{
cờ = 3;
}
khác // phải là 1,2.
{
if (AI & gt; splitBits) // phải là 2.
{
cờ = 2;
}
khác // phải là 1.
{
cờ = 1;
}
}
}
}
}
oldAI = AI;
// độ trễ (500);
//Serial.println ();
}
void selectorSwitch (int AI)
{
if ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // xem giá trị đã thay đổi chưa?
{
if (AI & gt; 11 * splitBits) // phải là 7,8,9,10,11,12.
{
if (AI & gt; 17 * splitBits) // phải là 10,11,12.
{
if (AI & gt; 21 * splitBits) // phải là 12.
{
động vật = 12;
}
khác // phải là 10.11.
{
if (AI & gt; 19 * splitBits) // phải là 11.
{
động vật = 11;
}
khác // phải là 10.
{
động vật = 10;
}
}
}
khác // phải là 7,8,9.
{
if (AI & gt; 15 * splitBits) // phải là 9.
{
động vật = 9;
}
khác // phải là 7.8.
{
if (AI & gt; 13 * splitBits) // phải là 8.
{
động vật = 8;
}
khác // phải là 7.
{
động vật = 7;
}
}
}
}
khác // phải là 1,2,3,4,5,6.
{
if (AI & gt; 5 * splitBits) // phải là 4,5,6.
{
if (AI & gt; 9 * splitBits) // phải là 6.
{
động vật = 6;
}
khác // phải là 4,5.
{
if (AI & gt; 7 * splitBits) // phải là 5
{
động vật = 5;
}
khác // phải là 4.
{
động vật = 4;
}
}
}
khác // phải là 1,2,3.
{
if (AI & gt; 3 * splitBits) // phải là 3.
{
động vật = 3;
}
khác // phải là 1,2.
{
if (AI & gt; splitBits) // phải là 2.
{
động vật = 2;
}
khác // phải là 1.
{
động vật = 1;
}
}
}
}
}
oldAI = AI;
// độ trễ (500);
//Serial.println ();
}
Nếu bạn lặp đi lặp lại sau khi chủ, bây giờ trong tay bạn là cùng một món đồ chơi mà bạn có thể quan tâm đến con cái của bạn trong mã Morse. Và khi chúng lớn lên, với một bản làm lại đơn giản của phần sụn, bạn có thể có cơ sở cho một "con cáo" tự động tiêu chuẩn, truyền một lựa chọn MOE, MOI, MOS, MOH hoặc MO5, bật trong một phút cứ sau bốn phút.
P.S. đặc biệt đối với những người nhàm chán, những người tìm thấy lỗi với tiêu đề: động vật là tên gọi chung của động vật, chim và côn trùng.