Turinys:
- 1 žingsnis: medžiagos
- 2 žingsnis: statybos planas
- 3 žingsnis: Aparatūra: grandinės dizainas
- 4 žingsnis: Aparatūra: akrilo pjovimas
- 5 žingsnis: „Arduino“programavimo kodas
- 6 žingsnis: baigtas žvilgsnis
Video: Taško šviesos modelis: 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Pradėjau nuo minties „Ar galiu valdyti šviesą savo rankomis ir išreikšti savo valią?“.
Tai „taškinis šviesos raštas“, leidžiantis patiems kurti savo spalvas, kurti savo modelius tomis spalvomis ir patirti įvairius animacijos efektus.
1 žingsnis: medžiagos
- Arduino UNO x 13
- WS2901 arba WS2811 pikselių LED juostelė (130 LED)
- Mygtuko jungiklis x 1
- Fiksavimo jungiklis x 65
- Potencijos matuoklis x 65
- Vaivorykštinis kabelis
- Galia pakankamai SMPS
- Laidininko kabelis
- Akrilo skaidrus apvalus strypas (30 mm skersmens)
- Juodos spalvos akrilo plokštė (5T) (500 mm*790 mm) x 2, (500 mm*35 mm) x 2, (790 mm*35 mm) x 2
2 žingsnis: statybos planas
3 žingsnis: Aparatūra: grandinės dizainas
-
Iškirpkite akrilo plokštę, kaip nurodyta aukščiau. (žr. 2 veiksmą)
- Vienas gabalas neo pikselių šviesos diodų dedamas ant stiprumo matuoklio angos viršaus ir apačios, o iš viso pritvirtintos 65 poros neo pikselių šviesos diodų.
- Pora neo pikselių šviesos diodų yra prijungti kartu, kad sudarytų vieną „Arduino“kaištį.
- Prie stiprumo matuoklio skylių įstatykite 65 stiprumo matuoklius. (Padėkite jį priešingoje neo-pikselių paviršiaus pusėje.)
- Pritvirtinkite 65 jungiklius, kad jie atitiktų jungiklio skyles.
- Iš viso prie kiekvienos iš trylikos zonų yra pritvirtinta trylika „Arduino UNO“, kad į vieną „Arduino UNO“būtų galima susieti penkias 65 aparatūros dalis.
- Kaip parodyta pridedamoje nuotraukoje, prijunkite stiprumo matuoklius, jungiklius ir neo pikselių šviesos diodus prie „Arduino UNO“kaiščių viela. (žr. 2 veiksmą)
- Kelių „Arduino UNO“GND ir 5 V kaiščiai surenkami prie kabelių laidų, tada prijungiami prie išorinio maitinimo šaltinio. (žr. 2 veiksmą)
- Pašalinkite dulkes oro slėgiu.
4 žingsnis: Aparatūra: akrilo pjovimas
- Nupjaukite akrilo strypą iki 50 mm ilgio.
- Viena akrilo strypo pusė yra išgręžta tokio dydžio ir gylio, kad atitiktų stiprumo matuoklio valdiklio dalį.
- Akrilo strypas yra apipjautas šiek tiek plačiau nei skylė, kad tarpas gerai tilptų į stiprumo matuoklį.
-
Kitoje pusėje yra šiek tiek švitrinio popieriaus, kad šviesa būtų sklandžiai perduodama.
5 žingsnis: „Arduino“programavimo kodas
www.kasperkamperman.com/blog/arduino/ardui…
„hsb – rgb“kodas 를 참고 한 사이트
#įtraukti
// 'adafruit_neopixel' 헤더 파일 라는 외부 라이브러리 를 포함
// 네오 픽셀 연결 핀 번호 선언
#define PIN1 2 #define PIN2 3 #define PIN3 4 #define PIN4 5 #define PIN5 6
#define NUMPIXELS 2 // 네오 픽셀 LED 갯수
#define NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)
// 네오 픽셀 오브젝트 Masyvas 선언
Adafruit_NeoPixel pikselių = {Adafruit_NeoPixel (NUMPIXELS, Pin1, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN2 NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN3, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN4, NEO_GRB + NEO_KHZ800), „Adafruit_NeoPixel“(NUMPIXELS, PIN5, NEO_GRB + NEO_KHZ800)}; //// 네오 픽셀 을 사용 하기 위해 객체 하나 를 생성 한다. // 첫번째 인자 값 은 네오 의 의 LED 의 개수 // 두번째 인자 값 은 네오 픽셀 이 연결된 아두 이노 이노 의 바뀌는 세번째
//////////////////////////////////////////////////////////////
////// HSV 를 RGB 로 변환 하는 함수 getRGB () 를 위한 변수 와 함수 선언
const baitas dim_curve = {
0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 35, 36, 36, 37, 38, 38, 39, 40, 40, 41, 42, 43, 43, 44, 45, 46, 47, 48, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, 83, 85, 86, 88, 90, 91, 93, 94, 96, 98, 99, 101, 103, 105, 107, 109, 110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 132, 134, 136, 139, 141, 144, 146, 149, 151, 154, 157, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 190, 193, 196, 200, 203, 207, 211, 214, 218, 222, 226, 230, 234, 238, 242, 248, 255, }; //
void getRGB (int atspalvis, int sat, int val, int spalvos [5] [3], int indeksas) {
val = dim_curve [val]; sat = 255 - dim_curve [255 - sat];
// 색조, 채도 및 밝기 (HSB /HSV) arba RGB
// dim_curve 는 밝기 값 및 채도 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int b; int bazė;
jei (šeštadienis == 0) {
spalvos [indeksas] [0] = val; spalvos [indeksas] [1] = val; spalvos [indeksas] [2] = val; } Kitas {
bazė = ((255 - sat) * val) >> 8;
jungiklis (atspalvis / 60) {
0 atvejis: r = val; g = ((((val - bazė) * atspalvis) / 60) + bazė; b = bazė; pertrauka;
1 atvejis:
r = ((((val - bazė) * (60 - (atspalvis % 60))) / 60) + bazė; g = val; b = bazė; pertrauka;
2 atvejis:
r = bazė; g = val; b = ((((val - bazė)) * (atspalvis % 60)) / 60) + bazė; pertrauka;
3 atvejis:
r = bazė; g = ((((val - bazė) * (60 - (atspalvis % 60))) / 60) + bazė; b = val; pertrauka;
4 atvejis:
r = (((val - bazė) * (atspalvis % 60)) / 60) + bazė; g = bazė; b = val; pertrauka;
5 atvejis:
r = val; g = bazė; b = ((((val - bazė) * (60 - (atspalvis % 60))) / 60) + bazė; pertrauka; }
spalvos [indeksas] [0] = r;
spalvos [indeksas] [1] = g; spalvos [indeksas] [2] = b; }
}
int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb spalva 선언
int atspalvis [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 atspalvis 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언
// 일반 변수 선언
int startsSwitch = {8, 9, 10, 11, 12}; // įjungta/išjungta 버튼 핀 번호 loginė pradinė būsena = {false, false, false, false, false}; // įjungti/išjungti 상태 변수
const int colorPin = {A0, A1, A2, A3, A4}; // 가변 저항 핀 번호
int colorVal = {0, 0, 0, 0, 0}; // 가변 저항 초기 값
int animationButton = 7; // 애니메이션 모드 변환 버튼 핀 번호
/////////////////////////////////////////////////
// 애니메이션 모든 변환 을 위한 버튼 디 바운싱 변수 선언 // 디 바운싱? Button 시간 내 많은 이벤트 가 발생 하는것 에 대한 문제 에 대해서 지정된 시간 간격 으로 으로 button button 호출 button button int buttonState; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH; // 이전 의 판독 값 은 켜진 상태 로 unsigned long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 unsigned long debounceDelay = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 증가 한다 int MODE = 0; // 애니메이션 모드 변수
int B_Intervalas [5]; // 블 링킹 을 위한 각 모듈 의 랜덤 속도 변수
int B_Min = 100; // 블 링킹 최단 속도; int B_Max = 500; // 블 링킹 최장 속도; int R_Intervalas = 50; // 레인보우 애니메이션 속도 변수 int D_Interval = 10; // 디밍 속도 변수
loginis B_state [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수
///////////////////////////////////////////////////////
// 멀티 테스 킹 애니메이션 을 위한 시간 변수 선언
nepasirašyta ilga srovėMillis; // 현재 시간 변수
nepasirašytas ilgas B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 nepasirašytas ilgas DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) unsigned long R_previousMillis; // 레인보우 타이머 nepasirašytas ilgas D_previousMillis; // 디밍 타이머
boolean firstRainbow = tiesa; // 레인보우 색상 초기화 상태 변수
int „RainbowSpeed“; // 레인보우 변환 변수
int Ryškus = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////
void setup () {
for (int i = 0; i <NUM_LIGHTS; i ++) {pixels .begin (); // 네오 픽셀 오브젝트 초기화}
// 버튼 인풋 설정
for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startsSwitch , INPUT_PULLUP); // įjungti/išjungti 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
už (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (atsitiktinis (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 (인터발) 변수 생성}
Serial.begin (9600); // 통신 설정
}
void loop () {
REŽIMAS = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를 넣는다
// 버튼 과 가변 저항 을 값 을 각각 읽어 변수 에 지정 한다.
for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startsSwitch ); // įjungti/išjungti 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (startsSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}
jungiklis (REŽIMAS) {// 애니메이션 함수 스위치 문
0 atvejis: įjungtas (); // on 함수 실행 break; // 조건문 에서 빠져 나가라
1 atvejis:
vaivorykštė (); // vaivorykštė 함수 실행 pertrauka;
2 atvejis:
Pritemdymas(); // pritemdymas 함수 실행 pertrauka;
3 atvejis:
mirksi (); // mirksi 함수 실행 pertrauka; }
for (int i = 0; i <NUM_LIGHTS; i ++) {pixels .show (); // 네오 픽셀 오브젝트 배열 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 을 읽어 모드 를 결정 한다.
//////////////////////////////////////////////////////////////////// /// currentMillis = milis (); // 시간 측정 int reading = digitalRead (animationButton); if (skaitymas! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 와 판독 값 비교 lastDebounceTime = milis (); // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 에 넣음}
if ((currentMillis - lastDebounceTime)> debounceDelay) {
jei (skaitant! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교
buttonState = skaitymas; // 판독 값 을 buttonState 에 대입
if (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면
MODE ++; // 버튼 모드 1 씩 증가 if (MODE> 3) {MODE = 0; firstRainbow = tiesa; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Ryškus = 15; // 밝기 는 15}}}}
lastButtonState = skaitymas; // 판독 값 을 이전 의 버튼 상태 에 대입
grįžti MODE; 하고 를 종료 하고 režimas 함수 로 값 을 리턴 하라}
////////////////////////////////////////////////////////////////////
// animacijos režimo svyravimai
// toliau
void on () {Serial.println ("įjungta"); // 시리얼 모니터 에 on 을 써라 for (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}
// Vaivorykštė
void rainbow () {Serial.println ("lietus"); // 시리얼 모니터 에 lietus 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}
už (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 레인보우 컬러 셋팅}
}
//Pritemdymas
void dimming () {Serial.println ("pritemdytas"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (ryškus); // 시리얼 모니터 에 Ryškus 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 에 라 라 Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} if (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Ryškus = suvaržyti (Ryškus, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정 한다
už (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}
// Mirksi
void mirksi () {Serial.println ("mirksėti"); // mirksi mirksi 를 써라
(int i = 0; i B_Interval ) {// 흐른 시간 값 이 블링크 인터벌 값 보다 크면
B_previousMillis = dabartinisMillis; // 현재 시간 을 이전 의 블링크 시간 에 넣어 B_state =! B_state ; // 각 모듈 의 블 링킹 상태 변수 값 의 반대 값 을 대입 하라}} for (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 상태 읽 읽 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} else {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지}}}
}
////////////////////////////////////////////////////////////////////////////////////////
// pagrindinė funkcija
// spalvų rinkinys
void color_set (int indeksas, int colorSenser) {
if (startState [indeksas]) {atspalvis [indeksas] = žemėlapis (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorSenser 에) getRGB (atspalvis [indeksas], 255, 255, rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (indeksas); // 컬러 셋팅 하지 않음}
////// noColor rinkinys
void noColor_set (int indeksas) {// 컬러 셋팅 하지 않는 함수 설정
for (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}
//// dimColor rinkinys
void dim_color_set (int indeksas, int BC) {// 디밍 컬러 셋팅 함수 설정
if (startState [indeksas]) {atspalvis [indeksas] = žemėlapis (colorVal [indeksas], 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorVal 에) getRGB (atspalvis [indeksas], 255, prieš Kristų, rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (indeksas); // 컬러 셋팅 하지 않음}
6 žingsnis: baigtas žvilgsnis
Rekomenduojamas:
LM3915 logaritminio taško/juostos ekrano tvarkyklės IC naudojimas: 7 žingsniai
LM3915 logaritminio taško/juostos ekrano tvarkyklės IC naudojimas: LM3915 siūlo paprastą būdą parodyti logaritminę įtampos lygį, naudojant vieną ar kelias dešimties šviesos diodų grupes su minimaliu triukšmu. Jei norite pagaminti VU skaitiklį, turėtumėte naudoti LM3916, kurį padengsime paskutinėje šio bandymo dalyje
Paprastas automatinis vieno taško geležinkelio modelis, važiuojantis dviem traukiniais: 13 žingsnių (su nuotraukomis)
Paprastas automatinis modelio geležinkelis, važiuojantis dviem traukiniais: „Arduino“mikrovaldikliai yra puikus būdas automatizuoti geležinkelio modelių išdėstymą dėl mažos kainos, atviro kodo aparatūros ir programinės įrangos bei didelės bendruomenės, kuri jums padės. Modelių geležinkeliuose „Arduino“mikrovaldikliai gali pasirodyti esą
Naujo geografinės talpyklos kelio taško išsaugojimas „iPhone“: 8 žingsniai
Naujo geografinės talpyklos kelio taško išsaugojimas „iPhone“: Ar bandote rasti „iPhone“talpyklų, bet negalite suprasti, kaip pereiti į galvosūkio finalą, ar reikia pamatyti, kur yra tako kelias į talpyklą. Neieškokite daugiau, šis nurodymas padės jums atlikti šį procesą. Patikrinkite mano geocachiną
„Arduino“tanko automobilio 6 pamoka-„Bluetooth“ir „Wifi“karšto taško valdymas: 4 žingsniai
„Arduino Tank Car 6“pamoka-„Bluetooth“ir „Wi-Fi“karšto taško valdymas: Šioje pamokoje mes mokomės valdyti „Robot“automobilio mobiliąją programėlę per „WiFi“ir „Bluetooth“. Mes tiesiog naudojame „esp8266“„Wi-Fi“espazijos lentą kaip išplėtimo plokštę ir valdome cisterną per IR imtuvą ankstesnėse pamokose. Šioje pamokoje sužinosime
KAIP PADARYTI IR IR IR ŠVIESOS ŠVIESOS ŠVIESOS ŠVIESOS KAMERĄ: 5 žingsniai (su paveikslėliais)
KAIP PADARYTI IR IR IR ŠVIESOS ŠVIESOS ŠVIESOS KAMERĄ: Supratau infraraudonųjų spindulių kamerą, kad galėčiau ją naudoti judesio fiksavimo sistemoje. Su juo taip pat galite gauti tokių nuostabių vaizdų: blizgių objektų, matomų fotoaparate, kurie yra normalūs realybėje. Už pigią kainą galite gauti gana gerų rezultatų. Jis