目前分類:NetYea (129)

瀏覽方式: 標題列表 簡短摘要

當在設計網頁時,網頁預設是新細明體,

看起來真的不是很都雅

所以測驗考試改變一下字體

讓網頁看起來更順眼

所以在CSS裡,插手

 

  1. @font-face {
  2.   font-family: 'cwTeXHei';
  3.   font-style: normal;
  4.   font-weight: 500;
  5.   src: url(//fonts.gstatic.com/ea/cwtexhei/v3/cwTeXHei-zhonly.eot);
  6.   src: url(//fonts.gstatic.com/ea/cwtexhei/v3/cwTeXHei-zhonly.eot?#iefix) format('embedded-opentype'),
  7.        url(//fonts.gstatic.com/ea/cwtexhei/v3/cwTeXHei-zhonly.woff2) format('woff2'),
  8.        url(//fonts.gstatic.com/ea/cwtexhei/v3/cwTeXHei-zhonly.woff) format('woff'),
  9.        url(//fonts.gstatic.com/ea/cwtexhei/v3/cwTeXHei-zhonly.ttf) format('truetype');
  10. }
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

用ESP32 PWM實現LED慢慢亮起。

程式的部分首要分成三個:1.設定頻道LEDchannel、2.附加到PIN腳、3.決議輸出巨細。

1.設定頻道LEDchannel屬性

ledcSetup(LEDChannel, freq, resolution);
//LEDChannel設定為0,分歧輸出要設定到分歧頻道,例如RGB LED就要開三個頻道劃分管理R、G、B
//freq輸出頻率,建議值5000 Hz
//resolution代表輸出解析度,例如8代表0-255,10代表0-1023

2.附加到PIN腳

ledcAttachPin(ledPin, LEDChannel);
//ledPin代表腳位,看你把裝備接在哪一個腳位上面
//LEDchannel代表步調1所宣告的LEDchannel,也就是說把設定好的LEDchannel屬性附加到某個腳位上

3.決定輸出巨細。

ledcWrite(LEDChannel, dutyCycle);
//將LEDchannel輸出dutyCycle的值。

範例程式將使接在Pin16的LED逐步亮起並熄滅,規範複製於 https://randomnerdtutorials.com/esp32-pwm-arduino-ide/

Arduino ESP32 PWM輸出 讓LED漸亮漸暗
Arduino ESP32 PWM輸出 讓LED漸亮漸暗

  1. // the number of the LED pin
  2. const int ledPin = 16;  // 16 corresponds to GPIO16
  3.  
  4. // setting PWM properties
  5. const int freq = 5000;
  6. const int ledChannel = 0;
  7. const int resolution = 8;
  8.  
  9. void setup(){
  10.   // configure LED PWM functionalitites
  11.   ledcSetup(ledChannel, freq, resolution);
  12.   
  13.   // attach the channel to the GPIO to be controlled
  14.   ledcAttachPin(ledPin, ledChannel);
  15. }
  16.  
  17. void loop(){
  18.   // increase the LED brightness
  19.   for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
  20.     // changing the LED brightness with PWM
  21.     ledcWrite(ledChannel, dutyCycle);
  22.     delay(15);
  23.   }
  24.  
  25.   // decrease the LED brightness
  26.   for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
  27.     // changing the LED brightness with PWM
  28.     ledcWrite(ledChannel, dutyCycle);   
  29.     delay(15);
  30.   }
  31. }
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

信件總是被退?但願別的mail server相信我寄出的信?那麼你可以設定dkim。

dkim 是什麼?
DKIM (Domain Keys Identified Mail),網域金鑰認證郵件。

DKIM 和ssl(https)的運作機制相似,一樣採用公私鑰數位簽章方式。在發送郵件時由發佩服務器對郵件以私鑰進行簽章,而在郵件領受伺務器上,會透過 DNS 查詢寄件者網域的dkim 公鑰資料,然後對這封郵件做簽章解碼,若是解碼成功,代表郵件確切為原始郵件伺服器所寄出。

此舉可以避免假冒的伺服器寄信者來源,讓該網域確切由授權的伺服器所寄出,減少email被偽造起原的可能。

簡單來講 dkim 是用來驗證寄件者是否來自於合法伺服器的方式。



安裝dkim辦事
採用 opendkim 套件來支援dkim

安裝 opendkim

  1. yum -y install epel-release
  2. yum install opendkim
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

Google的地圖相當的方便,不只圖資完全,是以也有很多店家,會將Google地圖嵌到網頁中,讓消費者利便找尋,但Google改版後,很多朋友已找到所在,卻不知要如何嵌到網頁中,這個嵌入鈕,還相當的不顯著,所以筆者就花點時候,將它清算,需要的朋侪,就操作看看吧!

嵌入Google地圖:

Step1
起首,進到https://www.google.com.tw/maps/,接著在左上角輸入要查尋的地址。
網頁若何將 Google地圖 嵌入
網頁若何將 Google地圖 嵌入
Step2
當找到後,點左上的同享圖示,再點分享和嵌入地圖選項。

網頁若何將 Google地圖 嵌入
網頁若何將 Google地圖 嵌入

Step3
當設定好後,將下方的語法複製起來。

Step4
再貼到網頁中。
網頁若何將 Google地圖 嵌入
網頁若何將 Google地圖 嵌入

Step5
這樣就會泛起在網頁中顯示。

 

文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

影片



伺服馬達接線圖
Arduino ESP32 若何 鍵盤節制 伺服馬達Arduino ESP32 若何 鍵盤節制 伺服馬達

黃線  GPIO27  紅線  5V  黑線  GND
ESP32 電力只能鞭策一個馬達,若是要鞭策兩個馬達就要外接電源了

程式碼

  1. #include <Servo.h>
  2. Servo myservo;  // 創立伺服馬達節制
  3.  
  4. // 伺服馬達的連接 GPIO
  5. static const int servoPin = 27;
  6. int pos = 0;
  7. void setup() {
  8.   // put your setup code here, to run once:
  9.   myservo.attach(servoPin);  // 將伺服馬達毗鄰的GPIO pin毗連伺服物件
  10.   Serial.begin(115200);//序列阜連線速度
  11. }
  12.  
  13. void loop() {
  14.   // put your main code here, to run repeatedly:
  15.   if(Serial.available()){                 //
  16.     int num = Serial.parseInt();     // case 前置 num(數字鍵)
  17.    
  18.     switch(num) {                            //   
  19.    
  20.       case 1 :   //1~9
  21.         for(pos = 0; pos < 180; pos += 1) // 一度一度由 0 度扭轉到 180 度
  22.         myservo.write(pos);
  23.         delay(200);
  24.         break;
  25.       
  26.       case 2 : // 1~9
  27.         for(pos = 180; pos>=1; pos-=1) // 一度一度由 180 度扭轉到 0 度
  28.         myservo.write(pos);
  29.         delay(200);
  30.         break;
  31.     }
  32.   }
  33. }
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

Python 使用 MySQL Connector 操作 M

介紹若何利用 Python 的 MySQL Connector 模組毗鄰 MySQL/MariaDB 資料庫,進行查詢、新增或刪除等各類操作。



Python 有很多 MySQL/MariaDB 資料庫相關的模組,而最常被利用的就是 MySQL Connector 與 MySQLdb 這兩個模組,以下是 MySQL Connector 模組的利用體例。
安裝 MySQL Connector 模組
開啟 Windows 中的命令提醒自元,利用 pip 安裝 Python 的 MySQL Connector 模組:

 

文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

電腦中毒是不可避免的,Linux系統也是如斯,在得知系統中毒後,重要使命是找到病毒文件並將其肅清,在Linux系統下可以使用find命令查找病毒,下面通過實例講授下find若何查找病毒。

電腦中毒Linux find饬令快速查找中毒文件教程

文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

學會Arduino基本操控後
必然會想學會無線遙控,如藍芽Bluetooth, Wifi
這篇申明藍芽Bluetooth操控

後果圖
如何用藍芽Bluetooth連線節制 Arduino


影片


代碼:

  1. // Include necessary libraries
  2. #include <BLEDevice.h>
  3. #include <BLEServer.h>
  4. #include <BLEUtils.h>
  5. //#include <BLE2902.h>
  6. //#include <Wire.h>
  7.  
  8. // 定義 UUIDs (注意要與App Inventor內容對應)
  9. #define SERVICE_UUID            "C6FBDD3C-7123-4C9E-86AB-005F1A7EDA01"
  10. #define CHARACTERISTIC_UUID_RX  "B88E098B-E464-4B54-B827-79EB2B150A9F"
  11. #define CHARACTERISTIC_UUID_TX  "D769FACF-A4DA-47BA-9253-65359EE480FB"
  12.  
  13. // 界說LM35 ESP32 GPIO接腳
  14. const int analogIn = A0;
  15.   
  16. int RawValue= 0;
  17. double Voltage = 0;
  18. double tempC = 0;
  19. double tempF = 0;
  20. String BLE_Code;
  21. BLECharacteristic *pCharacteristic;
  22. bool deviceConnected = false;
  23. // Handle received and sent messages
  24. boolean ledState=false;
  25. String message = "";
  26. char incomingChar;
  27.  
  28. // Temperature Sensor 與led接腳變數
  29. float temperature = 0;
  30. const int ledPin = 2;
  31.  
  32. // 設定 callbacks onConnect & onDisconnect函數
  33. class MyServerCallbacks: public BLEServerCallbacks {
  34.   void onConnect(BLEServer* pServer) {
  35.     deviceConnected = true;
  36.   };
  37.   void onDisconnect(BLEServer* pServer) {
  38.     deviceConnected = false;
  39.   }
  40. };
  41.  
  42. // 設定 callback function 當收到新的資訊 (from the Android application)
  43. class MyCallbacks: public BLECharacteristicCallbacks {
  44.   void onWrite(BLECharacteristic *pCharacteristic) {
  45.     std::string rxValue = pCharacteristic->getValue();
  46.     BLE_Code="";
  47.     if(rxValue.length() > 0) {
  48.       Serial.print("領受資料為 : ");
  49.       for(int i = 0; i < rxValue.length(); i++) {
  50.         BLE_Code+=rxValue[i];
  51.         Serial.print(rxValue[i]);
  52.       }
  53.       Serial.println();
  54.       BLE_Code.toUpperCase();
  55.       Serial.println(BLE_Code);
  56.       if(BLE_Code.indexOf("LED")==0)
  57.       {
  58.         ledState=!ledState;
  59.       Serial.println(ledState);
  60.       }
  61.       if(BLE_Code.indexOf("ON")==0)
  62.       {
  63.         Serial.println("LED 點亮!");
  64.         ledState=true;
  65.       }
  66.       else if(BLE_Code.indexOf("OFF")==0) {
  67.         Serial.println("LED 熄滅!");
  68.         ledState=false;
  69.       }
  70.     }
  71.   }
  72. };
  73.  
  74. void setup() {
  75.   Serial.begin(115200);
  76.   pinMode(ledPin, OUTPUT);
  77.    
  78.   // 建立BLE Device
  79.   BLEDevice::init("ESP32_WeMos1");
  80.  
  81.   // 創立BLE Server
  82.   BLEServer *pServer = BLEDevice::createServer();
  83.   pServer->setCallbacks(new MyServerCallbacks());
  84.  
  85.   // 創立BLE Service
  86.   BLEService *pService = pServer->createService(SERVICE_UUID);
  87.  
  88.   // 成立BLE Characteristic
  89.   pCharacteristic = pService->createCharacteristic(
  90.                       CHARACTERISTIC_UUID_TX,
  91.                       BLECharacteristic::PROPERTY_NOTIFY);                     
  92. //  pCharacteristic->addDescriptor(new BLE2902());
  93.   BLECharacteristic *pCharacteristic = pService->createCharacteristic(
  94.                                          CHARACTERISTIC_UUID_RX,
  95.                                          BLECharacteristic::PROPERTY_WRITE);
  96. pCharacteristic->setCallbacks(new MyCallbacks());
  97.  
  98.   // 開始(起)service
  99.   pService->start();
  100.  
  101.   // 開始(起)advertising
  102.   pServer->getAdvertising()->start();
  103.   Serial.println("守候BLE手機連線....");
  104.   
  105.   digitalWrite(ledPin,LOW);
  106.   delay(500);
  107.   digitalWrite(ledPin,HIGH);
  108.   delay(500);
  109.   digitalWrite(ledPin,LOW);
  110. }
  111.  
  112. void loop() {
  113.   // Check received message and control output accordingly
  114.     if (ledState)
  115.         digitalWrite(ledPin, HIGH);
  116.       else
  117.         digitalWrite(ledPin, LOW);
  118.   delay(20);
  119. }
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

最近因為CENTOS 7 辦事會莫名的封閉,查了發現是KENERL問題,所以決意升到CENTOS 8-9,

我的INTEL雙網網卡 來當作家裡的firewall, 於是安裝了CENTOS 8 - 9, 並用pppoe 來連接中華電信的Router, 並且寫了一些iptables 的rules 來當作firewall 及NAT router.
可是感覺有問題, 有時連不出去. 現象是如許的:


可是在NAT 後面的電腦,GOOGLE PTT網站 連線都很ok, , 只要碰上yahoo跟遊戲 的連線, 就連不上, ftp 也ok.


這問題擺了很久都沒去理睬. 今天終於有空好好的來追問題的泉源. 發現好像是跟pppoe 有關.
問了小洲大大才發現

MTU
MTU (Maximum Transmission Unit) 是指網路介面卡上最大傳輸單元, 其單元為bytes. 在大多數的Ehternet 上, 這個值平常是1500. 因為如斯, 在PPPoE 中, 因為還有header問題, 所以這個值就得設的對照小, 平日為1492 (= 1500 – 2(PPP)- 6(PPPoE))

MSS
MSS (Maximum segment size) 是TCP protocol 中的一個參數, 是指TCP 每次資料傳輸分段的最大值. 當TCP 在handshake 時, 兩邊host 會查看MSS 這個欄位, 來決議兩邊資料傳輸分段的巨細. 在Ethernet 中MSS 值最大為1460 bytes.
緣由是在Ethernet 中 MTU = IP Header + TCP Header + MSS + FCS.
(FCS 是指Frame check sequence, 平日採用CRC演算法, 在Ethernet 中, 它佔4 bytes.)
但是在PPPoE 中MTU 為1492, 所以其MSS 只能設為1452.

問題所在
當CENTOS 8 在開機後, 啟動了ppp0, 其內定將MTU 設為1492, 而且會主動設定一條iptable rule,



因為在NAT 後面的電腦, 其實不知道前端的router 是用什麼介面連到internet, 所以它和遠真個電腦創立TCP 連線時, 有可能會將MSS 設為1460. 但是由於firewall 或router 端使用PPPoE連線, 若MSS 大於1452會造成資料爆掉, 所以上述的iptable rule 強迫偷改其MSS值(在IPV4下 = PMTU – 40, 在IPV6下 = PMTU – 60). 是以MSS 就會被改成1452, 如許子就不會爆掉了.

但是我本身寫的iptable rule script 中, 一開始就用了以下設定, 斷根了本來的所有設定

 

  1. # 清除所有規則
  2. iptables -F -t filter
  3. iptables -X -t filter
  4. iptables -Z -t filter
  5. iptables -F -t mangle
  6. iptables -X -t mangle
  7. iptables -Z -t mangle
  8. iptables -F -t nat
  9. iptables -X -t nat
  10. iptables -Z -t nat
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

Python中履行Pytesseract模組錯誤  - 毛病訊息

  1. raise TesseractNotFoundError()
  2. pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your PATH. See README file for more information.
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

在測試 mnist 數字辨識時

代碼濫觞
https://hackmd.io/@Maxlight/SkuYB0w6_#3-hyperparameter
 

  1. import torch
  2. from torch.utils import data as data_
  3. import torch.nn as nn
  4. from torch.autograd import Variable
  5. import matplotlib.pyplot as plt
  6. import torchvision
  7. import os
  8.  
  9. EPOCH = 1
  10. BATCH_SIZE = 50
  11. LR = 0.001
  12. DOWNLOAD_MNIST = False
  13.  
  14. train_data = torchvision.datasets.MNIST(root = './mnist',train = True,transform = torchvision.transforms.ToTensor(),download = DOWNLOAD_MNIST)
  15.  
  16. print(train_data.train_data.size())
  17. print(train_data.train_labels.size())
  18. plt.ion()
  19. for i in range(11):
  20.   plt.imshow(train_data.train_data[i].numpy(), cmap = 'gray')
  21.   plt.title('%i' % train_data.train_labels[i])
  22.   plt.pause(0.5)
  23. plt.show()
  24.  
  25. train_loader = data_.DataLoader(dataset = train_data, batch_size = BATCH_SIZE, shuffle = True,num_workers = 2)
  26.  
  27. test_data = torchvision.datasets.MNIST(root = './mnist/', train = False)
  28. test_x = torch.unsqueeze(test_data.test_data, dim = 1).type(torch.FloatTensor)[:2000]/255.
  29. test_y = test_data.test_labels[:2000]
  30.  
  31. class CNN(nn.Module):
  32.   def __init__(self):
  33.     super(CNN, self).__init__()
  34.     self.conv1 = nn.Sequential(
  35.         nn.Conv2d(in_channels = 1, out_channels = 16, kernel_size = 5, stride = 1, padding = 2,),# stride = 1, padding = (kernel_size-1)/2 = (5-1)/2
  36.         nn.ReLU(),
  37.         nn.MaxPool2d(kernel_size = 2),
  38.     )
  39.     self.conv2 = nn.Sequential(
  40.         nn.Conv2d(16, 32, 5, 1, 2),
  41.         nn.ReLU(),
  42.         nn.MaxPool2d(2)
  43.     )
  44.     self.out = nn.Linear(32*7*7, 10)
  45.  
  46.   def forward(self, x):
  47.     x = self.conv1(x)
  48.     x = self.conv2(x)
  49.     x = x.view(x.size(0), -1)
  50.     output = self.out(x)
  51.     return output, x
  52.  
  53. cnn = CNN()
  54. print(cnn)
  55.  
  56. optimization = torch.optim.Adam(cnn.parameters(), lr = LR)
  57. loss_func = nn.CrossEntropyLoss()
  58.  
  59. for epoch in range(EPOCH):
  60.   for step, (batch_x, batch_y) in enumerate(train_loader):
  61.     bx = Variable(batch_x)
  62.     by = Variable(batch_y)
  63.     output = cnn(bx)[0]
  64.     loss = loss_func(output, by)
  65.     optimization.zero_grad()
  66.     loss.backward()
  67.     optimization.step()
  68.  
  69.     if step % 50 == 0:
  70.         test_output, last_layer = cnn(test_x)
  71.         pred_y = torch.max(test_output, 1)[1].data.numpy()
  72.         accuracy = float((pred_y == test_y.data.numpy()).astype(int).sum()) / float(test_y.size(0))
  73.         print('Epoch: ', epoch, '| train loss: %.4f' % loss.data.numpy(), '| test accuracy: %.2f' % accuracy)
  74.  
  75. test_output, _ = cnn(test_x[:10])
  76. pred_y = torch.max(test_output, 1)[1].data.numpy()
  77. print(pred_y, 'prediction number')
  78. print(test_y[:10].numpy(), 'real number')
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

最近發現Cpanel伺服器發給gmail信箱常常收不到
一下又收的到,但大部分都被擋下來
找了google後發現要到google workspace申請帳號驗證網域
先到google workspace 申請帳號
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

輸入公司名稱
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

姓名及EMAIL
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor
選已有網域了
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor
輸入網域
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

設定EMAIL(你擁有的網域)帳號密碼
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

輸入手機號碼
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

收到簡訊驗證碼並輸入
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

點接管
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

點 庇護
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

點 我已準備好庇護我的網域
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

繼續 前往步調2
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

複製TXT value(TXT值) 到 Cpanel dns manager新增一TXT紀錄
點選 珍愛網域 (五分鐘內完成)
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

繼續
Cpanel gmail 檔信問題.. google wor
Cpanel gmail 檔信問題.. google wor

Cpanel gmail 檔信問題.. google wor 

 

文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

我們在研究散熱器和電扇的時辰常常會講到PWM,並且很多時刻支持PWM的產品會比不支撐PWM的顯得更高級一些。而在主板、顯卡還有電源評測中也會提到有PWM節制晶片,明顯對於PC來講PWM已是一個很遍及的存在。然而PWM是什麼?PWM為什麼會那麼主要?我們相信良多玩家可能連「知其然」都做不到,更別說「知其所以然」了。為此今天的超能教室我們就來捋一捋關於PWM的二三事,看看這個在PC中似乎無處不在,看著有點臉熟但現實上照樣很生疏的PWM究竟是何方神聖。
PWM晶片看很多了,那PWM節制又是怎麼一回事呢
PWM晶片看很多了,那PWM節制又是怎麼一回事呢
主板上的PWM供電節制晶片
什麼是PWM?
PWM的全稱是Pulse Width Modulation,即脈衝寬度調製,其素質是一種數位訊號,主要由兩個構成部份來進行定義,分別是占空比和頻率,個中占空比值得是旌旗燈號為高電平狀態的時間量占有總周期時候的百分比,而頻率則代表著PWM旌旗燈號完成一個周期的速度,也就是決議旌旗燈號在高低電平狀況之間的切換速度。

PWM晶片看很多了,那PWM節制又是怎麼一回事呢
PWM晶片看很多了,那PWM節制又是怎麼一回事呢
圖片源自National Instruments

掌控機遇 絕版典藏|MINI 60週年限量紀念版
Sponsored by MINI台灣總代辦署理 汎德
目前PWM已被普遍運用在各類節制系統中,特別是各類模擬電路的控制,多半離不開PWM旌旗燈號。可能各人對此會感應迷惑,PWM既然是一種數位訊號,那怎麼會用在摹擬電路的控制上呢?實際上PWM很大水平上就是為了實現摹擬電路數字化節制而誕生的,我們無妨舉例說明,當一個數位訊號源的高電平為5V、低電平為0V的情形下,假如想要用這個數位訊號源輸出相當於3V的模擬旌旗燈號,那麼我們就能夠將這個數位訊號以PWM占空比60%的體式格局進行輸出,也就是說一個信號周期內有60%的時間輸出5V,剩下40%的時候輸出0V,此時只要信號周期足夠短,也就是PWM頻率足夠快,那麼我們將獲得一個輸出電平無窮接近於5V*60%=3V的旌旗燈號源,這就是PWM可以或許以數位訊號的身份控制摹擬電路的首要緣由。

以往摹擬電路的正確節制往往需要一個相對大範圍的電路,不但笨重並且功耗與發燒都不低。比擬之下通過PWM這種數位訊號來節制模擬電路,既可以確保精準度,又可以有效下降控制電路的體積與功耗,因此PWM很快就成為了今朝一種主流的電路控制模式,直流機電、閥門、液壓系統、電源等各個範疇中我們都能看到PWM的身影,在PC上也是如此,PC主板、顯卡都採用了PWM進行供電節制,散熱電扇也廣泛利用PWM手藝,PC電源裡面也少不了PWM的身影。


散熱風扇的PWM手藝
常見的散熱電扇調速有兩種,別離是DC調速和PWM調速,其中DC調速又可以叫做電壓調速,簡單來講就是直接調劑加載於風扇上的電壓來進行轉速控制。而節制風扇電壓的方式有良多種,比較直接的體例就是外接電阻來進行分壓,例如各類電扇減速線採用的就是這個體例。不過這類電壓節制體例也有一個很顯著的缺點,那就是由於電扇的轉速未必與電壓呈線性關係,例如一把電扇的標稱電壓為12V,當你只給它6V電壓時其轉速未必為一半,更多的可能是因為其啟動電壓最少為7V,只加載6V的話會電壓不足而沒法啟動,是以想要精準地控制電扇的轉速,直接調劑電扇的輸入電壓常常不是一個理想選擇。

PWM晶片看很多了,那PWM節制又是怎麼一回事呢
PWM晶片看很多了,那PWM節制又是怎麼一回事呢
支持PWM調速的電扇都採用4pin接口

你的提案讓台灣更誇姣-2020年總統盃黑客松報名開跑
Sponsored by 經濟部中小企業處
而採用PWM節制的電扇就沒有上述的問題,固然從道理上說,電扇所用的PWM調速也算是一種電壓調速,只是其表示出來的是「等效電壓」而非「現實電壓」。由於PWM是經由過程占空比來調劑輸出旌旗燈號的電平高低,是以轉換為電扇電壓時也就只有12V和0V的區分,只是通電時候長短有所不同,簡單來講就是風扇上固然加載的是等效6V的電壓,但其實際上是占空比為50%的12V電壓,這個時辰電扇就不存在「啟動電壓」的問題了,並且風扇轉速與PWM的占空比根基呈線性關係,這使得電扇轉速的節制變得非常簡單。

固然了這個PWM旌旗燈號並不是作為驅動電扇的電源利用,而是用來驅動電扇內部的三極體或MosFET,以此實現對電扇的輸入控制,因此支持PWM節制的電扇除有供電、檢測和接地三根線外,還會有一根額外的PWM節制線。而受PWM控制電扇轉速的啟發,有部份主板也在電扇接口上插足了PWM控制模塊,經由過程PWM來控制風扇的輸入電壓,讓3pin接口的電扇也能實現近乎線性的轉速控制。不外這種設置裝備擺設基本上只有中高端主板才會享用,真正普及的仍然是直接支撐PWM節制的4pin電扇接口。


供電電路的PWM手藝
主板、顯卡和PC電源固然是三個判然不同的硬體,可是就供電所用的技術來講倒是大同小異,PC電源是經由過程各種拓撲架構和PWM手藝將市電的交流輸出變為12V、5V、3.3V、-12V等分歧的輸出電壓,而主板和顯卡則是將PC電源的供電通過PWM手藝改變為CPU和GPU等晶片所需要的電壓和電流,是以今朝主板、顯卡和PC電源基本上都利用了PWM供電控制技術。

PWM晶片看很多了,那PWM節制又是怎麼一回事呢PWM晶片看很多了,那PWM節制又是怎麼一回事呢

PC電源中的PWM節制晶片
PWM控制電壓的手藝放在什麼硬體上都是一樣的,就是通過控制占空比來控制「等效電壓」。顯卡、主板和PC電源上的自然也是如斯,只是由於它們所帶的負載對電壓和電流的不亂度要求很高,因此低速的PWM不適合用在供電控制上。今朝業內遍及做法是,電源的PWM節制需要利用不低於20kHz的頻率,建議是利用200kHz或以上的,因為越高的頻率越有益於調劑的響應速度。

PWM晶片看很多了,那PWM節制又是怎麼一回事呢PWM晶片看很多了,那PWM節制又是怎麼一回事呢

電壓節制型PWM
固然用在供電上的PWM節制比起風扇上的明顯會複雜很多,因為供電電路面對的大多半是恆定電壓、動態電流的負載,因此用在供電上的PWM控制就不但要考慮裝備的輸入電壓,還要考慮到輸入電流。供電電路所用的PWM節制大體上可以分為電壓控制型PWM和電流節制型PWM,前者是通過電壓反饋線路比較基準電壓和現實輸出電壓,然後通過調劑PWM的占空比來不變輸出電壓。這類電路的構成對照簡單,但是用在供電電路中會有一個明顯的錯誤謬誤,那就是由於現實電路中常常會存在電容和電感等元件,電流與電壓的轉變會紛歧致,對於低功耗、低響應需求的電路來講還問題不大,然則對於高功耗和動態轉變雄厚的電路來講,電壓控制型PWM常常不克不及立地響應裝備對供電變化的需求,從而致使電路不不變,沒法正常工作。


PWM晶片看很多了,那PWM節制又是怎麼一回事呢

 

文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

記得筆者曾經寫過一篇「用 JavaScript 來做偽浮水印」,那時是用 JavaScript 來寫的,得顛末較量爭論才能把版權宣佈的圖片放在右下角。目前筆者把全部效果用 jQuery 來改寫,並把本來要較量爭論的版權宣告圖片位置換成 background-position 的體例來節制,如許想放那就只要設定一下就好了。

我們的 HTML 就是很純真的圖片而已:

檢視原始碼 HTML

用 jQuery 來做圖片偽浮水印

文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

因搜索引擎改版,網站不得不改https
當網站安裝了SSL後,如何把網址主動轉成https?

在網頁目次-public_html,有一個檔案叫 .htaccess,編輯檔案內容,然後將以下轉向的法則寫在裡面:

寫法1:

  1. RewriteCond %{HTTPS} off
  2. RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

ereg_replace()是個利用正則的replacestr_replace()
ereg_replace ( string $pattern , string $replacement , string $string ) : string
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
preg_replace()是今朝的推薦方案,必選參數3個,可選參數3個。根基上可以籠蓋 只不外是參數的具體用法分歧。返回值是根基上一致的。ereg_replace()
 PHP廢棄函數ereg_replace(),若何用preg_
PHP廢棄函數ereg_replace(),若何用preg_

文章出處


文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

許多人用BootStrap 圖片因寬度縮小視起來很喜悅

可是縮得太小的時刻,高度會到達最小高度因此無法往下縮

會造成圖片變形,如圖

BootStrap img-responsive 縮小圖片變

文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

Yolov8 AttributeError str obje
  1. Model summary (fused): 168 layers, 3011108 parameters, 0 gradients
  2.                  Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 1/1 [00:00<00:00, 45.58it/s]
  3.                    all         12         12          0          0          0          0
  4. Traceback (most recent call last):
  5.   File "D:\yolo\testyolo.py", line 13, in <module>
  6.     model.train(data="data.yaml",
  7.   File "D:\ProgramData\Anaconda3\envs\python310\lib\site-packages\ultralytics\engine\model.py", line 334, in train
  8.     self.trainer.train()
  9.   File "D:\ProgramData\Anaconda3\envs\python310\lib\site-packages\ultralytics\engine\trainer.py", line 195, in train
  10.     self._do_train(world_size)
  11.   File "D:\ProgramData\Anaconda3\envs\python310\lib\site-packages\ultralytics\engine\trainer.py", line 418, in _do_train
  12.     self.final_eval()
  13.   File "D:\ProgramData\Anaconda3\envs\python310\lib\site-packages\ultralytics\engine\trainer.py", line 573, in final_eval
  14.     self.metrics = self.validator(model=f)
  15.   File "D:\ProgramData\Anaconda3\envs\python310\lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
  16.     return func(*args, **kwargs)
  17.   File "D:\ProgramData\Anaconda3\envs\python310\lib\site-packages\ultralytics\engine\validator.py", line 190, in __call__
  18.     self.print_results()
  19.   File "D:\ProgramData\Anaconda3\envs\python310\lib\site-packages\ultralytics\models\yolo\detect\val.py", line 165, in print_results
  20.     names=self.names.values(),
  21. AttributeError: 'str' object has no attribute 'values'
  22. Exception in thread Thread-12 (plot_images):
  23. Traceback (most recent call last):
  24.   File "D:\ProgramData\Anaconda3\envs\python310\lib\threading.py", line 1009, in _bootstrap_inner
  25.     self.run()
  26.   File "D:\ProgramData\Anaconda3\envs\python310\lib\threading.py", line 946, in run
  27.     self._target(*self._args, **self._kwargs)
  28.   File "D:\ProgramData\Anaconda3\envs\python310\lib\site-packages\ultralytics\utils\plotting.py", line 442, in plot_images
  29.     c = names.get(c, c) if names else c
  30. AttributeError: 'str' object has no attribute 'get'
  31.  
  32. Process finished with exit code 1
  33.  
複製代碼
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

首先可以到FPDF網站下載程式,固然FPDF的網站有教學也值得前往旁觀http://www.fpdf.org/

或直接點選這邊下載fpdf16.zip

文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()

為了將圖片數據轉換為合適 AI練習的格式,利用 OpenCV先對面部進行辨識,然後將面部數據另存為統一的花式。

  1. import cv2
  2.  
  3. face_cascade = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_default.xml')
  4. eye_cascade = cv2.CascadeClassifier('./cascades/haarcascade_eye.xml')
  5.  
  6. def detect(filename):
  7.     img = cv2.imread(filename)
  8.     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  9.     faces = face_cascade.detectMultiScale(gray,
  10.                                           scaleFactor=1.2,
  11.                                           minNeighbors=3,)
  12.     for (x,y,w,h) in faces:
  13.         roi_gray = gray[y:y+h, x:x+w]
  14.         eyes = eye_cascade.detectMultiScale(roi_gray,
  15.                                             scaleFactor=1.02,
  16.                                             minNeighbors=3,
  17.                                             minSize=(40,40),)
  18.         img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
  19.         for (ex,ey,ew,eh) in eyes:
  20.             img = cv2.rectangle(img,(x+ex,y+ey),(x+ex+ew,y+ey+eh),(0,255,0),2)
  21.     cv2.imwrite('./tzuyu_face.jpg', img)
  22.  
  23. detect('tzuyu.jpg')
文章標籤

petermitchqfn 發表在 痞客邦 留言(0) 人氣()