Может всё таки “поцантометра”?
Я хотел изначально так и написать, но подумал «не дойдёт» до тс…))
Он прозрачный и со стороны где он должен быть, ни чего нету. Я его потом разобрал, но не сфотографировал.
Новый после завтра придёт.
Этот купил на озоне за 153 рубля.
Етить колотить. Это SG90 же?
Заставляешь деда по вечерам шарахаться…. Щас на свои гляну (которые точно рабочие).
Ёшки-матрёшки. Если у него SG90, то малой прав - на моих зеленого цвета резистор в том месте, где у него отсутствует ))
Там и на фотке видно было, вал торчит в никуда…
Да я заказывал пяток, а всего два использовал (и то потом отказался по причине перехода на другую схему), забыл уже как выглядят. Что-то в памяти «застряло», что резистор над мотором )))
Всем здравствуйте.
Хотел бы поделиться своим проектом (“хотелкой”), который прошол тестирование, так сказать нависным монтажём.
Двойной тир, на ардуино уно (может пойдёт по объёму и в нано, не проверял).
Механический (стрельба по мишени из воздушки).
Лазерный тир (стрельба по мишени из лазера).
Код:
/*
EASY LASER GUN BY ARNAUD ATCHIMON @NEOFUTURISM.NET
DO NOT SHOOT YOUR EYES OUT!! PLEASE :)
Using Photocell_Example.ino from (https://www.sparkfun.com/products/9088) Jim Lindblom @ SparkFun Electronics
LIBRARY NEEDED:
I'm using the fanstastic servo library from PaulStoffregen @ https://github.com/PaulStoffregen/PWMServo
CONNECTION
----------
NANO
PIN 5 // BUTTON PINцццыыывыйы
PIN 6 // NEOPIXEL PIN
PIN 9 // SERVO PIN
PIN A0 // LDR PIN -- 1OKOHM RESISTOR TO GROUND
*/
#include <PCF8574.h> // Создаем объект и указываем адрес устройства 0x27
#include <Adafruit_NeoPixel.h>
#include <PWMServo.h>
#include "TARGET_PITCHES.h"
PWMServo MYSERVO;
PCF8574 pcf8574_1(0x27);
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
const int lightPin = A0; // PHOTOCELL PIN
const int btnMode = 5; //TRIGGER BTN
const int ledPin = 6; //NEOPIXEL PIN
const int ledCount = 24; //NEOPIXEL COUNT
const int piezoPin = 8; // SOUND PIN
const int servoPin = 9; // SERVO PIN
const int ONBOARD_PIN = 13; // ONBOARD LED
boolean buttonWasUp_1 = true;
boolean buttonWasUp_2 = true;
boolean buttonWasUp_3 = true;
boolean buttonWasUp_4 = true;
boolean ledEnabled_1 = false;
boolean ledEnabled_2 = false;
boolean ledEnabled_3 = false;
boolean ledEnabled_4 = false;
//
int MELODY[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};
bool basePosition = false;
int servoPos = 0; // SERVO POSITION
int minServoPos = 100;
int maxServoPos = 20;
int targetHit = 0; //TARGET COUNT
int targetLight = 0;
float lightHit = 4; // NEOPIXE RING (24 / 4) = 6 SHOTS TO FINISH GAME
int modeBtn;
int modeSelect = 0;
// LDR VALUES YOU DO NOT NEED TO MODIFY THIS, CONNECT A 10K RESISTOR BETWEEEN GROUND AND A0
const float VCC = 4.98;
const float r_div = 4660.0;
const float DARK_THRESHOLD = 10000.0;
//задаем начальные значения для переменных
Adafruit_NeoPixel neoLights(ledCount, ledPin, NEO_GRB + NEO_KHZ800);
void setup()
{
Serial.begin(115200);
pinMode(lightPin, INPUT);
pinMode(btnMode, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(ONBOARD_PIN, OUTPUT);
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
neoLights.begin();
neoLights.show();
neoLights.setBrightness(100);
//SERVO AND NEOPIXEL LOOP, IF THE SERVO GET STUCK HERE, PRESS RESET A FEW TIME, OR CHECK POWERING
colorWipe_B(neoLights.Color(255, 0, 0), 10);
MYSERVO.attach(servoPin);
SERVO_INIT();
// SERVO_RST();
colorWipe_B(neoLights.Color(0, 0, 255), 10);
colorWipe_B(neoLights.Color(0, 0, 0), 10); // CLEARING LEDS
//конфигурируем пины, пин кнопки на вход(с него мы будем считывать данные)
pcf8574_1.pinMode(P0, OUTPUT);
pcf8574_1.pinMode(P1, OUTPUT);
pcf8574_1.pinMode(P2, OUTPUT);
pcf8574_1.pinMode(P3, OUTPUT);
//пин светодиода на выход, на него мы будем подавать сигнал
pcf8574_1.pinMode (P4, INPUT_PULLUP);
pcf8574_1.pinMode (P5, INPUT_PULLUP);
pcf8574_1.pinMode (P6, INPUT_PULLUP);
pcf8574_1.pinMode (P7, INPUT_PULLUP);
// Проверка инициализация библиотеки pcf8574
Serial.print("Init pcf8574...");
if (pcf8574_1.begin()){
Serial.println("OK");}
else{
Serial.println("ERROR");}
delay(50); // Необходимо время для инициализации
}
void loop()
{
int lightAdc = analogRead(lightPin);
modeBtn = digitalRead(btnMode);
// LDR CHECK
float lightV = lightAdc * VCC / 1023.0;
float lightR = r_div * (VCC / lightV - 1.0);
Serial.println("Voltage: " + String(lightV) + " V");
Serial.println("Resistance: " + String(lightR) + " ohms");
Serial.println("base position: " + String(basePosition) + " ohms");
//BUTTON TO MOVE FROM DESK TO FLAT MODE
if (modeBtn == LOW) {
delay(250);
modeSelect++;
if (modeSelect == 1)
{ SERVO_FLAT();
} else {
SERVO_INIT();
}
}
//MODE:: TABLE MODE VS WALL MODE
if (modeSelect == 0)
{
// POINT THE LASER TO THE LDR AND SET "lightHit" ACCORDINGLY
if (lightV >= lightHit) {
HITMISS(minServoPos, maxServoPos);
} else(noTone(piezoPin));
}
if (modeSelect == 1)
{
if (lightV >= lightHit) {
HITMISS(maxServoPos, minServoPos);
} else(noTone(piezoPin));
}
if (modeSelect >= 2) {
modeSelect = 0;
}
if (targetHit < ledCount / 2) {
targetLight = 0;
}
else if (targetHit >= 12 && targetHit < ledCount) {
targetLight = 1;
}
switch (targetLight) {
case 0:
colorWipe(neoLights.Color(0, 255, 0), 10, targetHit);
break;
case 1:
colorWipe(neoLights.Color(0, 0, 255), 10, targetHit);
break;
}
if (targetHit >= ledCount) {
for (int i = 0; i <= 2; i++) {
// i++;
colorWipe_B(neoLights.Color(255, 0, 0), 15);
colorWipe_B(neoLights.Color(0, 255, 0), 15);
colorWipe_B(neoLights.Color(0, 0, 255), 15);
colorWipe_B(neoLights.Color( 0, 0, 0), 5);
}
MYSERVO.detach(); // STOP THE SERVO BUZZ
delay(500);
targetHit = 0;
}
// threshold setting, turn the LED on.
// if (lightR >= DARK_THRESHOLD) {
// digitalWrite(ledPin, HIGH);
// } else {
// digitalWrite(ledPin, LOW);
// }
Serial.println();
Serial.print("TARGET ");
Serial.println(targetHit);
Serial.print("MODES ");
Serial.println(modeSelect);
delay(1);
//1
boolean buttonIsUp_1 = pcf8574_1.digitalRead(P4);
if (buttonWasUp_1 && !buttonIsUp_1) {
delay(25);
buttonIsUp_1 = pcf8574_1.digitalRead (P4);
if (!buttonIsUp_1) {
ledEnabled_1 = !ledEnabled_1;
pcf8574_1.digitalWrite(P0, ledEnabled_1);
}
}
buttonWasUp_1 = buttonIsUp_1;
//2
boolean buttonIsUp_2 = pcf8574_1.digitalRead(P5);
if (buttonWasUp_2 && !buttonIsUp_2) {
delay(25);
buttonIsUp_2 = pcf8574_1.digitalRead (P5);
if (!buttonIsUp_2) {
ledEnabled_2 = !ledEnabled_2;
pcf8574_1.digitalWrite(P1, ledEnabled_2);
}
}
buttonWasUp_2 = buttonIsUp_2;
//3
boolean buttonIsUp_3 = pcf8574_1.digitalRead(P6);
if (buttonWasUp_3 && !buttonIsUp_3) {
delay(25);
buttonIsUp_3 = pcf8574_1.digitalRead (P6);
if (!buttonIsUp_3) {
ledEnabled_3 = !ledEnabled_3;
pcf8574_1.digitalWrite(P2, ledEnabled_3);
}
}
buttonWasUp_3 = buttonIsUp_3;
//4
boolean buttonIsUp_4 = pcf8574_1.digitalRead(P7);
if (buttonWasUp_4 && !buttonIsUp_4) {
delay(25);
buttonIsUp_4 = pcf8574_1.digitalRead (P7);
if (!buttonIsUp_4) {
ledEnabled_4 = !ledEnabled_4;
pcf8574_1.digitalWrite(P3, ledEnabled_4);
}
}
buttonWasUp_4 = buttonIsUp_4;
}
//NEOPIXELLED SETUP
void colorWipe(uint32_t color, int wait, int colorNum) {
for (int i = 0; i < colorNum; i++) {
neoLights.setPixelColor(i, color);
neoLights.show();
delay(wait);
}
}
void colorWipe_B(uint32_t color, int wait) {
for (int i = 0; i < neoLights.numPixels(); i++) {
neoLights.setPixelColor(i, color);
neoLights.show();
delay(wait);
}
}
//SERVO SETUP
void SERVO_INIT() {
SERVO_MOVE(minServoPos);
delay(1000);
SERVO_MOVE(maxServoPos);
delay(1500);
MYSERVO.detach();
}
void SERVO_FLAT() {
SERVO_MOVE(maxServoPos);
delay(1000);
SERVO_MOVE(minServoPos);
delay(500);
MYSERVO.detach();
}
void SERVO_MOVE(int servoMove) {
MYSERVO.attach(servoPin);
MYSERVO.write(servoMove);
// delay(10);
}
//SERVO IS HIT
void HITMISS(int maxServo, int minServo) {
tone(piezoPin, 1000, 500);
targetHit = targetHit + 4;
SERVO_MOVE(maxServo);
colorWipe_B(neoLights.Color(0, 0, 255), 10);
SERVO_MOVE(minServo);
colorWipe_B(neoLights.Color(0, 0, 0), 10);
}
void SERVO_RST() {
for (servoPos = 0; servoPos < minServoPos; servoPos += 10) { // goes from 0 degrees to 180 degrees, 1 degree steps
MYSERVO.write(servoPos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (servoPos = minServoPos; servoPos >= 1; servoPos -= 10) { // goes from 180 degrees to 0 degrees
MYSERVO.write(servoPos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
MYSERVO.detach();
}
(на коментарии сильно не обращайте внимание)
Видео обзор
Ты если делишься - предоставляй всё как положено. В том числе схему подключения, а не наскальные рисунки.
Нет, не такая.
А как тогда? Первый раз просто.
Может надо макетную схему описать, что куда?
Охххх …
Такую, тогда я позже выложу.
Может есть отдельная часть форума, куда делятся готовыми проектами?
Нарисуй на бумаге и вставь фото.
Да какой же ты блин умный, только толку ноль.